[PATCH] m68k: lvalues abuse in mac8390
authorAl Viro <viro@ftp.linux.org.uk>
Thu, 12 Jan 2006 09:06:21 +0000 (01:06 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 12 Jan 2006 17:09:01 +0000 (09:09 -0800)
Cast is not an lvalue

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/net/mac8390.c

index d8c99f0..06cb460 100644 (file)
@@ -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);
        }
 }