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

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

staging: rtl8723au: issue_action_BSSCoexistPacket(): Clean + use cfg80211_find_ie()

parent f73255d4
Loading
Loading
Loading
Loading
+57 −70
Original line number Diff line number Diff line
@@ -4016,10 +4016,10 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
	unsigned char category, action;
	struct xmit_frame *pmgntframe;
	struct pkt_attrib *pattrib;
	unsigned char				*pframe;
	u8 *pframe;
	struct ieee80211_hdr *pwlanhdr;
	unsigned short *fctrl;
	struct	wlan_network	*pnetwork = NULL;
	struct wlan_network *pnetwork;
	struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
	struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -4027,11 +4027,13 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
	struct rtw_queue *queue	= &pmlmepriv->scanned_queue;
	u8 InfoContent[16] = {0};
	u8 ICS[8][15];
	int i;

	if ((pmlmepriv->num_FortyMHzIntolerant == 0) || (pmlmepriv->num_sta_no_ht == 0))
	if (pmlmepriv->num_FortyMHzIntolerant == 0 ||
	    pmlmepriv->num_sta_no_ht == 0)
		return;

	if (true == pmlmeinfo->bwmode_updated)
	if (pmlmeinfo->bwmode_updated)
		return;

	DBG_8723A("%s\n", __func__);
@@ -4039,10 +4041,9 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
	category = WLAN_CATEGORY_PUBLIC;
	action = ACT_PUBLIC_BSSCOEXIST;

	if ((pmgntframe = alloc_mgtxmitframe23a(pxmitpriv)) == NULL)
	{
	pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
	if (!pmgntframe)
		return;
	}

	/* update attribute */
	pattrib = &pmgntframe->attrib;
@@ -4050,7 +4051,7 @@ static void issue_action_BSSCoexistPacket(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;
@@ -4070,22 +4071,17 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
	pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen);
	pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen);

	/*  */
	if (pmlmepriv->num_FortyMHzIntolerant>0)
	{
		u8 iedata = 0;

		iedata |= BIT(2);/* 20 MHz BSS Width Request */
	if (pmlmepriv->num_FortyMHzIntolerant > 0) {
		u8 iedata = BIT(2);/* 20 MHz BSS Width Request */

		pframe = rtw_set_ie23a(pframe, WLAN_EID_BSS_COEX_2040, 1,
				       &iedata, &pattrib->pktlen);
	}

	/*  */
	if (pmlmepriv->num_sta_no_ht <= 0)
		goto out;

	memset(ICS, 0, sizeof(ICS));
	if (pmlmepriv->num_sta_no_ht>0)
	{
		int i;

	spin_lock_bh(&pmlmepriv->scanned_queue.lock);

@@ -4093,22 +4089,19 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
	plist = phead->next;

	list_for_each_safe(plist, ptmp, phead) {
			int len;
			u8 *p;
		const u8 *p;
		struct wlan_bssid_ex *pbss_network;

			pnetwork = container_of(plist, struct wlan_network,
						list);
		pnetwork = container_of(plist, struct wlan_network, list);

		pbss_network = &pnetwork->network;

			p = rtw_get_ie23a(pbss_network->IEs + _FIXED_IE_LENGTH_,
					  WLAN_EID_HT_CAPABILITY, &len,
					  pbss_network->IELength -
					  _FIXED_IE_LENGTH_);
			if ((p == NULL) || (len == 0))/* non-HT */
			{
				if ((pbss_network->Configuration.DSConfig<= 0) || (pbss_network->Configuration.DSConfig>14))
		p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
				     pbss_network->IEs + _FIXED_IE_LENGTH_,
				     pbss_network->IELength -_FIXED_IE_LENGTH_);
		if (!p || !p[1]) { /* non-HT */
			if (pbss_network->Configuration.DSConfig <= 0 ||
			    pbss_network->Configuration.DSConfig > 14)
				continue;

			ICS[0][pbss_network->Configuration.DSConfig] = 1;
@@ -4121,37 +4114,31 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)

	spin_unlock_bh(&pmlmepriv->scanned_queue.lock);

		for (i = 0;i<8;i++)
		{
			if (ICS[i][0] == 1)
			{
	for (i = 0; i < 8;i++) {
		if (ICS[i][0] == 1) {
			int j, k = 0;

			InfoContent[k] = i;
			/* SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent, i); */
			k++;

				for (j = 1;j<= 14;j++)
				{
					if (ICS[i][j]== 1)
					{
						if (k<16)
						{
							InfoContent[k] = j; /* channel number */
							/* SET_BSS_INTOLERANT_ELE_CHANNEL(InfoContent+k, j); */
			for (j = 1; j <= 14; j++) {
				if (ICS[i][j] == 1) {
					if (k < 16) {
						/* channel number */
						InfoContent[k] = j;
						k++;
					}
				}
			}

				pframe = rtw_set_ie23a(pframe, EID_BSSIntolerantChlReport, k, InfoContent, &pattrib->pktlen);

			}

			pframe = rtw_set_ie23a(pframe,
					       EID_BSSIntolerantChlReport, k,
					       InfoContent, &pattrib->pktlen);
		}

	}

out:
	pattrib->last_txcmdsz = pattrib->pktlen;

	dump_mgntframe23a(padapter, pmgntframe);