1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /****************************************************************************** |
3 | * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. |
4 | * |
5 | * Contact Information: |
6 | * wlanfae <wlanfae@realtek.com> |
7 | ******************************************************************************/ |
8 | #ifndef __INC_DOT11D_H |
9 | #define __INC_DOT11D_H |
10 | |
11 | #include "rtllib.h" |
12 | |
13 | struct chnl_txpow_triple { |
14 | u8 first_channel; |
15 | u8 num_channels; |
16 | u8 max_tx_power; |
17 | }; |
18 | |
19 | enum dot11d_state { |
20 | DOT11D_STATE_NONE = 0, |
21 | DOT11D_STATE_LEARNED, |
22 | DOT11D_STATE_DONE, |
23 | }; |
24 | |
25 | /** |
26 | * struct rt_dot11d_info * @country_len: value greater than 0 if |
27 | * @country_buffer contains valid country information element. |
28 | * @channel_map: holds channel values |
29 | * 0 - invalid, |
30 | * 1 - valid (active scan), |
31 | * 2 - valid (passive scan) |
32 | * @country_src_addr - Source AP of the country IE |
33 | */ |
34 | |
35 | struct rt_dot11d_info { |
36 | bool enabled; |
37 | |
38 | u16 country_len; |
39 | u8 country_buffer[MAX_IE_LEN]; |
40 | u8 country_src_addr[6]; |
41 | u8 country_watchdog; |
42 | |
43 | u8 channel_map[MAX_CHANNEL_NUMBER + 1]; |
44 | u8 max_tx_power_list[MAX_CHANNEL_NUMBER + 1]; |
45 | |
46 | enum dot11d_state state; |
47 | }; |
48 | |
49 | static inline void copy_mac_addr(unsigned char *des, unsigned char *src) |
50 | { |
51 | memcpy(des, src, 6); |
52 | } |
53 | |
54 | #define GET_DOT11D_INFO(__ieee_dev) \ |
55 | ((struct rt_dot11d_info *)((__ieee_dev)->dot11d_info)) |
56 | |
57 | #define IS_DOT11D_ENABLE(__ieee_dev) \ |
58 | (GET_DOT11D_INFO(__ieee_dev)->enabled) |
59 | #define IS_COUNTRY_IE_VALID(__ieee_dev) \ |
60 | (GET_DOT11D_INFO(__ieee_dev)->country_len > 0) |
61 | |
62 | #define IS_EQUAL_CIE_SRC(__ieee_dev, __address) \ |
63 | ether_addr_equal_unaligned( \ |
64 | GET_DOT11D_INFO(__ieee_dev)->country_src_addr, __address) |
65 | #define UPDATE_CIE_SRC(__ieee_dev, __address) \ |
66 | copy_mac_addr(GET_DOT11D_INFO(__ieee_dev)->country_src_addr, __address) |
67 | |
68 | #define GET_CIE_WATCHDOG(__ieee_dev) \ |
69 | (GET_DOT11D_INFO(__ieee_dev)->country_watchdog) |
70 | static inline void RESET_CIE_WATCHDOG(struct rtllib_device *__ieee_dev) |
71 | { |
72 | GET_CIE_WATCHDOG(__ieee_dev) = 0; |
73 | } |
74 | |
75 | #define UPDATE_CIE_WATCHDOG(__ieee_dev) (++GET_CIE_WATCHDOG(__ieee_dev)) |
76 | |
77 | void dot11d_init(struct rtllib_device *dev); |
78 | void dot11d_channel_map(u8 channel_plan, struct rtllib_device *ieee); |
79 | void dot11d_reset(struct rtllib_device *dev); |
80 | void dot11d_update_country(struct rtllib_device *dev, u8 *address, |
81 | u16 country_len, u8 *country); |
82 | void dot11d_scan_complete(struct rtllib_device *dev); |
83 | |
84 | #endif |
85 | |