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