On Mon, 13 Dec 2021 at 14:49, Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx> wrote: > > Downstream facilitates the direct programming of beacon filter tables via > SMD commands. > > The purpose of beacon filters is quote: > > /* When beacon filtering is enabled, firmware will > * analyze the selected beacons received during BMPS, > * and monitor any changes in the IEs as listed below. > * The format of the table is: > * - EID > * - Check for IE presence > * - Byte offset > * - Byte value > * - Bit Mask > * - Byte reference > */ > > The default downstream firmware filter table looks something like this: > tBeaconFilterIe gaBcnFilterTable[12] = > { > { WLAN_EID_DS_PARAMS, 0u, { 0u, 0u, 0u, 0u } }, > { WLAN_EID_ERP_INFO, 0u, { 0u, 0u, 248u, 0u } }, > { WLAN_EID_EDCA_PARAM_SET, 0u, { 0u, 0u, 240u, 0u } }, > { WLAN_EID_QOS_CAPA, 0u, { 0u, 0u, 240u, 0u } }, > { WLAN_EID_CHANNEL_SWITCH, 1u, { 0u, 0u, 0u, 0u } }, > { WLAN_EID_QUIET, 1u, { 0u, 0u, 0u, 0u } }, > { WLAN_EID_HT_OPERATION, 0u, { 0u, 0u, 0u, 0u } }, > { WLAN_EID_HT_OPERATION, 0u, { 1u, 0u, 248u, 0u } }, > { WLAN_EID_HT_OPERATION, 0u, { 2u, 0u, 235u, 0u } }, > { WLAN_EID_HT_OPERATION, 0u, { 5u, 0u, 253u, 0u } }, > { WLAN_EID_PWR_CONSTRAINT, 0u, { 0u, 0u, 0u, 0u } }, > { WLAN_EID_OPMODE_NOTIF, 0u, { 0u, 0u, 0u, 0u } } > }; > > Add in an equivalent filter set as present in the downstream Linux driver. > For now omit the beacon filter "rem" command as downstream does not have an > explicit call to that SMD command. The filter mask should only count when > we are inside BMPS anyway. > > Replicating the downstream ability to program the filter table gives us > scope to add and remove elements in future. For now though this patch > makes the rote-copy of the downstream Linux beacon filter table, which we > can tweak as desired from now on. > > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx> > --- > drivers/net/wireless/ath/wcn36xx/hal.h | 16 ++++ > drivers/net/wireless/ath/wcn36xx/main.c | 1 + > drivers/net/wireless/ath/wcn36xx/smd.c | 104 ++++++++++++++++++++++++ > drivers/net/wireless/ath/wcn36xx/smd.h | 3 + > 4 files changed, 124 insertions(+) > [...] > diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c > index f59eb1119da88..a4510f144041f 100644 > --- a/drivers/net/wireless/ath/wcn36xx/main.c > +++ b/drivers/net/wireless/ath/wcn36xx/main.c > @@ -934,6 +934,7 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw, > * place where AID is available. > */ > wcn36xx_smd_config_sta(wcn, vif, sta); > + wcn36xx_smd_add_beacon_filter(wcn, vif); Shouldn't this be configured only if the vif type is NL80211_IFTYPE_STATION? Regards, Loic