1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 28fc8598eSJerry Chuang #ifndef __INC_DOT11D_H 38fc8598eSJerry Chuang #define __INC_DOT11D_H 48fc8598eSJerry Chuang 58fc8598eSJerry Chuang #include "ieee80211.h" 68fc8598eSJerry Chuang 71f1590f2SJohn Whitmore struct chnl_txpower_triple { 885f24df0SJohn Whitmore u8 first_channel; 98fc8598eSJerry Chuang u8 NumChnls; 108fc8598eSJerry Chuang u8 MaxTxPowerInDbm; 111f1590f2SJohn Whitmore }; 128fc8598eSJerry Chuang 138fc8598eSJerry Chuang typedef enum _DOT11D_STATE { 148fc8598eSJerry Chuang DOT11D_STATE_NONE = 0, 158fc8598eSJerry Chuang DOT11D_STATE_LEARNED, 168fc8598eSJerry Chuang DOT11D_STATE_DONE, 178fc8598eSJerry Chuang } DOT11D_STATE; 188fc8598eSJerry Chuang 198fc8598eSJerry Chuang typedef struct _RT_DOT11D_INFO { 209f627100SXenia Ragiadakou /* DECLARE_RT_OBJECT(RT_DOT11D_INFO); */ 218fc8598eSJerry Chuang 229f627100SXenia Ragiadakou bool bEnabled; /* dot11MultiDomainCapabilityEnabled */ 238fc8598eSJerry Chuang 249f627100SXenia Ragiadakou u16 CountryIeLen; /* > 0 if CountryIeBuf[] contains valid country information element. */ 258fc8598eSJerry Chuang u8 CountryIeBuf[MAX_IE_LEN]; 269f627100SXenia Ragiadakou u8 CountryIeSrcAddr[6]; /* Source AP of the country IE. */ 278fc8598eSJerry Chuang u8 CountryIeWatchdog; 288fc8598eSJerry Chuang 299f627100SXenia Ragiadakou u8 channel_map[MAX_CHANNEL_NUMBER+1]; /* !Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan) */ 308fc8598eSJerry Chuang u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1]; 318fc8598eSJerry Chuang 328fc8598eSJerry Chuang DOT11D_STATE State; 338fc8598eSJerry Chuang } RT_DOT11D_INFO, *PRT_DOT11D_INFO; 349f627100SXenia Ragiadakou #define eqMacAddr(a, b) (((a)[0] == (b)[0] && \ 359f627100SXenia Ragiadakou (a)[1] == (b)[1] && (a)[2] == (b)[2] && (a)[3] == (b)[3] && \ 369f627100SXenia Ragiadakou (a)[4] == (b)[4] && (a)[5] == (b)[5]) ? 1 : 0) 379f627100SXenia Ragiadakou #define cpMacAddr(des, src) ((des)[0] = (src)[0], \ 389f627100SXenia Ragiadakou (des)[1] = (src)[1], (des)[2] = (src)[2], \ 399f627100SXenia Ragiadakou (des)[3] = (src)[3], (des)[4] = (src)[4], \ 409f627100SXenia Ragiadakou (des)[5] = (src)[5]) 418fc8598eSJerry Chuang #define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo)) 428fc8598eSJerry Chuang 439f627100SXenia Ragiadakou #define IS_DOT11D_ENABLE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->bEnabled) 448fc8598eSJerry Chuang #define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0) 458fc8598eSJerry Chuang 468fc8598eSJerry Chuang #define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) 478fc8598eSJerry Chuang #define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) 488fc8598eSJerry Chuang 498fc8598eSJerry Chuang #define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \ 508fc8598eSJerry Chuang (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \ 518fc8598eSJerry Chuang FALSE : \ 528fc8598eSJerry Chuang (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length))) 538fc8598eSJerry Chuang 548fc8598eSJerry Chuang #define CIE_WATCHDOG_TH 1 559f627100SXenia Ragiadakou #define GET_CIE_WATCHDOG(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog) 565877ecc3STolga Ceylan #define RESET_CIE_WATCHDOG(__pIeeeDev) (GET_CIE_WATCHDOG(__pIeeeDev) = 0) 579f627100SXenia Ragiadakou #define UPDATE_CIE_WATCHDOG(__pIeeeDev) (++GET_CIE_WATCHDOG(__pIeeeDev)) 588fc8598eSJerry Chuang 598fc8598eSJerry Chuang #define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE) 608fc8598eSJerry Chuang 618fc8598eSJerry Chuang void 628fc8598eSJerry Chuang Dot11d_Init( 638fc8598eSJerry Chuang struct ieee80211_device *dev 648fc8598eSJerry Chuang ); 658fc8598eSJerry Chuang 668fc8598eSJerry Chuang void 678fc8598eSJerry Chuang Dot11d_Reset( 688fc8598eSJerry Chuang struct ieee80211_device *dev 698fc8598eSJerry Chuang ); 708fc8598eSJerry Chuang 718fc8598eSJerry Chuang void 728fc8598eSJerry Chuang Dot11d_UpdateCountryIe( 738fc8598eSJerry Chuang struct ieee80211_device *dev, 748fc8598eSJerry Chuang u8 *pTaddr, 758fc8598eSJerry Chuang u16 CoutryIeLen, 768fc8598eSJerry Chuang u8 *pCoutryIe 778fc8598eSJerry Chuang ); 788fc8598eSJerry Chuang 798fc8598eSJerry Chuang u8 808fc8598eSJerry Chuang DOT11D_GetMaxTxPwrInDbm( 818fc8598eSJerry Chuang struct ieee80211_device *dev, 828fc8598eSJerry Chuang u8 Channel 838fc8598eSJerry Chuang ); 848fc8598eSJerry Chuang 858fc8598eSJerry Chuang void 868fc8598eSJerry Chuang DOT11D_ScanComplete( 878fc8598eSJerry Chuang struct ieee80211_device *dev 888fc8598eSJerry Chuang ); 898fc8598eSJerry Chuang 908fc8598eSJerry Chuang int IsLegalChannel( 918fc8598eSJerry Chuang struct ieee80211_device *dev, 928fc8598eSJerry Chuang u8 channel 938fc8598eSJerry Chuang ); 948fc8598eSJerry Chuang 958fc8598eSJerry Chuang int ToLegalChannel( 968fc8598eSJerry Chuang struct ieee80211_device *dev, 978fc8598eSJerry Chuang u8 channel 988fc8598eSJerry Chuang ); 999f627100SXenia Ragiadakou #endif /* #ifndef __INC_DOT11D_H */ 100