|
|
@@ -1057,7 +1057,7 @@ sis900_open(struct net_device *net_dev)
|
|
|
sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
|
|
|
|
|
|
/* Enable all known interrupts by setting the interrupt mask. */
|
|
|
- sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE);
|
|
|
+ sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
|
|
|
sw32(cr, RxENA | sr32(cr));
|
|
|
sw32(ier, IE);
|
|
|
|
|
|
@@ -1578,7 +1578,7 @@ static void sis900_tx_timeout(struct net_device *net_dev)
|
|
|
sw32(txdp, sis_priv->tx_ring_dma);
|
|
|
|
|
|
/* Enable all known interrupts by setting the interrupt mask. */
|
|
|
- sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE);
|
|
|
+ sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1618,7 +1618,7 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
|
|
|
spin_unlock_irqrestore(&sis_priv->lock, flags);
|
|
|
return NETDEV_TX_OK;
|
|
|
}
|
|
|
- sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len);
|
|
|
+ sis_priv->tx_ring[entry].cmdsts = (OWN | INTR | skb->len);
|
|
|
sw32(cr, TxENA | sr32(cr));
|
|
|
|
|
|
sis_priv->cur_tx ++;
|
|
|
@@ -1674,7 +1674,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
|
|
|
do {
|
|
|
status = sr32(isr);
|
|
|
|
|
|
- if ((status & (HIBERR|TxURN|TxERR|TxIDLE|RxORN|RxERR|RxOK)) == 0)
|
|
|
+ if ((status & (HIBERR|TxURN|TxERR|TxIDLE|TxDESC|RxORN|RxERR|RxOK)) == 0)
|
|
|
/* nothing intresting happened */
|
|
|
break;
|
|
|
handled = 1;
|
|
|
@@ -1684,7 +1684,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
|
|
|
/* Rx interrupt */
|
|
|
sis900_rx(net_dev);
|
|
|
|
|
|
- if (status & (TxURN | TxERR | TxIDLE))
|
|
|
+ if (status & (TxURN | TxERR | TxIDLE | TxDESC))
|
|
|
/* Tx interrupt */
|
|
|
sis900_finish_xmit(net_dev);
|
|
|
|
|
|
@@ -1896,8 +1896,8 @@ static void sis900_finish_xmit (struct net_device *net_dev)
|
|
|
|
|
|
if (tx_status & OWN) {
|
|
|
/* The packet is not transmitted yet (owned by hardware) !
|
|
|
- * Note: the interrupt is generated only when Tx Machine
|
|
|
- * is idle, so this is an almost impossible case */
|
|
|
+ * Note: this is an almost impossible condition
|
|
|
+ * in case of TxDESC ('descriptor interrupt') */
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -2473,7 +2473,7 @@ static int sis900_resume(struct pci_dev *pci_dev)
|
|
|
sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
|
|
|
|
|
|
/* Enable all known interrupts by setting the interrupt mask. */
|
|
|
- sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE);
|
|
|
+ sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
|
|
|
sw32(cr, RxENA | sr32(cr));
|
|
|
sw32(ier, IE);
|
|
|
|