xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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