162306a36Sopenharmony_ci// SPDX-License-Identifier: ISC 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2014 Broadcom Corporation 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#ifndef _BRCMF_FEATURE_H 662306a36Sopenharmony_ci#define _BRCMF_FEATURE_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci/* 962306a36Sopenharmony_ci * Features: 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * MBSS: multiple BSSID support (eg. guest network in AP mode). 1262306a36Sopenharmony_ci * MCHAN: multi-channel for concurrent P2P. 1362306a36Sopenharmony_ci * PNO: preferred network offload. 1462306a36Sopenharmony_ci * WOWL: Wake-On-WLAN. 1562306a36Sopenharmony_ci * P2P: peer-to-peer 1662306a36Sopenharmony_ci * RSDB: Real Simultaneous Dual Band 1762306a36Sopenharmony_ci * TDLS: Tunneled Direct Link Setup 1862306a36Sopenharmony_ci * SCAN_RANDOM_MAC: Random MAC during (net detect) scheduled scan. 1962306a36Sopenharmony_ci * WOWL_ND: WOWL net detect (PNO) 2062306a36Sopenharmony_ci * WOWL_GTK: (WOWL) GTK rekeying offload 2162306a36Sopenharmony_ci * WOWL_ARP_ND: ARP and Neighbor Discovery offload support during WOWL. 2262306a36Sopenharmony_ci * MFP: 802.11w Management Frame Protection. 2362306a36Sopenharmony_ci * GSCAN: enhanced scan offload feature. 2462306a36Sopenharmony_ci * FWSUP: Firmware supplicant. 2562306a36Sopenharmony_ci * MONITOR: firmware can pass monitor packets to host. 2662306a36Sopenharmony_ci * MONITOR_FLAG: firmware flags monitor packets. 2762306a36Sopenharmony_ci * MONITOR_FMT_RADIOTAP: firmware provides monitor packets with radiotap header 2862306a36Sopenharmony_ci * MONITOR_FMT_HW_RX_HDR: firmware provides monitor packets with hw/ucode header 2962306a36Sopenharmony_ci * DOT11H: firmware supports 802.11h 3062306a36Sopenharmony_ci * SAE: simultaneous authentication of equals 3162306a36Sopenharmony_ci * FWAUTH: Firmware authenticator 3262306a36Sopenharmony_ci * DUMP_OBSS: Firmware has capable to dump obss info to support ACS 3362306a36Sopenharmony_ci * SCAN_V2: Version 2 scan params 3462306a36Sopenharmony_ci */ 3562306a36Sopenharmony_ci#define BRCMF_FEAT_LIST \ 3662306a36Sopenharmony_ci BRCMF_FEAT_DEF(MBSS) \ 3762306a36Sopenharmony_ci BRCMF_FEAT_DEF(MCHAN) \ 3862306a36Sopenharmony_ci BRCMF_FEAT_DEF(PNO) \ 3962306a36Sopenharmony_ci BRCMF_FEAT_DEF(WOWL) \ 4062306a36Sopenharmony_ci BRCMF_FEAT_DEF(P2P) \ 4162306a36Sopenharmony_ci BRCMF_FEAT_DEF(RSDB) \ 4262306a36Sopenharmony_ci BRCMF_FEAT_DEF(TDLS) \ 4362306a36Sopenharmony_ci BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \ 4462306a36Sopenharmony_ci BRCMF_FEAT_DEF(WOWL_ND) \ 4562306a36Sopenharmony_ci BRCMF_FEAT_DEF(WOWL_GTK) \ 4662306a36Sopenharmony_ci BRCMF_FEAT_DEF(WOWL_ARP_ND) \ 4762306a36Sopenharmony_ci BRCMF_FEAT_DEF(MFP) \ 4862306a36Sopenharmony_ci BRCMF_FEAT_DEF(GSCAN) \ 4962306a36Sopenharmony_ci BRCMF_FEAT_DEF(FWSUP) \ 5062306a36Sopenharmony_ci BRCMF_FEAT_DEF(MONITOR) \ 5162306a36Sopenharmony_ci BRCMF_FEAT_DEF(MONITOR_FLAG) \ 5262306a36Sopenharmony_ci BRCMF_FEAT_DEF(MONITOR_FMT_RADIOTAP) \ 5362306a36Sopenharmony_ci BRCMF_FEAT_DEF(MONITOR_FMT_HW_RX_HDR) \ 5462306a36Sopenharmony_ci BRCMF_FEAT_DEF(DOT11H) \ 5562306a36Sopenharmony_ci BRCMF_FEAT_DEF(SAE) \ 5662306a36Sopenharmony_ci BRCMF_FEAT_DEF(FWAUTH) \ 5762306a36Sopenharmony_ci BRCMF_FEAT_DEF(DUMP_OBSS) \ 5862306a36Sopenharmony_ci BRCMF_FEAT_DEF(SCAN_V2) \ 5962306a36Sopenharmony_ci BRCMF_FEAT_DEF(PMKID_V2) \ 6062306a36Sopenharmony_ci BRCMF_FEAT_DEF(PMKID_V3) 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci/* 6362306a36Sopenharmony_ci * Quirks: 6462306a36Sopenharmony_ci * 6562306a36Sopenharmony_ci * AUTO_AUTH: workaround needed for automatic authentication type. 6662306a36Sopenharmony_ci * NEED_MPC: driver needs to disable MPC during scanning operation. 6762306a36Sopenharmony_ci */ 6862306a36Sopenharmony_ci#define BRCMF_QUIRK_LIST \ 6962306a36Sopenharmony_ci BRCMF_QUIRK_DEF(AUTO_AUTH) \ 7062306a36Sopenharmony_ci BRCMF_QUIRK_DEF(NEED_MPC) 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#define BRCMF_FEAT_DEF(_f) \ 7362306a36Sopenharmony_ci BRCMF_FEAT_ ## _f, 7462306a36Sopenharmony_ci/* 7562306a36Sopenharmony_ci * expand feature list to enumeration. 7662306a36Sopenharmony_ci */ 7762306a36Sopenharmony_cienum brcmf_feat_id { 7862306a36Sopenharmony_ci BRCMF_FEAT_LIST 7962306a36Sopenharmony_ci BRCMF_FEAT_LAST 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci#undef BRCMF_FEAT_DEF 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci#define BRCMF_QUIRK_DEF(_q) \ 8462306a36Sopenharmony_ci BRCMF_FEAT_QUIRK_ ## _q, 8562306a36Sopenharmony_ci/* 8662306a36Sopenharmony_ci * expand quirk list to enumeration. 8762306a36Sopenharmony_ci */ 8862306a36Sopenharmony_cienum brcmf_feat_quirk { 8962306a36Sopenharmony_ci BRCMF_QUIRK_LIST 9062306a36Sopenharmony_ci BRCMF_FEAT_QUIRK_LAST 9162306a36Sopenharmony_ci}; 9262306a36Sopenharmony_ci#undef BRCMF_QUIRK_DEF 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/** 9562306a36Sopenharmony_ci * brcmf_feat_attach() - determine features and quirks. 9662306a36Sopenharmony_ci * 9762306a36Sopenharmony_ci * @drvr: driver instance. 9862306a36Sopenharmony_ci */ 9962306a36Sopenharmony_civoid brcmf_feat_attach(struct brcmf_pub *drvr); 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci/** 10262306a36Sopenharmony_ci * brcmf_feat_debugfs_create() - create debugfs entries. 10362306a36Sopenharmony_ci * 10462306a36Sopenharmony_ci * @drvr: driver instance. 10562306a36Sopenharmony_ci */ 10662306a36Sopenharmony_civoid brcmf_feat_debugfs_create(struct brcmf_pub *drvr); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci/** 10962306a36Sopenharmony_ci * brcmf_feat_is_enabled() - query feature. 11062306a36Sopenharmony_ci * 11162306a36Sopenharmony_ci * @ifp: interface instance. 11262306a36Sopenharmony_ci * @id: feature id to check. 11362306a36Sopenharmony_ci * 11462306a36Sopenharmony_ci * Return: true is feature is enabled; otherwise false. 11562306a36Sopenharmony_ci */ 11662306a36Sopenharmony_cibool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id); 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci/** 11962306a36Sopenharmony_ci * brcmf_feat_is_quirk_enabled() - query chip quirk. 12062306a36Sopenharmony_ci * 12162306a36Sopenharmony_ci * @ifp: interface instance. 12262306a36Sopenharmony_ci * @quirk: quirk id to check. 12362306a36Sopenharmony_ci * 12462306a36Sopenharmony_ci * Return: true is quirk is enabled; otherwise false. 12562306a36Sopenharmony_ci */ 12662306a36Sopenharmony_cibool brcmf_feat_is_quirk_enabled(struct brcmf_if *ifp, 12762306a36Sopenharmony_ci enum brcmf_feat_quirk quirk); 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci#endif /* _BRCMF_FEATURE_H */ 130