forked from Imagelibrary/rtems
Works great now.
This commit is contained in:
@@ -139,7 +139,7 @@ void break_when_you_get_here();
|
|||||||
* No reject on CAM match
|
* No reject on CAM match
|
||||||
*/
|
*/
|
||||||
#define SONIC_DCR \
|
#define SONIC_DCR \
|
||||||
(DCR_DW32 | DCR_WAIT0 | DCR_PO0 | DCR_PO1 | DCR_RFT4 | DCR_TFT8)
|
(DCR_DW32 | DCR_WAIT0 | DCR_PO0 | DCR_PO1 | DCR_RFT24 | DCR_TFT28)
|
||||||
#ifndef SONIC_DCR
|
#ifndef SONIC_DCR
|
||||||
# define SONIC_DCR (DCR_DW32 | DCR_TFT28)
|
# define SONIC_DCR (DCR_DW32 | DCR_TFT28)
|
||||||
#endif
|
#endif
|
||||||
@@ -151,7 +151,7 @@ void break_when_you_get_here();
|
|||||||
* Default sizes of transmit and receive descriptor areas
|
* Default sizes of transmit and receive descriptor areas
|
||||||
*/
|
*/
|
||||||
#define RDA_COUNT 20 /* 20 */
|
#define RDA_COUNT 20 /* 20 */
|
||||||
#define TDA_COUNT 10 /* 10 */
|
#define TDA_COUNT 20 /* 10 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
@@ -511,7 +511,12 @@ SONIC_STATIC void sonic_retire_tda (struct sonic_softc *sc)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (SONIC_DEBUG & SONIC_DEBUG_ERRORS)
|
#if (SONIC_DEBUG & SONIC_DEBUG_ERRORS)
|
||||||
if ( status != 0x0001 )
|
/*
|
||||||
|
* If there is an error that was not a collision,
|
||||||
|
* then someone may want to see it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ( (status & ~(TDA_STATUS_COLLISION_MASK|TDA_STATUS_DEF)) != 0x0001 )
|
||||||
printf( "ERROR: retire TDA %p (0x%08x)\n",
|
printf( "ERROR: retire TDA %p (0x%08x)\n",
|
||||||
sc->tdaTail, sc->tdaTail->status );
|
sc->tdaTail, sc->tdaTail->status );
|
||||||
#endif
|
#endif
|
||||||
@@ -528,6 +533,10 @@ SONIC_STATIC void sonic_retire_tda (struct sonic_softc *sc)
|
|||||||
* packets waiting to go.
|
* packets waiting to go.
|
||||||
*/
|
*/
|
||||||
rtems_unsigned16 link;
|
rtems_unsigned16 link;
|
||||||
|
#if (SONIC_DEBUG & SONIC_DEBUG_ERRORS)
|
||||||
|
printf("restarting sonic after error\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
link = *(sc->tdaTail->linkp);
|
link = *(sc->tdaTail->linkp);
|
||||||
|
|
||||||
if ((link & TDA_LINK_EOL) == 0) {
|
if ((link & TDA_LINK_EOL) == 0) {
|
||||||
@@ -599,6 +608,7 @@ SONIC_STATIC void sonic_sendpacket (struct ifnet *ifp, struct mbuf *m)
|
|||||||
int i;
|
int i;
|
||||||
static char padBuf[64];
|
static char padBuf[64];
|
||||||
|
|
||||||
|
/* printf( "sonic_sendpacket %p\n", m ); */
|
||||||
/*
|
/*
|
||||||
* Free up transmit descriptors.
|
* Free up transmit descriptors.
|
||||||
*/
|
*/
|
||||||
@@ -608,9 +618,10 @@ SONIC_STATIC void sonic_sendpacket (struct ifnet *ifp, struct mbuf *m)
|
|||||||
* Wait for transmit descriptor to become available.
|
* Wait for transmit descriptor to become available.
|
||||||
*/
|
*/
|
||||||
if (sc->tdaActiveCount == sc->tdaCount) {
|
if (sc->tdaActiveCount == sc->tdaCount) {
|
||||||
#if (SONIC_DEBUG & SONIC_DEBUG_FRAGMENTS)
|
#if (SONIC_DEBUG & SONIC_DEBUG_ERRORS)
|
||||||
puts( "Wait for more TDAs" );
|
puts( "Wait for more TDAs" );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear old events.
|
* Clear old events.
|
||||||
*/
|
*/
|
||||||
@@ -627,6 +638,10 @@ SONIC_STATIC void sonic_sendpacket (struct ifnet *ifp, struct mbuf *m)
|
|||||||
sonic_retire_tda (sc);
|
sonic_retire_tda (sc);
|
||||||
while (sc->tdaActiveCount == sc->tdaCount) {
|
while (sc->tdaActiveCount == sc->tdaCount) {
|
||||||
rtems_event_set events;
|
rtems_event_set events;
|
||||||
|
|
||||||
|
#if (SONIC_DEBUG & SONIC_DEBUG_ERRORS)
|
||||||
|
printf("blocking until TDAs are available\n");
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* Enable transmitter interrupts.
|
* Enable transmitter interrupts.
|
||||||
*/
|
*/
|
||||||
@@ -726,8 +741,8 @@ SONIC_STATIC void sonic_sendpacket (struct ifnet *ifp, struct mbuf *m)
|
|||||||
sc->tdaActiveCount++;
|
sc->tdaActiveCount++;
|
||||||
sc->tdaHead = tdp;
|
sc->tdaHead = tdp;
|
||||||
|
|
||||||
/* XXX */
|
/* XXX not in KA9Q */
|
||||||
/* sonic_enable_interrupts( rp, (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) ); */
|
sonic_enable_interrupts( rp, (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) );
|
||||||
sonic_write_register( rp, SONIC_REG_CR, CR_TXP );
|
sonic_write_register( rp, SONIC_REG_CR, CR_TXP );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -984,6 +999,7 @@ SONIC_STATIC void sonic_rxDaemon (void *arg)
|
|||||||
Dump_Buffer( (void *) m, 96 /* m->m_len*/ );
|
Dump_Buffer( (void *) m, 96 /* m->m_len*/ );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* printf( "ether_input %p\n", m ); */
|
||||||
ether_input (ifp, eh, m);
|
ether_input (ifp, eh, m);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1124,9 +1140,9 @@ SONIC_STATIC void sonic_initialize_hardware(struct sonic_softc *sc)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* XXX not used by the BSD drivers
|
/* XXX not used by the BSD drivers
|
||||||
|
*/
|
||||||
if (i & 1)
|
if (i & 1)
|
||||||
tdp->pkt_config = TDA_CONFIG_PINT;
|
tdp->pkt_config = TDA_CONFIG_PINT;
|
||||||
*/
|
|
||||||
|
|
||||||
tdp->frag_count = 0;
|
tdp->frag_count = 0;
|
||||||
tdp->frag[0].frag_link = LSW(tdp + 1);
|
tdp->frag[0].frag_link = LSW(tdp + 1);
|
||||||
@@ -1446,7 +1462,8 @@ SONIC_STATIC void sonic_init (void *arg)
|
|||||||
* Enable receiver and transmitter
|
* Enable receiver and transmitter
|
||||||
*/
|
*/
|
||||||
/* sonic_write_register( rp, SONIC_REG_IMR, 0 ); */
|
/* sonic_write_register( rp, SONIC_REG_IMR, 0 ); */
|
||||||
sonic_enable_interrupts( rp, (IMR_PRXEN | IMR_RBAEEN) );
|
sonic_enable_interrupts( rp,
|
||||||
|
(IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) | (IMR_PRXEN | IMR_RBAEEN) );
|
||||||
|
|
||||||
sonic_write_register(rp, SONIC_REG_CR, /* CR_TXP | */ CR_RXEN);
|
sonic_write_register(rp, SONIC_REG_CR, /* CR_TXP | */ CR_RXEN);
|
||||||
}
|
}
|
||||||
@@ -1656,7 +1673,7 @@ char SONIC_Reg_name[64][6]= {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline void sonic_write_register(
|
void sonic_write_register(
|
||||||
void *base,
|
void *base,
|
||||||
unsigned32 regno,
|
unsigned32 regno,
|
||||||
unsigned32 value
|
unsigned32 value
|
||||||
@@ -1672,7 +1689,7 @@ inline void sonic_write_register(
|
|||||||
p[regno] = value;
|
p[regno] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned32 sonic_read_register(
|
unsigned32 sonic_read_register(
|
||||||
void *base,
|
void *base,
|
||||||
unsigned32 regno
|
unsigned32 regno
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user