Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 1 | #ifndef INC_DOT11D_H |
| 2 | #define INC_DOT11D_H |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 3 | |
| 4 | #ifdef ENABLE_DOT11D |
| 5 | #include "ieee80211.h" |
| 6 | |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 7 | typedef struct _CHNL_TXPOWER_TRIPLE { |
| 8 | u8 FirstChnl; |
| 9 | u8 NumChnls; |
| 10 | u8 MaxTxPowerInDbm; |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 11 | } CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 12 | |
| 13 | typedef enum _DOT11D_STATE { |
| 14 | DOT11D_STATE_NONE = 0, |
| 15 | DOT11D_STATE_LEARNED, |
| 16 | DOT11D_STATE_DONE, |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 17 | } DOT11D_STATE; |
| 18 | |
| 19 | /** |
| 20 | * struct _RT_DOT11D_INFO |
| 21 | * @CountryIeLen: value greater than 0 if @CountryIeBuf contains |
Ken O'Brien | dc6b15f | 2011-06-05 18:24:32 +0100 | [diff] [blame^] | 22 | * valid country information element. |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 23 | * @chanell_map: holds channel values |
| 24 | * 0 - invalid, |
| 25 | * 1 - valid (active scan), |
Ken O'Brien | dc6b15f | 2011-06-05 18:24:32 +0100 | [diff] [blame^] | 26 | * 2 - valid (passive scan) |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 27 | * @CountryIeSrcAddr - Source AP of the country IE |
| 28 | */ |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 29 | |
| 30 | typedef struct _RT_DOT11D_INFO { |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 31 | bool bEnabled; |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 32 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 33 | u16 CountryIeLen; |
| 34 | u8 CountryIeBuf[MAX_IE_LEN]; |
| 35 | u8 CountryIeSrcAddr[6]; |
| 36 | u8 CountryIeWatchdog; |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 37 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 38 | u8 channel_map[MAX_CHANNEL_NUMBER+1]; |
| 39 | u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1]; |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 40 | |
| 41 | DOT11D_STATE State; |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 42 | } RT_DOT11D_INFO, *PRT_DOT11D_INFO; |
| 43 | |
Mike McCormack | dd18473 | 2010-12-27 21:49:49 +0900 | [diff] [blame] | 44 | static inline void cpMacAddr(unsigned char *des, unsigned char *src) |
| 45 | { |
| 46 | memcpy(des, src, 6); |
| 47 | } |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 48 | |
| 49 | #define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO) \ |
| 50 | ((__pIeeeDev)->pDot11dInfo)) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 51 | |
Ken O'Brien | dc6b15f | 2011-06-05 18:24:32 +0100 | [diff] [blame^] | 52 | #define IS_DOT11D_ENABLE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->bEnabled) |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 53 | #define IS_COUNTRY_IE_VALID(__pIeeeDev) \ |
| 54 | (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 55 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 56 | #define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) \ |
| 57 | eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) |
| 58 | |
| 59 | #define UPDATE_CIE_SRC(__pIeeeDev, __pTa) \ |
| 60 | cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 61 | |
| 62 | #define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \ |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 63 | (((__Ie).Length == 0 || (__Ie).Length != \ |
| 64 | GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? FALSE : \ |
| 65 | (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, \ |
| 66 | (__Ie).Octet, (__Ie).Length))) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 67 | |
| 68 | #define CIE_WATCHDOG_TH 1 |
Ken O'Brien | dc6b15f | 2011-06-05 18:24:32 +0100 | [diff] [blame^] | 69 | #define GET_CIE_WATCHDOG(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)-> \ |
| 70 | CountryIeWatchdog) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 71 | #define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0 |
Ken O'Brien | dc6b15f | 2011-06-05 18:24:32 +0100 | [diff] [blame^] | 72 | #define UPDATE_CIE_WATCHDOG(__pIeeeDev) (++GET_CIE_WATCHDOG(__pIeeeDev)) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 73 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 74 | #define IS_DOT11D_STATE_DONE(__pIeeeDev) \ |
| 75 | (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE) |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 76 | |
| 77 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 78 | void Dot11d_Init(struct ieee80211_device *dev); |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 79 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 80 | void Dot11d_Reset(struct ieee80211_device *dev); |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 81 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 82 | void Dot11d_UpdateCountryIe(struct ieee80211_device *dev, u8 *pTaddr, |
| 83 | u16 CoutryIeLen, u8 *pCoutryIe); |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 84 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 85 | u8 DOT11D_GetMaxTxPwrInDbm(struct ieee80211_device *dev, u8 channel); |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 86 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 87 | void DOT11D_ScanComplete(struct ieee80211_device *dev); |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 88 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 89 | int IsLegalChannel(struct ieee80211_device *dev, u8 channel); |
Greg Kroah-Hartman | ecdfa44 | 2009-08-04 15:57:55 -0700 | [diff] [blame] | 90 | |
Radu Voicilas | 789d9db | 2009-12-04 20:42:53 -0800 | [diff] [blame] | 91 | int ToLegalChannel(struct ieee80211_device *dev, u8 channel); |
| 92 | |
| 93 | #endif /* ENABLE_DOT11D */ |
| 94 | #endif /* INC_DOT11D_H */ |