/** * Open network device * * @v netdev Network device * @ret rc Return status code */ static int nii_open ( struct net_device *netdev ) { struct nii_nic *nii = netdev->priv; int rc; /* Initialise NIC */ if ( ( rc = nii_initialise ( nii ) ) != 0 ) goto err_initialise; /* Attempt to set station address */ if ( ( rc = nii_set_station_address ( nii, netdev ) ) != 0 ) { DBGC ( nii, "NII %s could not set station address: %s\n", nii->dev.name, strerror ( rc ) ); /* Treat as non-fatal */ } /* Set receive filters */ if ( ( rc = nii_set_rx_filters ( nii ) ) != 0 ) goto err_set_rx_filters; return 0; err_set_rx_filters: nii_shutdown ( nii ); err_initialise: return rc; }
/** * Open network device * * @v netdev Network device * @ret rc Return status code */ static int nii_open ( struct net_device *netdev ) { struct nii_nic *nii = netdev->priv; int rc; /* Initialise NIC * * Some Emulex NII drivers have a bug which prevents packets * from being sent or received unless we specifically ask it * to detect cable presence during initialisation. Work * around these buggy drivers by requesting cable detection at * this point, even though we don't care about link state here * (and would prefer to have the NIC initialise even if no * cable is present, to match the behaviour of all other iPXE * drivers). */ if ( ( rc = nii_initialise_and_detect ( nii ) ) != 0 ) goto err_initialise; /* Attempt to set station address */ if ( ( rc = nii_set_station_address ( nii, netdev ) ) != 0 ) { DBGC ( nii, "NII %s could not set station address: %s\n", nii->dev.name, strerror ( rc ) ); /* Treat as non-fatal */ } /* Set receive filters */ if ( ( rc = nii_set_rx_filters ( nii ) ) != 0 ) goto err_set_rx_filters; return 0; err_set_rx_filters: nii_shutdown ( nii ); err_initialise: return rc; }