diff options
Diffstat (limited to 'drivers/ne2000.c')
-rw-r--r-- | drivers/ne2000.c | 38 |
1 files changed, 11 insertions, 27 deletions
diff --git a/drivers/ne2000.c b/drivers/ne2000.c index b7ed876..695a1dc 100644 --- a/drivers/ne2000.c +++ b/drivers/ne2000.c @@ -745,17 +745,15 @@ static void pcnet_reset_8390(void) PRINTK("nic base is %lx\n", nic_base); -#if 1 n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD); PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD)); n2k_outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, E8390_CMD); PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD)); n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD); PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD)); -#endif n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD); - n2k_outb(n2k_inb(nic_base + PCNET_RESET), PCNET_RESET); + n2k_outb(n2k_inb(PCNET_RESET), PCNET_RESET); for (i = 0; i < 100; i++) { if ((r = (n2k_inb(EN0_ISR) & ENISR_RESET)) != 0) @@ -833,6 +831,7 @@ static int plen[NB]; static int nrx = 0; static int pkey = -1; +static int initialized=0; void uboot_push_packet_len(int len) { PRINTK("pushed len = %d, nrx = %d\n", len, nrx); @@ -846,7 +845,9 @@ void uboot_push_packet_len(int len) { } plen[nrx] = len; dp83902a_recv(&pbuf[nrx*2000], len); - nrx++; + + /*Just pass it to the upper layer*/ + NetReceive(&pbuf[nrx*2000], plen[nrx]); } void uboot_push_tx_done(int key, int val) { @@ -903,37 +904,21 @@ int eth_init(bd_t *bd) { if (dp83902a_init() == false) return -1; dp83902a_start(dev_addr); + initialized=1; return 0; } void eth_halt() { PRINTK("### eth_halt\n"); - - dp83902a_stop(); + if(initialized) + dp83902a_stop(); + initialized=0; } int eth_rx() { - int j, tmo; - - PRINTK("### eth_rx\n"); - - tmo = get_timer (0) + TOUT * CFG_HZ; - while(1) { - dp83902a_poll(); - if (nrx > 0) { - for(j=0; j<nrx; j++) { - NetReceive(&pbuf[j*2000], plen[j]); - } - nrx = 0; - return 1; - } - if (get_timer (0) >= tmo) { - printf("timeout during rx\n"); - return 0; - } - } - return 0; +dp83902a_poll(); +return 1; } int eth_send(volatile void *packet, int length) { @@ -959,5 +944,4 @@ int eth_send(volatile void *packet, int length) { } return 0; } - #endif |