Commit efc7144f authored by Jes Sorensen's avatar Jes Sorensen Committed by Greg Kroah-Hartman
Browse files

staging: rtl8723au: Use nl80211_iftype instead of driver's own custom types



In addition move rtw_set_802_11_infrastructure_mode23a() to
ioctl_cfg80211.c and declare it static.

Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 96808173
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -824,7 +824,8 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf,

	memcpy(ie, pbuf, pbss_network->IELength);

	if (pbss_network->InfrastructureMode!= Ndis802_11APMode)
	if (pbss_network->ifmode != NL80211_IFTYPE_AP &&
	    pbss_network->ifmode != NL80211_IFTYPE_P2P_GO)
		return _FAIL;

	pbss_network->Rssi = 0;
@@ -1898,7 +1899,7 @@ void rtw_ap_restore_network(struct rtw_adapter *padapter)
	struct sta_info *chk_alive_list[NUM_STA];
	int i;

	rtw_setopmode_cmd23a(padapter, Ndis802_11APMode);
	rtw_setopmode_cmd23a(padapter, NL80211_IFTYPE_AP);

	set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);

+9 −10
Original line number Diff line number Diff line
@@ -477,11 +477,11 @@ int rtw_joinbss_cmd23a(struct rtw_adapter *padapter,
	struct security_priv *psecuritypriv = &padapter->securitypriv;
	struct registry_priv *pregistrypriv = &padapter->registrypriv;
	struct ht_priv *phtpriv = &pmlmepriv->htpriv;
	enum ndis_802_11_net_infra ndis_network_mode;
	enum nl80211_iftype ifmode;
	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
	struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;

	ndis_network_mode = pnetwork->network.InfrastructureMode;
	ifmode = pnetwork->network.ifmode;

	rtw_led_control(padapter, LED_CTL_START_TO_LINK);

@@ -505,16 +505,15 @@ int rtw_joinbss_cmd23a(struct rtw_adapter *padapter,

	/* for hidden ap to set fw_state here */
	if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE)) {
		switch (ndis_network_mode) {
		case Ndis802_11IBSS:
		switch (ifmode) {
		case NL80211_IFTYPE_ADHOC:
			set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
			break;
		case Ndis802_11Infrastructure:
		case NL80211_IFTYPE_P2P_CLIENT:
		case NL80211_IFTYPE_STATION:
			set_fwstate(pmlmepriv, WIFI_STATION_STATE);
			break;
		case Ndis802_11APMode:
		case Ndis802_11AutoUnknown:
		case Ndis802_11InfrastructureMax:
		default:
			break;
		}
	}
@@ -673,7 +672,7 @@ int rtw_disassoc_cmd23a(struct rtw_adapter*padapter, u32 deauth_timeout_ms,
}

int rtw_setopmode_cmd23a(struct rtw_adapter *padapter,
			 enum ndis_802_11_net_infra networktype)
			 enum nl80211_iftype ifmode)
{
	struct	cmd_obj *ph2c;
	struct	setopmode_parm *psetop;
@@ -694,7 +693,7 @@ int rtw_setopmode_cmd23a(struct rtw_adapter *padapter,
	}

	init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, _SetOpMode_CMD_);
	psetop->mode = (u8)networktype;
	psetop->mode = ifmode;

	res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
exit:
+0 −86
Original line number Diff line number Diff line
@@ -279,92 +279,6 @@ int rtw_set_802_11_ssid23a(struct rtw_adapter* padapter,
	return status;
}

int rtw_set_802_11_infrastructure_mode23a(struct rtw_adapter* padapter,
					 enum ndis_802_11_net_infra networktype)
{
	struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
	struct wlan_network *cur_network = &pmlmepriv->cur_network;
	enum ndis_802_11_net_infra* pold_state;

	pold_state = &cur_network->network.InfrastructureMode;

	RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_notice_,
		 ("+rtw_set_802_11_infrastructure_mode23a: old =%d new =%d "
		  "fw_state = 0x%08x\n",
		  *pold_state, networktype, get_fwstate(pmlmepriv)));

	if (*pold_state != networktype)	{
		spin_lock_bh(&pmlmepriv->lock);

		RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
			 (" change mode!"));

		if (*pold_state == Ndis802_11APMode) {
			/* change to other mode from Ndis802_11APMode */
			cur_network->join_res = -1;

#ifdef CONFIG_8723AU_AP_MODE
			stop_ap_mode23a(padapter);
#endif
		}

		if (check_fwstate(pmlmepriv, _FW_LINKED) ||
		    *pold_state == Ndis802_11IBSS)
			rtw_disassoc_cmd23a(padapter, 0, true);

		if (check_fwstate(pmlmepriv, _FW_LINKED) ||
		    check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))
			rtw_free_assoc_resources23a(padapter, 1);

		if (*pold_state == Ndis802_11Infrastructure ||
		    *pold_state == Ndis802_11IBSS) {
			if (check_fwstate(pmlmepriv, _FW_LINKED)) {
				/* will clr Linked_state; before this function,
				   we must have chked whether issue
				   dis-assoc_cmd or not */
				rtw_indicate_disconnect23a(padapter);
			}
	       }

		*pold_state = networktype;

		_clr_fwstate_(pmlmepriv, ~WIFI_NULL_STATE);

		switch (networktype)
		{
		case Ndis802_11IBSS:
			set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
			break;

		case Ndis802_11Infrastructure:
			set_fwstate(pmlmepriv, WIFI_STATION_STATE);
			break;

		case Ndis802_11APMode:
			set_fwstate(pmlmepriv, WIFI_AP_STATE);
#ifdef CONFIG_8723AU_AP_MODE
			start_ap_mode23a(padapter);
			/* rtw_indicate_connect23a(padapter); */
#endif
			break;

		case Ndis802_11AutoUnknown:
		case Ndis802_11InfrastructureMax:
			break;
		}

		/* SecClearAllKeys(adapter); */

		/* RT_TRACE(COMP_OID_SET, DBG_LOUD,
		   ("set_infrastructure: fw_state:%x after changing mode\n", */
		/* get_fwstate(pmlmepriv))); */

		spin_unlock_bh(&pmlmepriv->lock);
	}

	return _SUCCESS;
}

int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
				      struct cfg80211_ssid *pssid,
				      int ssid_max_num)
+10 −11
Original line number Diff line number Diff line
@@ -52,8 +52,7 @@ int rtw_init_mlme_priv23a(struct rtw_adapter *padapter)
	pmlmepriv->nic_hdl = padapter;

	pmlmepriv->fw_state = 0;
	pmlmepriv->cur_network.network.InfrastructureMode =
		Ndis802_11AutoUnknown;
	pmlmepriv->cur_network.network.ifmode = NL80211_IFTYPE_UNSPECIFIED;
	/*  1: active, 0: pasive. Maybe someday we should rename this
	    varable to "active_mode" (Jeff) */
	pmlmepriv->scan_mode = SCAN_ACTIVE;
@@ -616,8 +615,8 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter,
	}

	if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
		if (pnetwork->network.InfrastructureMode !=
		    pmlmepriv->cur_network.network.InfrastructureMode)
		if (pnetwork->network.ifmode !=
		    pmlmepriv->cur_network.network.ifmode)
			bselected = false;
	}

