105491d2cSKalle Valo /*
205491d2cSKalle Valo  * Copyright (c) 2014 Broadcom Corporation
305491d2cSKalle Valo  *
405491d2cSKalle Valo  * Permission to use, copy, modify, and/or distribute this software for any
505491d2cSKalle Valo  * purpose with or without fee is hereby granted, provided that the above
605491d2cSKalle Valo  * copyright notice and this permission notice appear in all copies.
705491d2cSKalle Valo  *
805491d2cSKalle Valo  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
905491d2cSKalle Valo  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1005491d2cSKalle Valo  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
1105491d2cSKalle Valo  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1205491d2cSKalle Valo  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
1305491d2cSKalle Valo  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
1405491d2cSKalle Valo  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1505491d2cSKalle Valo  */
1605491d2cSKalle Valo #ifndef _BRCMF_FEATURE_H
1705491d2cSKalle Valo #define _BRCMF_FEATURE_H
1805491d2cSKalle Valo 
1905491d2cSKalle Valo /*
2005491d2cSKalle Valo  * Features:
2105491d2cSKalle Valo  *
2205491d2cSKalle Valo  * MBSS: multiple BSSID support (eg. guest network in AP mode).
2305491d2cSKalle Valo  * MCHAN: multi-channel for concurrent P2P.
2405491d2cSKalle Valo  * PNO: preferred network offload.
2505491d2cSKalle Valo  * WOWL: Wake-On-WLAN.
2605491d2cSKalle Valo  * P2P: peer-to-peer
278abffd81SHante Meuleman  * RSDB: Real Simultaneous Dual Band
28a7b82d47SHante Meuleman  * TDLS: Tunneled Direct Link Setup
2948ed16e8SHante Meuleman  * SCAN_RANDOM_MAC: Random MAC during (net detect) scheduled scan.
305c22fb85SHante Meuleman  * WOWL_ND: WOWL net detect (PNO)
315c22fb85SHante Meuleman  * WOWL_GTK: (WOWL) GTK rekeying offload
3273ef9e64SHante Meuleman  * WOWL_ARP_ND: ARP and Neighbor Discovery offload support during WOWL.
3305491d2cSKalle Valo  */
3405491d2cSKalle Valo #define BRCMF_FEAT_LIST \
3505491d2cSKalle Valo 	BRCMF_FEAT_DEF(MBSS) \
3605491d2cSKalle Valo 	BRCMF_FEAT_DEF(MCHAN) \
3705491d2cSKalle Valo 	BRCMF_FEAT_DEF(PNO) \
3805491d2cSKalle Valo 	BRCMF_FEAT_DEF(WOWL) \
398abffd81SHante Meuleman 	BRCMF_FEAT_DEF(P2P) \
40a7b82d47SHante Meuleman 	BRCMF_FEAT_DEF(RSDB) \
4148ed16e8SHante Meuleman 	BRCMF_FEAT_DEF(TDLS) \
425c22fb85SHante Meuleman 	BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \
435c22fb85SHante Meuleman 	BRCMF_FEAT_DEF(WOWL_ND) \
4473ef9e64SHante Meuleman 	BRCMF_FEAT_DEF(WOWL_GTK) \
4573ef9e64SHante Meuleman 	BRCMF_FEAT_DEF(WOWL_ARP_ND)
468abffd81SHante Meuleman 
4705491d2cSKalle Valo /*
4805491d2cSKalle Valo  * Quirks:
4905491d2cSKalle Valo  *
5005491d2cSKalle Valo  * AUTO_AUTH: workaround needed for automatic authentication type.
5105491d2cSKalle Valo  * NEED_MPC: driver needs to disable MPC during scanning operation.
5205491d2cSKalle Valo  */
5305491d2cSKalle Valo #define BRCMF_QUIRK_LIST \
5405491d2cSKalle Valo 	BRCMF_QUIRK_DEF(AUTO_AUTH) \
5505491d2cSKalle Valo 	BRCMF_QUIRK_DEF(NEED_MPC)
5605491d2cSKalle Valo 
5705491d2cSKalle Valo #define BRCMF_FEAT_DEF(_f) \
5805491d2cSKalle Valo 	BRCMF_FEAT_ ## _f,
5905491d2cSKalle Valo /*
6005491d2cSKalle Valo  * expand feature list to enumeration.
6105491d2cSKalle Valo  */
6205491d2cSKalle Valo enum brcmf_feat_id {
6305491d2cSKalle Valo 	BRCMF_FEAT_LIST
6405491d2cSKalle Valo 	BRCMF_FEAT_LAST
6505491d2cSKalle Valo };
6605491d2cSKalle Valo #undef BRCMF_FEAT_DEF
6705491d2cSKalle Valo 
6805491d2cSKalle Valo #define BRCMF_QUIRK_DEF(_q) \
6905491d2cSKalle Valo 	BRCMF_FEAT_QUIRK_ ## _q,
7005491d2cSKalle Valo /*
7105491d2cSKalle Valo  * expand quirk list to enumeration.
7205491d2cSKalle Valo  */
7305491d2cSKalle Valo enum brcmf_feat_quirk {
7405491d2cSKalle Valo 	BRCMF_QUIRK_LIST
7505491d2cSKalle Valo 	BRCMF_FEAT_QUIRK_LAST
7605491d2cSKalle Valo };
7705491d2cSKalle Valo #undef BRCMF_QUIRK_DEF
7805491d2cSKalle Valo 
7905491d2cSKalle Valo /**
8005491d2cSKalle Valo  * brcmf_feat_attach() - determine features and quirks.
8105491d2cSKalle Valo  *
8205491d2cSKalle Valo  * @drvr: driver instance.
8305491d2cSKalle Valo  */
8405491d2cSKalle Valo void brcmf_feat_attach(struct brcmf_pub *drvr);
8505491d2cSKalle Valo 
8605491d2cSKalle Valo /**
8705491d2cSKalle Valo  * brcmf_feat_is_enabled() - query feature.
8805491d2cSKalle Valo  *
8905491d2cSKalle Valo  * @ifp: interface instance.
9005491d2cSKalle Valo  * @id: feature id to check.
9105491d2cSKalle Valo  *
9205491d2cSKalle Valo  * Return: true is feature is enabled; otherwise false.
9305491d2cSKalle Valo  */
9405491d2cSKalle Valo bool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id);
9505491d2cSKalle Valo 
9605491d2cSKalle Valo /**
9705491d2cSKalle Valo  * brcmf_feat_is_quirk_enabled() - query chip quirk.
9805491d2cSKalle Valo  *
9905491d2cSKalle Valo  * @ifp: interface instance.
10005491d2cSKalle Valo  * @quirk: quirk id to check.
10105491d2cSKalle Valo  *
10205491d2cSKalle Valo  * Return: true is quirk is enabled; otherwise false.
10305491d2cSKalle Valo  */
10405491d2cSKalle Valo bool brcmf_feat_is_quirk_enabled(struct brcmf_if *ifp,
10505491d2cSKalle Valo 				 enum brcmf_feat_quirk quirk);
10605491d2cSKalle Valo 
10705491d2cSKalle Valo #endif /* _BRCMF_FEATURE_H */
108