Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 1 | #ifndef __INC_DOT11D_H |
| 2 | #define __INC_DOT11D_H |
| 3 | |
| 4 | #ifdef ENABLE_DOT11D |
Dave Jones | 2addf79 | 2010-07-02 23:04:44 -0400 | [diff] [blame^] | 5 | #include "ieee80211/ieee80211.h" |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 6 | |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 7 | |
| 8 | typedef struct _CHNL_TXPOWER_TRIPLE { |
| 9 | u8 FirstChnl; |
| 10 | u8 NumChnls; |
| 11 | u8 MaxTxPowerInDbm; |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 12 | } CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 13 | |
| 14 | typedef enum _DOT11D_STATE { |
| 15 | DOT11D_STATE_NONE = 0, |
| 16 | DOT11D_STATE_LEARNED, |
| 17 | DOT11D_STATE_DONE, |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 18 | } DOT11D_STATE; |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 19 | |
| 20 | typedef struct _RT_DOT11D_INFO { |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 21 | /* DECLARE_RT_OBJECT(RT_DOT11D_INFO); */ |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 22 | |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 23 | bool bEnabled; /* dot11MultiDomainCapabilityEnabled */ |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 24 | |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 25 | u16 CountryIeLen; /* > 0 if CountryIeBuf[] contains valid country information element. */ |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 26 | u8 CountryIeBuf[MAX_IE_LEN]; |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 27 | u8 CountryIeSrcAddr[6]; /* Source AP of the country IE. */ |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 28 | u8 CountryIeWatchdog; |
| 29 | |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 30 | u8 channel_map[MAX_CHANNEL_NUMBER+1]; /* !Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan) */ |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 31 | u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1]; |
| 32 | |
| 33 | DOT11D_STATE State; |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 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]) |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 42 | #define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo)) |
| 43 | |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 44 | #define IS_DOT11D_ENABLE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->bEnabled) |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 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 |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 56 | #define GET_CIE_WATCHDOG(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog) |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 57 | #define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0 |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 58 | #define UPDATE_CIE_WATCHDOG(__pIeeeDev) (++GET_CIE_WATCHDOG(__pIeeeDev)) |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 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, |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 76 | u8 *pTaddr, |
| 77 | u16 CoutryIeLen, |
| 78 | u8 *pCoutryIe |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 79 | ); |
| 80 | |
| 81 | u8 |
| 82 | DOT11D_GetMaxTxPwrInDbm( |
| 83 | struct ieee80211_device *dev, |
| 84 | u8 Channel |
| 85 | ); |
| 86 | |
| 87 | void |
| 88 | DOT11D_ScanComplete( |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 89 | struct ieee80211_device *dev |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 90 | ); |
| 91 | |
| 92 | int IsLegalChannel( |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 93 | struct ieee80211_device *dev, |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 94 | u8 channel |
| 95 | ); |
| 96 | |
| 97 | int ToLegalChannel( |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 98 | struct ieee80211_device *dev, |
Jerry Chuang | 8fc8598 | 2009-11-03 07:17:11 -0200 | [diff] [blame] | 99 | u8 channel |
| 100 | ); |
Ruslan Pisarev | 1fc5af1 | 2010-04-11 13:39:47 +0300 | [diff] [blame] | 101 | #endif /* ENABLE_DOT11D */ |
| 102 | #endif /* #ifndef __INC_DOT11D_H */ |