mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
[PATCH] m68k: lvalues abuse in mac8390
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>
This commit is contained in:
parent
0efb713482
commit
09cc07a5c7
1 changed files with 14 additions and 17 deletions
|
@ -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…
Reference in a new issue