[sis900] Enable interrupts to allow UNDI to work
authorThomas Miletich <thomas.miletich@gmail.com>
Tue, 8 Sep 2009 17:35:55 +0000 (19:35 +0200)
committerMarty Connor <mdc@etherboot.org>
Thu, 15 Oct 2009 19:32:51 +0000 (15:32 -0400)
Enable interrupts in sis900_irq(). Doing so allows some programs using
gPXE's UNDI interface to work properly, including Symantec Ghost.

Tested-by: Hubert Mercier <hubert.mercier@unilim.fr>
Signed-off-by: Marty Connor <mdc@etherboot.org>
src/drivers/net/sis900.c

index 177cd65..da14a09 100644 (file)
@@ -1183,8 +1183,12 @@ static int
 sis900_poll(struct nic *nic, int retrieve)
 {
     u32 rx_status = rxd[cur_rx].cmdsts;
 sis900_poll(struct nic *nic, int retrieve)
 {
     u32 rx_status = rxd[cur_rx].cmdsts;
+    u32 intr_status;
     int retstat = 0;
 
     int retstat = 0;
 
+     /* acknowledge interrupts by reading interrupt status register */
+    intr_status = inl(ioaddr + isr);
+
     if (sis900_debug > 2)
         printf("sis900_poll: cur_rx:%d, status:%X\n", cur_rx, 
               (unsigned int) rx_status);
     if (sis900_debug > 2)
         printf("sis900_poll: cur_rx:%d, status:%X\n", cur_rx, 
               (unsigned int) rx_status);
@@ -1264,8 +1268,10 @@ sis900_irq(struct nic *nic __unused, irq_action_t action __unused)
 {
   switch ( action ) {
   case DISABLE :
 {
   switch ( action ) {
   case DISABLE :
+    outl(0, ioaddr + imr);
     break;
   case ENABLE :
     break;
   case ENABLE :
+    outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
     break;
   case FORCE :
     break;
     break;
   case FORCE :
     break;