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; 9321639a7SJohn Whitmore u8 num_channels; 108132962aSJohn Whitmore u8 max_tx_pwr_dbm; 111f1590f2SJohn Whitmore }; 128fc8598eSJerry Chuang 13e24411b3SJohn Whitmore enum dot11d_state { 148fc8598eSJerry Chuang DOT11D_STATE_NONE = 0, 158fc8598eSJerry Chuang DOT11D_STATE_LEARNED, 168fc8598eSJerry Chuang DOT11D_STATE_DONE, 17e24411b3SJohn Whitmore }; 188fc8598eSJerry Chuang 193c22fbafSJohn Whitmore struct rt_dot11d_info { 2018ee7be9SJohn Whitmore u16 country_ie_len; /* > 0 if country_ie_buf[] contains valid country information element. */ 219391bea9SJohn Whitmore 229391bea9SJohn Whitmore /* country_ie_src_addr u16 aligned for comparison and copy */ 2351e1eb74SJohn Whitmore u8 country_ie_src_addr[ETH_ALEN]; /* Source AP of the country IE. */ 249391bea9SJohn Whitmore u8 country_ie_buf[MAX_IE_LEN]; 256963fe99SJohn Whitmore u8 country_ie_watchdog; 268fc8598eSJerry Chuang 279f627100SXenia Ragiadakou u8 channel_map[MAX_CHANNEL_NUMBER + 1]; /* !Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan) */ 286da23bfdSJohn Whitmore u8 max_tx_pwr_dbm_list[MAX_CHANNEL_NUMBER + 1]; 298fc8598eSJerry Chuang 302aa608bcSJohn Whitmore enum dot11d_state state; 319391bea9SJohn Whitmore bool enabled; /* dot11MultiDomainCapabilityEnabled */ 323c22fbafSJohn Whitmore }; 333c22fbafSJohn Whitmore 34abdc4caeSJohn Whitmore #define GET_DOT11D_INFO(ieee_dev) ((struct rt_dot11d_info *)((ieee_dev)->pDot11dInfo)) 358fc8598eSJerry Chuang 36abdc4caeSJohn Whitmore #define IS_DOT11D_ENABLE(ieee_dev) (GET_DOT11D_INFO(ieee_dev)->enabled) 37abdc4caeSJohn Whitmore #define IS_COUNTRY_IE_VALID(ieee_dev) (GET_DOT11D_INFO(ieee_dev)->country_ie_len > 0) 388fc8598eSJerry Chuang 39bc3ae241SJohn Whitmore #define IS_EQUAL_CIE_SRC(ieee_dev, addr) ether_addr_equal(GET_DOT11D_INFO(ieee_dev)->country_ie_src_addr, addr) 40bc3ae241SJohn Whitmore #define UPDATE_CIE_SRC(ieee_dev, addr) ether_addr_copy(GET_DOT11D_INFO(ieee_dev)->country_ie_src_addr, addr) 418fc8598eSJerry Chuang 42abdc4caeSJohn Whitmore #define GET_CIE_WATCHDOG(ieee_dev) (GET_DOT11D_INFO(ieee_dev)->country_ie_watchdog) 43abdc4caeSJohn Whitmore #define RESET_CIE_WATCHDOG(ieee_dev) (GET_CIE_WATCHDOG(ieee_dev) = 0) 44abdc4caeSJohn Whitmore #define UPDATE_CIE_WATCHDOG(ieee_dev) (++GET_CIE_WATCHDOG(ieee_dev)) 458fc8598eSJerry Chuang 468fc8598eSJerry Chuang void 478fc8598eSJerry Chuang Dot11d_Init( 488fc8598eSJerry Chuang struct ieee80211_device *dev 498fc8598eSJerry Chuang ); 508fc8598eSJerry Chuang 518fc8598eSJerry Chuang void 528fc8598eSJerry Chuang Dot11d_Reset( 538fc8598eSJerry Chuang struct ieee80211_device *dev 548fc8598eSJerry Chuang ); 558fc8598eSJerry Chuang 568fc8598eSJerry Chuang void 578fc8598eSJerry Chuang Dot11d_UpdateCountryIe( 588fc8598eSJerry Chuang struct ieee80211_device *dev, 598fc8598eSJerry Chuang u8 *pTaddr, 608fc8598eSJerry Chuang u16 CoutryIeLen, 618fc8598eSJerry Chuang u8 *pCoutryIe 628fc8598eSJerry Chuang ); 638fc8598eSJerry Chuang 648fc8598eSJerry Chuang u8 658fc8598eSJerry Chuang DOT11D_GetMaxTxPwrInDbm( 668fc8598eSJerry Chuang struct ieee80211_device *dev, 678fc8598eSJerry Chuang u8 Channel 688fc8598eSJerry Chuang ); 698fc8598eSJerry Chuang 708fc8598eSJerry Chuang void 718fc8598eSJerry Chuang DOT11D_ScanComplete( 728fc8598eSJerry Chuang struct ieee80211_device *dev 738fc8598eSJerry Chuang ); 748fc8598eSJerry Chuang 758fc8598eSJerry Chuang int IsLegalChannel( 768fc8598eSJerry Chuang struct ieee80211_device *dev, 778fc8598eSJerry Chuang u8 channel 788fc8598eSJerry Chuang ); 798fc8598eSJerry Chuang 808fc8598eSJerry Chuang int ToLegalChannel( 818fc8598eSJerry Chuang struct ieee80211_device *dev, 828fc8598eSJerry Chuang u8 channel 838fc8598eSJerry Chuang ); 849f627100SXenia Ragiadakou #endif /* #ifndef __INC_DOT11D_H */ 85