summaryrefslogtreecommitdiffstats
path: root/src/drivers/net
diff options
context:
space:
mode:
authorMichael Brown2010-09-05 03:03:31 +0200
committerMichael Brown2010-09-05 03:51:46 +0200
commit97ef28aea070f6d07b85fe16ef1b98da94a9f609 (patch)
tree80011445483aed4e257d449f796bd1cb24e3c60d /src/drivers/net
parent[sis190] Initialise network device before calling register_netdev() (diff)
downloadipxe-97ef28aea070f6d07b85fe16ef1b98da94a9f609.tar.gz
ipxe-97ef28aea070f6d07b85fe16ef1b98da94a9f609.tar.xz
ipxe-97ef28aea070f6d07b85fe16ef1b98da94a9f609.zip
[netdevice] Call netdev_link_[up|down|err]() only while registered
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net')
-rw-r--r--src/drivers/net/3c90x.c6
-rw-r--r--src/drivers/net/atl1e.c4
-rw-r--r--src/drivers/net/b44.c6
-rw-r--r--src/drivers/net/e1000/e1000_main.c6
-rw-r--r--src/drivers/net/e1000e/e1000e_main.c6
-rw-r--r--src/drivers/net/eepro100.c4
-rw-r--r--src/drivers/net/efi/snpnet.c6
-rw-r--r--src/drivers/net/etherfabric.c2
-rw-r--r--src/drivers/net/igb/igb_main.c6
-rw-r--r--src/drivers/net/jme.c1
-rw-r--r--src/drivers/net/legacy.c6
-rw-r--r--src/drivers/net/natsemi.c6
-rw-r--r--src/drivers/net/pnic.c6
-rw-r--r--src/drivers/net/rtl8139.c6
-rw-r--r--src/drivers/net/sis190.c1
-rwxr-xr-xsrc/drivers/net/skge.c3
-rw-r--r--src/drivers/net/virtio-net.c16
-rw-r--r--src/drivers/net/vxge/vxge_main.c3
18 files changed, 45 insertions, 49 deletions
diff --git a/src/drivers/net/3c90x.c b/src/drivers/net/3c90x.c
index 760d35522..4db8fbda0 100644
--- a/src/drivers/net/3c90x.c
+++ b/src/drivers/net/3c90x.c
@@ -938,15 +938,15 @@ static int a3c90x_probe(struct pci_device *pci,
HWAddr[4] = inf_3c90x->eeprom[eepromHwAddrOffset + 2] >> 8;
HWAddr[5] = inf_3c90x->eeprom[eepromHwAddrOffset + 2] & 0xFF;
- /* we don't handle linkstates yet, so we're always up */
- netdev_link_up(netdev);
-
if ((rc = register_netdev(netdev)) != 0) {
DBG("3c90x: register_netdev() failed\n");
netdev_put(netdev);
return rc;
}
+ /* we don't handle linkstates yet, so we're always up */
+ netdev_link_up(netdev);
+
return 0;
}
diff --git a/src/drivers/net/atl1e.c b/src/drivers/net/atl1e.c
index 160ad91b3..c43678354 100644
--- a/src/drivers/net/atl1e.c
+++ b/src/drivers/net/atl1e.c
@@ -248,8 +248,6 @@ static int atl1e_sw_init(struct atl1e_adapter *adapter)
hw->dmar_block = atl1e_dma_req_1024;
hw->dmaw_block = atl1e_dma_req_1024;
- netdev_link_down(adapter->netdev);
-
return 0;
}
@@ -1212,8 +1210,6 @@ static int atl1e_probe(struct pci_device *pdev,
goto err_free_netdev;
}
- netdev_link_down(netdev);
-
cards_found++;
return 0;
diff --git a/src/drivers/net/b44.c b/src/drivers/net/b44.c
index a104652cb..d34bd8a73 100644
--- a/src/drivers/net/b44.c
+++ b/src/drivers/net/b44.c
@@ -682,9 +682,6 @@ static int b44_probe(struct pci_device *pci, const struct pci_device_id *id)
b44_load_mac_and_phy_addr(bp);
- /* Link management currently not implemented */
- netdev_link_up(netdev);
-
rc = register_netdev(netdev);
if (rc != 0) {
iounmap(bp->regs);
@@ -692,6 +689,9 @@ static int b44_probe(struct pci_device *pci, const struct pci_device_id *id)
return rc;
}
+ /* Link management currently not implemented */
+ netdev_link_up(netdev);
+
b44_chip_reset(bp, B44_CHIP_RESET_FULL);
DBG("b44 %s (%04x:%04x) regs=%p MAC=%s\n", id->name, id->vendor,
diff --git a/src/drivers/net/e1000/e1000_main.c b/src/drivers/net/e1000/e1000_main.c
index fd2c78b90..dec0858c1 100644
--- a/src/drivers/net/e1000/e1000_main.c
+++ b/src/drivers/net/e1000/e1000_main.c
@@ -803,12 +803,12 @@ int e1000_probe ( struct pci_device *pdev,
/* reset the hardware with the new settings */
e1000_reset ( adapter );
- /* Mark as link up; we don't yet handle link state */
- netdev_link_up ( netdev );
-
if ( ( err = register_netdev ( netdev ) ) != 0)
goto err_register;
+ /* Mark as link up; we don't yet handle link state */
+ netdev_link_up ( netdev );
+
for (i = 0; i < 6; i++)
DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
diff --git a/src/drivers/net/e1000e/e1000e_main.c b/src/drivers/net/e1000e/e1000e_main.c
index 748f0cb65..1b56f20c6 100644
--- a/src/drivers/net/e1000e/e1000e_main.c
+++ b/src/drivers/net/e1000e/e1000e_main.c
@@ -1155,14 +1155,14 @@ int e1000e_probe ( struct pci_device *pdev,
/* reset the hardware with the new settings */
e1000e_reset ( adapter );
- /* Mark as link up; we don't yet handle link state */
- netdev_link_up ( netdev );
-
if ( ( err = register_netdev ( netdev ) ) != 0) {
DBG ( "err_register\n" );
goto err_register;
}
+ /* Mark as link up; we don't yet handle link state */
+ netdev_link_up ( netdev );
+
for (i = 0; i < 6; i++)
DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
diff --git a/src/drivers/net/eepro100.c b/src/drivers/net/eepro100.c
index 0912be7c8..f350b5c85 100644
--- a/src/drivers/net/eepro100.c
+++ b/src/drivers/net/eepro100.c
@@ -209,11 +209,11 @@ static int ifec_pci_probe ( struct pci_device *pci,
nvs_read ( &priv->eeprom.nvs, EEPROM_ADDR_MDIO_REGISTER,
&priv->mdio_register, 2 );
- netdev_link_up ( netdev );
-
if ( ( rc = register_netdev ( netdev ) ) != 0 )
goto error;
+ netdev_link_up ( netdev );
+
DBGP ( "ints\n" );
return 0;
diff --git a/src/drivers/net/efi/snpnet.c b/src/drivers/net/efi/snpnet.c
index ba63a01df..b725d407f 100644
--- a/src/drivers/net/efi/snpnet.c
+++ b/src/drivers/net/efi/snpnet.c
@@ -300,13 +300,13 @@ int snpnet_probe ( struct snp_device *snpdev ) {
memcpy ( netdev->hw_addr, snp->Mode->PermanentAddress.Addr,
snp->Mode->HwAddressSize );
- /* Mark as link up; we don't handle link state */
- netdev_link_up ( netdev );
-
/* Register network device */
if ( ( rc = register_netdev ( netdev ) ) != 0 )
goto err_register;
+ /* Mark as link up; we don't handle link state */
+ netdev_link_up ( netdev );
+
DBGC ( snp, "SNP %p added\n", snp );
return 0;
diff --git a/src/drivers/net/etherfabric.c b/src/drivers/net/etherfabric.c
index bcdd010a4..352cdd99c 100644
--- a/src/drivers/net/etherfabric.c
+++ b/src/drivers/net/etherfabric.c
@@ -4183,10 +4183,10 @@ efab_probe ( struct pci_device *pci,
memcpy ( netdev->hw_addr, efab->mac_addr, ETH_ALEN );
- netdev_link_up ( netdev );
rc = register_netdev ( netdev );
if ( rc )
goto fail4;
+ netdev_link_up ( netdev );
/* Advertise non-volatile storage */
if ( efab->nvo.nvs ) {
diff --git a/src/drivers/net/igb/igb_main.c b/src/drivers/net/igb/igb_main.c
index 9e2b3bf2a..df5cadc50 100644
--- a/src/drivers/net/igb/igb_main.c
+++ b/src/drivers/net/igb/igb_main.c
@@ -905,14 +905,14 @@ int igb_probe ( struct pci_device *pdev,
* driver. */
igb_get_hw_control(adapter);
- /* Mark as link up; we don't yet handle link state */
- netdev_link_up ( netdev );
-
if ( ( err = register_netdev ( netdev ) ) != 0) {
DBG ( "err_register\n" );
goto err_register;
}
+ /* Mark as link up; we don't yet handle link state */
+ netdev_link_up ( netdev );
+
for (i = 0; i < 6; i++) {
DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
}
diff --git a/src/drivers/net/jme.c b/src/drivers/net/jme.c
index 1602d547c..eaddcb842 100644
--- a/src/drivers/net/jme.c
+++ b/src/drivers/net/jme.c
@@ -1249,7 +1249,6 @@ jme_probe(struct pci_device *pci, const struct pci_device_id *id __unused)
* Bring down phy before interface is opened.
*/
jme_phy_off(jme);
- netdev_link_down(netdev);
/*
* Reset MAC processor and reload EEPROM for MAC Address
diff --git a/src/drivers/net/legacy.c b/src/drivers/net/legacy.c
index 246a37f72..4edbef162 100644
--- a/src/drivers/net/legacy.c
+++ b/src/drivers/net/legacy.c
@@ -114,12 +114,12 @@ int legacy_probe ( void *hwdev,
*/
dev->desc.irq = nic.irqno;
- /* Mark as link up; legacy devices don't handle link state */
- netdev_link_up ( netdev );
-
if ( ( rc = register_netdev ( netdev ) ) != 0 )
goto err_register;
+ /* Mark as link up; legacy devices don't handle link state */
+ netdev_link_up ( netdev );
+
/* Do not remove this message */
printf ( "WARNING: Using legacy NIC wrapper on %s\n",
netdev->ll_protocol->ntoa ( nic.node_addr ) );
diff --git a/src/drivers/net/natsemi.c b/src/drivers/net/natsemi.c
index 2b5375a3d..19c20edd7 100644
--- a/src/drivers/net/natsemi.c
+++ b/src/drivers/net/natsemi.c
@@ -208,12 +208,12 @@ static int natsemi_probe (struct pci_device *pci,
last = last1;
}
- /* Mark as link up; we don't yet handle link state */
- netdev_link_up ( netdev );
-
if ((rc = register_netdev (netdev)) != 0)
goto err_register_netdev;
+ /* Mark as link up; we don't yet handle link state */
+ netdev_link_up ( netdev );
+
return 0;
err_register_netdev:
diff --git a/src/drivers/net/pnic.c b/src/drivers/net/pnic.c
index ced13971f..b34b91266 100644
--- a/src/drivers/net/pnic.c
+++ b/src/drivers/net/pnic.c
@@ -252,13 +252,13 @@ static int pnic_probe ( struct pci_device *pci,
status = pnic_command ( pnic, PNIC_CMD_READ_MAC, NULL, 0,
netdev->hw_addr, ETH_ALEN, NULL );
- /* Mark as link up; PNIC has no concept of link state */
- netdev_link_up ( netdev );
-
/* Register network device */
if ( ( rc = register_netdev ( netdev ) ) != 0 )
goto err;
+ /* Mark as link up; PNIC has no concept of link state */
+ netdev_link_up ( netdev );
+
return 0;
err:
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index d5fb178fd..dd3f80e57 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -528,13 +528,13 @@ static int rtl_probe ( struct pci_device *pci,
rtl_init_eeprom ( netdev );
nvs_read ( &rtl->eeprom.nvs, EE_MAC, netdev->hw_addr, ETH_ALEN );
- /* Mark as link up; we don't yet handle link state */
- netdev_link_up ( netdev );
-
/* Register network device */
if ( ( rc = register_netdev ( netdev ) ) != 0 )
goto err_register_netdev;
+ /* Mark as link up; we don't yet handle link state */
+ netdev_link_up ( netdev );
+
/* Register non-volatile storage */
if ( rtl->nvo.nvs ) {
if ( ( rc = register_nvo ( &rtl->nvo,
diff --git a/src/drivers/net/sis190.c b/src/drivers/net/sis190.c
index c60cedd55..b0c3303fe 100644
--- a/src/drivers/net/sis190.c
+++ b/src/drivers/net/sis190.c
@@ -1143,7 +1143,6 @@ static int sis190_probe(struct pci_device *pdev,
sis190_set_speed_auto(dev);
sis190_phy_task(tp);
- netdev_link_down(dev);
out:
return rc;
diff --git a/src/drivers/net/skge.c b/src/drivers/net/skge.c
index 8eec75b0e..c9fb6bae3 100755
--- a/src/drivers/net/skge.c
+++ b/src/drivers/net/skge.c
@@ -2324,9 +2324,6 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
/* read the mac address */
memcpy(dev->hw_addr, (void *) (hw->regs + B2_MAC_1 + port*8), ETH_ALEN);
- /* device is off until link detection */
- netdev_link_down(dev);
-
return dev;
}
diff --git a/src/drivers/net/virtio-net.c b/src/drivers/net/virtio-net.c
index a5fb5f694..1c5f074c0 100644
--- a/src/drivers/net/virtio-net.c
+++ b/src/drivers/net/virtio-net.c
@@ -378,14 +378,20 @@ static int virtnet_probe ( struct pci_device *pci,
eth_ntoa ( netdev->hw_addr ) );
}
+ /* Register network device */
+ if ( ( rc = register_netdev ( netdev ) ) != 0 )
+ goto err_register_netdev;
+
/* Mark link as up, control virtqueue is not used */
netdev_link_up ( netdev );
- if ( ( rc = register_netdev ( netdev ) ) != 0 ) {
- vp_reset ( ioaddr );
- netdev_nullify ( netdev );
- netdev_put ( netdev );
- }
+ return 0;
+
+ unregister_netdev ( netdev );
+ err_register_netdev:
+ vp_reset ( ioaddr );
+ netdev_nullify ( netdev );
+ netdev_put ( netdev );
return rc;
}
diff --git a/src/drivers/net/vxge/vxge_main.c b/src/drivers/net/vxge/vxge_main.c
index 42855f8d0..4e07271a3 100644
--- a/src/drivers/net/vxge/vxge_main.c
+++ b/src/drivers/net/vxge/vxge_main.c
@@ -443,11 +443,10 @@ int vxge_device_register(struct __vxge_hw_device *hldev,
goto _out2;
}
- /* Make Link state as off at this point, when the Link change
+ /* Leave link state as off at this point, when the link change
* interrupt comes the state will be automatically changed to
* the right state.
*/
- netdev_link_down(ndev);
vxge_debug(VXGE_INFO, "%s: Ethernet device registered\n",
VXGE_DRIVER_NAME);