summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Habets2018-01-10 16:32:34 +0100
committerMichael Brown2018-01-14 22:53:29 +0100
commit70189a8e4702016f654310e68d9ec4ec425e7344 (patch)
tree8ba48417819ba63dfbd9794f65a0347b583ab9d3 /src
parent[tg3] Add support for SerDes PHY initialization (diff)
downloadipxe-70189a8e4702016f654310e68d9ec4ec425e7344.tar.gz
ipxe-70189a8e4702016f654310e68d9ec4ec425e7344.tar.xz
ipxe-70189a8e4702016f654310e68d9ec4ec425e7344.zip
[netdevice] Make netdev_irq_enabled() independent of netdev_irq_supported()
The UNDI layer uses the NETDEV_IRQ_ENABLED flag to choose whether to return PXENV_UNDI_ISR_OUT_OURS or PXENV_UNDI_ISR_OUT_NOT_OURS for a given interrupt. For a network device that does not support interrupts, the flag will never be set and so pxenv_undi_isr() will always return PXENV_UNDI_ISR_OUT_NOT_OURS. This causes some NBPs (such as lpxelinux.0) to hang. Redefine NETDEV_IRQ_ENABLED as a simple administrative flag which can be set even on network devices that do not support interrupts. This allows pxenv_undi_isr() (which is the sole user of NETDEV_IRQ_ENABLED) to function as expected by lpxelinux.0. Signed-off-by: Martin Habets <mhabets@solarflare.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src')
-rw-r--r--src/net/netdevice.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 4c211d70..71a37ecc 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -874,12 +874,9 @@ void unregister_netdev ( struct net_device *netdev ) {
*/
void netdev_irq ( struct net_device *netdev, int enable ) {
- /* Do nothing if device does not support interrupts */
- if ( ! netdev_irq_supported ( netdev ) )
- return;
-
- /* Enable or disable device interrupts */
- netdev->op->irq ( netdev, enable );
+ /* Enable or disable device interrupts, if applicable */
+ if ( netdev_irq_supported ( netdev ) )
+ netdev->op->irq ( netdev, enable );
/* Record interrupt enabled state */
netdev->state &= ~NETDEV_IRQ_ENABLED;