]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
8fc8598e JC |
2 | #ifndef __INC_DOT11D_H |
3 | #define __INC_DOT11D_H | |
4 | ||
8fc8598e JC |
5 | #include "ieee80211.h" |
6 | ||
8fc8598e | 7 | |
8fc8598e JC |
8 | typedef struct _CHNL_TXPOWER_TRIPLE { |
9 | u8 FirstChnl; | |
10 | u8 NumChnls; | |
11 | u8 MaxTxPowerInDbm; | |
9f627100 | 12 | } CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; |
8fc8598e JC |
13 | |
14 | typedef enum _DOT11D_STATE { | |
15 | DOT11D_STATE_NONE = 0, | |
16 | DOT11D_STATE_LEARNED, | |
17 | DOT11D_STATE_DONE, | |
9f627100 | 18 | } DOT11D_STATE; |
8fc8598e JC |
19 | |
20 | typedef struct _RT_DOT11D_INFO { | |
9f627100 | 21 | /* DECLARE_RT_OBJECT(RT_DOT11D_INFO); */ |
8fc8598e | 22 | |
9f627100 | 23 | bool bEnabled; /* dot11MultiDomainCapabilityEnabled */ |
8fc8598e | 24 | |
9f627100 | 25 | u16 CountryIeLen; /* > 0 if CountryIeBuf[] contains valid country information element. */ |
8fc8598e | 26 | u8 CountryIeBuf[MAX_IE_LEN]; |
9f627100 | 27 | u8 CountryIeSrcAddr[6]; /* Source AP of the country IE. */ |
8fc8598e JC |
28 | u8 CountryIeWatchdog; |
29 | ||
9f627100 | 30 | u8 channel_map[MAX_CHANNEL_NUMBER+1]; /* !Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan) */ |
8fc8598e JC |
31 | u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1]; |
32 | ||
33 | DOT11D_STATE State; | |
9f627100 XR |
34 | } RT_DOT11D_INFO, *PRT_DOT11D_INFO; |
35 | #define eqMacAddr(a, b) (((a)[0] == (b)[0] && \ | |
36 | (a)[1] == (b)[1] && (a)[2] == (b)[2] && (a)[3] == (b)[3] && \ | |
37 | (a)[4] == (b)[4] && (a)[5] == (b)[5]) ? 1 : 0) | |
38 | #define cpMacAddr(des, src) ((des)[0] = (src)[0], \ | |
39 | (des)[1] = (src)[1], (des)[2] = (src)[2], \ | |
40 | (des)[3] = (src)[3], (des)[4] = (src)[4], \ | |
41 | (des)[5] = (src)[5]) | |
8fc8598e JC |
42 | #define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo)) |
43 | ||
9f627100 | 44 | #define IS_DOT11D_ENABLE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->bEnabled) |
8fc8598e JC |
45 | #define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0) |
46 | ||
47 | #define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) | |
48 | #define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) | |
49 | ||
50 | #define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \ | |
51 | (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \ | |
52 | FALSE : \ | |
53 | (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length))) | |
54 | ||
55 | #define CIE_WATCHDOG_TH 1 | |
9f627100 | 56 | #define GET_CIE_WATCHDOG(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog) |
5877ecc3 | 57 | #define RESET_CIE_WATCHDOG(__pIeeeDev) (GET_CIE_WATCHDOG(__pIeeeDev) = 0) |
9f627100 | 58 | #define UPDATE_CIE_WATCHDOG(__pIeeeDev) (++GET_CIE_WATCHDOG(__pIeeeDev)) |
8fc8598e JC |
59 | |
60 | #define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE) | |
61 | ||
62 | ||
63 | void | |
64 | Dot11d_Init( | |
65 | struct ieee80211_device *dev | |
66 | ); | |
67 | ||
68 | void | |
69 | Dot11d_Reset( | |
70 | struct ieee80211_device *dev | |
71 | ); | |
72 | ||
73 | void | |
74 | Dot11d_UpdateCountryIe( | |
75 | struct ieee80211_device *dev, | |
5d279df1 | 76 | u8 *pTaddr, |
9f627100 | 77 | u16 CoutryIeLen, |
5d279df1 | 78 | u8 *pCoutryIe |
8fc8598e JC |
79 | ); |
80 | ||
81 | u8 | |
82 | DOT11D_GetMaxTxPwrInDbm( | |
83 | struct ieee80211_device *dev, | |
84 | u8 Channel | |
85 | ); | |
86 | ||
87 | void | |
88 | DOT11D_ScanComplete( | |
5d279df1 | 89 | struct ieee80211_device *dev |
8fc8598e JC |
90 | ); |
91 | ||
92 | int IsLegalChannel( | |
5d279df1 | 93 | struct ieee80211_device *dev, |
8fc8598e JC |
94 | u8 channel |
95 | ); | |
96 | ||
97 | int ToLegalChannel( | |
5d279df1 | 98 | struct ieee80211_device *dev, |
8fc8598e JC |
99 | u8 channel |
100 | ); | |
9f627100 | 101 | #endif /* #ifndef __INC_DOT11D_H */ |