diff --git a/src/arch/i386/drivers/net/undinet.c b/src/arch/i386/drivers/net/undinet.c index 7ec4b50a..e6c08464 100644 --- a/src/arch/i386/drivers/net/undinet.c +++ b/src/arch/i386/drivers/net/undinet.c @@ -548,13 +548,13 @@ int undinet_probe ( struct undi_device *undi ) { undinic->hacks |= UNDI_HACK_EB54; } - /* 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 ( undinic, "UNDINIC %p added\n", undinic ); return 0; diff --git a/src/drivers/linux/tap.c b/src/drivers/linux/tap.c index c2cb7584..53bb16a3 100644 --- a/src/drivers/linux/tap.c +++ b/src/drivers/linux/tap.c @@ -200,11 +200,11 @@ static int tap_probe(struct linux_device *device, struct linux_device_request *r netdev->dev = &device->dev; memset(nic, 0, sizeof(*nic)); - netdev_link_up(netdev); - if ((rc = register_netdev(netdev)) != 0) goto err_register; + netdev_link_up(netdev); + /* Look for the mandatory if setting */ if_setting = linux_find_setting("if", &request->settings); diff --git a/src/drivers/net/3c90x.c b/src/drivers/net/3c90x.c index 760d3552..4db8fbda 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 160ad91b..c4367835 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 a104652c..d34bd8a7 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 fd2c78b9..dec0858c 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 748f0cb6..1b56f20c 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 0912be7c..f350b5c8 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 ba63a01d..b725d407 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 bcdd010a..352cdd99 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 9e2b3bf2..df5cadc5 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 1602d547..eaddcb84 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 246a37f7..4edbef16 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 2b5375a3..19c20edd 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 ced13971..b34b9126 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 d5fb178f..dd3f80e5 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 c60cedd5..b0c3303f 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 8eec75b0..c9fb6bae 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 a5fb5f69..1c5f074c 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 42855f8d..4e07271a 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);