Use the rdtscl call only on x86 achitectures
[acx-mac80211.git] / acx_ie.h
blobee45260dc6c5da8fb7afb1ca26e08a3c4908405c
1 /*
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
3 * The ACX100 Open Source Project <acx100-devel@lists.sourceforge.net>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 * This header contains the definitions of the Information Elements (IE)
20 #ifndef _ACX_IE_H_
21 #define _ACX_IE_H_
23 /***********************************************************************
24 ** Interrogate/Configure cmd constants
26 ** NB: length includes JUST the data part of the IE
27 ** (does not include size of the (type,len) pair)
29 ** TODO: seems that acx100, acx100usb, acx111 have some differences,
30 ** fix code with regard to this!
33 /* Information Elements: Network Parameters, Static Configuration Entities */
34 /* these are handled by real_cfgtable in firmware "Rev 1.5.0" (FW150) */
35 #define ACX1xx_IE_UNKNOWN_00 (0x0000) /* mapped to cfgInvalid in FW150 */
36 #define ACX1xx_IE_UNKNOWN_00_LEN (-1)
37 #define ACX100_IE_ACX_TIMER (0x0001)
38 #define ACX100_IE_ACX_TIMER_LEN (0x10)
39 #define ACX1xx_IE_POWER_MGMT (0x0002) /* TNETW1450: length 0x18!! */
40 #define ACX1xx_IE_POWER_MGMT_LEN (0x06)
41 #define ACX1xx_IE_QUEUE_CONFIG (0x0003)
42 #define ACX1xx_IE_QUEUE_CONFIG_LEN (0x1c)
43 #define ACX100_IE_BLOCK_SIZE (0x0004)
44 #define ACX100_IE_BLOCK_SIZE_LEN (0x02)
45 #define ACX1FF_IE_SLOT_TIME (0x0004) /* later firmware versions only? */
46 #define ACX1FF_IE_SLOT_TIME_LEN (0x08)
47 #define ACX1xx_IE_MEMORY_CONFIG_OPTIONS (0x0005)
48 #define ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN (0x14)
49 #define ACX1FF_IE_QUEUE_HEAD (0x0005)
50 #define ACX1FF_IE_QUEUE_HEAD_LEN (0x14 /* FIXME: length? */)
51 #define ACX1xx_IE_RATE_FALLBACK (0x0006) /* TNETW1450: length 2 */
52 #define ACX1xx_IE_RATE_FALLBACK_LEN (0x01)
53 #define ACX100_IE_WEP_OPTIONS (0x0007)
54 #define ACX100_IE_WEP_OPTIONS_LEN (0x03)
55 #define ACX111_IE_RADIO_BAND (0x0007)
56 #define ACX111_IE_RADIO_BAND_LEN (-1)
57 #define ACX1FF_IE_TIMING_CFG (0x0007) /* later firmware versions; TNETW1450 only? */
58 #define ACX1FF_IE_TIMING_CFG_LEN (-1)
59 #define ACX100_IE_SSID (0x0008) /* huh? */
60 #define ACX100_IE_SSID_LEN (0x20)
61 #define ACX1xx_IE_MEMORY_MAP (0x0008) /* huh? TNETW1450 has length 0x40!! */
62 #define ACX1xx_IE_MEMORY_MAP_LEN (0x28)
63 #define ACX1xx_IE_SCAN_STATUS (0x0009) /* mapped to cfgInvalid in FW150 */
64 #define ACX1xx_IE_SCAN_STATUS_LEN (0x04)
65 #define ACX1xx_IE_ASSOC_ID (0x000a)
66 #define ACX1xx_IE_ASSOC_ID_LEN (0x02)
67 #define ACX1xx_IE_UNKNOWN_0B (0x000B) /* mapped to cfgInvalid in FW150 */
68 #define ACX1xx_IE_UNKNOWN_0B_LEN (-1)
69 #define ACX1FF_IE_TX_POWER_LEVEL_TABLE (0x000B) /* later firmware versions; TNETW1450 only? */
70 #define ACX1FF_IE_TX_POWER_LEVEL_TABLE_LEN (0x18)
71 #define ACX100_IE_UNKNOWN_0C (0x000C) /* very small implementation in FW150! */
72 #define ACX100_IE_UNKNOWN_0C_LEN (-1)
73 /* ACX100 has an equivalent struct in the cmd mailbox directly after reset.
74 * 0x14c seems extremely large, will trash stack on failure (memset!)
75 * in case of small input struct --> OOPS! */
76 #define ACX111_IE_CONFIG_OPTIONS (0x000c)
77 #define ACX111_IE_CONFIG_OPTIONS_LEN (0x14c)
78 #define ACX1xx_IE_FWREV (0x000d)
79 #define ACX1xx_IE_FWREV_LEN (0x18)
80 #define ACX1xx_IE_FCS_ERROR_COUNT (0x000e)
81 #define ACX1xx_IE_FCS_ERROR_COUNT_LEN (0x04)
82 #define ACX1xx_IE_MEDIUM_USAGE (0x000f) /* AKA MEDIUM OCCUPANCY */
83 #define ACX1xx_IE_MEDIUM_USAGE_LEN (0x08)
84 #define ACX1xx_IE_RXCONFIG (0x0010)
85 #define ACX1xx_IE_RXCONFIG_LEN (0x04)
86 #define ACX100_IE_UNKNOWN_11 (0x0011) /* NONBINARY: large implementation in FW150! link quality readings or so? */
87 #define ACX100_IE_UNKNOWN_11_LEN (-1)
88 #define ACX111_IE_QUEUE_THRESH (0x0011)
89 #define ACX111_IE_QUEUE_THRESH_LEN (-1)
90 #define ACX100_IE_UNKNOWN_12 (0x0012) /* NONBINARY: VERY large implementation in FW150!! */
91 #define ACX100_IE_UNKNOWN_12_LEN (-1)
92 #define ACX111_IE_BSS_POWER_SAVE (0x0012)
93 #define ACX111_IE_BSS_POWER_SAVE_LEN (/* -1 */ 2)
94 #define ACX1xx_IE_FIRMWARE_STATISTICS (0x0013) /* TNETW1450: length 0x134!! */
95 #define ACX1xx_IE_FIRMWARE_STATISTICS_LEN (0x9c)
96 #define ACX1FF_IE_RX_INTR_CONFIG (0x0014) /* later firmware versions, TNETW1450 only? */
97 #define ACX1FF_IE_RX_INTR_CONFIG_LEN (0x14)
98 #define ACX1xx_IE_FEATURE_CONFIG (0x0015)
99 #define ACX1xx_IE_FEATURE_CONFIG_LEN (0x08)
100 #define ACX111_IE_KEY_CHOOSE (0x0016) /* for rekeying. really len=4?? */
101 #define ACX111_IE_KEY_CHOOSE_LEN (0x04)
102 #define ACX1FF_IE_MISC_CONFIG_TABLE (0x0017) /* later firmware versions, TNETW1450 only? */
103 #define ACX1FF_IE_MISC_CONFIG_TABLE_LEN (0x04)
104 #define ACX1FF_IE_WONE_CONFIG (0x0018) /* later firmware versions, TNETW1450 only? */
105 #define ACX1FF_IE_WONE_CONFIG_LEN (-1)
106 #define ACX1FF_IE_TID_CONFIG (0x001a) /* later firmware versions, TNETW1450 only? */
107 #define ACX1FF_IE_TID_CONFIG_LEN (0x2c)
108 #define ACX1FF_IE_CALIB_ASSESSMENT (0x001e) /* later firmware versions, TNETW1450 only? */
109 #define ACX1FF_IE_CALIB_ASSESSMENT_LEN (0x04)
110 #define ACX1FF_IE_BEACON_FILTER_OPTIONS (0x001f) /* later firmware versions, TNETW1450 only? */
111 #define ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN (0x02)
112 #define ACX1FF_IE_LOW_RSSI_THRESH_OPT (0x0020) /* later firmware versions, TNETW1450 only? */
113 #define ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN (0x04)
114 #define ACX1FF_IE_NOISE_HISTOGRAM_RESULTS (0x0021) /* later firmware versions, TNETW1450 only? */
115 #define ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN (0x30)
116 #define ACX1FF_IE_PACKET_DETECT_THRESH (0x0023) /* later firmware versions, TNETW1450 only? */
117 #define ACX1FF_IE_PACKET_DETECT_THRESH_LEN (0x04)
118 #define ACX1FF_IE_TX_CONFIG_OPTIONS (0x0024) /* later firmware versions, TNETW1450 only? */
119 #define ACX1FF_IE_TX_CONFIG_OPTIONS_LEN (0x04)
120 #define ACX1FF_IE_CCA_THRESHOLD (0x0025) /* later firmware versions, TNETW1450 only? */
121 #define ACX1FF_IE_CCA_THRESHOLD_LEN (0x02)
122 #define ACX1FF_IE_EVENT_MASK (0x0026) /* later firmware versions, TNETW1450 only? */
123 #define ACX1FF_IE_EVENT_MASK_LEN (0x08)
124 #define ACX1FF_IE_DTIM_PERIOD (0x0027) /* later firmware versions, TNETW1450 only? */
125 #define ACX1FF_IE_DTIM_PERIOD_LEN (0x02)
126 #define ACX1FF_IE_ACI_CONFIG_SET (0x0029) /* later firmware versions; maybe TNETW1450 only? */
127 #define ACX1FF_IE_ACI_CONFIG_SET_LEN (0x06)
128 #define ACX1FF_IE_EEPROM_VER (0x0030) /* later firmware versions; maybe TNETW1450 only? */
129 #define ACX1FF_IE_EEPROM_VER_LEN (0x04)
130 #define ACX1xx_IE_DOT11_STATION_ID (0x1001)
131 #define ACX1xx_IE_DOT11_STATION_ID_LEN (0x06)
132 #define ACX100_IE_DOT11_UNKNOWN_1002 (0x1002) /* mapped to cfgInvalid in FW150 */
133 #define ACX100_IE_DOT11_UNKNOWN_1002_LEN (-1)
134 #define ACX111_IE_DOT11_FRAG_THRESH (0x1002) /* mapped to cfgInvalid in FW150; TNETW1450 has length 2!! */
135 #define ACX111_IE_DOT11_FRAG_THRESH_LEN (-1)
136 #define ACX100_IE_DOT11_BEACON_PERIOD (0x1003) /* mapped to cfgInvalid in FW150 */
137 #define ACX100_IE_DOT11_BEACON_PERIOD_LEN (0x02)
138 #define ACX1xx_IE_DOT11_DTIM_PERIOD (0x1004) /* mapped to cfgInvalid in FW150 */
139 #define ACX1xx_IE_DOT11_DTIM_PERIOD_LEN (-1)
140 #define ACX1FF_IE_DOT11_MAX_RX_LIFETIME (0x1004) /* later firmware versions; maybe TNETW1450 only? */
141 #define ACX1FF_IE_DOT11_MAX_RX_LIFETIME_LEN (-1)
142 #define ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT (0x1005) /* TNETW1450: length 2 */
143 #define ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN (0x01)
144 #define ACX1xx_IE_DOT11_LONG_RETRY_LIMIT (0x1006) /* TNETW1450: length 2 */
145 #define ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN (0x01)
146 #define ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE (0x1007) /* configure default keys; TNETW1450 has length 0x24!! */
147 #define ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN (0x20)
148 #define ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME (0x1008)
149 #define ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN (0x04)
150 #define ACX1xx_IE_DOT11_GROUP_ADDR (0x1009)
151 #define ACX1xx_IE_DOT11_GROUP_ADDR_LEN (-1)
152 #define ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN (0x100A)
153 #define ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN (0x02)
154 /* It's harmless to have larger struct. Use USB case always. */
155 #define ACX1xx_IE_DOT11_CURRENT_ANTENNA (0x100B) /* in fact len=1 for PCI */
156 #define ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN (0x02)
157 #define ACX1xx_IE_DOT11_UNKNOWN_100C (0x100C) /* mapped to cfgInvalid in FW150 */
158 #define ACX1xx_IE_DOT11_UNKNOWN_100C_LEN (-1)
159 #define ACX1xx_IE_DOT11_TX_POWER_LEVEL (0x100D) /* TNETW1450 has length 2!! */
160 #define ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN (0x01)
161 #define ACX1xx_IE_DOT11_CURRENT_CCA_MODE (0x100E) /* in fact len=1 for PCI */
162 #define ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN (0x02)
163 /* USB doesn't return anything - len==0?! */
164 #define ACX100_IE_DOT11_ED_THRESHOLD (0x100f)
165 #define ACX100_IE_DOT11_ED_THRESHOLD_LEN (0x04)
166 #define ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET (0x1010) /* set default key ID; TNETW1450: length 2 */
167 #define ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN (0x01)
168 #define ACX100_IE_DOT11_UNKNOWN_1011 (0x1011) /* mapped to cfgInvalid in FW150 */
169 #define ACX100_IE_DOT11_UNKNOWN_1011_LEN (-1)
170 #define ACX1FF_IE_DOT11_CURR_5GHZ_REGDOM (0x1011) /* later firmware versions; maybe TNETW1450 only? */
171 #define ACX1FF_IE_DOT11_CURR_5GHZ_REGDOM_LEN (-1)
172 #define ACX100_IE_DOT11_UNKNOWN_1012 (0x1012) /* mapped to cfgInvalid in FW150 */
173 #define ACX100_IE_DOT11_UNKNOWN_1012_LEN (-1)
174 #define ACX100_IE_DOT11_UNKNOWN_1013 (0x1013) /* mapped to cfgInvalid in FW150 */
175 #define ACX100_IE_DOT11_UNKNOWN_1013_LEN (-1)
177 #if 0
178 #define DEF_IE(name, val, len) enum { ACX##name=val, ACX##name##_LEN=len }
180 /* Experimentally obtained on acx100, fw 1.9.8.b
181 ** -1 means that fw returned 'invalid IE'
182 ** 0200 FC00 nnnn... are test read contents: u16 type, u16 len, data
183 ** (AA are poison bytes marking bytes not written by fw)
185 ** Looks like acx100 fw does not update len field (thus len=256-4=FC here)
186 ** A number of IEs seem to trash type,len fields
187 ** IEs marked 'huge' return gobs of data (no poison bytes remain)
189 DEF_IE(100_IE_INVAL_00, 0x0000, -1);
190 DEF_IE(100_IE_INVAL_01, 0x0001, -1); /* IE_ACX_TIMER, len=16 on older fw */
191 DEF_IE(100_IE_POWER_MGMT, 0x0002, 4); /* 0200FC00 00040000 AAAAAAAA */
192 DEF_IE(100_IE_QUEUE_CONFIG, 0x0003, 28); /* 0300FC00 48060000 9CAD0000 0101AAAA DCB00000 E4B00000 9CAA0000 00AAAAAA */
193 DEF_IE(100_IE_BLOCK_SIZE, 0x0004, 2); /* 0400FC00 0001AAAA AAAAAAAA AAAAAAAA */
194 /* write only: */
195 DEF_IE(100_IE_MEMORY_CONFIG_OPTIONS, 0x0005, 20);
196 DEF_IE(100_IE_RATE_FALLBACK, 0x0006, 1); /* 0600FC00 00AAAAAA AAAAAAAA AAAAAAAA */
197 /* write only: */
198 DEF_IE(100_IE_WEP_OPTIONS, 0x0007, 3);
199 DEF_IE(100_IE_MEMORY_MAP, 0x0008, 40); /* huge: 0800FC00 30000000 6CA20000 70A20000... */
200 /* gives INVAL on read: */
201 DEF_IE(100_IE_SCAN_STATUS, 0x0009, -1);
202 DEF_IE(100_IE_ASSOC_ID, 0x000a, 2); /* huge: 0A00FC00 00000000 01040800 00000000... */
203 DEF_IE(100_IE_INVAL_0B, 0x000b, -1);
204 /* 'command rejected': */
205 DEF_IE(100_IE_CONFIG_OPTIONS, 0x000c, -3);
206 DEF_IE(100_IE_FWREV, 0x000d, 24); /* 0D00FC00 52657620 312E392E 382E6200 AAAAAAAA AAAAAAAA 05050201 AAAAAAAA */
207 DEF_IE(100_IE_FCS_ERROR_COUNT, 0x000e, 4);
208 DEF_IE(100_IE_MEDIUM_USAGE, 0x000f, 8); /* E41F0000 2D780300 FCC91300 AAAAAAAA */
209 DEF_IE(100_IE_RXCONFIG, 0x0010, 4); /* 1000FC00 00280000 AAAAAAAA AAAAAAAA */
210 DEF_IE(100_IE_QUEUE_THRESH, 0x0011, 12); /* 1100FC00 AAAAAAAA 00000000 00000000 */
211 DEF_IE(100_IE_BSS_POWER_SAVE, 0x0012, 1); /* 1200FC00 00AAAAAA AAAAAAAA AAAAAAAA */
212 /* read only, variable len */
213 DEF_IE(100_IE_FIRMWARE_STATISTICS, 0x0013, 256); /* 0000AC00 00000000 ... */
214 DEF_IE(100_IE_INT_CONFIG, 0x0014, 20); /* 00000000 00000000 00000000 00000000 5D74D105 00000000 AAAAAAAA AAAAAAAA */
215 DEF_IE(100_IE_FEATURE_CONFIG, 0x0015, 8); /* 1500FC00 16000000 AAAAAAAA AAAAAAAA */
216 /* returns 'invalid MAC': */
217 DEF_IE(100_IE_KEY_CHOOSE, 0x0016, -4);
218 DEF_IE(100_IE_INVAL_17, 0x0017, -1);
219 DEF_IE(100_IE_UNKNOWN_18, 0x0018, 0); /* null len?! 1800FC00 AAAAAAAA AAAAAAAA AAAAAAAA */
220 DEF_IE(100_IE_UNKNOWN_19, 0x0019, 256); /* huge: 1900FC00 9C1F00EA FEFFFFEA FEFFFFEA... */
221 DEF_IE(100_IE_INVAL_1A, 0x001A, -1);
223 DEF_IE(100_IE_DOT11_INVAL_1000, 0x1000, -1);
224 DEF_IE(100_IE_DOT11_STATION_ID, 0x1001, 6); /* huge: 0110FC00 58B10E2F 03000000 00000000... */
225 DEF_IE(100_IE_DOT11_INVAL_1002, 0x1002, -1);
226 DEF_IE(100_IE_DOT11_INVAL_1003, 0x1003, -1);
227 DEF_IE(100_IE_DOT11_INVAL_1004, 0x1004, -1);
228 DEF_IE(100_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
229 DEF_IE(100_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
230 /* write only: */
231 DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, 32);
232 DEF_IE(100_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); /* huge: 0810FC00 00020000 F4010000 00000000... */
233 /* undoc but returns something */
234 DEF_IE(100_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* huge: 0910FC00 00000000 00000000 00000000... */
235 DEF_IE(100_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); /* 0A10FC00 30AAAAAA AAAAAAAA AAAAAAAA */
236 DEF_IE(100_IE_DOT11_CURRENT_ANTENNA, 0x100b, 1); /* 0B10FC00 8FAAAAAA AAAAAAAA AAAAAAAA */
237 DEF_IE(100_IE_DOT11_INVAL_100C, 0x100c, -1);
238 DEF_IE(100_IE_DOT11_TX_POWER_LEVEL, 0x100d, 2); /* 00000000 0100AAAA AAAAAAAA AAAAAAAA */
239 DEF_IE(100_IE_DOT11_CURRENT_CCA_MODE, 0x100e, 1); /* 0E10FC00 0DAAAAAA AAAAAAAA AAAAAAAA */
240 DEF_IE(100_IE_DOT11_ED_THRESHOLD, 0x100f, 4); /* 0F10FC00 70000000 AAAAAAAA AAAAAAAA */
241 /* set default key ID */
242 DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); /* 1010FC00 00AAAAAA AAAAAAAA AAAAAAAA */
243 DEF_IE(100_IE_DOT11_INVAL_1011, 0x1011, -1);
244 DEF_IE(100_IE_DOT11_INVAL_1012, 0x1012, -1);
245 DEF_IE(100_IE_DOT11_INVAL_1013, 0x1013, -1);
246 DEF_IE(100_IE_DOT11_UNKNOWN_1014, 0x1014, 256); /* huge */
247 DEF_IE(100_IE_DOT11_UNKNOWN_1015, 0x1015, 256); /* huge */
248 DEF_IE(100_IE_DOT11_UNKNOWN_1016, 0x1016, 256); /* huge */
249 DEF_IE(100_IE_DOT11_UNKNOWN_1017, 0x1017, 256); /* huge */
250 DEF_IE(100_IE_DOT11_UNKNOWN_1018, 0x1018, 256); /* huge */
251 DEF_IE(100_IE_DOT11_UNKNOWN_1019, 0x1019, 256); /* huge */
253 /* Experimentally obtained on PCI acx111 Xterasys XN-2522g, fw 1.2.1.34
254 ** -1 means that fw returned 'invalid IE'
255 ** 0400 0800 nnnn... are test read contents: u16 type, u16 len, data
256 ** (AA are poison bytes marking bytes not written by fw)
258 ** Looks like acx111 fw reports real len!
260 DEF_IE(111_IE_INVAL_00, 0x0000, -1);
261 DEF_IE(111_IE_INVAL_01, 0x0001, -1);
262 DEF_IE(111_IE_POWER_MGMT, 0x0002, 12);
263 /* write only, variable len: 12 + rxqueue_cnt*8 + txqueue_cnt*4: */
264 DEF_IE(111_IE_MEMORY_CONFIG, 0x0003, 24);
265 DEF_IE(111_IE_BLOCK_SIZE, 0x0004, 8); /* 04000800 AA00AAAA AAAAAAAA */
266 /* variable len: 8 + rxqueue_cnt*8 + txqueue_cnt*8: */
267 DEF_IE(111_IE_QUEUE_HEAD, 0x0005, 24);
268 DEF_IE(111_IE_RATE_FALLBACK, 0x0006, 1);
269 /* acx100 name:WEP_OPTIONS */
270 /* said to have len:1 (not true, actually returns 12 bytes): */
271 DEF_IE(111_IE_RADIO_BAND, 0x0007, 12); /* 07000C00 AAAA1F00 FF03AAAA AAAAAAAA */
272 DEF_IE(111_IE_MEMORY_MAP, 0x0008, 48);
273 /* said to have len:4, but gives INVAL on read: */
274 DEF_IE(111_IE_SCAN_STATUS, 0x0009, -1);
275 DEF_IE(111_IE_ASSOC_ID, 0x000a, 2);
276 /* write only, len is not known: */
277 DEF_IE(111_IE_UNKNOWN_0B, 0x000b, 0);
278 /* read only, variable len. I see 67 byte reads: */
279 DEF_IE(111_IE_CONFIG_OPTIONS, 0x000c, 67); /* 0C004300 01160500 ... */
280 DEF_IE(111_IE_FWREV, 0x000d, 24);
281 DEF_IE(111_IE_FCS_ERROR_COUNT, 0x000e, 4);
282 DEF_IE(111_IE_MEDIUM_USAGE, 0x000f, 8);
283 DEF_IE(111_IE_RXCONFIG, 0x0010, 4);
284 DEF_IE(111_IE_QUEUE_THRESH, 0x0011, 12);
285 DEF_IE(111_IE_BSS_POWER_SAVE, 0x0012, 1);
286 /* read only, variable len. I see 240 byte reads: */
287 DEF_IE(111_IE_FIRMWARE_STATISTICS, 0x0013, 240); /* 1300F000 00000000 ... */
288 /* said to have len=17. looks like fw pads it to 20: */
289 DEF_IE(111_IE_INT_CONFIG, 0x0014, 20); /* 14001400 00000000 00000000 00000000 00000000 00000000 */
290 DEF_IE(111_IE_FEATURE_CONFIG, 0x0015, 8);
291 /* said to be name:KEY_INDICATOR, len:4, but gives INVAL on read: */
292 DEF_IE(111_IE_KEY_CHOOSE, 0x0016, -1);
293 /* said to have len:4, but in fact returns 8: */
294 DEF_IE(111_IE_MAX_USB_XFR, 0x0017, 8); /* 17000800 00014000 00000000 */
295 DEF_IE(111_IE_INVAL_18, 0x0018, -1);
296 DEF_IE(111_IE_INVAL_19, 0x0019, -1);
297 /* undoc but returns something: */
298 /* huh, fw indicates len=20 but uses 4 more bytes in buffer??? */
299 DEF_IE(111_IE_UNKNOWN_1A, 0x001A, 20); /* 1A001400 AA00AAAA 0000020F FF030000 00020000 00000007 04000000 */
301 DEF_IE(111_IE_DOT11_INVAL_1000, 0x1000, -1);
302 DEF_IE(111_IE_DOT11_STATION_ID, 0x1001, 6);
303 DEF_IE(111_IE_DOT11_FRAG_THRESH, 0x1002, 2);
304 /* acx100 only? gives INVAL on read: */
305 DEF_IE(111_IE_DOT11_BEACON_PERIOD, 0x1003, -1);
306 /* said to be MAX_RECV_MSDU_LIFETIME: */
307 DEF_IE(111_IE_DOT11_DTIM_PERIOD, 0x1004, 4);
308 DEF_IE(111_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
309 DEF_IE(111_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
310 /* acx100 only? gives INVAL on read: */
311 DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, -1);
312 DEF_IE(111_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4);
313 /* undoc but returns something. maybe it's 2 multicast MACs to listen to? */
314 DEF_IE(111_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* 09100C00 00000000 00000000 00000000 */
315 DEF_IE(111_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1);
316 DEF_IE(111_IE_DOT11_CURRENT_ANTENNA, 0x100b, 2);
317 DEF_IE(111_IE_DOT11_INVAL_100C, 0x100c, -1);
318 DEF_IE(111_IE_DOT11_TX_POWER_LEVEL, 0x100d, 1);
319 /* said to have len=1 but gives INVAL on read: */
320 DEF_IE(111_IE_DOT11_CURRENT_CCA_MODE, 0x100e, -1);
321 /* said to have len=4 but gives INVAL on read: */
322 DEF_IE(111_IE_DOT11_ED_THRESHOLD, 0x100f, -1);
323 /* set default key ID. write only: */
324 DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1);
325 /* undoc but returns something: */
326 DEF_IE(111_IE_DOT11_UNKNOWN_1011, 0x1011, 1); /* 11100100 20 */
327 DEF_IE(111_IE_DOT11_INVAL_1012, 0x1012, -1);
328 DEF_IE(111_IE_DOT11_INVAL_1013, 0x1013, -1);
329 #endif /* 0 */
331 #endif /* _ACX_IE_H_ */