diff options
author | naddy <naddy@FreeBSD.org> | 2004-06-09 14:34:04 +0000 |
---|---|---|
committer | naddy <naddy@FreeBSD.org> | 2004-06-09 14:34:04 +0000 |
commit | 03b06cd9a3bb0e9d75237994d18bd6d3b6469ac1 (patch) | |
tree | 63c1a8adb963adf2b159557569195cbc8c219d33 /sys/dev/gem | |
parent | d57aeb149e038b4931b3859597fe80119588eebc (diff) | |
download | FreeBSD-src-03b06cd9a3bb0e9d75237994d18bd6d3b6469ac1.zip FreeBSD-src-03b06cd9a3bb0e9d75237994d18bd6d3b6469ac1.tar.gz |
Replace handrolled CRC calculation with ether_crc32_[lb]e().
Diffstat (limited to 'sys/dev/gem')
-rw-r--r-- | sys/dev/gem/if_gem.c | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/sys/dev/gem/if_gem.c b/sys/dev/gem/if_gem.c index 8e50e29..f00d8d3 100644 --- a/sys/dev/gem/if_gem.c +++ b/sys/dev/gem/if_gem.c @@ -1847,7 +1847,6 @@ gem_setladrf(sc) struct sockaddr_dl *sdl; bus_space_tag_t t = sc->sc_bustag; bus_space_handle_t h = sc->sc_h; - u_char *cp; u_int32_t crc; u_int32_t hash[16]; u_int32_t v; @@ -1892,23 +1891,8 @@ gem_setladrf(sc) if (inm->ifma_addr->sa_family != AF_LINK) continue; sdl = (struct sockaddr_dl *)inm->ifma_addr; - cp = LLADDR(sdl); - crc = 0xffffffff; - for (len = sdl->sdl_alen; --len >= 0;) { - int octet = *cp++; - int i; + crc = ether_crc32_le(LLADDR(sdl), ETHER_ADDR_LEN); -#define MC_POLY_LE 0xedb88320UL /* mcast crc, little endian */ - for (i = 0; i < 8; i++) { - if ((crc & 1) ^ (octet & 1)) { - crc >>= 1; - crc ^= MC_POLY_LE; - } else { - crc >>= 1; - } - octet >>= 1; - } - } /* Just want the 8 most significant bits. */ crc >>= 24; |