svn commit: r321100 - head/sys/dev/iwm
Adrian Chadd
adrian at FreeBSD.org
Mon Jul 17 21:29:19 UTC 2017
Author: adrian
Date: Mon Jul 17 21:29:18 2017
New Revision: 321100
URL: https://svnweb.freebsd.org/changeset/base/321100
Log:
[iwm] if_iwm - Factor out and improve iwm_mvm_scan_rxon_flags() in if_iwm_scan.c.
From the original commit:
==
* Actually look at the first channel in the list. If it's a 2.4GHz channel,
set IWM_PHY_BAND_24 flag. The IWM_PHY_BAND_5 flag is 0 anyway, so we
don't need to look further.
* While there factor out the iwm_mvm_rrm_scan_needed() tlv capability check.
Taken-From: Linux iwlwifi
==
However, this only really does the latter. The sc_ic channel list isn't the
scan channel list, it's the /whole list/ for the set of active channels,
so I don't know what the right thing to do is here.
So I'll commit this as an intermediary commit and we'll have to revisit whether
to finish the refactor as-is.
Tested:
* Intel 7260, STA mode
Obtained from: dragonflybsd.git 53a009d6f66108b40d622ed90ea95eba5c0e5432
Modified:
head/sys/dev/iwm/if_iwm_scan.c
Modified: head/sys/dev/iwm/if_iwm_scan.c
==============================================================================
--- head/sys/dev/iwm/if_iwm_scan.c Mon Jul 17 21:19:40 2017 (r321099)
+++ head/sys/dev/iwm/if_iwm_scan.c Mon Jul 17 21:29:18 2017 (r321100)
@@ -179,7 +179,18 @@ iwm_mvm_scan_rx_chain(struct iwm_softc *sc)
return htole16(rx_chain);
}
+#if 0
static uint32_t
+iwm_mvm_scan_rxon_flags(struct ieee80211_channel *c)
+{
+ if (IEEE80211_IS_CHAN_2GHZ(c))
+ return htole32(IWM_PHY_BAND_24);
+ else
+ return htole32(IWM_PHY_BAND_5);
+}
+#endif
+
+static uint32_t
iwm_mvm_scan_rate_n_flags(struct iwm_softc *sc, int flags, int no_cck)
{
uint32_t tx_ant;
@@ -202,6 +213,14 @@ iwm_mvm_scan_rate_n_flags(struct iwm_softc *sc, int fl
return htole32(IWM_RATE_6M_PLCP | tx_ant);
}
+static inline boolean_t
+iwm_mvm_rrm_scan_needed(struct iwm_softc *sc)
+{
+ /* require rrm scan whenever the fw supports it */
+ return fw_has_capa(&sc->ucode_capa,
+ IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT);
+}
+
#ifdef IWM_DEBUG
static const char *
iwm_mvm_ebs_status_str(enum iwm_scan_ebs_status status)
@@ -416,8 +435,7 @@ iwm_mvm_fill_probe_req(struct iwm_softc *sc, struct iw
preq->band_data[0].len = htole16(frm - pos);
remain -= frm - pos;
- if (fw_has_capa(&sc->ucode_capa,
- IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)) {
+ if (iwm_mvm_rrm_scan_needed(sc)) {
if (remain < 3)
return ENOBUFS;
*frm++ = IEEE80211_ELEMID_DSPARMS;
@@ -639,8 +657,7 @@ iwm_mvm_umac_scan(struct iwm_softc *sc)
IWM_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
IWM_SCAN_CHANNEL_FLAG_CACHE_ADD;
- if (fw_has_capa(&sc->ucode_capa,
- IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT))
+ if (iwm_mvm_rrm_scan_needed(sc))
req->general_flags |=
htole32(IWM_UMAC_SCAN_GEN_FLAGS_RRM_ENABLED);
@@ -708,13 +725,14 @@ iwm_mvm_lmac_scan(struct iwm_softc *sc)
req->scan_flags = htole32(IWM_MVM_LMAC_SCAN_FLAG_PASS_ALL |
IWM_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE |
IWM_MVM_LMAC_SCAN_FLAG_EXTENDED_DWELL);
- if (fw_has_capa(&sc->ucode_capa,
- IWM_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT))
+ if (iwm_mvm_rrm_scan_needed(sc))
req->scan_flags |= htole32(IWM_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED);
+ /* Note - IWM_PHY_BAND_5 is 0 anyway */
req->flags = htole32(IWM_PHY_BAND_24);
if (sc->nvm_data->sku_cap_band_52GHz_enable)
req->flags |= htole32(IWM_PHY_BAND_5);
+
req->filter_flags =
htole32(IWM_MAC_FILTER_ACCEPT_GRP | IWM_MAC_FILTER_IN_BEACON);
More information about the svn-src-head
mailing list