This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

KS32C5000 ethernet driver endian-ness update


This patch adds support for little-endian mode to the KS32C5000 ethernet
driver.

Comment:
(CYG_BYTEORDER == CYG_MSBFIRST) used to swap endian in
BDMARxConfigVar declaration and txWritePointer transmit descriptor
reserved fields setup.

[Copyright assignment mailed to Redhat]

--
Chris

Index: devs/eth/arm/ks32c5000//current/src/ks5000_ether.c
===================================================================
RCS file:
/cvs/ecos/ecos/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c,v
retrieving revision 1.6
diff -u -5 -p -r1.6 ks5000_ether.c
--- devs/eth/arm/ks32c5000//current/src/ks5000_ether.c 14 Oct 2002
15:33:26 -0000 1.6
+++ devs/eth/arm/ks32c5000//current/src/ks5000_ether.c 18 Oct 2002
11:48:59 -0000
@@ -63,10 +63,12 @@
 // need to prvide fake values for errno
 #define EIO 1
 #define EINVAL 2
 #endif

+#include <cyg/infra/cyg_type.h>  // Common type definitions and support
+                                 // including endian-ness
 #include <cyg/infra/diag.h>
 #include <cyg/io/eth/netdev.h>
 #include <cyg/io/eth/eth_drv.h>
 #include <cyg/io/eth/eth_drv_stats.h>
 #include <cyg/hal/hal_intr.h>
@@ -250,19 +252,32 @@ static volatile U32 BDMATxConfigVar =
 #define BDMARXCON_ALIGN BDMARXCON_WA11
 #else
 #error "EtherFramePadding must be 0,1,2 or 3"
 #endif

+#if (CYG_BYTEORDER == CYG_MSBFIRST) // Big endian
 static volatile U32 BDMARxConfigVar =
   BDMARXCON_DIE |
   BDMARXCON_EN |
   BDMARXCON_BIG |
   BDMARXCON_MA_INC |
   BDMARXCON_NOIE |
   BDMARXCON_ALIGN |
   BDMARXCON_STP_SKP |
   15;  /* burst size - 1 */
+
+#else // Little endian
+static volatile U32 BDMARxConfigVar =
+  BDMARXCON_DIE |
+  BDMARXCON_EN |
+  BDMARXCON_LITTLE |
+  BDMARXCON_MA_INC |
+  BDMARXCON_NOIE |
+  BDMARXCON_ALIGN |
+  BDMARXCON_STP_SKP |
+  15;  /* burst size - 1 */
+#endif


 /* Global variables For BDMA Error Report */

 static BDMA_TX_ERR BDMATxErrCnt = {0,0,0};
@@ -486,13 +501,19 @@ static int ks32c5000_eth_buffer_send(tEt
   MAC_Tx_Pkts += 1;
   MAC_Tx_Octets += buf->length;

   // fill in the packet descriptor

+#if (CYG_BYTEORDER == CYG_MSBFIRST) // Big endian
   txWritePointer->Reserved = (TXFDCON_PADDING_MODE | TXFDCON_CRC_MODE |
                     TXFDCON_SRC_ADDR_INC | TXFDCON_BIG_ENDIAN |
                     TXFDCON_WIDGET_ALIGN00 | TXFDCON_MAC_TX_INT_EN);
+#else // Little endian
+  txWritePointer->Reserved = (TXFDCON_PADDING_MODE | TXFDCON_CRC_MODE |
+                    TXFDCON_SRC_ADDR_INC | TXFDCON_LITTLE_ENDIAN |
+                    TXFDCON_WIDGET_ALIGN00 | TXFDCON_MAC_TX_INT_EN);
+#endif

   txWritePointer->StatusAndFrameLength = buf->length;
   txWritePointer->FrameDataPtr = ((unsigned)buf | FRM_OWNERSHIP_BDMA);

   txWritePointer = txWritePointer->NextFD;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]