Commit 8760c4d6 authored by David S. Miller's avatar David S. Miller

Merge branch 'sh_eth-clean-up-the-TSU-register-accessors'

Sergei Shtylyov says:

====================
sh_eth: clean up the TSU register accessors

Here's a set of 5 patches against DaveM's 'net-next.git' repo. They do
a final clean up of the TSU register accessors...
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents fd800f64 51459d4c
...@@ -439,10 +439,15 @@ static void sh_eth_modify(struct net_device *ndev, int enum_index, u32 clear, ...@@ -439,10 +439,15 @@ static void sh_eth_modify(struct net_device *ndev, int enum_index, u32 clear,
enum_index); enum_index);
} }
static u16 sh_eth_tsu_get_offset(struct sh_eth_private *mdp, int enum_index)
{
return mdp->reg_offset[enum_index];
}
static void sh_eth_tsu_write(struct sh_eth_private *mdp, u32 data, static void sh_eth_tsu_write(struct sh_eth_private *mdp, u32 data,
int enum_index) int enum_index)
{ {
u16 offset = mdp->reg_offset[enum_index]; u16 offset = sh_eth_tsu_get_offset(mdp, enum_index);
if (WARN_ON(offset == SH_ETH_OFFSET_INVALID)) if (WARN_ON(offset == SH_ETH_OFFSET_INVALID))
return; return;
...@@ -452,7 +457,7 @@ static void sh_eth_tsu_write(struct sh_eth_private *mdp, u32 data, ...@@ -452,7 +457,7 @@ static void sh_eth_tsu_write(struct sh_eth_private *mdp, u32 data,
static u32 sh_eth_tsu_read(struct sh_eth_private *mdp, int enum_index) static u32 sh_eth_tsu_read(struct sh_eth_private *mdp, int enum_index)
{ {
u16 offset = mdp->reg_offset[enum_index]; u16 offset = sh_eth_tsu_get_offset(mdp, enum_index);
if (WARN_ON(offset == SH_ETH_OFFSET_INVALID)) if (WARN_ON(offset == SH_ETH_OFFSET_INVALID))
return ~0U; return ~0U;
...@@ -2671,34 +2676,36 @@ static int sh_eth_tsu_busy(struct net_device *ndev) ...@@ -2671,34 +2676,36 @@ static int sh_eth_tsu_busy(struct net_device *ndev)
return 0; return 0;
} }
static int sh_eth_tsu_write_entry(struct net_device *ndev, void *reg, static int sh_eth_tsu_write_entry(struct net_device *ndev, u16 offset,
const u8 *addr) const u8 *addr)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev);
u32 val; u32 val;
val = addr[0] << 24 | addr[1] << 16 | addr[2] << 8 | addr[3]; val = addr[0] << 24 | addr[1] << 16 | addr[2] << 8 | addr[3];
iowrite32(val, reg); iowrite32(val, mdp->tsu_addr + offset);
if (sh_eth_tsu_busy(ndev) < 0) if (sh_eth_tsu_busy(ndev) < 0)
return -EBUSY; return -EBUSY;
val = addr[4] << 8 | addr[5]; val = addr[4] << 8 | addr[5];
iowrite32(val, reg + 4); iowrite32(val, mdp->tsu_addr + offset + 4);
if (sh_eth_tsu_busy(ndev) < 0) if (sh_eth_tsu_busy(ndev) < 0)
return -EBUSY; return -EBUSY;
return 0; return 0;
} }
static void sh_eth_tsu_read_entry(void *reg, u8 *addr) static void sh_eth_tsu_read_entry(struct net_device *ndev, u16 offset, u8 *addr)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev);
u32 val; u32 val;
val = ioread32(reg); val = ioread32(mdp->tsu_addr + offset);
addr[0] = (val >> 24) & 0xff; addr[0] = (val >> 24) & 0xff;
addr[1] = (val >> 16) & 0xff; addr[1] = (val >> 16) & 0xff;
addr[2] = (val >> 8) & 0xff; addr[2] = (val >> 8) & 0xff;
addr[3] = val & 0xff; addr[3] = val & 0xff;
val = ioread32(reg + 4); val = ioread32(mdp->tsu_addr + offset + 4);
addr[4] = (val >> 8) & 0xff; addr[4] = (val >> 8) & 0xff;
addr[5] = val & 0xff; addr[5] = val & 0xff;
} }
...@@ -2707,12 +2714,12 @@ static void sh_eth_tsu_read_entry(void *reg, u8 *addr) ...@@ -2707,12 +2714,12 @@ static void sh_eth_tsu_read_entry(void *reg, u8 *addr)
static int sh_eth_tsu_find_entry(struct net_device *ndev, const u8 *addr) static int sh_eth_tsu_find_entry(struct net_device *ndev, const u8 *addr)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_private *mdp = netdev_priv(ndev);
void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0); u16 reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
int i; int i;
u8 c_addr[ETH_ALEN]; u8 c_addr[ETH_ALEN];
for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++, reg_offset += 8) { for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++, reg_offset += 8) {
sh_eth_tsu_read_entry(reg_offset, c_addr); sh_eth_tsu_read_entry(ndev, reg_offset, c_addr);
if (ether_addr_equal(addr, c_addr)) if (ether_addr_equal(addr, c_addr))
return i; return i;
} }
...@@ -2734,7 +2741,7 @@ static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev, ...@@ -2734,7 +2741,7 @@ static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev,
int entry) int entry)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_private *mdp = netdev_priv(ndev);
void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0); u16 reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
int ret; int ret;
u8 blank[ETH_ALEN]; u8 blank[ETH_ALEN];
...@@ -2751,7 +2758,7 @@ static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev, ...@@ -2751,7 +2758,7 @@ static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev,
static int sh_eth_tsu_add_entry(struct net_device *ndev, const u8 *addr) static int sh_eth_tsu_add_entry(struct net_device *ndev, const u8 *addr)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_private *mdp = netdev_priv(ndev);
void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0); u16 reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
int i, ret; int i, ret;
if (!mdp->cd->tsu) if (!mdp->cd->tsu)
...@@ -2825,15 +2832,15 @@ static int sh_eth_tsu_purge_all(struct net_device *ndev) ...@@ -2825,15 +2832,15 @@ static int sh_eth_tsu_purge_all(struct net_device *ndev)
static void sh_eth_tsu_purge_mcast(struct net_device *ndev) static void sh_eth_tsu_purge_mcast(struct net_device *ndev)
{ {
struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_private *mdp = netdev_priv(ndev);
u16 reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
void *reg_offset = sh_eth_tsu_get_offset(mdp, TSU_ADRH0);
int i; int i;
if (!mdp->cd->tsu) if (!mdp->cd->tsu)
return; return;
for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++, reg_offset += 8) { for (i = 0; i < SH_ETH_TSU_CAM_ENTRIES; i++, reg_offset += 8) {
sh_eth_tsu_read_entry(reg_offset, addr); sh_eth_tsu_read_entry(ndev, reg_offset, addr);
if (is_multicast_ether_addr(addr)) if (is_multicast_ether_addr(addr))
sh_eth_tsu_del_entry(ndev, addr); sh_eth_tsu_del_entry(ndev, addr);
} }
......
...@@ -558,10 +558,4 @@ struct sh_eth_private { ...@@ -558,10 +558,4 @@ struct sh_eth_private {
unsigned wol_enabled:1; unsigned wol_enabled:1;
}; };
static inline void *sh_eth_tsu_get_offset(struct sh_eth_private *mdp,
int enum_index)
{
return mdp->tsu_addr + mdp->reg_offset[enum_index];
}
#endif /* #ifndef __SH_ETH_H__ */ #endif /* #ifndef __SH_ETH_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment