Mercurial > ecos-v3_0-branch
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
