static int _rtw_drv_register_netdev(struct rtw_adapter *padapter, char *name) { struct net_device *pnetdev = padapter->pnetdev; int ret = _SUCCESS; /* alloc netdev name */ rtw_init_netdev23a_name23a(pnetdev, name); ether_addr_copy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr); /* Tell the network stack we exist */ if (register_netdev(pnetdev)) { DBG_8723A("%s(%s): Failed!\n", __func__, pnetdev->name); ret = _FAIL; goto error_register_netdev; } DBG_8723A("%s, MAC Address (if%d) = " MAC_FMT "\n", __func__, (padapter->iface_id + 1), MAC_ARG(pnetdev->dev_addr)); return ret; error_register_netdev: if (padapter->iface_id > IFACE_ID0) { rtw_free_drv_sw23a(padapter); free_netdev(pnetdev); } return ret; }
static void rtw_usb_if1_deinit(struct rtw_adapter *if1) { struct net_device *pnetdev = if1->pnetdev; struct mlme_priv *pmlmepriv = &if1->mlmepriv; if (check_fwstate(pmlmepriv, _FW_LINKED)) rtw_disassoc_cmd23a(if1, 0, false); #ifdef CONFIG_8723AU_AP_MODE free_mlme_ap_info23a(if1); #endif if (pnetdev) unregister_netdev(pnetdev); /* will call netdev_close() */ rtw_cancel_all_timer23a(if1); rtw_dev_unload(if1); DBG_8723A("+r871xu_dev_remove, hw_init_completed =%d\n", if1->hw_init_completed); if (if1->rtw_wdev) { rtw_wdev_unregister(if1->rtw_wdev); rtw_wdev_free(if1->rtw_wdev); } #ifdef CONFIG_8723AU_BT_COEXIST if (1 == if1->pwrctrlpriv.autopm_cnt) { usb_autopm_put_interface(adapter_to_dvobj(if1)->pusbintf); if1->pwrctrlpriv.autopm_cnt--; } #endif rtw_free_drv_sw23a(if1); if (pnetdev) free_netdev(pnetdev); }