tch from Eric Valette <valette@crf.canon.fr> and Emmanuel Raguet

<raguet@crf.canon.fr> to fix bugs and make the mcp750 boot
RTEMS running the GoAhead web server.
This commit is contained in:
Joel Sherrill
1999-10-25 14:52:19 +00:00
parent bf61f22585
commit 3eb75db389
3 changed files with 73 additions and 73 deletions

View File

@@ -106,7 +106,7 @@
struct MD { struct MD {
volatile unsigned long status; volatile unsigned long status;
volatile unsigned long counts; volatile unsigned long counts;
unsigned long buf1, buf2; volatile unsigned char *buf1, *buf2;
}; };
/* /*
@@ -143,8 +143,8 @@ struct MD {
struct dec21140_softc { struct dec21140_softc {
struct arpcom arpcom; struct arpcom arpcom;
rtems_irq_connect_data irqInfo; rtems_irq_connect_data irqInfo;
struct MD *MDbase; volatile struct MD *MDbase;
char *bufferBase; volatile unsigned char *bufferBase;
int acceptBroadcast; int acceptBroadcast;
int rxBdCount; int rxBdCount;
int txBdCount; int txBdCount;
@@ -152,7 +152,7 @@ struct MD {
rtems_id txDaemonTid; rtems_id txDaemonTid;
unsigned int port; unsigned int port;
unsigned int *base; volatile unsigned int *base;
unsigned long bpar; unsigned long bpar;
/* /*
@@ -186,7 +186,7 @@ static struct dec21140_softc dec21140_softc[NDECDRIVER];
static rtems_isr static rtems_isr
dec21140Enet_interrupt_handler (rtems_vector_number v) dec21140Enet_interrupt_handler (rtems_vector_number v)
{ {
unsigned int *tbase; volatile unsigned int *tbase;
unsigned long status; unsigned long status;
unsigned int sc; unsigned int sc;
@@ -233,7 +233,7 @@ static int dec21140IsOn(const rtems_irq_connect_data* irq)
#define MDIO_ENB_IN 0x40000 #define MDIO_ENB_IN 0x40000
#define MDIO_DATA_READ 0x80000 #define MDIO_DATA_READ 0x80000
static int mdio_read(unsigned int *ioaddr, int phy_id, int location) static int mdio_read(volatile unsigned int *ioaddr, int phy_id, int location)
{ {
int i, i3; int i, i3;
int read_cmd = (0xf6 << 10) | (phy_id << 5) | location; int read_cmd = (0xf6 << 10) | (phy_id << 5) | location;
@@ -277,7 +277,7 @@ static int mdio_read(unsigned int *ioaddr, int phy_id, int location)
return ( ((retval<<8)&0xff00) | ((retval>>8)&0xff) ); return ( ((retval<<8)&0xff00) | ((retval>>8)&0xff) );
} }
static int mdio_write(unsigned int *ioaddr, int phy_id, int location, int value) static int mdio_write(volatile unsigned int *ioaddr, int phy_id, int location, int value)
{ {
int i, i3; int i, i3;
int cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value; int cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
@@ -327,7 +327,7 @@ static int mdio_write(unsigned int *ioaddr, int phy_id, int location, int value)
#define EE_READ_CMD (6 << 6) #define EE_READ_CMD (6 << 6)
#define EE_ERASE_CMD (7 << 6) #define EE_ERASE_CMD (7 << 6)
static int eeget16(unsigned int *ioaddr, int location) static int eeget16(volatile unsigned int *ioaddr, int location)
{ {
int i, i3; int i, i3;
unsigned short retval = 0; unsigned short retval = 0;
@@ -368,13 +368,13 @@ static void
dec21140Enet_initialize_hardware (struct dec21140_softc *sc) dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
{ {
rtems_status_code st; rtems_status_code st;
unsigned int *tbase; volatile unsigned int *tbase;
union {char c[64]; unsigned short s[32];} rombuf; union {char c[64]; unsigned short s[32];} rombuf;
int i, i2, i3; int i, i2, i3;
char *cp, direction, *setup_frm, *eaddrs; volatile unsigned char *cp, direction, *setup_frm, *eaddrs;
unsigned long csr12_val, mii_reg0; unsigned long csr12_val, mii_reg0;
unsigned char *buffer; volatile unsigned char *buffer;
struct MD *rmd; volatile struct MD *rmd;
tbase = sc->base; tbase = sc->base;
@@ -417,10 +417,10 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
* Init RX ring * Init RX ring
*/ */
sc->rxBdCount = 0; sc->rxBdCount = 0;
cp = (char *)malloc((NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE) + PPC_CACHE_ALIGNMENT); cp = (volatile unsigned char *)malloc((NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE) + PPC_CACHE_ALIGNMENT);
sc->bufferBase = cp; sc->bufferBase = cp;
if ((unsigned int)cp & (PPC_CACHE_ALIGNMENT-1)) if ((unsigned int)cp & (PPC_CACHE_ALIGNMENT-1))
cp = ((unsigned int)cp + PPC_CACHE_ALIGNMENT) & ~(PPC_CACHE_ALIGNMENT-1); cp = (volatile unsigned char *) (((unsigned int)cp + PPC_CACHE_ALIGNMENT) & ~(PPC_CACHE_ALIGNMENT-1));
#ifdef PCI_BRIDGE_DOES_NOT_ENSURE_CACHE_COHERENCY_FOR_DMA #ifdef PCI_BRIDGE_DOES_NOT_ENSURE_CACHE_COHERENCY_FOR_DMA
if (_CPU_is_paging_enabled()) if (_CPU_is_paging_enabled())
_CPU_change_memory_mapping_attribute _CPU_change_memory_mapping_attribute
@@ -428,28 +428,28 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
(NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE), (NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE),
PTE_CACHE_DISABLE | PTE_WRITABLE); PTE_CACHE_DISABLE | PTE_WRITABLE);
#endif #endif
rmd = (struct MD*)cp; rmd = (volatile struct MD*)cp;
sc->MDbase = rmd; sc->MDbase = rmd;
buffer = cp + ((NRXBUFS+NTXBUFS)*sizeof(struct MD)); buffer = cp + ((NRXBUFS+NTXBUFS)*sizeof(struct MD));
st_le32( (tbase+memCSR3), (long)((long)(sc->MDbase) + PREP_PCI_DRAM_OFFSET)); st_le32( (tbase+memCSR3), (long)((long)(sc->MDbase) + PREP_PCI_DRAM_OFFSET));
for (i=0 ; i<NRXBUFS; i++){ for (i=0 ; i<NRXBUFS; i++){
rmd->buf2 = 0; rmd->buf2 = (volatile unsigned char *) 0;
rmd->buf1 = (unsigned long)(buffer + (i*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET); rmd->buf1 = (buffer + (i*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET);
if (i == NRXBUFS-1) rmd->counts = 0xfcc00000 | (RBUF_SIZE);
rmd->counts = 0xfec00000 | (RBUF_SIZE);
else
rmd->counts = 0xfcc00000 | (RBUF_SIZE);
rmd->status = 0x80000000; rmd->status = 0x80000000;
rmd++; rmd++;
} }
/*
* mark last RX buffer.
*/
sc->MDbase [NRXBUFS-1].counts = 0xfec00000 | (RBUF_SIZE);
/* /*
* Init TX ring * Init TX ring
*/ */
sc->txBdCount = 0; sc->txBdCount = 0;
st_le32( (tbase+memCSR4), (long)((long)(rmd) + PREP_PCI_DRAM_OFFSET)); st_le32( (tbase+memCSR4), (long)(((long)(rmd)) + PREP_PCI_DRAM_OFFSET));
rmd->buf2 = 0; rmd->buf2 = (volatile unsigned char *) 0;
rmd->buf1 = (unsigned long)(buffer + (NRXBUFS*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET); rmd->buf1 = buffer + (NRXBUFS*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET;
rmd->counts = 0x62000000; rmd->counts = 0x62000000;
rmd->status = 0x0; rmd->status = 0x0;
@@ -476,7 +476,7 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
/* /*
* Build setup frame * Build setup frame
*/ */
setup_frm = (char *)((long)(rmd->buf1) - PREP_PCI_DRAM_OFFSET); setup_frm = rmd->buf1 - PREP_PCI_DRAM_OFFSET;
eaddrs = (char *)(sc->arpcom.ac_enaddr); eaddrs = (char *)(sc->arpcom.ac_enaddr);
/* Fill the buffer with our physical address. */ /* Fill the buffer with our physical address. */
for (i = 1; i < 16; i++) { for (i = 1; i < 16; i++) {
@@ -494,7 +494,7 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
*setup_frm++ = eaddrs[5]; *setup_frm++ = eaddrs[5];
} }
/* Add the broadcast address when doing perfect filtering */ /* Add the broadcast address when doing perfect filtering */
memset(setup_frm, 0xff, 12); memset((void*) setup_frm, 0xff, 12);
rmd->counts = 0x0a000000 | 192 ; rmd->counts = 0x0a000000 | 192 ;
rmd->status = 0x80000000; rmd->status = 0x80000000;
st_le32( (tbase+memCSR1), 1); st_le32( (tbase+memCSR1), 1);
@@ -525,12 +525,12 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
static void static void
dec21140_rxDaemon (void *arg) dec21140_rxDaemon (void *arg)
{ {
unsigned int *tbase; volatile unsigned int *tbase;
struct ether_header *eh; struct ether_header *eh;
struct dec21140_softc *dp = (struct dec21140_softc *)&dec21140_softc[0]; struct dec21140_softc *dp = (struct dec21140_softc *)&dec21140_softc[0];
struct ifnet *ifp = &dp->arpcom.ac_if; struct ifnet *ifp = &dp->arpcom.ac_if;
struct mbuf *m; struct mbuf *m;
struct MD *rmd; volatile struct MD *rmd;
unsigned int len; unsigned int len;
char *temp; char *temp;
rtems_event_set events; rtems_event_set events;
@@ -555,7 +555,7 @@ dec21140_rxDaemon (void *arg)
m->m_pkthdr.rcvif = ifp; m->m_pkthdr.rcvif = ifp;
temp = m->m_data; temp = m->m_data;
m->m_len = m->m_pkthdr.len = len - sizeof(struct ether_header); m->m_len = m->m_pkthdr.len = len - sizeof(struct ether_header);
memcpy(temp, (char *)((long)(rmd->buf1)-PREP_PCI_DRAM_OFFSET), len); memcpy(temp, (void*) (rmd->buf1-PREP_PCI_DRAM_OFFSET), len);
rmd->status = 0x80000000; rmd->status = 0x80000000;
eh = mtod (m, struct ether_header *); eh = mtod (m, struct ether_header *);
m->m_data += sizeof(struct ether_header); m->m_data += sizeof(struct ether_header);
@@ -573,10 +573,10 @@ sendpacket (struct ifnet *ifp, struct mbuf *m)
{ {
struct dec21140_softc *dp = ifp->if_softc; struct dec21140_softc *dp = ifp->if_softc;
volatile struct MD *tmd; volatile struct MD *tmd;
unsigned char *temp; volatile unsigned char *temp;
struct mbuf *n; struct mbuf *n;
unsigned int len; unsigned int len;
unsigned int *tbase; volatile unsigned int *tbase;
tbase = dp->base; tbase = dp->base;
@@ -587,11 +587,11 @@ sendpacket (struct ifnet *ifp, struct mbuf *m)
while ( (tmd->status & 0x80000000) != 0 ); while ( (tmd->status & 0x80000000) != 0 );
len = 0; len = 0;
n = m; n = m;
temp = (char *)((long)(tmd->buf1)-PREP_PCI_DRAM_OFFSET); temp = tmd->buf1-PREP_PCI_DRAM_OFFSET;
for (;;){ for (;;){
len += m->m_len; len += m->m_len;
memcpy(temp, (char *)m->m_data, m->m_len); memcpy((void*) temp, (char *)m->m_data, m->m_len);
temp += m->m_len ; temp += m->m_len ;
if ((m = m->m_next) == NULL) if ((m = m->m_next) == NULL)
break; break;
@@ -688,7 +688,7 @@ dec21140_init (void *arg)
static void static void
dec21140_stop (struct dec21140_softc *sc) dec21140_stop (struct dec21140_softc *sc)
{ {
unsigned int *tbase; volatile unsigned int *tbase;
struct ifnet *ifp = &sc->arpcom.ac_if; struct ifnet *ifp = &sc->arpcom.ac_if;
ifp->if_flags &= ~IFF_RUNNING; ifp->if_flags &= ~IFF_RUNNING;
@@ -699,7 +699,7 @@ dec21140_stop (struct dec21140_softc *sc)
tbase=dec21140_softc[0].base ; tbase=dec21140_softc[0].base ;
st_le32( (tbase+memCSR7), NO_IT); st_le32( (tbase+memCSR7), NO_IT);
st_le32( (tbase+memCSR6), CSR6_INIT); st_le32( (tbase+memCSR6), CSR6_INIT);
free(sc->bufferBase); free((void*)sc->bufferBase);
} }

View File

@@ -106,7 +106,7 @@
struct MD { struct MD {
volatile unsigned long status; volatile unsigned long status;
volatile unsigned long counts; volatile unsigned long counts;
unsigned long buf1, buf2; volatile unsigned char *buf1, *buf2;
}; };
/* /*
@@ -143,8 +143,8 @@ struct MD {
struct dec21140_softc { struct dec21140_softc {
struct arpcom arpcom; struct arpcom arpcom;
rtems_irq_connect_data irqInfo; rtems_irq_connect_data irqInfo;
struct MD *MDbase; volatile struct MD *MDbase;
char *bufferBase; volatile unsigned char *bufferBase;
int acceptBroadcast; int acceptBroadcast;
int rxBdCount; int rxBdCount;
int txBdCount; int txBdCount;
@@ -152,7 +152,7 @@ struct MD {
rtems_id txDaemonTid; rtems_id txDaemonTid;
unsigned int port; unsigned int port;
unsigned int *base; volatile unsigned int *base;
unsigned long bpar; unsigned long bpar;
/* /*
@@ -186,7 +186,7 @@ static struct dec21140_softc dec21140_softc[NDECDRIVER];
static rtems_isr static rtems_isr
dec21140Enet_interrupt_handler (rtems_vector_number v) dec21140Enet_interrupt_handler (rtems_vector_number v)
{ {
unsigned int *tbase; volatile unsigned int *tbase;
unsigned long status; unsigned long status;
unsigned int sc; unsigned int sc;
@@ -233,7 +233,7 @@ static int dec21140IsOn(const rtems_irq_connect_data* irq)
#define MDIO_ENB_IN 0x40000 #define MDIO_ENB_IN 0x40000
#define MDIO_DATA_READ 0x80000 #define MDIO_DATA_READ 0x80000
static int mdio_read(unsigned int *ioaddr, int phy_id, int location) static int mdio_read(volatile unsigned int *ioaddr, int phy_id, int location)
{ {
int i, i3; int i, i3;
int read_cmd = (0xf6 << 10) | (phy_id << 5) | location; int read_cmd = (0xf6 << 10) | (phy_id << 5) | location;
@@ -277,7 +277,7 @@ static int mdio_read(unsigned int *ioaddr, int phy_id, int location)
return ( ((retval<<8)&0xff00) | ((retval>>8)&0xff) ); return ( ((retval<<8)&0xff00) | ((retval>>8)&0xff) );
} }
static int mdio_write(unsigned int *ioaddr, int phy_id, int location, int value) static int mdio_write(volatile unsigned int *ioaddr, int phy_id, int location, int value)
{ {
int i, i3; int i, i3;
int cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value; int cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
@@ -327,7 +327,7 @@ static int mdio_write(unsigned int *ioaddr, int phy_id, int location, int value)
#define EE_READ_CMD (6 << 6) #define EE_READ_CMD (6 << 6)
#define EE_ERASE_CMD (7 << 6) #define EE_ERASE_CMD (7 << 6)
static int eeget16(unsigned int *ioaddr, int location) static int eeget16(volatile unsigned int *ioaddr, int location)
{ {
int i, i3; int i, i3;
unsigned short retval = 0; unsigned short retval = 0;
@@ -368,13 +368,13 @@ static void
dec21140Enet_initialize_hardware (struct dec21140_softc *sc) dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
{ {
rtems_status_code st; rtems_status_code st;
unsigned int *tbase; volatile unsigned int *tbase;
union {char c[64]; unsigned short s[32];} rombuf; union {char c[64]; unsigned short s[32];} rombuf;
int i, i2, i3; int i, i2, i3;
char *cp, direction, *setup_frm, *eaddrs; volatile unsigned char *cp, direction, *setup_frm, *eaddrs;
unsigned long csr12_val, mii_reg0; unsigned long csr12_val, mii_reg0;
unsigned char *buffer; volatile unsigned char *buffer;
struct MD *rmd; volatile struct MD *rmd;
tbase = sc->base; tbase = sc->base;
@@ -417,10 +417,10 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
* Init RX ring * Init RX ring
*/ */
sc->rxBdCount = 0; sc->rxBdCount = 0;
cp = (char *)malloc((NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE) + PPC_CACHE_ALIGNMENT); cp = (volatile unsigned char *)malloc((NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE) + PPC_CACHE_ALIGNMENT);
sc->bufferBase = cp; sc->bufferBase = cp;
if ((unsigned int)cp & (PPC_CACHE_ALIGNMENT-1)) if ((unsigned int)cp & (PPC_CACHE_ALIGNMENT-1))
cp = ((unsigned int)cp + PPC_CACHE_ALIGNMENT) & ~(PPC_CACHE_ALIGNMENT-1); cp = (volatile unsigned char *) (((unsigned int)cp + PPC_CACHE_ALIGNMENT) & ~(PPC_CACHE_ALIGNMENT-1));
#ifdef PCI_BRIDGE_DOES_NOT_ENSURE_CACHE_COHERENCY_FOR_DMA #ifdef PCI_BRIDGE_DOES_NOT_ENSURE_CACHE_COHERENCY_FOR_DMA
if (_CPU_is_paging_enabled()) if (_CPU_is_paging_enabled())
_CPU_change_memory_mapping_attribute _CPU_change_memory_mapping_attribute
@@ -428,28 +428,28 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
(NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE), (NRXBUFS+NTXBUFS)*(sizeof(struct MD)+ RBUF_SIZE),
PTE_CACHE_DISABLE | PTE_WRITABLE); PTE_CACHE_DISABLE | PTE_WRITABLE);
#endif #endif
rmd = (struct MD*)cp; rmd = (volatile struct MD*)cp;
sc->MDbase = rmd; sc->MDbase = rmd;
buffer = cp + ((NRXBUFS+NTXBUFS)*sizeof(struct MD)); buffer = cp + ((NRXBUFS+NTXBUFS)*sizeof(struct MD));
st_le32( (tbase+memCSR3), (long)((long)(sc->MDbase) + PREP_PCI_DRAM_OFFSET)); st_le32( (tbase+memCSR3), (long)((long)(sc->MDbase) + PREP_PCI_DRAM_OFFSET));
for (i=0 ; i<NRXBUFS; i++){ for (i=0 ; i<NRXBUFS; i++){
rmd->buf2 = 0; rmd->buf2 = (volatile unsigned char *) 0;
rmd->buf1 = (unsigned long)(buffer + (i*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET); rmd->buf1 = (buffer + (i*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET);
if (i == NRXBUFS-1) rmd->counts = 0xfcc00000 | (RBUF_SIZE);
rmd->counts = 0xfec00000 | (RBUF_SIZE);
else
rmd->counts = 0xfcc00000 | (RBUF_SIZE);
rmd->status = 0x80000000; rmd->status = 0x80000000;
rmd++; rmd++;
} }
/*
* mark last RX buffer.
*/
sc->MDbase [NRXBUFS-1].counts = 0xfec00000 | (RBUF_SIZE);
/* /*
* Init TX ring * Init TX ring
*/ */
sc->txBdCount = 0; sc->txBdCount = 0;
st_le32( (tbase+memCSR4), (long)((long)(rmd) + PREP_PCI_DRAM_OFFSET)); st_le32( (tbase+memCSR4), (long)(((long)(rmd)) + PREP_PCI_DRAM_OFFSET));
rmd->buf2 = 0; rmd->buf2 = (volatile unsigned char *) 0;
rmd->buf1 = (unsigned long)(buffer + (NRXBUFS*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET); rmd->buf1 = buffer + (NRXBUFS*RBUF_SIZE) + PREP_PCI_DRAM_OFFSET;
rmd->counts = 0x62000000; rmd->counts = 0x62000000;
rmd->status = 0x0; rmd->status = 0x0;
@@ -476,7 +476,7 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
/* /*
* Build setup frame * Build setup frame
*/ */
setup_frm = (char *)((long)(rmd->buf1) - PREP_PCI_DRAM_OFFSET); setup_frm = rmd->buf1 - PREP_PCI_DRAM_OFFSET;
eaddrs = (char *)(sc->arpcom.ac_enaddr); eaddrs = (char *)(sc->arpcom.ac_enaddr);
/* Fill the buffer with our physical address. */ /* Fill the buffer with our physical address. */
for (i = 1; i < 16; i++) { for (i = 1; i < 16; i++) {
@@ -494,7 +494,7 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
*setup_frm++ = eaddrs[5]; *setup_frm++ = eaddrs[5];
} }
/* Add the broadcast address when doing perfect filtering */ /* Add the broadcast address when doing perfect filtering */
memset(setup_frm, 0xff, 12); memset((void*) setup_frm, 0xff, 12);
rmd->counts = 0x0a000000 | 192 ; rmd->counts = 0x0a000000 | 192 ;
rmd->status = 0x80000000; rmd->status = 0x80000000;
st_le32( (tbase+memCSR1), 1); st_le32( (tbase+memCSR1), 1);
@@ -525,12 +525,12 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc)
static void static void
dec21140_rxDaemon (void *arg) dec21140_rxDaemon (void *arg)
{ {
unsigned int *tbase; volatile unsigned int *tbase;
struct ether_header *eh; struct ether_header *eh;
struct dec21140_softc *dp = (struct dec21140_softc *)&dec21140_softc[0]; struct dec21140_softc *dp = (struct dec21140_softc *)&dec21140_softc[0];
struct ifnet *ifp = &dp->arpcom.ac_if; struct ifnet *ifp = &dp->arpcom.ac_if;
struct mbuf *m; struct mbuf *m;
struct MD *rmd; volatile struct MD *rmd;
unsigned int len; unsigned int len;
char *temp; char *temp;
rtems_event_set events; rtems_event_set events;
@@ -555,7 +555,7 @@ dec21140_rxDaemon (void *arg)
m->m_pkthdr.rcvif = ifp; m->m_pkthdr.rcvif = ifp;
temp = m->m_data; temp = m->m_data;
m->m_len = m->m_pkthdr.len = len - sizeof(struct ether_header); m->m_len = m->m_pkthdr.len = len - sizeof(struct ether_header);
memcpy(temp, (char *)((long)(rmd->buf1)-PREP_PCI_DRAM_OFFSET), len); memcpy(temp, (void*) (rmd->buf1-PREP_PCI_DRAM_OFFSET), len);
rmd->status = 0x80000000; rmd->status = 0x80000000;
eh = mtod (m, struct ether_header *); eh = mtod (m, struct ether_header *);
m->m_data += sizeof(struct ether_header); m->m_data += sizeof(struct ether_header);
@@ -573,10 +573,10 @@ sendpacket (struct ifnet *ifp, struct mbuf *m)
{ {
struct dec21140_softc *dp = ifp->if_softc; struct dec21140_softc *dp = ifp->if_softc;
volatile struct MD *tmd; volatile struct MD *tmd;
unsigned char *temp; volatile unsigned char *temp;
struct mbuf *n; struct mbuf *n;
unsigned int len; unsigned int len;
unsigned int *tbase; volatile unsigned int *tbase;
tbase = dp->base; tbase = dp->base;
@@ -587,11 +587,11 @@ sendpacket (struct ifnet *ifp, struct mbuf *m)
while ( (tmd->status & 0x80000000) != 0 ); while ( (tmd->status & 0x80000000) != 0 );
len = 0; len = 0;
n = m; n = m;
temp = (char *)((long)(tmd->buf1)-PREP_PCI_DRAM_OFFSET); temp = tmd->buf1-PREP_PCI_DRAM_OFFSET;
for (;;){ for (;;){
len += m->m_len; len += m->m_len;
memcpy(temp, (char *)m->m_data, m->m_len); memcpy((void*) temp, (char *)m->m_data, m->m_len);
temp += m->m_len ; temp += m->m_len ;
if ((m = m->m_next) == NULL) if ((m = m->m_next) == NULL)
break; break;
@@ -688,7 +688,7 @@ dec21140_init (void *arg)
static void static void
dec21140_stop (struct dec21140_softc *sc) dec21140_stop (struct dec21140_softc *sc)
{ {
unsigned int *tbase; volatile unsigned int *tbase;
struct ifnet *ifp = &sc->arpcom.ac_if; struct ifnet *ifp = &sc->arpcom.ac_if;
ifp->if_flags &= ~IFF_RUNNING; ifp->if_flags &= ~IFF_RUNNING;
@@ -699,7 +699,7 @@ dec21140_stop (struct dec21140_softc *sc)
tbase=dec21140_softc[0].base ; tbase=dec21140_softc[0].base ;
st_le32( (tbase+memCSR7), NO_IT); st_le32( (tbase+memCSR7), NO_IT);
st_le32( (tbase+memCSR6), CSR6_INIT); st_le32( (tbase+memCSR6), CSR6_INIT);
free(sc->bufferBase); free((void*)sc->bufferBase);
} }

View File

@@ -85,7 +85,7 @@ endef
# As far as I know, small data are pointer impose a very specific compliation # As far as I know, small data are pointer impose a very specific compliation
# model => not used. # model => not used.
# Currently the sdata2 and sbss2 sections are empty => r2 is not used... # Currently the sdata2 and sbss2 sections are empty => r2 is not used...
CFLAGS_OPTIMIZE_V=-O2 -fno-keep-inline-functions -fvolatile-global -fvolatile -mstrict-align -mcpu=750 CFLAGS_OPTIMIZE_V=-O4 -mmultiple -mstring -mstrict-align -mcpu=750
#CFLAGS_OPTIMIZE_V=-O4 -fno-keep-inline-functions -fvolatile-global -fvolatile -mstrict-align -mcpu=750 #CFLAGS_OPTIMIZE_V=-O4 -fno-keep-inline-functions -fvolatile-global -fvolatile -mstrict-align -mcpu=750
# The following is a ld command file which works without using the # The following is a ld command file which works without using the