Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/e1000/e1000_vf.c
Show First 20 Lines • Show All 413 Lines • ▼ Show 20 Lines | void e1000_update_mc_addr_list_vf(struct e1000_hw *hw, | ||||
* there are more than 30 MC addresses to add then punt the | * there are more than 30 MC addresses to add then punt the | ||||
* extras for now and then add code to handle more than 30 later. | * extras for now and then add code to handle more than 30 later. | ||||
* It would be unusual for a server to request that many multi-cast | * It would be unusual for a server to request that many multi-cast | ||||
* addresses except for in large enterprise network environments. | * addresses except for in large enterprise network environments. | ||||
*/ | */ | ||||
DEBUGOUT1("MC Addr Count = %d\n", mc_addr_count); | DEBUGOUT1("MC Addr Count = %d\n", mc_addr_count); | ||||
msgbuf[0] = E1000_VF_SET_MULTICAST; | |||||
if (mc_addr_count > 30) { | if (mc_addr_count > 30) { | ||||
msgbuf[0] |= E1000_VF_SET_MULTICAST_OVERFLOW; | msgbuf[0] |= E1000_VF_SET_MULTICAST_OVERFLOW; | ||||
mc_addr_count = 30; | mc_addr_count = 30; | ||||
} | } | ||||
msgbuf[0] = E1000_VF_SET_MULTICAST; | |||||
msgbuf[0] |= mc_addr_count << E1000_VT_MSGINFO_SHIFT; | msgbuf[0] |= mc_addr_count << E1000_VT_MSGINFO_SHIFT; | ||||
for (i = 0; i < mc_addr_count; i++) { | for (i = 0; i < mc_addr_count; i++) { | ||||
hash_value = e1000_hash_mc_addr_vf(hw, mc_addr_list); | hash_value = e1000_hash_mc_addr_vf(hw, mc_addr_list); | ||||
DEBUGOUT1("Hash value = 0x%03X\n", hash_value); | DEBUGOUT1("Hash value = 0x%03X\n", hash_value); | ||||
hash_list[i] = hash_value & 0x0FFF; | hash_list[i] = hash_value & 0x0FFF; | ||||
mc_addr_list += ETHER_ADDR_LEN; | mc_addr_list += ETHER_ADDR_LEN; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 153 Lines • Show Last 20 Lines |