@@ -1137,14 +1136,15 @@ rtw_joinbss_update_network23a(struct rtw_adapter *padapter,
	rtw_set_signal_stat_timer(&padapter->recvpriv);

	/* update fw_state will clr _FW_UNDER_LINKING here indirectly */
	switch (pnetwork->network.InfrastructureMode) {
	case Ndis802_11Infrastructure:
	switch (pnetwork->network.ifmode) {
	case NL80211_IFTYPE_P2P_CLIENT:
	case NL80211_IFTYPE_STATION:
		if (pmlmepriv->fw_state & WIFI_UNDER_WPS)
			pmlmepriv->fw_state = WIFI_STATION_STATE|WIFI_UNDER_WPS;
		else
			pmlmepriv->fw_state = WIFI_STATION_STATE;
		break;
	case Ndis802_11IBSS:
	case NL80211_IFTYPE_ADHOC:
		pmlmepriv->fw_state = WIFI_ADHOC_STATE;
		break;
	default:
@@ -2179,11 +2179,10 @@ void rtw_update_registrypriv_dev_network23a(struct rtw_adapter* adapter)
		  "DSConfig = 0x%x\n", pregistrypriv->channel,
		  pdev_network->Configuration.DSConfig));

	if (cur_network->network.InfrastructureMode == Ndis802_11IBSS)
	if (cur_network->network.ifmode == NL80211_IFTYPE_ADHOC)
		pdev_network->Configuration.ATIMWindow = 0;

	pdev_network->InfrastructureMode =
		cur_network->network.InfrastructureMode;
	pdev_network->ifmode = cur_network->network.ifmode;

	/*  1. Supported rates */
	/*  2. IE */
+25 −16
Original line number Diff line number Diff line
@@ -4596,7 +4596,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter,

	if (ieee80211_is_probe_req(mgmt->frame_control)) {
		/*  FIXME */
		bssid->InfrastructureMode = Ndis802_11Infrastructure;
		bssid->ifmode = NL80211_IFTYPE_STATION;
		ether_addr_copy(bssid->MacAddress, mgmt->sa);
		bssid->Privacy = 1;
		return _SUCCESS;
@@ -4608,10 +4608,10 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
		le32_to_cpu(bssid->Configuration.BeaconPeriod);

	if (capab_info & BIT(0)) {
		bssid->InfrastructureMode = Ndis802_11Infrastructure;
		bssid->ifmode = NL80211_IFTYPE_STATION;
		ether_addr_copy(bssid->MacAddress, mgmt->sa);
	} else {
		bssid->InfrastructureMode = Ndis802_11IBSS;
		bssid->ifmode = NL80211_IFTYPE_ADHOC;
		ether_addr_copy(bssid->MacAddress, mgmt->bssid);
	}

@@ -5814,22 +5814,32 @@ int NULL_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)

int setopmode_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
{
	u8	type;
	enum nl80211_iftype type;
	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
	struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
	const struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;

	if (psetop->mode == Ndis802_11APMode) {
	switch (psetop->mode) {
	case NL80211_IFTYPE_P2P_GO:
	case NL80211_IFTYPE_AP:
		pmlmeinfo->state = WIFI_FW_AP_STATE;
		type = _HW_STATE_AP_;
	} else if (psetop->mode == Ndis802_11Infrastructure) {
		pmlmeinfo->state &= ~(BIT(0)|BIT(1));/*  clear state */
		pmlmeinfo->state |= WIFI_FW_STATION_STATE;/* set to	STATION_STATE */
		break;
	case NL80211_IFTYPE_P2P_CLIENT:
	case NL80211_IFTYPE_STATION:
		/*  clear state */
		pmlmeinfo->state &= ~(BIT(0)|BIT(1));
		/* set to STATION_STATE */
		pmlmeinfo->state |= WIFI_FW_STATION_STATE;
		type = _HW_STATE_STATION_;
	} else if (psetop->mode == Ndis802_11IBSS)
		break;
	case NL80211_IFTYPE_ADHOC:
		type = _HW_STATE_ADHOC_;
	else
		break;
	default:
		type = _HW_STATE_NOLINK_;
		break;
	}

	hw_var_set_opmode(padapter, type);
	/* Set_NETYPE0_MSR(padapter, type); */
@@ -5845,11 +5855,10 @@ int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
	const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf;
	/* u32	initialgain; */

	if (pparm->InfrastructureMode == Ndis802_11APMode) {
	if (pparm->ifmode == NL80211_IFTYPE_AP ||
	    pparm->ifmode == NL80211_IFTYPE_P2P_GO) {
#ifdef CONFIG_8723AU_AP_MODE

		if (pmlmeinfo->state == WIFI_FW_AP_STATE)
		{
		if (pmlmeinfo->state == WIFI_FW_AP_STATE) {
			/* todo: */
			return H2C_SUCCESS;
		}
@@ -5857,7 +5866,7 @@ int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
	}

	/* below is for ad-hoc master */
	if (pparm->InfrastructureMode == Ndis802_11IBSS) {
	if (pparm->ifmode == NL80211_IFTYPE_ADHOC) {
		rtw_joinbss_reset23a(padapter);

		pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
Loading