Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
}