Duplicate Manuel's EMAC driver fix to every other driver that supports CONFIG_NET_NOINTS
This commit is contained in:
parent
8fa9b99e7c
commit
42c365aab1
2
arch
2
arch
@ -1 +1 @@
|
||||
Subproject commit 403b4e70ebbca5c938ed0bd4531a0972ec736c7e
|
||||
Subproject commit be6af64502d5520799fcba3ed20b6fff13f88ca0
|
@ -1018,11 +1018,6 @@ static irqreturn_t e1000_interrupt_handler(int irq, void *dev_id)
|
||||
wd_cancel(e1000->txtimeout);
|
||||
}
|
||||
|
||||
/* Check is a packet transmission just completed. If so, call skel_txdone.
|
||||
* This may disable further Tx interrupts if there are no pending
|
||||
* tansmissions.
|
||||
*/
|
||||
|
||||
/* Tx-descriptor Written back */
|
||||
|
||||
if (intr_cause & (1 << 0))
|
||||
@ -1030,7 +1025,6 @@ static irqreturn_t e1000_interrupt_handler(int irq, void *dev_id)
|
||||
devif_poll(&e1000->netdev, e1000_txpoll);
|
||||
}
|
||||
|
||||
|
||||
/* Rx-Descriptors Low */
|
||||
|
||||
if (intr_cause & (1 << 4))
|
||||
|
@ -1288,6 +1288,14 @@ static void enc_txif(FAR struct enc_driver_s *priv)
|
||||
|
||||
wd_cancel(priv->txtimeout);
|
||||
|
||||
/* Then make sure that the TX poll timer is running (if it is already
|
||||
* running, the following would restart it). This is necessary to
|
||||
* avoid certain race conditions where the polling sequence can be
|
||||
* interrupted.
|
||||
*/
|
||||
|
||||
(void)wd_start(priv->txpoll, ENC_WDDELAY, enc_polltimer, 1, arg);
|
||||
|
||||
/* Poll for TX packets from the networking layer */
|
||||
|
||||
devif_poll(&priv->dev, enc_txpoll);
|
||||
|
@ -838,8 +838,17 @@ static void ftmac100_txdone(FAR struct ftmac100_driver_s *priv)
|
||||
|
||||
nvdbg("txpending=%d\n", priv->tx_pending);
|
||||
|
||||
/* Cancel the TX timeout */
|
||||
|
||||
wd_cancel(priv->ft_txtimeout);
|
||||
|
||||
/* Then make sure that the TX poll timer is running (if it is already
|
||||
* running, the following would restart it). This is necessary to avoid
|
||||
* certain race conditions where the polling sequence can be interrupted.
|
||||
*/
|
||||
|
||||
(void)wd_start(priv->ft_txpoll, FTMAC100_WDDELAY, ftmac100_poll_expiry, 1, priv);
|
||||
|
||||
/* Then poll uIP for new XMIT data */
|
||||
|
||||
(void)devif_poll(&priv->ft_dev, ftmac100_txpoll);
|
||||
|
@ -458,13 +458,26 @@ static void skel_txdone(FAR struct skel_driver_s *priv)
|
||||
|
||||
NETDEV_TXDONE(priv->sk_dev);
|
||||
|
||||
/* If no further xmits are pending, then cancel the TX timeout and
|
||||
/* Check if there are pending transmissions */
|
||||
|
||||
/* If no further transmissions are pending, then cancel the TX timeout and
|
||||
* disable further Tx interrupts.
|
||||
*/
|
||||
|
||||
wd_cancel(priv->sk_txtimeout);
|
||||
|
||||
/* Then poll the network for new XMIT data */
|
||||
/* Then make sure that the TX poll timer is running (if it is already
|
||||
* running, the following would restart it). This is necessary to
|
||||
* avoid certain race conditions where the polling sequence can be
|
||||
* interrupted.
|
||||
*/
|
||||
|
||||
(void)wd_start(priv->sk_txpoll, skeleton_WDDELAY, skel_poll_expiry, 1,
|
||||
(wdparm_t)priv);
|
||||
|
||||
/* And disable further TX interrupts. */
|
||||
|
||||
/* In any event, poll the network for new TX data */
|
||||
|
||||
(void)devif_poll(&priv->sk_dev, skel_txpoll);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user