[PATCHv2,3/5] pcnet: switch lnc_mchash() over to use net_crc32_le()

Message ID 20171205081744.6563-4-mark.cave-ayland@ilande.co.uk
State New
Headers show
Series
  • net: introduce common net_crc32() and net_crc32_le() functions
Related show

Commit Message

Mark Cave-Ayland Dec. 5, 2017, 8:17 a.m.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/net/pcnet.c | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

Comments

Eric Blake Dec. 5, 2017, 2:33 p.m. | #1
On 12/05/2017 02:17 AM, Mark Cave-Ayland wrote:
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/net/pcnet.c | 16 +---------------
>  1 file changed, 1 insertion(+), 15 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>
Philippe Mathieu-Daudé Dec. 6, 2017, 3:28 a.m. | #2
On 12/05/2017 05:17 AM, Mark Cave-Ayland wrote:
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  hw/net/pcnet.c | 16 +---------------
>  1 file changed, 1 insertion(+), 15 deletions(-)
> 
> diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c
> index 654455355f..c050993aa9 100644
> --- a/hw/net/pcnet.c
> +++ b/hw/net/pcnet.c
> @@ -522,23 +522,9 @@ static inline void pcnet_rmd_store(PCNetState *s, struct pcnet_RMD *rmd,
>             be16_to_cpu(hdr->ether_type));       \
>  } while (0)
>  
> -#define MULTICAST_FILTER_LEN 8
> -
>  static inline uint32_t lnc_mchash(const uint8_t *ether_addr)
>  {
> -#define LNC_POLYNOMIAL          0xEDB88320UL
> -    uint32_t crc = 0xFFFFFFFF;
> -    int idx, bit;
> -    uint8_t data;
> -
> -    for (idx = 0; idx < 6; idx++) {
> -        for (data = *ether_addr++, bit = 0; bit < MULTICAST_FILTER_LEN; bit++) {
> -            crc = (crc >> 1) ^ (((crc ^ data) & 1) ? LNC_POLYNOMIAL : 0);
> -            data >>= 1;
> -        }
> -    }
> -    return crc;
> -#undef LNC_POLYNOMIAL
> +    return net_crc32_le(ether_addr, 6);
>  }
>  
>  #define CRC(crc, ch)	 (crc = (crc >> 8) ^ crctab[(crc ^ (ch)) & 0xff])
>

Patch

diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c
index 654455355f..c050993aa9 100644
--- a/hw/net/pcnet.c
+++ b/hw/net/pcnet.c
@@ -522,23 +522,9 @@  static inline void pcnet_rmd_store(PCNetState *s, struct pcnet_RMD *rmd,
            be16_to_cpu(hdr->ether_type));       \
 } while (0)
 
-#define MULTICAST_FILTER_LEN 8
-
 static inline uint32_t lnc_mchash(const uint8_t *ether_addr)
 {
-#define LNC_POLYNOMIAL          0xEDB88320UL
-    uint32_t crc = 0xFFFFFFFF;
-    int idx, bit;
-    uint8_t data;
-
-    for (idx = 0; idx < 6; idx++) {
-        for (data = *ether_addr++, bit = 0; bit < MULTICAST_FILTER_LEN; bit++) {
-            crc = (crc >> 1) ^ (((crc ^ data) & 1) ? LNC_POLYNOMIAL : 0);
-            data >>= 1;
-        }
-    }
-    return crc;
-#undef LNC_POLYNOMIAL
+    return net_crc32_le(ether_addr, 6);
 }
 
 #define CRC(crc, ch)	 (crc = (crc >> 8) ^ crctab[(crc ^ (ch)) & 0xff])