1*b4c3e9b5SBjoern A. Zeeb // SPDX-License-Identifier: ISC 2*b4c3e9b5SBjoern A. Zeeb /* 3*b4c3e9b5SBjoern A. Zeeb * Copyright (c) 2014 Broadcom Corporation 4*b4c3e9b5SBjoern A. Zeeb */ 5*b4c3e9b5SBjoern A. Zeeb #ifndef _BRCMF_FEATURE_H 6*b4c3e9b5SBjoern A. Zeeb #define _BRCMF_FEATURE_H 7*b4c3e9b5SBjoern A. Zeeb 8*b4c3e9b5SBjoern A. Zeeb /* 9*b4c3e9b5SBjoern A. Zeeb * Features: 10*b4c3e9b5SBjoern A. Zeeb * 11*b4c3e9b5SBjoern A. Zeeb * MBSS: multiple BSSID support (eg. guest network in AP mode). 12*b4c3e9b5SBjoern A. Zeeb * MCHAN: multi-channel for concurrent P2P. 13*b4c3e9b5SBjoern A. Zeeb * PNO: preferred network offload. 14*b4c3e9b5SBjoern A. Zeeb * WOWL: Wake-On-WLAN. 15*b4c3e9b5SBjoern A. Zeeb * P2P: peer-to-peer 16*b4c3e9b5SBjoern A. Zeeb * RSDB: Real Simultaneous Dual Band 17*b4c3e9b5SBjoern A. Zeeb * TDLS: Tunneled Direct Link Setup 18*b4c3e9b5SBjoern A. Zeeb * SCAN_RANDOM_MAC: Random MAC during (net detect) scheduled scan. 19*b4c3e9b5SBjoern A. Zeeb * WOWL_ND: WOWL net detect (PNO) 20*b4c3e9b5SBjoern A. Zeeb * WOWL_GTK: (WOWL) GTK rekeying offload 21*b4c3e9b5SBjoern A. Zeeb * WOWL_ARP_ND: ARP and Neighbor Discovery offload support during WOWL. 22*b4c3e9b5SBjoern A. Zeeb * MFP: 802.11w Management Frame Protection. 23*b4c3e9b5SBjoern A. Zeeb * GSCAN: enhanced scan offload feature. 24*b4c3e9b5SBjoern A. Zeeb * FWSUP: Firmware supplicant. 25*b4c3e9b5SBjoern A. Zeeb * MONITOR: firmware can pass monitor packets to host. 26*b4c3e9b5SBjoern A. Zeeb * MONITOR_FLAG: firmware flags monitor packets. 27*b4c3e9b5SBjoern A. Zeeb * MONITOR_FMT_RADIOTAP: firmware provides monitor packets with radiotap header 28*b4c3e9b5SBjoern A. Zeeb * MONITOR_FMT_HW_RX_HDR: firmware provides monitor packets with hw/ucode header 29*b4c3e9b5SBjoern A. Zeeb * DOT11H: firmware supports 802.11h 30*b4c3e9b5SBjoern A. Zeeb * SAE: simultaneous authentication of equals 31*b4c3e9b5SBjoern A. Zeeb * FWAUTH: Firmware authenticator 32*b4c3e9b5SBjoern A. Zeeb * DUMP_OBSS: Firmware has capable to dump obss info to support ACS 33*b4c3e9b5SBjoern A. Zeeb * SCAN_V2: Version 2 scan params 34*b4c3e9b5SBjoern A. Zeeb * SAE_EXT: SAE authentication handled by user-space supplicant 35*b4c3e9b5SBjoern A. Zeeb */ 36*b4c3e9b5SBjoern A. Zeeb #define BRCMF_FEAT_LIST \ 37*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MBSS) \ 38*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MCHAN) \ 39*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(PNO) \ 40*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(WOWL) \ 41*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(P2P) \ 42*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(RSDB) \ 43*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(TDLS) \ 44*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \ 45*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(WOWL_ND) \ 46*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(WOWL_GTK) \ 47*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(WOWL_ARP_ND) \ 48*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MFP) \ 49*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(GSCAN) \ 50*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(FWSUP) \ 51*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MONITOR) \ 52*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MONITOR_FLAG) \ 53*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MONITOR_FMT_RADIOTAP) \ 54*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(MONITOR_FMT_HW_RX_HDR) \ 55*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(DOT11H) \ 56*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(SAE) \ 57*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(FWAUTH) \ 58*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(DUMP_OBSS) \ 59*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(SCAN_V2) \ 60*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(PMKID_V2) \ 61*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(PMKID_V3) \ 62*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_DEF(SAE_EXT) 63*b4c3e9b5SBjoern A. Zeeb 64*b4c3e9b5SBjoern A. Zeeb /* 65*b4c3e9b5SBjoern A. Zeeb * Quirks: 66*b4c3e9b5SBjoern A. Zeeb * 67*b4c3e9b5SBjoern A. Zeeb * AUTO_AUTH: workaround needed for automatic authentication type. 68*b4c3e9b5SBjoern A. Zeeb * NEED_MPC: driver needs to disable MPC during scanning operation. 69*b4c3e9b5SBjoern A. Zeeb */ 70*b4c3e9b5SBjoern A. Zeeb #define BRCMF_QUIRK_LIST \ 71*b4c3e9b5SBjoern A. Zeeb BRCMF_QUIRK_DEF(AUTO_AUTH) \ 72*b4c3e9b5SBjoern A. Zeeb BRCMF_QUIRK_DEF(NEED_MPC) 73*b4c3e9b5SBjoern A. Zeeb 74*b4c3e9b5SBjoern A. Zeeb #define BRCMF_FEAT_DEF(_f) \ 75*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_ ## _f, 76*b4c3e9b5SBjoern A. Zeeb /* 77*b4c3e9b5SBjoern A. Zeeb * expand feature list to enumeration. 78*b4c3e9b5SBjoern A. Zeeb */ 79*b4c3e9b5SBjoern A. Zeeb enum brcmf_feat_id { 80*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_LIST 81*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_LAST 82*b4c3e9b5SBjoern A. Zeeb }; 83*b4c3e9b5SBjoern A. Zeeb #undef BRCMF_FEAT_DEF 84*b4c3e9b5SBjoern A. Zeeb 85*b4c3e9b5SBjoern A. Zeeb #define BRCMF_QUIRK_DEF(_q) \ 86*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_QUIRK_ ## _q, 87*b4c3e9b5SBjoern A. Zeeb /* 88*b4c3e9b5SBjoern A. Zeeb * expand quirk list to enumeration. 89*b4c3e9b5SBjoern A. Zeeb */ 90*b4c3e9b5SBjoern A. Zeeb enum brcmf_feat_quirk { 91*b4c3e9b5SBjoern A. Zeeb BRCMF_QUIRK_LIST 92*b4c3e9b5SBjoern A. Zeeb BRCMF_FEAT_QUIRK_LAST 93*b4c3e9b5SBjoern A. Zeeb }; 94*b4c3e9b5SBjoern A. Zeeb #undef BRCMF_QUIRK_DEF 95*b4c3e9b5SBjoern A. Zeeb 96*b4c3e9b5SBjoern A. Zeeb /** 97*b4c3e9b5SBjoern A. Zeeb * brcmf_feat_attach() - determine features and quirks. 98*b4c3e9b5SBjoern A. Zeeb * 99*b4c3e9b5SBjoern A. Zeeb * @drvr: driver instance. 100*b4c3e9b5SBjoern A. Zeeb */ 101*b4c3e9b5SBjoern A. Zeeb void brcmf_feat_attach(struct brcmf_pub *drvr); 102*b4c3e9b5SBjoern A. Zeeb 103*b4c3e9b5SBjoern A. Zeeb /** 104*b4c3e9b5SBjoern A. Zeeb * brcmf_feat_debugfs_create() - create debugfs entries. 105*b4c3e9b5SBjoern A. Zeeb * 106*b4c3e9b5SBjoern A. Zeeb * @drvr: driver instance. 107*b4c3e9b5SBjoern A. Zeeb */ 108*b4c3e9b5SBjoern A. Zeeb void brcmf_feat_debugfs_create(struct brcmf_pub *drvr); 109*b4c3e9b5SBjoern A. Zeeb 110*b4c3e9b5SBjoern A. Zeeb /** 111*b4c3e9b5SBjoern A. Zeeb * brcmf_feat_is_enabled() - query feature. 112*b4c3e9b5SBjoern A. Zeeb * 113*b4c3e9b5SBjoern A. Zeeb * @ifp: interface instance. 114*b4c3e9b5SBjoern A. Zeeb * @id: feature id to check. 115*b4c3e9b5SBjoern A. Zeeb * 116*b4c3e9b5SBjoern A. Zeeb * Return: true is feature is enabled; otherwise false. 117*b4c3e9b5SBjoern A. Zeeb */ 118*b4c3e9b5SBjoern A. Zeeb bool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id); 119*b4c3e9b5SBjoern A. Zeeb 120*b4c3e9b5SBjoern A. Zeeb /** 121*b4c3e9b5SBjoern A. Zeeb * brcmf_feat_is_quirk_enabled() - query chip quirk. 122*b4c3e9b5SBjoern A. Zeeb * 123*b4c3e9b5SBjoern A. Zeeb * @ifp: interface instance. 124*b4c3e9b5SBjoern A. Zeeb * @quirk: quirk id to check. 125*b4c3e9b5SBjoern A. Zeeb * 126*b4c3e9b5SBjoern A. Zeeb * Return: true is quirk is enabled; otherwise false. 127*b4c3e9b5SBjoern A. Zeeb */ 128*b4c3e9b5SBjoern A. Zeeb bool brcmf_feat_is_quirk_enabled(struct brcmf_if *ifp, 129*b4c3e9b5SBjoern A. Zeeb enum brcmf_feat_quirk quirk); 130*b4c3e9b5SBjoern A. Zeeb 131*b4c3e9b5SBjoern A. Zeeb #endif /* _BRCMF_FEATURE_H */ 132