return;
count--;
*(unsigned char *) dst = inb(port);
- ((unsigned char *) dst)++;
+ dst += 1;
}
while (count >= 4) {
w |= inb(port) << 16;
w |= inb(port) << 24;
*(unsigned int *) dst = w;
- ((unsigned int *) dst)++;
+ dst += 4;
}
while (count) {
--count;
*(unsigned char *) dst = inb(port);
- ((unsigned char *) dst)++;
+ dst += 1;
}
}
if (!count)
return;
count--;
- *(unsigned short* ) dst = inw(port);
- ((unsigned short *) dst)++;
+ *(unsigned short *) dst = inw(port);
+ dst += 2;
}
while (count >= 2) {
w = inw(port);
w |= inw(port) << 16;
*(unsigned int *) dst = w;
- ((unsigned int *) dst)++;
+ dst += 4;
}
if (count) {
void insl (unsigned long port, void *dst, unsigned long count)
{
unsigned int l = 0, l2;
-
+
if (!count)
return;
-
+
switch (((unsigned long) dst) & 0x3)
{
case 0x00: /* Buffer 32-bit aligned */
while (count--)
{
*(unsigned int *) dst = inl(port);
- ((unsigned int *) dst)++;
+ dst += 4;
}
break;
-
+
/* Assuming little endian Alphas in cases 0x01 -- 0x03 ... */
-
+
case 0x02: /* Buffer 16-bit aligned */
--count;
-
+
l = inl(port);
*(unsigned short *) dst = l;
- ((unsigned short *) dst)++;
-
+ dst += 2;
+
while (count--)
{
l2 = inl(port);
*(unsigned int *) dst = l >> 16 | l2 << 16;
- ((unsigned int *) dst)++;
+ dst += 4;
l = l2;
}
*(unsigned short *) dst = l >> 16;
break;
+
case 0x01: /* Buffer 8-bit aligned */
--count;
-
+
l = inl(port);
*(unsigned char *) dst = l;
- ((unsigned char *) dst)++;
+ dst += 1;
*(unsigned short *) dst = l >> 8;
- ((unsigned short *) dst)++;
+ dst += 2;
while (count--)
{
l2 = inl(port);
*(unsigned int *) dst = l >> 24 | l2 << 8;
- ((unsigned int *) dst)++;
+ dst += 4;
l = l2;
}
*(unsigned char *) dst = l >> 24;
break;
+
case 0x03: /* Buffer 8-bit aligned */
--count;
-
+
l = inl(port);
*(unsigned char *) dst = l;
- ((unsigned char *) dst)++;
+ dst += 1;
while (count--)
{
l2 = inl(port);
*(unsigned int *) dst = l << 24 | l2 >> 8;
- ((unsigned int *) dst)++;
+ dst += 4;
l = l2;
}
*(unsigned short *) dst = l >> 8;
- ((unsigned short *) dst)++;
+ dst += 2;
*(unsigned char *) dst = l >> 24;
break;
}
while (count) {
count--;
outb(*(char *)src, port);
- ((char *) src)++;
+ src += 1;
}
}
panic("outsw: memory not short aligned");
}
outw(*(unsigned short*)src, port);
- ((unsigned short *) src)++;
+ src += 2;
--count;
}
unsigned int w;
count -= 2;
w = *(unsigned int *) src;
- ((unsigned int *) src)++;
+ src += 4;
outw(w >> 0, port);
outw(w >> 16, port);
}
void outsl (unsigned long port, const void *src, unsigned long count)
{
unsigned int l = 0, l2;
-
+
if (!count)
return;
-
+
switch (((unsigned long) src) & 0x3)
{
case 0x00: /* Buffer 32-bit aligned */
while (count--)
{
outl(*(unsigned int *) src, port);
- ((unsigned int *) src)++;
+ src += 4;
}
break;
-
- /* Assuming little endian Alphas in cases 0x01 -- 0x03 ... */
-
+
case 0x02: /* Buffer 16-bit aligned */
--count;
-
+
l = *(unsigned short *) src << 16;
- ((unsigned short *) src)++;
-
+ src += 2;
+
while (count--)
{
l2 = *(unsigned int *) src;
- ((unsigned int *) src)++;
+ src += 4;
outl (l >> 16 | l2 << 16, port);
l = l2;
}
l2 = *(unsigned short *) src;
outl (l >> 16 | l2 << 16, port);
break;
+
case 0x01: /* Buffer 8-bit aligned */
--count;
-
+
l = *(unsigned char *) src << 8;
- ((unsigned char *) src)++;
+ src += 1;
l |= *(unsigned short *) src << 16;
- ((unsigned short *) src)++;
+ src += 2;
while (count--)
{
l2 = *(unsigned int *) src;
- ((unsigned int *) src)++;
+ src += 4;
outl (l >> 8 | l2 << 24, port);
l = l2;
}
l2 = *(unsigned char *) src;
outl (l >> 8 | l2 << 24, port);
break;
+
case 0x03: /* Buffer 8-bit aligned */
--count;
-
+
l = *(unsigned char *) src << 24;
- ((unsigned char *) src)++;
+ src += 1;
while (count--)
{
l2 = *(unsigned int *) src;
- ((unsigned int *) src)++;
+ src += 4;
outl (l >> 24 | l2 << 8, port);
l = l2;
}
l2 = *(unsigned short *) src;
- ((unsigned short *) src)++;
+ src += 2;
l2 |= *(unsigned char *) src << 16;
outl (l >> 24 | l2 << 8, port);
break;
} while (count >= 0);
count += 4;
}
-
+
if (count >= 2 && ((unsigned long)to & 1) == (from & 1)) {
count -= 2;
do {
} while (count >= 0);
count += 4;
}
-
+
if (count >= 2 && (to & 1) == ((unsigned long)from & 1)) {
count -= 2;
do {