Browse Source

interrupt in natsemi

tags/v0.9.3
Udayan Kumar 18 years ago
parent
commit
5e91a38269
1 changed files with 15 additions and 3 deletions
  1. 15
    3
      src/drivers/net/natsemi.c

+ 15
- 3
src/drivers/net/natsemi.c View File

445
 		free_iob( nat->iobuf[i] );
445
 		free_iob( nat->iobuf[i] );
446
 	}
446
 	}
447
 	/* disable interrupts */
447
 	/* disable interrupts */
448
-	outl(0,nat->ioaddr +IntrEnable);
448
+	outl(0,nat->ioaddr + IntrMask) ;
449
 }
449
 }
450
 
450
 
451
 /** 
451
 /** 
498
 	struct natsemi_nic *nat = netdev->priv;
498
 	struct natsemi_nic *nat = netdev->priv;
499
 	unsigned int status;
499
 	unsigned int status;
500
 	unsigned int rx_status;
500
 	unsigned int rx_status;
501
+	unsigned int intr_status;
501
 	unsigned int rx_len;
502
 	unsigned int rx_len;
502
 	struct io_buffer *rx_iob;
503
 	struct io_buffer *rx_iob;
503
 	int i;
504
 	int i;
504
 	
505
 	
506
+	outl(1,nat->ioaddr +IntrEnable);
507
+	/* read the interrupt register */
508
+	intr_status=inl(nat->ioaddr+IntrStatus);
509
+	if(!intr_status)
510
+	goto end;
511
+
505
 	/* check the status of packets given to card for transmission */	
512
 	/* check the status of packets given to card for transmission */	
513
+	DBG("Intr status %X\n",intr_status);
514
+
515
+
506
 	i=nat->tx_dirty;
516
 	i=nat->tx_dirty;
507
 	while(i!=nat->tx_cur)
517
 	while(i!=nat->tx_cur)
508
 	{
518
 	{
551
 			rx_iob = alloc_iob(rx_len);
561
 			rx_iob = alloc_iob(rx_len);
552
 			if(!rx_iob) 
562
 			if(!rx_iob) 
553
 				/* leave packet for next call to poll*/
563
 				/* leave packet for next call to poll*/
554
-				return;
564
+				goto end;
555
 			memcpy(iob_put(rx_iob,rx_len),
565
 			memcpy(iob_put(rx_iob,rx_len),
556
 					bus_to_virt(nat->rx[nat->rx_cur].bufptr),rx_len);
566
 					bus_to_virt(nat->rx[nat->rx_cur].bufptr),rx_len);
557
 
567
 
565
 		rx_status=(unsigned int)nat->rx[nat->rx_cur].cmdsts; 
575
 		rx_status=(unsigned int)nat->rx[nat->rx_cur].cmdsts; 
566
 	}
576
 	}
567
 
577
 
578
+end:
568
 
579
 
569
 	 /* re-enable the potentially idle receive state machine */
580
 	 /* re-enable the potentially idle receive state machine */
570
-	    outl(RxOn, nat->ioaddr + ChipCmd);	
581
+	outl(RxOn, nat->ioaddr + ChipCmd);	
582
+	outl(1,nat->ioaddr +IntrEnable);
571
 }				
583
 }				
572
 
584
 
573
 
585
 

Loading…
Cancel
Save