Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

staging: rtl8723au: issue_assocreq23a(): General cleanups and use cfg80211_find_ie()

parent 78b7d047
Loading
Loading
Loading
Loading
+36 −41
Original line number Diff line number Diff line
@@ -3136,11 +3136,11 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
	int ret = _FAIL;
	struct xmit_frame *pmgntframe;
	struct pkt_attrib *pattrib;
	unsigned char *pframe, *p;
	unsigned char *pframe;
	const u8 *p;
	struct ieee80211_hdr *pwlanhdr;
	unsigned short *fctrl;
	unsigned short val16;
	unsigned int i, j, ie_len, index = 0;
	unsigned int i, j, index = 0;
	unsigned char rf_type, bssrate[NumRates], sta_bssrate[NumRates];
	struct ndis_802_11_var_ies *pIE;
	struct registry_priv *pregpriv = &padapter->registrypriv;
@@ -3148,9 +3148,11 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
	struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
	struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
	int bssrate_len = 0, sta_bssrate_len = 0;
	int bssrate_len = 0, sta_bssrate_len = 0, pie_len;
	u8 * pie;

	if ((pmgntframe = alloc_mgtxmitframe23a(pxmitpriv)) == NULL)
	pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
	if (!pmgntframe)
		goto exit;

	/* update attribute */
@@ -3159,7 +3161,7 @@ void issue_assocreq23a(struct rtw_adapter *padapter)

	memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);

	pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
	pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET;
	pwlanhdr = (struct ieee80211_hdr *)pframe;

	fctrl = &pwlanhdr->frame_control;
@@ -3176,16 +3178,15 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
	pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);

	/* caps */
	memcpy(pframe, rtw_get_capability23a_from_ie(pmlmeinfo->network.IEs),
	       2);
	memcpy(pframe,
	       rtw_get_capability23a_from_ie(pmlmeinfo->network.IEs), 2);

	pframe += 2;
	pattrib->pktlen += 2;

	/* listen interval */
	/* todo: listen interval for power saving */
	val16 = cpu_to_le16(3);
	memcpy(pframe, (unsigned char *)&val16, 2);
	put_unaligned_le16(3, pframe);
	pframe += 2;
	pattrib->pktlen += 2;

@@ -3262,23 +3263,21 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
				       bssrate_len, bssrate, &pattrib->pktlen);

	/* RSN */
	p = rtw_get_ie23a((pmlmeinfo->network.IEs +
			   sizeof(struct ndis_802_11_fixed_ies)), WLAN_EID_RSN,
			  &ie_len, (pmlmeinfo->network.IELength -
				    sizeof(struct ndis_802_11_fixed_ies)));
	pie = pmlmeinfo->network.IEs + sizeof(struct ndis_802_11_fixed_ies);
	pie_len = pmlmeinfo->network.IELength -
		sizeof(struct ndis_802_11_fixed_ies);

	p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
	if (p)
		pframe = rtw_set_ie23a(pframe, WLAN_EID_RSN, ie_len, (p + 2),
		pframe = rtw_set_ie23a(pframe, WLAN_EID_RSN, p[1], p + 2,
				       &pattrib->pktlen);

	/* HT caps */
	if (padapter->mlmepriv.htpriv.ht_option == true) {
		p = rtw_get_ie23a((pmlmeinfo->network.IEs +
				   sizeof(struct ndis_802_11_fixed_ies)),
				  WLAN_EID_HT_CAPABILITY, &ie_len,
				  (pmlmeinfo->network.IELength -
				   sizeof(struct ndis_802_11_fixed_ies)));
		if ((p != NULL) && (!(is_ap_in_tkip23a(padapter)))) {
			memcpy(&pmlmeinfo->HT_caps, (p + 2),
		p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len);

		if (p && !is_ap_in_tkip23a(padapter)) {
			memcpy(&pmlmeinfo->HT_caps, p + 2,
			       sizeof(struct HT_caps_element));

			/* to disable 40M Hz support while gd_bw_40MHz_en = 0 */
@@ -3294,12 +3293,11 @@ void issue_assocreq23a(struct rtw_adapter *padapter)

			rf_type = rtl8723a_get_rf_type(padapter);
			/* switch (pregpriv->rf_config) */
			switch (rf_type)
			{
			switch (rf_type) {
			case RF_1T1R:

				/* RX STBC One spatial stream */
				if (pregpriv->rx_stbc)
					pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);/* RX STBC One spatial stream */
					pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);

				memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R23A, 16);
				break;
@@ -3307,18 +3305,17 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
			case RF_2T2R:
			case RF_1T2R:
			default:

				/* enable for 2.4/5 GHz */
				if ((pregpriv->rx_stbc == 0x3) ||
				    ((pmlmeext->cur_wireless_mode &
				      WIRELESS_11_24N) &&
				if (pregpriv->rx_stbc == 0x3 ||
				    (pmlmeext->cur_wireless_mode &
				     WIRELESS_11_24N &&
				     /* enable for 2.4GHz */
				     (pregpriv->rx_stbc == 0x1)) ||
				    ((pmlmeext->cur_wireless_mode &
				      WIRELESS_11_5N) &&
				     (pregpriv->rx_stbc == 0x2)) ||
				     pregpriv->rx_stbc == 0x1) ||
				    (pmlmeext->cur_wireless_mode &
				     WIRELESS_11_5N &&
				     pregpriv->rx_stbc == 0x2) ||
				    /* enable for 5GHz */
				    (pregpriv->wifi_spec == 1)) {
				    pregpriv->wifi_spec == 1) {
					DBG_8723A("declare supporting RX "
						  "STBC\n");
					pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */
@@ -3338,8 +3335,7 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
#endif

			pframe = rtw_set_ie23a(pframe, WLAN_EID_HT_CAPABILITY,
					       ie_len,
					       (u8 *)&pmlmeinfo->HT_caps,
					       p[1], (u8 *)&pmlmeinfo->HT_caps,
					       &pattrib->pktlen);
		}
	}
@@ -3375,7 +3371,7 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
			break;
		}

		i += (pIE->Length + 2);
		i += pIE->Length + 2;
	}

	if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_REALTEK)
@@ -3393,8 +3389,7 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
		kfree(pmlmepriv->assoc_req);
		pmlmepriv->assoc_req = kmalloc(pattrib->pktlen, GFP_ATOMIC);
		if (pmlmepriv->assoc_req) {
			memcpy(pmlmepriv->assoc_req, pwlanhdr,
			       pattrib->pktlen);
			memcpy(pmlmepriv->assoc_req, pwlanhdr, pattrib->pktlen);
			pmlmepriv->assoc_req_len = pattrib->pktlen;
		}
	} else