summaryrefslogtreecommitdiff
path: root/packages/ixp425-eth/ixp400-eth-1.5/le.patch
blob: 3d569015e60605523b6c3dcbceb772755d316d99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
little endian support

 ixp400_eth.c |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

--- ixp400-eth/ixp400_eth.c	1970-01-01 00:00:00.000000000 +0000
+++ ixp400-eth/ixp400_eth.c	1970-01-01 00:00:00.000000000 +0000
@@ -2040,6 +2040,16 @@ static void rx_cb(UINT32 callbackTag, IX
 	skb->tail = skb->data + len;
 	skb->len = len;
 	
+#ifndef __ARMEB__
+	{
+	    /* Byte swap all words containing data from the buffer. */
+	    unsigned long *p = (unsigned long*)((unsigned)skb->data & ~0x3);
+	    unsigned long *e = (unsigned long*)(((unsigned)skb->data + skb->len + 3) & ~0x3);
+	    while (p < e)
+		*p = ntohl(*p), ++p;
+	}
+#endif
+
 #ifdef DEBUG_DUMP
 	skb_dump("rx", skb);
 #endif
@@ -2431,6 +2441,16 @@ static int dev_hard_start_xmit(struct sk
 	return 0;
     }
 
+#ifndef __ARMEB__
+    {
+	/* Byte swap all words containing data from the buffer. */
+	unsigned long *p = (unsigned long*)((unsigned)skb->data & ~0x3);
+	unsigned long *e = (unsigned long*)(((unsigned)skb->data + skb->len + 3) & ~0x3);
+	while (p < e)
+	    *p = ntohl(*p), ++p;
+    }
+#endif
+
 #ifdef DEBUG_DUMP
     skb_dump("tx", skb);
 #endif