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
3205491d2cSKalle Valo  */
3305491d2cSKalle Valo #define BRCMF_FEAT_LIST \
3405491d2cSKalle Valo 	BRCMF_FEAT_DEF(MBSS) \
3505491d2cSKalle Valo 	BRCMF_FEAT_DEF(MCHAN) \
3605491d2cSKalle Valo 	BRCMF_FEAT_DEF(PNO) \
3705491d2cSKalle Valo 	BRCMF_FEAT_DEF(WOWL) \
388abffd81SHante Meuleman 	BRCMF_FEAT_DEF(P2P) \
39a7b82d47SHante Meuleman 	BRCMF_FEAT_DEF(RSDB) \
4048ed16e8SHante Meuleman 	BRCMF_FEAT_DEF(TDLS) \
415c22fb85SHante Meuleman 	BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \
425c22fb85SHante Meuleman 	BRCMF_FEAT_DEF(WOWL_ND) \
435c22fb85SHante Meuleman 	BRCMF_FEAT_DEF(WOWL_GTK)
448abffd81SHante Meuleman 
4505491d2cSKalle Valo /*
4605491d2cSKalle Valo  * Quirks:
4705491d2cSKalle Valo  *
4805491d2cSKalle Valo  * AUTO_AUTH: workaround needed for automatic authentication type.
4905491d2cSKalle Valo  * NEED_MPC: driver needs to disable MPC during scanning operation.
5005491d2cSKalle Valo  */
5105491d2cSKalle Valo #define BRCMF_QUIRK_LIST \
5205491d2cSKalle Valo 	BRCMF_QUIRK_DEF(AUTO_AUTH) \
5305491d2cSKalle Valo 	BRCMF_QUIRK_DEF(NEED_MPC)
5405491d2cSKalle Valo 
5505491d2cSKalle Valo #define BRCMF_FEAT_DEF(_f) \
5605491d2cSKalle Valo 	BRCMF_FEAT_ ## _f,
5705491d2cSKalle Valo /*
5805491d2cSKalle Valo  * expand feature list to enumeration.
5905491d2cSKalle Valo  */
6005491d2cSKalle Valo enum brcmf_feat_id {
6105491d2cSKalle Valo 	BRCMF_FEAT_LIST
6205491d2cSKalle Valo 	BRCMF_FEAT_LAST
6305491d2cSKalle Valo };
6405491d2cSKalle Valo #undef BRCMF_FEAT_DEF
6505491d2cSKalle Valo 
6605491d2cSKalle Valo #define BRCMF_QUIRK_DEF(_q) \
6705491d2cSKalle Valo 	BRCMF_FEAT_QUIRK_ ## _q,
6805491d2cSKalle Valo /*
6905491d2cSKalle Valo  * expand quirk list to enumeration.
7005491d2cSKalle Valo  */
7105491d2cSKalle Valo enum brcmf_feat_quirk {
7205491d2cSKalle Valo 	BRCMF_QUIRK_LIST
7305491d2cSKalle Valo 	BRCMF_FEAT_QUIRK_LAST
7405491d2cSKalle Valo };
7505491d2cSKalle Valo #undef BRCMF_QUIRK_DEF
7605491d2cSKalle Valo 
7705491d2cSKalle Valo /**
7805491d2cSKalle Valo  * brcmf_feat_attach() - determine features and quirks.
7905491d2cSKalle Valo  *
8005491d2cSKalle Valo  * @drvr: driver instance.
8105491d2cSKalle Valo  */
8205491d2cSKalle Valo void brcmf_feat_attach(struct brcmf_pub *drvr);
8305491d2cSKalle Valo 
8405491d2cSKalle Valo /**
8505491d2cSKalle Valo  * brcmf_feat_is_enabled() - query feature.
8605491d2cSKalle Valo  *
8705491d2cSKalle Valo  * @ifp: interface instance.
8805491d2cSKalle Valo  * @id: feature id to check.
8905491d2cSKalle Valo  *
9005491d2cSKalle Valo  * Return: true is feature is enabled; otherwise false.
9105491d2cSKalle Valo  */
9205491d2cSKalle Valo bool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id);
9305491d2cSKalle Valo 
9405491d2cSKalle Valo /**
9505491d2cSKalle Valo  * brcmf_feat_is_quirk_enabled() - query chip quirk.
9605491d2cSKalle Valo  *
9705491d2cSKalle Valo  * @ifp: interface instance.
9805491d2cSKalle Valo  * @quirk: quirk id to check.
9905491d2cSKalle Valo  *
10005491d2cSKalle Valo  * Return: true is quirk is enabled; otherwise false.
10105491d2cSKalle Valo  */
10205491d2cSKalle Valo bool brcmf_feat_is_quirk_enabled(struct brcmf_if *ifp,
10305491d2cSKalle Valo 				 enum brcmf_feat_quirk quirk);
10405491d2cSKalle Valo 
10505491d2cSKalle Valo #endif /* _BRCMF_FEATURE_H */
106