Messages in this thread Patch in this message | | | From | Patrick Lerda <> | Subject | ne2k-pci.c fix for Big-Endian processors | Date | Mon, 6 Sep 1999 11:16:11 +0200 |
| |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII"> <META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2448.0"> <TITLE>ne2k-pci.c fix for Big-Endian processors</TITLE> </HEAD> <BODY>
<P><FONT SIZE=2 FACE="Courier New">--- linux-2.2.9-i586/drivers/net/ne2k-pci.c Mon Jan 25 07:04:02 1999</FONT> <BR><FONT SIZE=2 FACE="Courier New">+++ linux-2.2.9-ppc/drivers/net/ne2k-pci.c Fri Jun 18 15:07:10 1999</FONT> <BR><FONT SIZE=2 FACE="Courier New">@@ -21,6 +21,7 @@</FONT> <BR><FONT SIZE=2 FACE="Courier New"> Issues remaining:</FONT> <BR><FONT SIZE=2 FACE="Courier New"> No full-duplex support.</FONT> <BR><FONT SIZE=2 FACE="Courier New"> */</FONT> <BR><FONT SIZE=2 FACE="Courier New">+/* Big-Endian support added</FONT><FONT COLOR="#0000FF" SIZE=2 FACE="Arial"></FONT> <FONT SIZE=2 FACE="Arial">by</FONT> <FONT SIZE=2 FACE="Courier New">Patrick</FONT><FONT SIZE=2 FACE="Courier New"> LERDA lerda@microprocess.com */</FONT> <BR><FONT SIZE=2 FACE="Courier New"> </FONT> <BR><FONT SIZE=2 FACE="Courier New"> /* Our copyright info must remain in the binary. */</FONT> <BR><FONT SIZE=2 FACE="Courier New"> static const char *version =</FONT> <BR><FONT SIZE=2 FACE="Courier New">@@ -39,6 +40,7 @@</FONT> <BR><FONT SIZE=2 FACE="Courier New"> #include <asm/system.h></FONT> <BR><FONT SIZE=2 FACE="Courier New"> #include <asm/io.h></FONT> <BR><FONT SIZE=2 FACE="Courier New"> #include <asm/irq.h></FONT> <BR><FONT SIZE=2 FACE="Courier New">+#include <asm/byteorder.h></FONT> <BR><FONT SIZE=2 FACE="Courier New"> </FONT> <BR><FONT SIZE=2 FACE="Courier New"> #include <linux/netdevice.h></FONT> <BR><FONT SIZE=2 FACE="Courier New"> #include <linux/etherdevice.h></FONT> <BR><FONT SIZE=2 FACE="Courier New">@@ -462,9 +464,30 @@</FONT> <BR><FONT SIZE=2 FACE="Courier New"> outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);</FONT> <BR><FONT SIZE=2 FACE="Courier New"> </FONT> <BR><FONT SIZE=2 FACE="Courier New"> #if defined(USE_LONGIO)</FONT> <BR><FONT SIZE=2 FACE="Courier New">- *(u32*)hdr = inl(NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ {</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ unsigned long u=inl(NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ /*PL*/ /*endian ok*/</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->status = (u>> 0) & 0xFF;</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->next = (u>> 8) & 0xFF;</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->count = (u>>16) & 0xFFFF;</FONT> <BR><FONT SIZE=2 FACE="Courier New">+</FONT> <BR><FONT SIZE=2 FACE="Courier New">+#ifdef DEBUG</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ printk("hdr: %02x %02x %04x\n",</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->status,hdr->next,hdr->count);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+#endif</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ }</FONT> <BR><FONT SIZE=2 FACE="Courier New"> #else</FONT> <BR><FONT SIZE=2 FACE="Courier New">- insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ { /*PL*/ /*endian ok*/</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ u16 u;</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ //insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ u=inw(NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->status = (u>> 0) & 0xFF;</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->next = (u>> 8) & 0xFF;</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ hdr->count = inw(NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ }</FONT> <BR><FONT SIZE=2 FACE="Courier New"> #endif</FONT> <BR><FONT SIZE=2 FACE="Courier New"> </FONT> <BR><FONT SIZE=2 FACE="Courier New"> outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */</FONT> <BR><FONT SIZE=2 FACE="Courier New">@@ -500,10 +523,11 @@</FONT> <BR><FONT SIZE=2 FACE="Courier New"> </FONT> <BR><FONT SIZE=2 FACE="Courier New"> #if defined(USE_LONGIO)</FONT> <BR><FONT SIZE=2 FACE="Courier New"> insl(NE_BASE + NE_DATAPORT, buf, count>>2);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+</FONT> <BR><FONT SIZE=2 FACE="Courier New"> if (count & 3) {</FONT> <BR><FONT SIZE=2 FACE="Courier New"> buf += count & ~3;</FONT> <BR><FONT SIZE=2 FACE="Courier New"> if (count & 2)</FONT> <BR><FONT SIZE=2 FACE="Courier New">- *((u16*)buf)++ = inw(NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ *((u16*)buf)++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT));</FONT> <BR><FONT SIZE=2 FACE="Courier New"> if (count & 1)</FONT> <BR><FONT SIZE=2 FACE="Courier New"> *buf = inb(NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New"> }</FONT> <BR><FONT SIZE=2 FACE="Courier New">@@ -563,10 +587,11 @@</FONT> <BR><FONT SIZE=2 FACE="Courier New"> outb(E8390_RWRITE+E8390_START, nic_base + NE_CMD);</FONT> <BR><FONT SIZE=2 FACE="Courier New"> #if defined(USE_LONGIO)</FONT> <BR><FONT SIZE=2 FACE="Courier New"> outsl(NE_BASE + NE_DATAPORT, buf, count>>2);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+</FONT> <BR><FONT SIZE=2 FACE="Courier New"> if (count & 3) {</FONT> <BR><FONT SIZE=2 FACE="Courier New"> buf += count & ~3;</FONT> <BR><FONT SIZE=2 FACE="Courier New"> if (count & 2)</FONT> <BR><FONT SIZE=2 FACE="Courier New">- outw(*((u16*)buf)++, NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New">+ outw(cpu_to_le16(*((u16*)buf)++), NE_BASE + NE_DATAPORT);</FONT> <BR><FONT SIZE=2 FACE="Courier New"> }</FONT> <BR><FONT SIZE=2 FACE="Courier New"> #else</FONT> <BR><FONT SIZE=2 FACE="Courier New"> outsw(NE_BASE + NE_DATAPORT, buf, count>>1);</FONT> </P> <BR>
</BODY> </HTML> | |