summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/legacy.c
diff options
context:
space:
mode:
authorMichael Brown2006-06-08 17:18:27 +0200
committerMichael Brown2006-06-08 17:18:27 +0200
commit1697c78848c4811aef8b394262c64d6eae335911 (patch)
tree312168c572540aefc101be41c326f992f842f348 /src/drivers/net/legacy.c
parentIt's astonishing how long really fundamental bugs can survive without (diff)
downloadipxe-1697c78848c4811aef8b394262c64d6eae335911.tar.gz
ipxe-1697c78848c4811aef8b394262c64d6eae335911.tar.xz
ipxe-1697c78848c4811aef8b394262c64d6eae335911.zip
Legacy drivers cannot cope with multiple active devices.
Diffstat (limited to 'src/drivers/net/legacy.c')
-rw-r--r--src/drivers/net/legacy.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/drivers/net/legacy.c b/src/drivers/net/legacy.c
index 96b3bcbc..a2533b76 100644
--- a/src/drivers/net/legacy.c
+++ b/src/drivers/net/legacy.c
@@ -18,6 +18,8 @@
struct nic nic;
+static int legacy_registered = 0;
+
static int legacy_transmit ( struct net_device *netdev, struct pk_buff *pkb ) {
struct nic *nic = netdev->priv;
struct ethhdr *ethhdr = pkb->data;
@@ -58,6 +60,9 @@ int legacy_probe ( struct pci_device *pci,
void ( * disable ) ( struct nic *nic ) ) {
struct net_device *netdev;
int rc;
+
+ if ( legacy_registered )
+ return -EBUSY;
netdev = alloc_etherdev ( 0 );
if ( ! netdev )
@@ -84,6 +89,7 @@ int legacy_probe ( struct pci_device *pci,
/* Do not remove this message */
printf ( "WARNING: Using legacy NIC wrapper\n" );
+ legacy_registered = 1;
return 0;
}
@@ -95,6 +101,7 @@ void legacy_remove ( struct pci_device *pci,
unregister_netdev ( netdev );
disable ( nic );
free_netdev ( netdev );
+ legacy_registered = 0;
}
void pci_fill_nic ( struct nic *nic, struct pci_device *pci ) {