Fix dm9000 receive status and len little endian issue
authorTsiChung Liew <Tsi-Chung.Liew@freescale.com>
Wed, 25 Jun 2008 20:48:52 +0000 (15:48 -0500)
committerBen Warren <biggerbadderben@gmail.com>
Tue, 19 Aug 2008 06:10:43 +0000 (23:10 -0700)
The received status and len was in little endian
format and caused the ethernet unable to proceed
further. Add __le16_to_cpu() in dm9000_rx_status_8/16/32bit().

Signed-off-by: TsiChung Liew <Tsi-Chung.Liew@freescale.com>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
drivers/net/dm9000x.c

index 844fb766d8c08edbbe9e686f6f631f46799be580..e7365fe062b3e14cb1001e3c4efc2f373bc2506b 100644 (file)
@@ -214,24 +214,28 @@ static void dm9000_rx_status_32bit(u16 *RxStatus, u16 *RxLen)
        DM9000_outb(DM9000_MRCMD, DM9000_IO);
 
        tmpdata = DM9000_inl(DM9000_DATA);
-       *RxStatus = tmpdata;
-       *RxLen = tmpdata >> 16;
+       *RxStatus = __le16_to_cpu(tmpdata);
+       *RxLen = __le16_to_cpu(tmpdata >> 16);
 }
 
 static void dm9000_rx_status_16bit(u16 *RxStatus, u16 *RxLen)
 {
        DM9000_outb(DM9000_MRCMD, DM9000_IO);
 
-       *RxStatus = DM9000_inw(DM9000_DATA);
-       *RxLen = DM9000_inw(DM9000_DATA);
+       *RxStatus = __le16_to_cpu(DM9000_inw(DM9000_DATA));
+       *RxLen = __le16_to_cpu(DM9000_inw(DM9000_DATA));
 }
 
 static void dm9000_rx_status_8bit(u16 *RxStatus, u16 *RxLen)
 {
        DM9000_outb(DM9000_MRCMD, DM9000_IO);
 
-       *RxStatus = DM9000_inb(DM9000_DATA) + (DM9000_inb(DM9000_DATA) << 8);
-       *RxLen = DM9000_inb(DM9000_DATA) + (DM9000_inb(DM9000_DATA) << 8);
+       *RxStatus =
+           __le16_to_cpu(DM9000_inb(DM9000_DATA) +
+                         (DM9000_inb(DM9000_DATA) << 8));
+       *RxLen =
+           __le16_to_cpu(DM9000_inb(DM9000_DATA) +
+                         (DM9000_inb(DM9000_DATA) << 8));
 }
 
 /*