Commit f022ae62 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

tg3: Refactor __tg3_set_mac_addr()

so that individual MAC address filter entries can be set.
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarNithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5e419e68
...@@ -3948,32 +3948,41 @@ static int tg3_load_tso_firmware(struct tg3 *tp) ...@@ -3948,32 +3948,41 @@ static int tg3_load_tso_firmware(struct tg3 *tp)
return 0; return 0;
} }
/* tp->lock is held. */
static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index)
{
u32 addr_high, addr_low;
addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
(mac_addr[4] << 8) | mac_addr[5]);
if (index < 4) {
tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
} else {
index -= 4;
tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
}
}
/* tp->lock is held. */ /* tp->lock is held. */
static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
{ {
u32 addr_high, addr_low; u32 addr_high;
int i; int i;
addr_high = ((tp->dev->dev_addr[0] << 8) |
tp->dev->dev_addr[1]);
addr_low = ((tp->dev->dev_addr[2] << 24) |
(tp->dev->dev_addr[3] << 16) |
(tp->dev->dev_addr[4] << 8) |
(tp->dev->dev_addr[5] << 0));
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (i == 1 && skip_mac_1) if (i == 1 && skip_mac_1)
continue; continue;
tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high); __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
} }
if (tg3_asic_rev(tp) == ASIC_REV_5703 || if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
tg3_asic_rev(tp) == ASIC_REV_5704) { tg3_asic_rev(tp) == ASIC_REV_5704) {
for (i = 0; i < 12; i++) { for (i = 4; i < 16; i++)
tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high); __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
}
} }
addr_high = (tp->dev->dev_addr[0] + addr_high = (tp->dev->dev_addr[0] +
......
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