Loading drivers/net/mac8390.c +14 −17 Original line number Diff line number Diff line Loading @@ -559,55 +559,52 @@ static void mac8390_no_reset(struct net_device *dev) /* directly from daynaport.c by Alan Cox */ static void dayna_memcpy_fromcard(struct net_device *dev, void *to, int from, int count) { volatile unsigned short *ptr; unsigned short *target=to; volatile unsigned char *ptr; unsigned char *target=to; from<<=1; /* word, skip overhead */ ptr=(unsigned short *)(dev->mem_start+from); ptr=(unsigned char *)(dev->mem_start+from); /* Leading byte? */ if (from&2) { *((char *)target)++ = *(((char *)ptr++)-1); *target++ = ptr[-1]; ptr += 2; count--; } while(count>=2) { *target++=*ptr++; /* Copy and */ ptr++; /* skip cruft */ *(unsigned short *)target = *(unsigned short volatile *)ptr; ptr += 4; /* skip cruft */ target += 2; count-=2; } /* Trailing byte? */ if(count) { /* Big endian */ unsigned short v=*ptr; *((char *)target)=v>>8; } *target = *ptr; } static void dayna_memcpy_tocard(struct net_device *dev, int to, const void *from, int count) { volatile unsigned short *ptr; const unsigned short *src=from; const unsigned char *src=from; to<<=1; /* word, skip overhead */ ptr=(unsigned short *)(dev->mem_start+to); /* Leading byte? */ if (to&2) { /* avoid a byte write (stomps on other data) */ ptr[-1] = (ptr[-1]&0xFF00)|*((unsigned char *)src)++; ptr[-1] = (ptr[-1]&0xFF00)|*src++; ptr++; count--; } while(count>=2) { *ptr++=*src++; /* Copy and */ *ptr++=*(unsigned short *)src; /* Copy and */ ptr++; /* skip cruft */ src += 2; count-=2; } /* Trailing byte? */ if(count) { /* Big endian */ unsigned short v=*src; /* card doesn't like byte writes */ *ptr=(*ptr&0x00FF)|(v&0xFF00); *ptr=(*ptr&0x00FF)|(*src << 8); } } Loading Loading
drivers/net/mac8390.c +14 −17 Original line number Diff line number Diff line Loading @@ -559,55 +559,52 @@ static void mac8390_no_reset(struct net_device *dev) /* directly from daynaport.c by Alan Cox */ static void dayna_memcpy_fromcard(struct net_device *dev, void *to, int from, int count) { volatile unsigned short *ptr; unsigned short *target=to; volatile unsigned char *ptr; unsigned char *target=to; from<<=1; /* word, skip overhead */ ptr=(unsigned short *)(dev->mem_start+from); ptr=(unsigned char *)(dev->mem_start+from); /* Leading byte? */ if (from&2) { *((char *)target)++ = *(((char *)ptr++)-1); *target++ = ptr[-1]; ptr += 2; count--; } while(count>=2) { *target++=*ptr++; /* Copy and */ ptr++; /* skip cruft */ *(unsigned short *)target = *(unsigned short volatile *)ptr; ptr += 4; /* skip cruft */ target += 2; count-=2; } /* Trailing byte? */ if(count) { /* Big endian */ unsigned short v=*ptr; *((char *)target)=v>>8; } *target = *ptr; } static void dayna_memcpy_tocard(struct net_device *dev, int to, const void *from, int count) { volatile unsigned short *ptr; const unsigned short *src=from; const unsigned char *src=from; to<<=1; /* word, skip overhead */ ptr=(unsigned short *)(dev->mem_start+to); /* Leading byte? */ if (to&2) { /* avoid a byte write (stomps on other data) */ ptr[-1] = (ptr[-1]&0xFF00)|*((unsigned char *)src)++; ptr[-1] = (ptr[-1]&0xFF00)|*src++; ptr++; count--; } while(count>=2) { *ptr++=*src++; /* Copy and */ *ptr++=*(unsigned short *)src; /* Copy and */ ptr++; /* skip cruft */ src += 2; count-=2; } /* Trailing byte? */ if(count) { /* Big endian */ unsigned short v=*src; /* card doesn't like byte writes */ *ptr=(*ptr&0x00FF)|(v&0xFF00); *ptr=(*ptr&0x00FF)|(*src << 8); } } Loading