changeset 773:6ba7ef90493e

* src/smsc_lan91cxx.h: Support big endian arch. * src/if_lan91cxx.c: Support big endian arch.
author jlarmour
date Thu, 27 Feb 2003 18:02:12 +0000
parents f9b51f6b4eaf
children 649897d20543
files packages/devs/eth/smsc/lan91cxx/current/ChangeLog packages/devs/eth/smsc/lan91cxx/current/src/if_lan91cxx.c packages/devs/eth/smsc/lan91cxx/current/src/smsc_lan91cxx.h
diffstat 3 files changed, 27 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/eth/smsc/lan91cxx/current/ChangeLog
+++ b/packages/devs/eth/smsc/lan91cxx/current/ChangeLog
@@ -1,3 +1,8 @@
+2003-02-26  Yoshinori Sato <ysato@users.sourceforge.jp>
+
+	* src/smsc_lan91cxx.h: Support big endian arch.	
+	* src/if_lan91cxx.c: Support big endian arch.
+
 2002-08-28  Mark Salter  <msalter@redhat.com>
 
 	* src/smsc_lan91cxx.h: Support 32-bit data reads.
--- a/packages/devs/eth/smsc/lan91cxx/current/src/if_lan91cxx.c
+++ b/packages/devs/eth/smsc/lan91cxx/current/src/if_lan91cxx.c
@@ -716,7 +716,7 @@ lan91cxx_send(struct eth_drv_sc *sc, str
         plen += sg_list[i].len;
 
     CYG_ASSERT( plen == total_len, "sg data length mismatch" );
-    
+
     // Alloc new TX packet
     do {
         put_reg(sc, LAN91CXX_MMU_COMMAND, LAN91CXX_MMU_alloc_for_tx
@@ -761,9 +761,9 @@ lan91cxx_send(struct eth_drv_sc *sc, str
     // data writes.
 
     // Prepare header:
-    put_data(sc, 0);        // reserve space for status word
+    put_data(sc, CYG_CPU_TO_LE16(0));        // reserve space for status word
     // packet length (includes status, byte-count and control shorts)
-    put_data(sc, 0x7FE & (plen + 6) ); // Always even, always < 15xx(dec)
+    put_data(sc, CYG_CPU_TO_LE16(0x7FE & (plen + 6)) ); // Always even, always < 15xx(dec)
 
     // Put data into buffer
     for (i = 0;  i < sg_len;  i++) {
@@ -959,11 +959,14 @@ lan91cxx_RxEvent(struct eth_drv_sc *sc)
                                  LAN91CXX_POINTER_AUTO_INCR | 0x0000));
 #ifdef LAN91CXX_32BIT_RX
     val = get_data(sc);
+    val = CYG_LE32_TO_CPU(val);
     stat = val & 0xffff;
     len = ((val >> 16) & 0xffff) - 6;   // minus header/footer words
 #else
     stat = get_data(sc);
-    len = get_data(sc) - 6;             // minus header/footer words
+    stat = CYG_LE16_TO_CPU(stat);
+    len = get_data(sc);
+    len = CYG_LE16_TO_CPU(len) - 6;     // minus header/footer words
 #endif
 
 #ifdef KEEP_STATISTICS
@@ -1019,7 +1022,8 @@ lan91cxx_recv(struct eth_drv_sc *sc, str
     struct lan91cxx_priv_data *cpd = 
         (struct lan91cxx_priv_data *)sc->driver_private;
 #endif
-    int i, mlen=0, plen;
+    int i;
+    short mlen=0, plen;
     rxd_t *data=NULL, val;
     unsigned char *cp, cval;
 
@@ -1033,9 +1037,11 @@ lan91cxx_recv(struct eth_drv_sc *sc, str
 
     // packet length (minus header/footer)
 #ifdef LAN91CXX_32BIT_RX
+    val = CYG_LE32_TO_CPU(val);
     plen = (val >> 16) - 6;
 #else
-    plen = get_data(sc) - 6;
+    plen = get_data(sc);
+    plen = CYG_LE16_TO_CPU(plen) - 6;
 #endif
     if (val & LAN91CXX_RX_STATUS_ODDFRM)
 	plen++;
@@ -1066,6 +1072,7 @@ lan91cxx_recv(struct eth_drv_sc *sc, str
     }
     val = get_data(sc); // Read control word (and potential data) unconditionally
 #ifdef LAN91CXX_32BIT_RX
+    val = CYG_LE32_TO_CPU(val);
     if (plen & 2) {
 	if (data)
 	    *(cyg_uint16 *)data = val & 0xffff;
--- a/packages/devs/eth/smsc/lan91cxx/current/src/smsc_lan91cxx.h
+++ b/packages/devs/eth/smsc/lan91cxx/current/src/smsc_lan91cxx.h
@@ -63,7 +63,7 @@
 //==========================================================================
 
 #include <cyg/hal/hal_io.h>
-
+#include <cyg/hal/hal_endian.h>
 
 #define LAN91CXX_TCR         0x00
 #define LAN91CXX_EPH_STATUS  0x01
@@ -342,8 +342,10 @@ get_reg(struct eth_drv_sc *sc, int regno
         (struct lan91cxx_priv_data *)sc->driver_private;
     unsigned short val;
     
-    HAL_WRITE_UINT16(cpd->base+(LAN91CXX_BS << cpd->addrsh), regno>>3);
+    HAL_WRITE_UINT16(cpd->base+(LAN91CXX_BS << cpd->addrsh), CYG_CPU_TO_LE16(regno>>3));
     HAL_READ_UINT16(cpd->base+((regno&0x7) << cpd->addrsh), val);
+    val = CYG_LE16_TO_CPU(val);
+
 #if DEBUG & 2
     diag_printf("read reg %d val 0x%04x\n", regno, val);
 #endif
@@ -358,8 +360,8 @@ put_reg(struct eth_drv_sc *sc, int regno
     struct lan91cxx_priv_data *cpd =
         (struct lan91cxx_priv_data *)sc->driver_private;
 	
-    HAL_WRITE_UINT16(cpd->base+(LAN91CXX_BS << cpd->addrsh), regno>>3);
-    HAL_WRITE_UINT16(cpd->base+((regno&0x7) << cpd->addrsh), val);
+    HAL_WRITE_UINT16(cpd->base+(LAN91CXX_BS << cpd->addrsh), CYG_CPU_TO_LE16(regno>>3));
+    HAL_WRITE_UINT16(cpd->base+((regno&0x7) << cpd->addrsh), CYG_CPU_TO_LE16(val));
 
 #if DEBUG & 2
     diag_printf("write reg %d val 0x%04x\n", regno, val);
@@ -416,6 +418,7 @@ get_banksel(struct eth_drv_sc *sc)
     unsigned short val;
     
     HAL_READ_UINT16(cpd->base+(LAN91CXX_BS << cpd->addrsh), val);
+    val = CYG_LE16_TO_CPU(val);
 #if DEBUG & 2
     diag_printf("read bank val 0x%04x\n", val);
 #endif
@@ -432,7 +435,7 @@ put_att(struct eth_drv_sc *sc, int offs,
     struct lan91cxx_priv_data *cpd =
         (struct lan91cxx_priv_data *)sc->driver_private;
 	
-    HAL_WRITE_UINT8(cpd->attbase + (offs << cpd->addrsh), val);
+    HAL_WRITE_UINT8(cpd->attbase + (offs << cpd->addrsh), CYG_CPU_TO_LE16(val));
 
 #if DEBUG & 2
     diag_printf("write attr %d val 0x%02x\n", offs, val);
@@ -448,6 +451,7 @@ get_att(struct eth_drv_sc *sc, int offs)
     unsigned char val;
     
     HAL_READ_UINT8(cpd->attbase + (offs << cpd->addrsh), val);
+    val = CYG_LE16_TO_CPU(val);
 #if DEBUG & 2
     diag_printf("read attr %d val 0x%02x\n", offs, val);
 #endif