Line 132... |
Line 132... |
void *eth_get_tx_buf ()
|
void *eth_get_tx_buf ()
|
{
|
{
|
eth_bd *bd;
|
eth_bd *bd;
|
unsigned long add;
|
unsigned long add;
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
if(tx_full)
|
if(tx_full)
|
return (void *)0;
|
return (void *)0;
|
|
|
bd = (eth_bd *)ETH_BD_BASE;
|
bd = (eth_bd *)ETH_BD_BASE;
|
|
|
Line 155... |
Line 156... |
/* Send a packet at address */
|
/* Send a packet at address */
|
void eth_send (void *buf, unsigned long len)
|
void eth_send (void *buf, unsigned long len)
|
{
|
{
|
eth_bd *bd;
|
eth_bd *bd;
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
bd = (eth_bd *)ETH_BD_BASE;
|
bd = (eth_bd *)ETH_BD_BASE;
|
|
|
bd[tx_last].addr = (unsigned long)buf;
|
bd[tx_last].addr = (unsigned long)buf;
|
|
|
bd[tx_last].status &= ~ETH_TX_BD_STATS;
|
bd[tx_last].status &= ~ETH_TX_BD_STATS;
|
Line 174... |
Line 176... |
eth_bd *bd;
|
eth_bd *bd;
|
unsigned long len = 0;
|
unsigned long len = 0;
|
|
|
bd = (eth_bd *)ETH_BD_BASE + ETH_TXBD_NUM;
|
bd = (eth_bd *)ETH_BD_BASE + ETH_TXBD_NUM;
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
while(1) {
|
while(1) {
|
|
|
int bad = 0;
|
int bad = 0;
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
if(bd[rx_next].status & ETH_RX_BD_EMPTY)
|
if(bd[rx_next].status & ETH_RX_BD_EMPTY)
|
return len;
|
return len;
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
if(bd[rx_next].status & ETH_RX_BD_OVERRUN) {
|
if(bd[rx_next].status & ETH_RX_BD_OVERRUN) {
|
printf("eth rx: ETH_RX_BD_OVERRUN\n");
|
printf("eth rx: ETH_RX_BD_OVERRUN\n");
|
bad = 1;
|
bad = 1;
|
}
|
}
|
if(bd[rx_next].status & ETH_RX_BD_INVSIMB) {
|
if(bd[rx_next].status & ETH_RX_BD_INVSIMB) {
|
Line 210... |
Line 215... |
if(bd[rx_next].status & ETH_RX_BD_LATECOL) {
|
if(bd[rx_next].status & ETH_RX_BD_LATECOL) {
|
printf("eth rx: ETH_RX_BD_LATECOL\n");
|
printf("eth rx: ETH_RX_BD_LATECOL\n");
|
bad = 1;
|
bad = 1;
|
}
|
}
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
if(!bad) {
|
if(!bad) {
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
receive((void *)bd[rx_next].addr, bd[rx_next].len);
|
receive((void *)bd[rx_next].addr, bd[rx_next].len);
|
len += bd[rx_next].len;
|
len += bd[rx_next].len;
|
}
|
}
|
|
|
|
printf("%s - %s: %d\n", __FILE__, __FUNCTION__, __LINE__);
|
bd[rx_next].status &= ~ETH_RX_BD_STATS;
|
bd[rx_next].status &= ~ETH_RX_BD_STATS;
|
bd[rx_next].status |= ETH_RX_BD_EMPTY;
|
bd[rx_next].status |= ETH_RX_BD_EMPTY;
|
|
|
rx_next = (rx_next + 1) & ETH_RXBD_NUM_MASK;
|
rx_next = (rx_next + 1) & ETH_RXBD_NUM_MASK;
|
}
|
}
|