[PATCH] amd8111e use standard CRC lib
I noticed this driver (and several others) reinvent their own copy of the existing CRC library. Don't have the hardware, but tested by extracting code and comparing result. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
b0a20ded56
commit
6b4bdde61b
@ -1490,32 +1490,7 @@ static void amd8111e_read_regs(struct amd8111e_priv *lp, u32 *buf)
|
|||||||
buf[12] = readl(mmio + STAT0);
|
buf[12] = readl(mmio + STAT0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
amd8111e crc generator implementation is different from the kernel
|
|
||||||
ether_crc() function.
|
|
||||||
*/
|
|
||||||
static int amd8111e_ether_crc(int len, char* mac_addr)
|
|
||||||
{
|
|
||||||
int i,byte;
|
|
||||||
unsigned char octet;
|
|
||||||
u32 crc= INITCRC;
|
|
||||||
|
|
||||||
for(byte=0; byte < len; byte++){
|
|
||||||
octet = mac_addr[byte];
|
|
||||||
for( i=0;i < 8; i++){
|
|
||||||
/*If the next bit form the input stream is 1,subtract the divisor (CRC32) from the dividend(crc).*/
|
|
||||||
if( (octet & 0x1) ^ (crc & 0x1) ){
|
|
||||||
crc >>= 1;
|
|
||||||
crc ^= CRC32;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
crc >>= 1;
|
|
||||||
|
|
||||||
octet >>= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return crc;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
This function sets promiscuos mode, all-multi mode or the multicast address
|
This function sets promiscuos mode, all-multi mode or the multicast address
|
||||||
list to the device.
|
list to the device.
|
||||||
@ -1556,7 +1531,7 @@ static void amd8111e_set_multicast_list(struct net_device *dev)
|
|||||||
mc_filter[1] = mc_filter[0] = 0;
|
mc_filter[1] = mc_filter[0] = 0;
|
||||||
for (i = 0, mc_ptr = dev->mc_list; mc_ptr && i < dev->mc_count;
|
for (i = 0, mc_ptr = dev->mc_list; mc_ptr && i < dev->mc_count;
|
||||||
i++, mc_ptr = mc_ptr->next) {
|
i++, mc_ptr = mc_ptr->next) {
|
||||||
bit_num = ( amd8111e_ether_crc(ETH_ALEN,mc_ptr->dmi_addr) >> 26 ) & 0x3f;
|
bit_num = (ether_crc_le(ETH_ALEN, mc_ptr->dmi_addr) >> 26) & 0x3f;
|
||||||
mc_filter[bit_num >> 5] |= 1 << (bit_num & 31);
|
mc_filter[bit_num >> 5] |= 1 << (bit_num & 31);
|
||||||
}
|
}
|
||||||
amd8111e_writeq(*(u64*)mc_filter,lp->mmio+ LADRF);
|
amd8111e_writeq(*(u64*)mc_filter,lp->mmio+ LADRF);
|
||||||
|
@ -651,10 +651,6 @@ typedef enum {
|
|||||||
/* driver ioctl parameters */
|
/* driver ioctl parameters */
|
||||||
#define AMD8111E_REG_DUMP_LEN 13*sizeof(u32)
|
#define AMD8111E_REG_DUMP_LEN 13*sizeof(u32)
|
||||||
|
|
||||||
/* crc generator constants */
|
|
||||||
#define CRC32 0xedb88320
|
|
||||||
#define INITCRC 0xFFFFFFFF
|
|
||||||
|
|
||||||
/* amd8111e desriptor format */
|
/* amd8111e desriptor format */
|
||||||
|
|
||||||
struct amd8111e_tx_dr{
|
struct amd8111e_tx_dr{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user