diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2016-04-26 23:43:48 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-28 04:55:45 +0300 |
commit | 35ef7d689d7d54ab345b179e50c749fe3a2529eb (patch) | |
tree | 8afb2e404a80c1ed12a6a2314d2cff35daec69a3 /drivers/net/ethernet/wiznet/w5100.h | |
parent | c0cc53162a0644dd57dce5e2fbb9bbafdc57d183 (diff) | |
download | linux-35ef7d689d7d54ab345b179e50c749fe3a2529eb.tar.xz |
net: w5100: support W5500
This adds support for W5500 chip.
W5500 has similar register and memory organization with W5100 and W5200.
There are a few important differences listed below but it is still
possible to share common code with W5100 and W5200.
* W5500 register and memory are organized by multiple blocks. Each one
is selected by 16bits offset address and 5bits block select bits.
But the existing register access operations take u16 address. This change
extends the addess by u32 address and put offset address to lower 16bits
and block select bits to upper 16bits.
This change also adds the offset addresses for socket register and TX/RX
memory blocks to the driver private data structure in order to reduce
conditional switches for each chip.
* W5500 has the different register offset for socket interrupt mask
register. Newly added internal functions w5100_enable_intr() and
w5100_disable_intr() take care of the diffrence.
* W5500 has the different register offset for retry time-value register.
But this register is only used to verify that the reset value is correctly
read at initialization. So move the verification to w5100_hw_reset()
which already does different things for different chips.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Mike Sinkovsky <msink@permonline.ru>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/wiznet/w5100.h')
-rw-r--r-- | drivers/net/ethernet/wiznet/w5100.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/ethernet/wiznet/w5100.h b/drivers/net/ethernet/wiznet/w5100.h index 9b1fa23b46fe..f8a16fad807b 100644 --- a/drivers/net/ethernet/wiznet/w5100.h +++ b/drivers/net/ethernet/wiznet/w5100.h @@ -10,17 +10,18 @@ enum { W5100, W5200, + W5500, }; struct w5100_ops { bool may_sleep; int chip_id; - int (*read)(struct net_device *ndev, u16 addr); - int (*write)(struct net_device *ndev, u16 addr, u8 data); - int (*read16)(struct net_device *ndev, u16 addr); - int (*write16)(struct net_device *ndev, u16 addr, u16 data); - int (*readbulk)(struct net_device *ndev, u16 addr, u8 *buf, int len); - int (*writebulk)(struct net_device *ndev, u16 addr, const u8 *buf, + int (*read)(struct net_device *ndev, u32 addr); + int (*write)(struct net_device *ndev, u32 addr, u8 data); + int (*read16)(struct net_device *ndev, u32 addr); + int (*write16)(struct net_device *ndev, u32 addr, u16 data); + int (*readbulk)(struct net_device *ndev, u32 addr, u8 *buf, int len); + int (*writebulk)(struct net_device *ndev, u32 addr, const u8 *buf, int len); int (*reset)(struct net_device *ndev); int (*init)(struct net_device *ndev); |