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