Root/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/include/wmi.h

1/*
2 * Copyright (c) 2004-2006 Atheros Communications Inc.
3 * All rights reserved.
4 *
5 *
6 * $ATH_LICENSE_HOSTSDK0_C$
7 *
8 * This file contains the definitions of the WMI protocol specified in the
9 * Wireless Module Interface (WMI). It includes definitions of all the
10 * commands and events. Commands are messages from the host to the WM.
11 * Events and Replies are messages from the WM to the host.
12 *
13 * Ownership of correctness in regards to WMI commands
14 * belongs to the host driver and the WM is not required to validate
15 * parameters for value, proper range, or any other checking.
16 *
17 */
18
19#ifndef _WMI_H_
20#define _WMI_H_
21
22#ifndef ATH_TARGET
23#include "athstartpack.h"
24#endif
25
26#include "wmix.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#define WMI_PROTOCOL_VERSION 0x0002
33#define WMI_PROTOCOL_REVISION 0x0000
34
35#define ATH_MAC_LEN 6 /* length of mac in bytes */
36#define WMI_CMD_MAX_LEN 100
37#define WMI_CONTROL_MSG_MAX_LEN 256
38#define WMI_OPT_CONTROL_MSG_MAX_LEN 1536
39#define IS_ETHERTYPE(_typeOrLen) ((_typeOrLen) >= 0x0600)
40#define RFC1042OUI {0x00, 0x00, 0x00}
41
42#define IP_ETHERTYPE 0x0800
43
44#define WMI_IMPLICIT_PSTREAM 0xFF
45#define WMI_MAX_THINSTREAM 15
46
47struct host_app_area_s {
48    A_UINT32 wmi_protocol_ver;
49};
50
51/*
52 * Data Path
53 */
54typedef PREPACK struct {
55    A_UINT8 dstMac[ATH_MAC_LEN];
56    A_UINT8 srcMac[ATH_MAC_LEN];
57    A_UINT16 typeOrLen;
58} POSTPACK ATH_MAC_HDR;
59
60typedef PREPACK struct {
61    A_UINT8 dsap;
62    A_UINT8 ssap;
63    A_UINT8 cntl;
64    A_UINT8 orgCode[3];
65    A_UINT16 etherType;
66} POSTPACK ATH_LLC_SNAP_HDR;
67
68typedef enum {
69    DATA_MSGTYPE = 0x0,
70    CNTL_MSGTYPE,
71    SYNC_MSGTYPE
72} WMI_MSG_TYPE;
73
74
75typedef PREPACK struct {
76    A_INT8 rssi;
77    A_UINT8 info; /* WMI_MSG_TYPE in lower 2 bits - b1b0 */
78                                 /* UP in next 3 bits - b4b3b2 */
79#define WMI_DATA_HDR_MSG_TYPE_MASK 0x03
80#define WMI_DATA_HDR_MSG_TYPE_SHIFT 0
81#define WMI_DATA_HDR_UP_MASK 0x07
82#define WMI_DATA_HDR_UP_SHIFT 2
83#define WMI_DATA_HDR_IS_MSG_TYPE(h, t) (((h)->info & (WMI_DATA_HDR_MSG_TYPE_MASK)) == (t))
84} POSTPACK WMI_DATA_HDR;
85
86
87#define WMI_DATA_HDR_SET_MSG_TYPE(h, t) (h)->info = (((h)->info & ~(WMI_DATA_HDR_MSG_TYPE_MASK << WMI_DATA_HDR_MSG_TYPE_SHIFT)) | (t << WMI_DATA_HDR_MSG_TYPE_SHIFT))
88#define WMI_DATA_HDR_SET_UP(h, p) (h)->info = (((h)->info & ~(WMI_DATA_HDR_UP_MASK << WMI_DATA_HDR_UP_SHIFT)) | (p << WMI_DATA_HDR_UP_SHIFT))
89
90/*
91 * Control Path
92 */
93typedef PREPACK struct {
94    A_UINT16 commandId;
95} POSTPACK WMI_CMD_HDR; /* used for commands and events */
96
97/*
98 * List of Commnands
99 */
100typedef enum {
101    WMI_CONNECT_CMDID = 0x0001,
102    WMI_RECONNECT_CMDID,
103    WMI_DISCONNECT_CMDID,
104    WMI_SYNCHRONIZE_CMDID,
105    WMI_CREATE_PSTREAM_CMDID,
106    WMI_DELETE_PSTREAM_CMDID,
107    WMI_START_SCAN_CMDID,
108    WMI_SET_SCAN_PARAMS_CMDID,
109    WMI_SET_BSS_FILTER_CMDID,
110    WMI_SET_PROBED_SSID_CMDID,
111    WMI_SET_LISTEN_INT_CMDID,
112    WMI_SET_BMISS_TIME_CMDID,
113    WMI_SET_DISC_TIMEOUT_CMDID,
114    WMI_GET_CHANNEL_LIST_CMDID,
115    WMI_SET_BEACON_INT_CMDID,
116    WMI_GET_STATISTICS_CMDID,
117    WMI_SET_CHANNEL_PARAMS_CMDID,
118    WMI_SET_POWER_MODE_CMDID,
119    WMI_SET_IBSS_PM_CAPS_CMDID,
120    WMI_SET_POWER_PARAMS_CMDID,
121    WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID,
122    WMI_ADD_CIPHER_KEY_CMDID,
123    WMI_DELETE_CIPHER_KEY_CMDID,
124    WMI_ADD_KRK_CMDID,
125    WMI_DELETE_KRK_CMDID,
126    WMI_SET_PMKID_CMDID,
127    WMI_SET_TX_PWR_CMDID,
128    WMI_GET_TX_PWR_CMDID,
129    WMI_SET_ASSOC_INFO_CMDID,
130    WMI_ADD_BAD_AP_CMDID,
131    WMI_DELETE_BAD_AP_CMDID,
132    WMI_SET_TKIP_COUNTERMEASURES_CMDID,
133    WMI_RSSI_THRESHOLD_PARAMS_CMDID,
134    WMI_TARGET_ERROR_REPORT_BITMASK_CMDID,
135    WMI_SET_ACCESS_PARAMS_CMDID,
136    WMI_SET_RETRY_LIMITS_CMDID,
137    WMI_SET_OPT_MODE_CMDID,
138    WMI_OPT_TX_FRAME_CMDID,
139    WMI_SET_VOICE_PKT_SIZE_CMDID,
140    WMI_SET_MAX_SP_LEN_CMDID,
141    WMI_SET_ROAM_CTRL_CMDID,
142    WMI_GET_ROAM_TBL_CMDID,
143    WMI_GET_ROAM_DATA_CMDID,
144    WMI_ENABLE_RM_CMDID,
145    WMI_SET_MAX_OFFHOME_DURATION_CMDID,
146    WMI_EXTENSION_CMDID, /* Non-wireless extensions */
147    WMI_SNR_THRESHOLD_PARAMS_CMDID,
148    WMI_LQ_THRESHOLD_PARAMS_CMDID,
149    WMI_SET_LPREAMBLE_CMDID,
150    WMI_SET_RTS_CMDID,
151    WMI_CLR_RSSI_SNR_CMDID,
152    WMI_SET_FIXRATES_CMDID,
153    WMI_GET_FIXRATES_CMDID,
154    WMI_SET_AUTH_MODE_CMDID,
155    WMI_SET_REASSOC_MODE_CMDID,
156    WMI_SET_WMM_CMDID,
157    WMI_SET_WMM_TXOP_CMDID,
158    WMI_TEST_CMDID,
159    WMI_SET_BT_STATUS_CMDID,
160    WMI_SET_BT_PARAMS_CMDID,
161
162    WMI_SET_KEEPALIVE_CMDID,
163    WMI_GET_KEEPALIVE_CMDID,
164    WMI_SET_APPIE_CMDID,
165    WMI_GET_APPIE_CMDID,
166    WMI_SET_WSC_STATUS_CMDID,
167
168    /* Wake on Wireless */
169    WMI_SET_HOST_SLEEP_MODE_CMDID,
170    WMI_SET_WOW_MODE_CMDID,
171    WMI_GET_WOW_LIST_CMDID,
172    WMI_ADD_WOW_PATTERN_CMDID,
173    WMI_DEL_WOW_PATTERN_CMDID,
174    WMI_SET_MAC_ADDRESS_CMDID,
175    WMI_SET_AKMP_PARAMS_CMDID,
176    WMI_SET_PMKID_LIST_CMDID,
177    WMI_GET_PMKID_LIST_CMDID,
178
179    /*
180     * Developer commands starts at 0xF000
181     */
182    WMI_SET_BITRATE_CMDID = 0xF000,
183    WMI_GET_BITRATE_CMDID,
184    WMI_SET_WHALPARAM_CMDID,
185
186} WMI_COMMAND_ID;
187
188/*
189 * Frame Types
190 */
191typedef enum {
192    WMI_FRAME_BEACON = 0,
193    WMI_FRAME_PROBE_REQ,
194    WMI_FRAME_PROBE_RESP,
195    WMI_FRAME_ASSOC_REQ,
196    WMI_FRAME_ASSOC_RESP,
197    WMI_NUM_MGMT_FRAME
198} WMI_MGMT_FRAME_TYPE;
199
200/*
201 * Connect Command
202 */
203typedef enum {
204    INFRA_NETWORK = 0x01,
205    ADHOC_NETWORK = 0x02,
206    ADHOC_CREATOR = 0x04,
207} NETWORK_TYPE;
208
209typedef enum {
210    OPEN_AUTH = 0x01,
211    SHARED_AUTH = 0x02,
212    LEAP_AUTH = 0x04, /* different from IEEE_AUTH_MODE definitions */
213} DOT11_AUTH_MODE;
214
215typedef enum {
216    NONE_AUTH = 0x01,
217    WPA_AUTH = 0x02,
218    WPA_PSK_AUTH = 0x03,
219    WPA2_AUTH = 0x04,
220    WPA2_PSK_AUTH = 0x05,
221    WPA_AUTH_CCKM = 0x06,
222    WPA2_AUTH_CCKM = 0x07,
223} AUTH_MODE;
224
225typedef enum {
226    NONE_CRYPT = 0x01,
227    WEP_CRYPT = 0x02,
228    TKIP_CRYPT = 0x03,
229    AES_CRYPT = 0x04,
230} CRYPTO_TYPE;
231
232#define WMI_MIN_CRYPTO_TYPE NONE_CRYPT
233#define WMI_MAX_CRYPTO_TYPE (AES_CRYPT + 1)
234
235#define WMI_MIN_KEY_INDEX 0
236#define WMI_MAX_KEY_INDEX 3
237
238#define WMI_MAX_KEY_LEN 32
239
240#define WMI_MAX_SSID_LEN 32
241
242typedef enum {
243    CONNECT_ASSOC_POLICY_USER = 0x0001,
244    CONNECT_SEND_REASSOC = 0x0002,
245    CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004,
246    CONNECT_PROFILE_MATCH_DONE = 0x0008,
247    CONNECT_IGNORE_AAC_BEACON = 0x0010,
248    CONNECT_CSA_FOLLOW_BSS = 0x0020,
249} WMI_CONNECT_CTRL_FLAGS_BITS;
250
251#define DEFAULT_CONNECT_CTRL_FLAGS (CONNECT_CSA_FOLLOW_BSS)
252
253typedef PREPACK struct {
254    A_UINT8 networkType;
255    A_UINT8 dot11AuthMode;
256    A_UINT8 authMode;
257    A_UINT8 pairwiseCryptoType;
258    A_UINT8 pairwiseCryptoLen;
259    A_UINT8 groupCryptoType;
260    A_UINT8 groupCryptoLen;
261    A_UINT8 ssidLength;
262    A_UCHAR ssid[WMI_MAX_SSID_LEN];
263    A_UINT16 channel;
264    A_UINT8 bssid[ATH_MAC_LEN];
265    A_UINT32 ctrl_flags;
266} POSTPACK WMI_CONNECT_CMD;
267
268/*
269 * WMI_RECONNECT_CMDID
270 */
271typedef PREPACK struct {
272    A_UINT16 channel; /* hint */
273    A_UINT8 bssid[ATH_MAC_LEN]; /* mandatory if set */
274} POSTPACK WMI_RECONNECT_CMD;
275
276/*
277 * WMI_ADD_CIPHER_KEY_CMDID
278 */
279typedef enum {
280    PAIRWISE_USAGE = 0x00,
281    GROUP_USAGE = 0x01,
282    TX_USAGE = 0x02, /* default Tx Key - Static WEP only */
283} KEY_USAGE;
284
285/*
286 * Bit Flag
287 * Bit 0 - Initialise TSC - default is Initialize
288 */
289#define KEY_OP_INIT_TSC 0x01
290#define KEY_OP_INIT_RSC 0x02
291
292#define KEY_OP_INIT_VAL 0x03 /* Default Initialise the TSC & RSC */
293#define KEY_OP_VALID_MASK 0x03
294
295typedef PREPACK struct {
296    A_UINT8 keyIndex;
297    A_UINT8 keyType;
298    A_UINT8 keyUsage; /* KEY_USAGE */
299    A_UINT8 keyLength;
300    A_UINT8 keyRSC[8]; /* key replay sequence counter */
301    A_UINT8 key[WMI_MAX_KEY_LEN];
302    A_UINT8 key_op_ctrl; /* Additional Key Control information */
303} POSTPACK WMI_ADD_CIPHER_KEY_CMD;
304
305/*
306 * WMI_DELETE_CIPHER_KEY_CMDID
307 */
308typedef PREPACK struct {
309    A_UINT8 keyIndex;
310} POSTPACK WMI_DELETE_CIPHER_KEY_CMD;
311
312#define WMI_KRK_LEN 16
313/*
314 * WMI_ADD_KRK_CMDID
315 */
316typedef PREPACK struct {
317    A_UINT8 krk[WMI_KRK_LEN];
318} POSTPACK WMI_ADD_KRK_CMD;
319
320/*
321 * WMI_SET_TKIP_COUNTERMEASURES_CMDID
322 */
323typedef enum {
324    WMI_TKIP_CM_DISABLE = 0x0,
325    WMI_TKIP_CM_ENABLE = 0x1,
326} WMI_TKIP_CM_CONTROL;
327
328typedef PREPACK struct {
329    A_UINT8 cm_en; /* WMI_TKIP_CM_CONTROL */
330} POSTPACK WMI_SET_TKIP_COUNTERMEASURES_CMD;
331
332/*
333 * WMI_SET_PMKID_CMDID
334 */
335
336#define WMI_PMKID_LEN 16
337
338typedef enum {
339   PMKID_DISABLE = 0,
340   PMKID_ENABLE = 1,
341} PMKID_ENABLE_FLG;
342
343typedef PREPACK struct {
344    A_UINT8 bssid[ATH_MAC_LEN];
345    A_UINT8 enable; /* PMKID_ENABLE_FLG */
346    A_UINT8 pmkid[WMI_PMKID_LEN];
347} POSTPACK WMI_SET_PMKID_CMD;
348
349/*
350 * WMI_START_SCAN_CMD
351 */
352typedef enum {
353    WMI_LONG_SCAN = 0,
354    WMI_SHORT_SCAN = 1,
355} WMI_SCAN_TYPE;
356
357typedef PREPACK struct {
358    A_BOOL forceFgScan;
359    A_BOOL isLegacy; /* For Legacy Cisco AP compatibility */
360    A_UINT32 homeDwellTime; /* Maximum duration in the home channel(milliseconds) */
361    A_UINT32 forceScanInterval; /* Time interval between scans (milliseconds)*/
362    A_UINT8 scanType; /* WMI_SCAN_TYPE */
363} POSTPACK WMI_START_SCAN_CMD;
364
365/*
366 * WMI_SET_SCAN_PARAMS_CMDID
367 */
368#define WMI_SHORTSCANRATIO_DEFAULT 3
369typedef enum {
370    CONNECT_SCAN_CTRL_FLAGS = 0x01, /* set if can scan in the Connect cmd */
371    SCAN_CONNECTED_CTRL_FLAGS = 0x02, /* set if scan for the SSID it is */
372                                       /* already connected to */
373    ACTIVE_SCAN_CTRL_FLAGS = 0x04, /* set if enable active scan */
374    ROAM_SCAN_CTRL_FLAGS = 0x08, /* set if enable roam scan when bmiss and lowrssi */
375    REPORT_BSSINFO_CTRL_FLAGS = 0x10, /* set if follows customer BSSINFO reporting rule */
376    ENABLE_AUTO_CTRL_FLAGS = 0x20, /* if disabled, target doesn't
377                                          scan after a disconnect event */
378    ENABLE_SCAN_ABORT_EVENT = 0x40 /* Scan complete event with canceled status will be generated when a scan is prempted before it gets completed */
379
380} WMI_SCAN_CTRL_FLAGS_BITS;
381
382#define CAN_SCAN_IN_CONNECT(flags) (flags & CONNECT_SCAN_CTRL_FLAGS)
383#define CAN_SCAN_CONNECTED(flags) (flags & SCAN_CONNECTED_CTRL_FLAGS)
384#define ENABLE_ACTIVE_SCAN(flags) (flags & ACTIVE_SCAN_CTRL_FLAGS)
385#define ENABLE_ROAM_SCAN(flags) (flags & ROAM_SCAN_CTRL_FLAGS)
386#define CONFIG_REPORT_BSSINFO(flags) (flags & REPORT_BSSINFO_CTRL_FLAGS)
387#define IS_AUTO_SCAN_ENABLED(flags) (flags & ENABLE_AUTO_CTRL_FLAGS)
388#define SCAN_ABORT_EVENT_ENABLED(flags) (flags & ENABLE_SCAN_ABORT_EVENT)
389
390#define DEFAULT_SCAN_CTRL_FLAGS (CONNECT_SCAN_CTRL_FLAGS| SCAN_CONNECTED_CTRL_FLAGS| ACTIVE_SCAN_CTRL_FLAGS| ROAM_SCAN_CTRL_FLAGS | ENABLE_AUTO_CTRL_FLAGS)
391
392
393typedef PREPACK struct {
394    A_UINT16 fg_start_period; /* seconds */
395    A_UINT16 fg_end_period; /* seconds */
396    A_UINT16 bg_period; /* seconds */
397    A_UINT16 maxact_chdwell_time; /* msec */
398    A_UINT16 pas_chdwell_time; /* msec */
399    A_UINT8 shortScanRatio; /* how many shorts scan for one long */
400    A_UINT8 scanCtrlFlags;
401    A_UINT16 minact_chdwell_time; /* msec */
402    A_UINT32 max_dfsch_act_time; /* msecs */
403} POSTPACK WMI_SCAN_PARAMS_CMD;
404
405/*
406 * WMI_SET_BSS_FILTER_CMDID
407 */
408typedef enum {
409    NONE_BSS_FILTER = 0x0, /* no beacons forwarded */
410    ALL_BSS_FILTER, /* all beacons forwarded */
411    PROFILE_FILTER, /* only beacons matching profile */
412    ALL_BUT_PROFILE_FILTER, /* all but beacons matching profile */
413    CURRENT_BSS_FILTER, /* only beacons matching current BSS */
414    ALL_BUT_BSS_FILTER, /* all but beacons matching BSS */
415    PROBED_SSID_FILTER, /* beacons matching probed ssid */
416    LAST_BSS_FILTER, /* marker only */
417} WMI_BSS_FILTER;
418
419typedef PREPACK struct {
420    A_UINT8 bssFilter; /* see WMI_BSS_FILTER */
421    A_UINT32 ieMask;
422} POSTPACK WMI_BSS_FILTER_CMD;
423
424/*
425 * WMI_SET_PROBED_SSID_CMDID
426 */
427#define MAX_PROBED_SSID_INDEX 5
428
429typedef enum {
430    DISABLE_SSID_FLAG = 0, /* disables entry */
431    SPECIFIC_SSID_FLAG = 0x01, /* probes specified ssid */
432    ANY_SSID_FLAG = 0x02, /* probes for any ssid */
433} WMI_SSID_FLAG;
434
435typedef PREPACK struct {
436    A_UINT8 entryIndex; /* 0 to MAX_PROBED_SSID_INDEX */
437    A_UINT8 flag; /* WMI_SSID_FLG */
438    A_UINT8 ssidLength;
439    A_UINT8 ssid[32];
440} POSTPACK WMI_PROBED_SSID_CMD;
441
442/*
443 * WMI_SET_LISTEN_INT_CMDID
444 * The Listen interval is between 15 and 3000 TUs
445 */
446#define MIN_LISTEN_INTERVAL 15
447#define MAX_LISTEN_INTERVAL 5000
448#define MIN_LISTEN_BEACONS 1
449#define MAX_LISTEN_BEACONS 50
450
451typedef PREPACK struct {
452    A_UINT16 listenInterval;
453    A_UINT16 numBeacons;
454} POSTPACK WMI_LISTEN_INT_CMD;
455
456/*
457 * WMI_SET_BEACON_INT_CMDID
458 */
459typedef PREPACK struct {
460    A_UINT16 beaconInterval;
461} POSTPACK WMI_BEACON_INT_CMD;
462
463/*
464 * WMI_SET_BMISS_TIME_CMDID
465 * valid values are between 1000 and 5000 TUs
466 */
467
468#define MIN_BMISS_TIME 1000
469#define MAX_BMISS_TIME 5000
470#define MIN_BMISS_BEACONS 1
471#define MAX_BMISS_BEACONS 50
472
473typedef PREPACK struct {
474    A_UINT16 bmissTime;
475    A_UINT16 numBeacons;
476} POSTPACK WMI_BMISS_TIME_CMD;
477
478/*
479 * WMI_SET_POWER_MODE_CMDID
480 */
481typedef enum {
482    REC_POWER = 0x01,
483    MAX_PERF_POWER,
484} WMI_POWER_MODE;
485
486typedef PREPACK struct {
487    A_UINT8 powerMode; /* WMI_POWER_MODE */
488} POSTPACK WMI_POWER_MODE_CMD;
489
490/*
491 * WMI_SET_POWER_PARAMS_CMDID
492 */
493typedef enum {
494    IGNORE_DTIM = 0x01,
495    NORMAL_DTIM = 0x02,
496    STICK_DTIM = 0x03,
497} WMI_DTIM_POLICY;
498
499typedef PREPACK struct {
500    A_UINT16 idle_period; /* msec */
501    A_UINT16 pspoll_number;
502    A_UINT16 dtim_policy;
503} POSTPACK WMI_POWER_PARAMS_CMD;
504
505typedef PREPACK struct {
506    A_UINT8 power_saving;
507    A_UINT8 ttl; /* number of beacon periods */
508    A_UINT16 atim_windows; /* msec */
509    A_UINT16 timeout_value; /* msec */
510} POSTPACK WMI_IBSS_PM_CAPS_CMD;
511
512/*
513 * WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID
514 */
515typedef enum {
516    IGNORE_TIM_ALL_QUEUES_APSD = 0,
517    PROCESS_TIM_ALL_QUEUES_APSD = 1,
518    IGNORE_TIM_SIMULATED_APSD = 2,
519    PROCESS_TIM_SIMULATED_APSD = 3,
520} APSD_TIM_POLICY;
521
522typedef PREPACK struct {
523    A_UINT16 psPollTimeout; /* msec */
524    A_UINT16 triggerTimeout; /* msec */
525    A_UINT32 apsdTimPolicy; /* TIM behavior with ques APSD enabled. Default is IGNORE_TIM_ALL_QUEUES_APSD */
526    A_UINT32 simulatedAPSDTimPolicy; /* TIM behavior with simulated APSD enabled. Default is PROCESS_TIM_SIMULATED_APSD */
527} POSTPACK WMI_POWERSAVE_TIMERS_POLICY_CMD;
528
529/*
530 * WMI_SET_VOICE_PKT_SIZE_CMDID
531 */
532typedef PREPACK struct {
533    A_UINT16 voicePktSize;
534} POSTPACK WMI_SET_VOICE_PKT_SIZE_CMD;
535
536/*
537 * WMI_SET_MAX_SP_LEN_CMDID
538 */
539typedef enum {
540    DELIVER_ALL_PKT = 0x0,
541    DELIVER_2_PKT = 0x1,
542    DELIVER_4_PKT = 0x2,
543    DELIVER_6_PKT = 0x3,
544} APSD_SP_LEN_TYPE;
545
546typedef PREPACK struct {
547    A_UINT8 maxSPLen;
548} POSTPACK WMI_SET_MAX_SP_LEN_CMD;
549
550/*
551 * WMI_SET_DISC_TIMEOUT_CMDID
552 */
553typedef PREPACK struct {
554    A_UINT8 disconnectTimeout; /* seconds */
555} POSTPACK WMI_DISC_TIMEOUT_CMD;
556
557typedef enum {
558    UPLINK_TRAFFIC = 0,
559    DNLINK_TRAFFIC = 1,
560    BIDIR_TRAFFIC = 2,
561} DIR_TYPE;
562
563typedef enum {
564    DISABLE_FOR_THIS_AC = 0,
565    ENABLE_FOR_THIS_AC = 1,
566    ENABLE_FOR_ALL_AC = 2,
567} VOICEPS_CAP_TYPE;
568
569typedef enum {
570    TRAFFIC_TYPE_APERIODIC = 0,
571    TRAFFIC_TYPE_PERIODIC = 1,
572}TRAFFIC_TYPE;
573
574/*
575 * WMI_CREATE_PSTREAM_CMDID
576 */
577typedef PREPACK struct {
578    A_UINT32 minServiceInt; /* in milli-sec */
579    A_UINT32 maxServiceInt; /* in milli-sec */
580    A_UINT32 inactivityInt; /* in milli-sec */
581    A_UINT32 suspensionInt; /* in milli-sec */
582    A_UINT32 serviceStartTime;
583    A_UINT32 minDataRate; /* in bps */
584    A_UINT32 meanDataRate; /* in bps */
585    A_UINT32 peakDataRate; /* in bps */
586    A_UINT32 maxBurstSize;
587    A_UINT32 delayBound;
588    A_UINT32 minPhyRate; /* in bps */
589    A_UINT32 sba;
590    A_UINT32 mediumTime;
591    A_UINT16 nominalMSDU; /* in octects */
592    A_UINT16 maxMSDU; /* in octects */
593    A_UINT8 trafficClass;
594    A_UINT8 trafficType; /* TRAFFIC_TYPE */
595    A_UINT8 trafficDirection; /* TRAFFIC_DIR */
596    A_UINT8 voicePSCapability; /* VOICEPS_CAP_TYPE */
597    A_UINT8 tsid;
598    A_UINT8 userPriority; /* 802.1D user priority */
599} POSTPACK WMI_CREATE_PSTREAM_CMD;
600
601/*
602 * WMI_DELETE_PSTREAM_CMDID
603 */
604typedef PREPACK struct {
605    A_UINT8 trafficClass;
606    A_UINT8 tsid;
607} POSTPACK WMI_DELETE_PSTREAM_CMD;
608
609/*
610 * WMI_SET_CHANNEL_PARAMS_CMDID
611 */
612typedef enum {
613    WMI_11A_MODE = 0x1,
614    WMI_11G_MODE = 0x2,
615    WMI_11AG_MODE = 0x3,
616    WMI_11B_MODE = 0x4,
617    WMI_11GONLY_MODE = 0x5,
618} WMI_PHY_MODE;
619
620#define WMI_MAX_CHANNELS 32
621
622typedef PREPACK struct {
623    A_UINT8 reserved1;
624    A_UINT8 scanParam; /* set if enable scan */
625    A_UINT8 phyMode; /* see WMI_PHY_MODE */
626    A_UINT8 numChannels; /* how many channels follow */
627    A_UINT16 channelList[1]; /* channels in Mhz */
628} POSTPACK WMI_CHANNEL_PARAMS_CMD;
629
630
631/*
632 * WMI_RSSI_THRESHOLD_PARAMS_CMDID
633 * Setting the polltime to 0 would disable polling.
634 * Threshold values are in the ascending order, and should agree to:
635 * (lowThreshold_lowerVal < lowThreshold_upperVal < highThreshold_lowerVal
636 * < highThreshold_upperVal)
637 */
638
639typedef PREPACK struct WMI_RSSI_THRESHOLD_PARAMS{
640    A_UINT32 pollTime; /* Polling time as a factor of LI */
641    A_INT16 thresholdAbove1_Val; /* lowest of upper */
642    A_INT16 thresholdAbove2_Val;
643    A_INT16 thresholdAbove3_Val;
644    A_INT16 thresholdAbove4_Val;
645    A_INT16 thresholdAbove5_Val;
646    A_INT16 thresholdAbove6_Val; /* highest of upper */
647    A_INT16 thresholdBelow1_Val; /* lowest of bellow */
648    A_INT16 thresholdBelow2_Val;
649    A_INT16 thresholdBelow3_Val;
650    A_INT16 thresholdBelow4_Val;
651    A_INT16 thresholdBelow5_Val;
652    A_INT16 thresholdBelow6_Val; /* highest of bellow */
653    A_UINT8 weight; /* "alpha" */
654    A_UINT8 reserved[3];
655} POSTPACK WMI_RSSI_THRESHOLD_PARAMS_CMD;
656
657/*
658 * WMI_SNR_THRESHOLD_PARAMS_CMDID
659 * Setting the polltime to 0 would disable polling.
660 */
661
662typedef PREPACK struct WMI_SNR_THRESHOLD_PARAMS{
663    A_UINT32 pollTime; /* Polling time as a factor of LI */
664    A_UINT8 weight; /* "alpha" */
665    A_UINT8 thresholdAbove1_Val; /* lowest of uppper*/
666    A_UINT8 thresholdAbove2_Val;
667    A_UINT8 thresholdAbove3_Val;
668    A_UINT8 thresholdAbove4_Val; /* highest of upper */
669    A_UINT8 thresholdBelow1_Val; /* lowest of bellow */
670    A_UINT8 thresholdBelow2_Val;
671    A_UINT8 thresholdBelow3_Val;
672    A_UINT8 thresholdBelow4_Val; /* highest of bellow */
673    A_UINT8 reserved[3];
674} POSTPACK WMI_SNR_THRESHOLD_PARAMS_CMD;
675
676/*
677 * WMI_LQ_THRESHOLD_PARAMS_CMDID
678 */
679typedef PREPACK struct WMI_LQ_THRESHOLD_PARAMS {
680    A_UINT8 enable;
681    A_UINT8 thresholdAbove1_Val;
682    A_UINT8 thresholdAbove2_Val;
683    A_UINT8 thresholdAbove3_Val;
684    A_UINT8 thresholdAbove4_Val;
685    A_UINT8 thresholdBelow1_Val;
686    A_UINT8 thresholdBelow2_Val;
687    A_UINT8 thresholdBelow3_Val;
688    A_UINT8 thresholdBelow4_Val;
689    A_UINT8 reserved[3];
690} POSTPACK WMI_LQ_THRESHOLD_PARAMS_CMD;
691
692typedef enum {
693    WMI_LPREAMBLE_DISABLED = 0,
694    WMI_LPREAMBLE_ENABLED
695} WMI_LPREAMBLE_STATUS;
696
697typedef PREPACK struct {
698    A_UINT8 status;
699}POSTPACK WMI_SET_LPREAMBLE_CMD;
700
701typedef PREPACK struct {
702    A_UINT16 threshold;
703}POSTPACK WMI_SET_RTS_CMD;
704
705/*
706 * WMI_TARGET_ERROR_REPORT_BITMASK_CMDID
707 * Sets the error reporting event bitmask in target. Target clears it
708 * upon an error. Subsequent errors are counted, but not reported
709 * via event, unless the bitmask is set again.
710 */
711typedef PREPACK struct {
712    A_UINT32 bitmask;
713} POSTPACK WMI_TARGET_ERROR_REPORT_BITMASK;
714
715/*
716 * WMI_SET_TX_PWR_CMDID
717 */
718typedef PREPACK struct {
719    A_UINT8 dbM; /* in dbM units */
720} POSTPACK WMI_SET_TX_PWR_CMD, WMI_TX_PWR_REPLY;
721
722/*
723 * WMI_SET_ASSOC_INFO_CMDID
724 *
725 * A maximum of 2 private IEs can be sent in the [Re]Assoc request.
726 * A 3rd one, the CCX version IE can also be set from the host.
727 */
728#define WMI_MAX_ASSOC_INFO_TYPE 2
729#define WMI_CCX_VER_IE 2 /* ieType to set CCX Version IE */
730
731#define WMI_MAX_ASSOC_INFO_LEN 240
732
733typedef PREPACK struct {
734    A_UINT8 ieType;
735    A_UINT8 bufferSize;
736    A_UINT8 assocInfo[1]; /* up to WMI_MAX_ASSOC_INFO_LEN */
737} POSTPACK WMI_SET_ASSOC_INFO_CMD;
738
739
740/*
741 * WMI_GET_TX_PWR_CMDID does not take any parameters
742 */
743
744/*
745 * WMI_ADD_BAD_AP_CMDID
746 */
747#define WMI_MAX_BAD_AP_INDEX 1
748
749typedef PREPACK struct {
750    A_UINT8 badApIndex; /* 0 to WMI_MAX_BAD_AP_INDEX */
751    A_UINT8 bssid[ATH_MAC_LEN];
752} POSTPACK WMI_ADD_BAD_AP_CMD;
753
754/*
755 * WMI_DELETE_BAD_AP_CMDID
756 */
757typedef PREPACK struct {
758    A_UINT8 badApIndex; /* 0 to WMI_MAX_BAD_AP_INDEX */
759} POSTPACK WMI_DELETE_BAD_AP_CMD;
760
761/*
762 * WMI_SET_ACCESS_PARAMS_CMDID
763 */
764#define WMI_DEFAULT_TXOP_ACPARAM 0 /* implies one MSDU */
765#define WMI_DEFAULT_ECWMIN_ACPARAM 4 /* corresponds to CWmin of 15 */
766#define WMI_DEFAULT_ECWMAX_ACPARAM 10 /* corresponds to CWmax of 1023 */
767#define WMI_MAX_CW_ACPARAM 15 /* maximum eCWmin or eCWmax */
768#define WMI_DEFAULT_AIFSN_ACPARAM 2
769#define WMI_MAX_AIFSN_ACPARAM 15
770typedef PREPACK struct {
771    A_UINT16 txop; /* in units of 32 usec */
772    A_UINT8 eCWmin;
773    A_UINT8 eCWmax;
774    A_UINT8 aifsn;
775} POSTPACK WMI_SET_ACCESS_PARAMS_CMD;
776
777
778/*
779 * WMI_SET_RETRY_LIMITS_CMDID
780 *
781 * This command is used to customize the number of retries the
782 * wlan device will perform on a given frame.
783 */
784#define WMI_MIN_RETRIES 2
785#define WMI_MAX_RETRIES 13
786typedef enum {
787    MGMT_FRAMETYPE = 0,
788    CONTROL_FRAMETYPE = 1,
789    DATA_FRAMETYPE = 2
790} WMI_FRAMETYPE;
791
792typedef PREPACK struct {
793    A_UINT8 frameType; /* WMI_FRAMETYPE */
794    A_UINT8 trafficClass; /* applies only to DATA_FRAMETYPE */
795    A_UINT8 maxRetries;
796    A_UINT8 enableNotify;
797} POSTPACK WMI_SET_RETRY_LIMITS_CMD;
798
799/*
800 * WMI_SET_ROAM_CTRL_CMDID
801 *
802 * This command is used to influence the Roaming behaviour
803 * Set the host biases of the BSSs before setting the roam mode as bias
804 * based.
805 */
806
807/*
808 * Different types of Roam Control
809 */
810
811typedef enum {
812        WMI_FORCE_ROAM = 1, /* Roam to the specified BSSID */
813        WMI_SET_ROAM_MODE = 2, /* default ,progd bias, no roam */
814        WMI_SET_HOST_BIAS = 3, /* Set the Host Bias */
815        WMI_SET_LOWRSSI_SCAN_PARAMS = 4, /* Set lowrssi Scan parameters */
816} WMI_ROAM_CTRL_TYPE;
817
818#define WMI_MIN_ROAM_CTRL_TYPE WMI_FORCE_ROAM
819#define WMI_MAX_ROAM_CTRL_TYPE WMI_SET_LOWRSSI_SCAN_PARAMS
820
821/*
822 * ROAM MODES
823 */
824
825typedef enum {
826        WMI_DEFAULT_ROAM_MODE = 1, /* RSSI based ROAM */
827        WMI_HOST_BIAS_ROAM_MODE = 2, /* HOST BIAS based ROAM */
828        WMI_LOCK_BSS_MODE = 3 /* Lock to the Current BSS - no Roam */
829} WMI_ROAM_MODE;
830
831/*
832 * BSS HOST BIAS INFO
833 */
834
835typedef PREPACK struct {
836        A_UINT8 bssid[ATH_MAC_LEN];
837        A_INT8 bias;
838} POSTPACK WMI_BSS_BIAS;
839
840typedef PREPACK struct {
841        A_UINT8 numBss;
842        WMI_BSS_BIAS bssBias[1];
843} POSTPACK WMI_BSS_BIAS_INFO;
844
845typedef PREPACK struct WMI_LOWRSSI_SCAN_PARAMS {
846        A_UINT16 lowrssi_scan_period;
847        A_INT16 lowrssi_scan_threshold;
848        A_INT16 lowrssi_roam_threshold;
849        A_UINT8 roam_rssi_floor;
850        A_UINT8 reserved[1]; /* For alignment */
851} POSTPACK WMI_LOWRSSI_SCAN_PARAMS;
852
853typedef PREPACK struct {
854    PREPACK union {
855        A_UINT8 bssid[ATH_MAC_LEN]; /* WMI_FORCE_ROAM */
856        A_UINT8 roamMode; /* WMI_SET_ROAM_MODE */
857        WMI_BSS_BIAS_INFO bssBiasInfo; /* WMI_SET_HOST_BIAS */
858        WMI_LOWRSSI_SCAN_PARAMS lrScanParams;
859    } POSTPACK info;
860    A_UINT8 roamCtrlType ;
861} POSTPACK WMI_SET_ROAM_CTRL_CMD;
862
863/*
864 * WMI_ENABLE_RM_CMDID
865 */
866typedef PREPACK struct {
867        A_BOOL enable_radio_measurements;
868} POSTPACK WMI_ENABLE_RM_CMD;
869
870/*
871 * WMI_SET_MAX_OFFHOME_DURATION_CMDID
872 */
873typedef PREPACK struct {
874        A_UINT8 max_offhome_duration;
875} POSTPACK WMI_SET_MAX_OFFHOME_DURATION_CMD;
876
877typedef PREPACK struct {
878    A_UINT32 frequency;
879    A_UINT8 threshold;
880} POSTPACK WMI_SET_HB_CHALLENGE_RESP_PARAMS_CMD;
881
882typedef enum {
883    BT_STREAM_UNDEF = 0,
884    BT_STREAM_SCO, /* SCO stream */
885    BT_STREAM_A2DP, /* A2DP stream */
886    BT_STREAM_MAX
887} BT_STREAM_TYPE;
888
889typedef enum {
890    BT_PARAM_SCO = 1, /* SCO stream parameters */
891    BT_PARAM_A2DP, /* A2DP stream parameters */
892    BT_PARAM_MISC, /* miscellaneous parameters */
893    BT_PARAM_REGS, /* co-existence register parameters */
894    BT_PARAM_MAX
895} BT_PARAM_TYPE;
896
897typedef enum {
898    BT_STATUS_UNDEF = 0,
899    BT_STATUS_START,
900    BT_STATUS_STOP,
901    BT_STATUS_RESUME,
902    BT_STATUS_SUSPEND,
903    BT_STATUS_MAX
904} BT_STREAM_STATUS;
905
906typedef PREPACK struct {
907    A_UINT8 streamType;
908    A_UINT8 status;
909} POSTPACK WMI_SET_BT_STATUS_CMD;
910
911typedef PREPACK struct {
912    A_UINT8 noSCOPkts;
913    A_UINT8 pspollTimeout;
914    A_UINT8 stompbt;
915} POSTPACK BT_PARAMS_SCO;
916
917typedef PREPACK struct {
918    A_UINT32 period;
919    A_UINT32 dutycycle;
920    A_UINT8 stompbt;
921} POSTPACK BT_PARAMS_A2DP;
922
923typedef PREPACK struct {
924    A_UINT32 mode;
925    A_UINT32 scoWghts;
926    A_UINT32 a2dpWghts;
927    A_UINT32 genWghts;
928    A_UINT32 mode2;
929    A_UINT8 setVal;
930} POSTPACK BT_COEX_REGS;
931
932typedef enum {
933    WLAN_PROTECT_POLICY = 1,
934    WLAN_COEX_CTRL_FLAGS
935} BT_PARAMS_MISC_TYPE;
936
937typedef enum {
938    WLAN_PROTECT_PER_STREAM = 0x01, /* default */
939    WLAN_PROTECT_ANY_TX = 0x02
940} WLAN_PROTECT_FLAGS;
941
942
943#define WLAN_DISABLE_COEX_IN_DISCONNECT 0x01 /* default */
944#define WLAN_KEEP_COEX_IN_DISCONNECT 0x02
945#define WLAN_STOMPBT_IN_DISCONNECT 0x04
946
947#define WLAN_DISABLE_COEX_IN_ROAM 0x10 /* default */
948#define WLAN_KEEP_COEX_IN_ROAM 0x20
949#define WLAN_STOMPBT_IN_ROAM 0x40
950
951#define WLAN_DISABLE_COEX_IN_SCAN 0x100 /* default */
952#define WLAN_KEEP_COEX_IN_SCAN 0x200
953#define WLAN_STOMPBT_IN_SCAN 0x400
954
955#define WLAN_DISABLE_COEX_BT_OFF 0x1000 /* default */
956#define WLAN_KEEP_COEX_BT_OFF 0x2000
957#define WLAN_STOMPBT_BT_OFF 0x4000
958
959typedef PREPACK struct {
960    A_UINT32 period;
961    A_UINT32 dutycycle;
962    A_UINT8 stompbt;
963    A_UINT8 policy;
964} POSTPACK WLAN_PROTECT_POLICY_TYPE;
965
966typedef PREPACK struct {
967    PREPACK union {
968        WLAN_PROTECT_POLICY_TYPE protectParams;
969        A_UINT16 wlanCtrlFlags;
970    } POSTPACK info;
971    A_UINT8 paramType;
972} POSTPACK BT_PARAMS_MISC;
973
974typedef PREPACK struct {
975    PREPACK union {
976        BT_PARAMS_SCO scoParams;
977        BT_PARAMS_A2DP a2dpParams;
978        BT_PARAMS_MISC miscParams;
979        BT_COEX_REGS regs;
980    } POSTPACK info;
981    A_UINT8 paramType;
982} POSTPACK WMI_SET_BT_PARAMS_CMD;
983
984/*
985 * Command Replies
986 */
987
988/*
989 * WMI_GET_CHANNEL_LIST_CMDID reply
990 */
991typedef PREPACK struct {
992    A_UINT8 reserved1;
993    A_UINT8 numChannels; /* number of channels in reply */
994    A_UINT16 channelList[1]; /* channel in Mhz */
995} POSTPACK WMI_CHANNEL_LIST_REPLY;
996
997typedef enum {
998    A_SUCCEEDED = A_OK,
999    A_FAILED_DELETE_STREAM_DOESNOT_EXIST=250,
1000    A_SUCCEEDED_MODIFY_STREAM=251,
1001    A_FAILED_INVALID_STREAM = 252,
1002    A_FAILED_MAX_THINSTREAMS = 253,
1003    A_FAILED_CREATE_REMOVE_PSTREAM_FIRST = 254,
1004} PSTREAM_REPLY_STATUS;
1005
1006/*
1007 * List of Events (target to host)
1008 */
1009typedef enum {
1010    WMI_READY_EVENTID = 0x1001,
1011    WMI_CONNECT_EVENTID,
1012    WMI_DISCONNECT_EVENTID,
1013    WMI_BSSINFO_EVENTID,
1014    WMI_CMDERROR_EVENTID,
1015    WMI_REGDOMAIN_EVENTID,
1016    WMI_PSTREAM_TIMEOUT_EVENTID,
1017    WMI_NEIGHBOR_REPORT_EVENTID,
1018    WMI_TKIP_MICERR_EVENTID,
1019    WMI_SCAN_COMPLETE_EVENTID,
1020    WMI_REPORT_STATISTICS_EVENTID,
1021    WMI_RSSI_THRESHOLD_EVENTID,
1022    WMI_ERROR_REPORT_EVENTID,
1023    WMI_OPT_RX_FRAME_EVENTID,
1024    WMI_REPORT_ROAM_TBL_EVENTID,
1025    WMI_EXTENSION_EVENTID,
1026    WMI_CAC_EVENTID,
1027    WMI_SNR_THRESHOLD_EVENTID,
1028    WMI_LQ_THRESHOLD_EVENTID,
1029    WMI_TX_RETRY_ERR_EVENTID,
1030    WMI_REPORT_ROAM_DATA_EVENTID,
1031    WMI_TEST_EVENTID,
1032    WMI_APLIST_EVENTID,
1033    WMI_GET_WOW_LIST_EVENTID,
1034    WMI_GET_PMKID_LIST_EVENTID
1035} WMI_EVENT_ID;
1036
1037typedef enum {
1038    WMI_11A_CAPABILITY = 1,
1039    WMI_11G_CAPABILITY = 2,
1040    WMI_11AG_CAPABILITY = 3,
1041} WMI_PHY_CAPABILITY;
1042
1043typedef PREPACK struct {
1044    A_UINT8 macaddr[ATH_MAC_LEN];
1045    A_UINT8 phyCapability; /* WMI_PHY_CAPABILITY */
1046} POSTPACK WMI_READY_EVENT;
1047
1048/*
1049 * Connect Event
1050 */
1051typedef PREPACK struct {
1052    A_UINT16 channel;
1053    A_UINT8 bssid[ATH_MAC_LEN];
1054    A_UINT16 listenInterval;
1055    A_UINT16 beaconInterval;
1056    A_UINT32 networkType;
1057    A_UINT8 beaconIeLen;
1058    A_UINT8 assocReqLen;
1059    A_UINT8 assocRespLen;
1060    A_UINT8 assocInfo[1];
1061} POSTPACK WMI_CONNECT_EVENT;
1062
1063/*
1064 * Disconnect Event
1065 */
1066typedef enum {
1067    NO_NETWORK_AVAIL = 0x01,
1068    LOST_LINK = 0x02, /* bmiss */
1069    DISCONNECT_CMD = 0x03,
1070    BSS_DISCONNECTED = 0x04,
1071    AUTH_FAILED = 0x05,
1072    ASSOC_FAILED = 0x06,
1073    NO_RESOURCES_AVAIL = 0x07,
1074    CSERV_DISCONNECT = 0x08,
1075    INVALID_PROFILE = 0x0a,
1076    DOT11H_CHANNEL_SWITCH = 0x0b,
1077} WMI_DISCONNECT_REASON;
1078
1079typedef PREPACK struct {
1080    A_UINT16 protocolReasonStatus; /* reason code, see 802.11 spec. */
1081    A_UINT8 bssid[ATH_MAC_LEN]; /* set if known */
1082    A_UINT8 disconnectReason ; /* see WMI_DISCONNECT_REASON */
1083    A_UINT8 assocRespLen;
1084    A_UINT8 assocInfo[1];
1085} POSTPACK WMI_DISCONNECT_EVENT;
1086
1087/*
1088 * BSS Info Event.
1089 * Mechanism used to inform host of the presence and characteristic of
1090 * wireless networks present. Consists of bss info header followed by
1091 * the beacon or probe-response frame body. The 802.11 header is not included.
1092 */
1093typedef enum {
1094    BEACON_FTYPE = 0x1,
1095    PROBERESP_FTYPE,
1096    ACTION_MGMT_FTYPE,
1097} WMI_BI_FTYPE;
1098
1099enum {
1100    BSS_ELEMID_CHANSWITCH = 0x01,
1101    BSS_ELEMID_ATHEROS = 0x02,
1102};
1103
1104typedef PREPACK struct {
1105    A_UINT16 channel;
1106    A_UINT8 frameType; /* see WMI_BI_FTYPE */
1107    A_UINT8 snr;
1108    A_INT16 rssi;
1109    A_UINT8 bssid[ATH_MAC_LEN];
1110    A_UINT32 ieMask;
1111} POSTPACK WMI_BSS_INFO_HDR;
1112
1113/*
1114 * Command Error Event
1115 */
1116typedef enum {
1117    INVALID_PARAM = 0x01,
1118    ILLEGAL_STATE = 0x02,
1119    INTERNAL_ERROR = 0x03,
1120} WMI_ERROR_CODE;
1121
1122typedef PREPACK struct {
1123    A_UINT16 commandId;
1124    A_UINT8 errorCode;
1125} POSTPACK WMI_CMD_ERROR_EVENT;
1126
1127/*
1128 * New Regulatory Domain Event
1129 */
1130typedef PREPACK struct {
1131    A_UINT32 regDomain;
1132} POSTPACK WMI_REG_DOMAIN_EVENT;
1133
1134typedef PREPACK struct {
1135    A_UINT8 trafficClass;
1136} POSTPACK WMI_PSTREAM_TIMEOUT_EVENT;
1137
1138/*
1139 * The WMI_NEIGHBOR_REPORT Event is generated by the target to inform
1140 * the host of BSS's it has found that matches the current profile.
1141 * It can be used by the host to cache PMKs and/to initiate pre-authentication
1142 * if the BSS supports it. The first bssid is always the current associated
1143 * BSS.
1144 * The bssid and bssFlags information repeats according to the number
1145 * or APs reported.
1146 */
1147typedef enum {
1148    WMI_DEFAULT_BSS_FLAGS = 0x00,
1149    WMI_PREAUTH_CAPABLE_BSS = 0x01,
1150    WMI_PMKID_VALID_BSS = 0x02,
1151} WMI_BSS_FLAGS;
1152
1153typedef PREPACK struct {
1154    A_UINT8 bssid[ATH_MAC_LEN];
1155    A_UINT8 bssFlags; /* see WMI_BSS_FLAGS */
1156} POSTPACK WMI_NEIGHBOR_INFO;
1157
1158typedef PREPACK struct {
1159    A_INT8 numberOfAps;
1160    WMI_NEIGHBOR_INFO neighbor[1];
1161} POSTPACK WMI_NEIGHBOR_REPORT_EVENT;
1162
1163/*
1164 * TKIP MIC Error Event
1165 */
1166typedef PREPACK struct {
1167    A_UINT8 keyid;
1168    A_UINT8 ismcast;
1169} POSTPACK WMI_TKIP_MICERR_EVENT;
1170
1171/*
1172 * WMI_SCAN_COMPLETE_EVENTID - no parameters (old), staus parameter (new)
1173 */
1174typedef PREPACK struct {
1175    A_STATUS status;
1176} POSTPACK WMI_SCAN_COMPLETE_EVENT;
1177
1178#define MAX_OPT_DATA_LEN 1400
1179
1180/*
1181 * WMI_SET_ADHOC_BSSID_CMDID
1182 */
1183typedef PREPACK struct {
1184    A_UINT8 bssid[ATH_MAC_LEN];
1185} POSTPACK WMI_SET_ADHOC_BSSID_CMD;
1186
1187/*
1188 * WMI_SET_OPT_MODE_CMDID
1189 */
1190typedef enum {
1191    SPECIAL_OFF,
1192    SPECIAL_ON,
1193} OPT_MODE_TYPE;
1194
1195typedef PREPACK struct {
1196    A_UINT8 optMode;
1197} POSTPACK WMI_SET_OPT_MODE_CMD;
1198
1199/*
1200 * WMI_TX_OPT_FRAME_CMDID
1201 */
1202typedef enum {
1203    OPT_PROBE_REQ = 0x01,
1204    OPT_PROBE_RESP = 0x02,
1205    OPT_CPPP_START = 0x03,
1206    OPT_CPPP_STOP = 0x04,
1207} WMI_OPT_FTYPE;
1208
1209typedef PREPACK struct {
1210    A_UINT16 optIEDataLen;
1211    A_UINT8 frmType;
1212    A_UINT8 dstAddr[ATH_MAC_LEN];
1213    A_UINT8 bssid[ATH_MAC_LEN];
1214    A_UINT8 reserved; /* For alignment */
1215    A_UINT8 optIEData[1];
1216} POSTPACK WMI_OPT_TX_FRAME_CMD;
1217
1218/*
1219 * Special frame receive Event.
1220 * Mechanism used to inform host of the receiption of the special frames.
1221 * Consists of special frame info header followed by special frame body.
1222 * The 802.11 header is not included.
1223 */
1224typedef PREPACK struct {
1225    A_UINT16 channel;
1226    A_UINT8 frameType; /* see WMI_OPT_FTYPE */
1227    A_INT8 snr;
1228    A_UINT8 srcAddr[ATH_MAC_LEN];
1229    A_UINT8 bssid[ATH_MAC_LEN];
1230} POSTPACK WMI_OPT_RX_INFO_HDR;
1231
1232/*
1233 * Reporting statistics.
1234 */
1235typedef PREPACK struct {
1236    A_UINT32 tx_packets;
1237    A_UINT32 tx_bytes;
1238    A_UINT32 tx_unicast_pkts;
1239    A_UINT32 tx_unicast_bytes;
1240    A_UINT32 tx_multicast_pkts;
1241    A_UINT32 tx_multicast_bytes;
1242    A_UINT32 tx_broadcast_pkts;
1243    A_UINT32 tx_broadcast_bytes;
1244    A_UINT32 tx_rts_success_cnt;
1245    A_UINT32 tx_packet_per_ac[4];
1246    A_UINT32 tx_errors_per_ac[4];
1247
1248    A_UINT32 tx_errors;
1249    A_UINT32 tx_failed_cnt;
1250    A_UINT32 tx_retry_cnt;
1251    A_UINT32 tx_rts_fail_cnt;
1252    A_INT32 tx_unicast_rate;
1253}POSTPACK tx_stats_t;
1254
1255typedef PREPACK struct {
1256    A_UINT32 rx_packets;
1257    A_UINT32 rx_bytes;
1258    A_UINT32 rx_unicast_pkts;
1259    A_UINT32 rx_unicast_bytes;
1260    A_UINT32 rx_multicast_pkts;
1261    A_UINT32 rx_multicast_bytes;
1262    A_UINT32 rx_broadcast_pkts;
1263    A_UINT32 rx_broadcast_bytes;
1264    A_UINT32 rx_fragment_pkt;
1265
1266    A_UINT32 rx_errors;
1267    A_UINT32 rx_crcerr;
1268    A_UINT32 rx_key_cache_miss;
1269    A_UINT32 rx_decrypt_err;
1270    A_UINT32 rx_duplicate_frames;
1271    A_INT32 rx_unicast_rate;
1272}POSTPACK rx_stats_t;
1273
1274typedef PREPACK struct {
1275    A_UINT32 tkip_local_mic_failure;
1276    A_UINT32 tkip_counter_measures_invoked;
1277    A_UINT32 tkip_replays;
1278    A_UINT32 tkip_format_errors;
1279    A_UINT32 ccmp_format_errors;
1280    A_UINT32 ccmp_replays;
1281}POSTPACK tkip_ccmp_stats_t;
1282
1283typedef PREPACK struct {
1284    A_UINT32 power_save_failure_cnt;
1285}POSTPACK pm_stats_t;
1286
1287typedef PREPACK struct {
1288    A_UINT32 cs_bmiss_cnt;
1289    A_UINT32 cs_lowRssi_cnt;
1290    A_UINT16 cs_connect_cnt;
1291    A_UINT16 cs_disconnect_cnt;
1292    A_INT16 cs_aveBeacon_rssi;
1293    A_UINT16 cs_roam_count;
1294    A_UINT16 cs_rssi;
1295    A_UINT8 cs_snr;
1296    A_UINT8 cs_aveBeacon_snr;
1297    A_UINT8 cs_lastRoam_msec;
1298} POSTPACK cserv_stats_t;
1299
1300typedef PREPACK struct {
1301    tx_stats_t tx_stats;
1302    rx_stats_t rx_stats;
1303    tkip_ccmp_stats_t tkipCcmpStats;
1304}POSTPACK wlan_net_stats_t;
1305
1306typedef PREPACK struct {
1307    A_UINT32 wow_num_pkts_dropped;
1308    A_UINT16 wow_num_events_discarded;
1309    A_UINT8 wow_num_host_pkt_wakeups;
1310    A_UINT8 wow_num_host_event_wakeups;
1311} POSTPACK wlan_wow_stats_t;
1312
1313typedef PREPACK struct {
1314    A_UINT32 lqVal;
1315    A_INT32 noise_floor_calibation;
1316    pm_stats_t pmStats;
1317    wlan_net_stats_t txrxStats;
1318    wlan_wow_stats_t wowStats;
1319    cserv_stats_t cservStats;
1320} POSTPACK WMI_TARGET_STATS;
1321
1322/*
1323 * WMI_RSSI_THRESHOLD_EVENTID.
1324 * Indicate the RSSI events to host. Events are indicated when we breach a
1325 * thresold value.
1326 */
1327typedef enum{
1328    WMI_RSSI_THRESHOLD1_ABOVE = 0,
1329    WMI_RSSI_THRESHOLD2_ABOVE,
1330    WMI_RSSI_THRESHOLD3_ABOVE,
1331    WMI_RSSI_THRESHOLD4_ABOVE,
1332    WMI_RSSI_THRESHOLD5_ABOVE,
1333    WMI_RSSI_THRESHOLD6_ABOVE,
1334    WMI_RSSI_THRESHOLD1_BELOW,
1335    WMI_RSSI_THRESHOLD2_BELOW,
1336    WMI_RSSI_THRESHOLD3_BELOW,
1337    WMI_RSSI_THRESHOLD4_BELOW,
1338    WMI_RSSI_THRESHOLD5_BELOW,
1339    WMI_RSSI_THRESHOLD6_BELOW
1340}WMI_RSSI_THRESHOLD_VAL;
1341
1342typedef PREPACK struct {
1343    A_INT16 rssi;
1344    A_UINT8 range;
1345}POSTPACK WMI_RSSI_THRESHOLD_EVENT;
1346
1347/*
1348 * WMI_ERROR_REPORT_EVENTID
1349 */
1350typedef enum{
1351    WMI_TARGET_PM_ERR_FAIL = 0x00000001,
1352    WMI_TARGET_KEY_NOT_FOUND = 0x00000002,
1353    WMI_TARGET_DECRYPTION_ERR = 0x00000004,
1354    WMI_TARGET_BMISS = 0x00000008,
1355    WMI_PSDISABLE_NODE_JOIN = 0x00000010,
1356    WMI_TARGET_COM_ERR = 0x00000020,
1357    WMI_TARGET_FATAL_ERR = 0x00000040
1358} WMI_TARGET_ERROR_VAL;
1359
1360typedef PREPACK struct {
1361    A_UINT32 errorVal;
1362}POSTPACK WMI_TARGET_ERROR_REPORT_EVENT;
1363
1364typedef PREPACK struct {
1365    A_UINT8 retrys;
1366}POSTPACK WMI_TX_RETRY_ERR_EVENT;
1367
1368typedef enum{
1369    WMI_SNR_THRESHOLD1_ABOVE = 1,
1370    WMI_SNR_THRESHOLD1_BELOW,
1371    WMI_SNR_THRESHOLD2_ABOVE,
1372    WMI_SNR_THRESHOLD2_BELOW,
1373    WMI_SNR_THRESHOLD3_ABOVE,
1374    WMI_SNR_THRESHOLD3_BELOW,
1375    WMI_SNR_THRESHOLD4_ABOVE,
1376    WMI_SNR_THRESHOLD4_BELOW
1377} WMI_SNR_THRESHOLD_VAL;
1378
1379typedef PREPACK struct {
1380    A_UINT8 range; /* WMI_SNR_THRESHOLD_VAL */
1381    A_UINT8 snr;
1382}POSTPACK WMI_SNR_THRESHOLD_EVENT;
1383
1384typedef enum{
1385    WMI_LQ_THRESHOLD1_ABOVE = 1,
1386    WMI_LQ_THRESHOLD1_BELOW,
1387    WMI_LQ_THRESHOLD2_ABOVE,
1388    WMI_LQ_THRESHOLD2_BELOW,
1389    WMI_LQ_THRESHOLD3_ABOVE,
1390    WMI_LQ_THRESHOLD3_BELOW,
1391    WMI_LQ_THRESHOLD4_ABOVE,
1392    WMI_LQ_THRESHOLD4_BELOW
1393} WMI_LQ_THRESHOLD_VAL;
1394
1395typedef PREPACK struct {
1396    A_INT32 lq;
1397    A_UINT8 range; /* WMI_LQ_THRESHOLD_VAL */
1398}POSTPACK WMI_LQ_THRESHOLD_EVENT;
1399/*
1400 * WMI_REPORT_ROAM_TBL_EVENTID
1401 */
1402#define MAX_ROAM_TBL_CAND 5
1403
1404typedef PREPACK struct {
1405    A_INT32 roam_util;
1406    A_UINT8 bssid[ATH_MAC_LEN];
1407    A_INT8 rssi;
1408    A_INT8 rssidt;
1409    A_INT8 last_rssi;
1410    A_INT8 util;
1411    A_INT8 bias;
1412    A_UINT8 reserved; /* For alignment */
1413} POSTPACK WMI_BSS_ROAM_INFO;
1414
1415
1416typedef PREPACK struct {
1417    A_UINT16 roamMode;
1418    A_UINT16 numEntries;
1419    WMI_BSS_ROAM_INFO bssRoamInfo[1];
1420} POSTPACK WMI_TARGET_ROAM_TBL;
1421
1422/*
1423 * WMI_CAC_EVENTID
1424 */
1425typedef enum {
1426    CAC_INDICATION_ADMISSION = 0x00,
1427    CAC_INDICATION_ADMISSION_RESP = 0x01,
1428    CAC_INDICATION_DELETE = 0x02,
1429    CAC_INDICATION_NO_RESP = 0x03,
1430}CAC_INDICATION;
1431
1432#define WMM_TSPEC_IE_LEN 63
1433
1434typedef PREPACK struct {
1435    A_UINT8 ac;
1436    A_UINT8 cac_indication;
1437    A_UINT8 statusCode;
1438    A_UINT8 tspecSuggestion[WMM_TSPEC_IE_LEN];
1439}POSTPACK WMI_CAC_EVENT;
1440
1441/*
1442 * WMI_APLIST_EVENTID
1443 */
1444
1445typedef enum {
1446    APLIST_VER1 = 1,
1447} APLIST_VER;
1448
1449typedef PREPACK struct {
1450    A_UINT8 bssid[ATH_MAC_LEN];
1451    A_UINT16 channel;
1452} POSTPACK WMI_AP_INFO_V1;
1453
1454typedef PREPACK union {
1455    WMI_AP_INFO_V1 apInfoV1;
1456} POSTPACK WMI_AP_INFO;
1457
1458typedef PREPACK struct {
1459    A_UINT8 apListVer;
1460    A_UINT8 numAP;
1461    WMI_AP_INFO apList[1];
1462} POSTPACK WMI_APLIST_EVENT;
1463
1464/*
1465 * developer commands
1466 */
1467
1468/*
1469 * WMI_SET_BITRATE_CMDID
1470 *
1471 * Get bit rate cmd uses same definition as set bit rate cmd
1472 */
1473typedef enum {
1474    RATE_AUTO = -1,
1475    RATE_1Mb = 0,
1476    RATE_2Mb = 1,
1477    RATE_5_5Mb = 2,
1478    RATE_11Mb = 3,
1479    RATE_6Mb = 4,
1480    RATE_9Mb = 5,
1481    RATE_12Mb = 6,
1482    RATE_18Mb = 7,
1483    RATE_24Mb = 8,
1484    RATE_36Mb = 9,
1485    RATE_48Mb = 10,
1486    RATE_54Mb = 11,
1487} WMI_BIT_RATE;
1488
1489typedef PREPACK struct {
1490    A_INT8 rateIndex; /* see WMI_BIT_RATE */
1491} POSTPACK WMI_BIT_RATE_CMD, WMI_BIT_RATE_REPLY;
1492
1493/*
1494 * WMI_SET_FIXRATES_CMDID
1495 *
1496 * Get fix rates cmd uses same definition as set fix rates cmd
1497 */
1498typedef enum {
1499    FIX_RATE_1Mb = 0x1,
1500    FIX_RATE_2Mb = 0x2,
1501    FIX_RATE_5_5Mb = 0x4,
1502    FIX_RATE_11Mb = 0x8,
1503    FIX_RATE_6Mb = 0x10,
1504    FIX_RATE_9Mb = 0x20,
1505    FIX_RATE_12Mb = 0x40,
1506    FIX_RATE_18Mb = 0x80,
1507    FIX_RATE_24Mb = 0x100,
1508    FIX_RATE_36Mb = 0x200,
1509    FIX_RATE_48Mb = 0x400,
1510    FIX_RATE_54Mb = 0x800,
1511} WMI_FIX_RATES_MASK;
1512
1513typedef PREPACK struct {
1514    A_UINT16 fixRateMask; /* see WMI_BIT_RATE */
1515} POSTPACK WMI_FIX_RATES_CMD, WMI_FIX_RATES_REPLY;
1516
1517/*
1518 * WMI_SET_RECONNECT_AUTH_MODE_CMDID
1519 *
1520 * Set authentication mode
1521 */
1522typedef enum {
1523    RECONN_DO_AUTH = 0x00,
1524    RECONN_NOT_AUTH = 0x01
1525} WMI_AUTH_MODE;
1526
1527typedef PREPACK struct {
1528    A_UINT8 mode;
1529} POSTPACK WMI_SET_AUTH_MODE_CMD;
1530
1531/*
1532 * WMI_SET_REASSOC_MODE_CMDID
1533 *
1534 * Set authentication mode
1535 */
1536typedef enum {
1537    REASSOC_DO_DISASSOC = 0x00,
1538    REASSOC_DONOT_DISASSOC = 0x01
1539} WMI_REASSOC_MODE;
1540
1541typedef PREPACK struct {
1542    A_UINT8 mode;
1543}POSTPACK WMI_SET_REASSOC_MODE_CMD;
1544
1545typedef enum {
1546    ROAM_DATA_TIME = 1, /* Get The Roam Time Data */
1547} ROAM_DATA_TYPE;
1548
1549typedef PREPACK struct {
1550    A_UINT32 disassoc_time;
1551    A_UINT32 no_txrx_time;
1552    A_UINT32 assoc_time;
1553    A_UINT32 allow_txrx_time;
1554    A_UINT32 last_data_txrx_time;
1555    A_UINT32 first_data_txrx_time;
1556    A_UINT8 disassoc_bssid[ATH_MAC_LEN];
1557    A_INT8 disassoc_bss_rssi;
1558    A_UINT8 assoc_bssid[ATH_MAC_LEN];
1559    A_INT8 assoc_bss_rssi;
1560} POSTPACK WMI_TARGET_ROAM_TIME;
1561
1562typedef PREPACK struct {
1563    PREPACK union {
1564        WMI_TARGET_ROAM_TIME roamTime;
1565    } POSTPACK u;
1566    A_UINT8 roamDataType ;
1567} POSTPACK WMI_TARGET_ROAM_DATA;
1568
1569typedef enum {
1570    WMI_WMM_DISABLED = 0,
1571    WMI_WMM_ENABLED
1572} WMI_WMM_STATUS;
1573
1574typedef PREPACK struct {
1575    A_UINT8 status;
1576}POSTPACK WMI_SET_WMM_CMD;
1577
1578typedef enum {
1579    WMI_TXOP_DISABLED = 0,
1580    WMI_TXOP_ENABLED
1581} WMI_TXOP_CFG;
1582
1583typedef PREPACK struct {
1584    A_UINT8 txopEnable;
1585}POSTPACK WMI_SET_WMM_TXOP_CMD;
1586
1587typedef PREPACK struct {
1588    A_UINT8 keepaliveInterval;
1589} POSTPACK WMI_SET_KEEPALIVE_CMD;
1590
1591typedef PREPACK struct {
1592    A_BOOL configured;
1593    A_UINT8 keepaliveInterval;
1594} POSTPACK WMI_GET_KEEPALIVE_CMD;
1595
1596/*
1597 * Add Application specified IE to a management frame
1598 */
1599#define WMI_MAX_IE_LEN 78
1600
1601typedef PREPACK struct {
1602    A_UINT8 mgmtFrmType; /* one of WMI_MGMT_FRAME_TYPE */
1603    A_UINT8 ieLen; /* Length of the IE that should be added to the MGMT frame */
1604    A_UINT8 ieInfo[1];
1605} POSTPACK WMI_SET_APPIE_CMD;
1606
1607/*
1608 * Notify the WSC registration status to the target
1609 */
1610#define WSC_REG_ACTIVE 1
1611#define WSC_REG_INACTIVE 0
1612/* Generic Hal Interface for setting hal paramters. */
1613/* Add new Set HAL Param cmdIds here for newer params */
1614typedef enum {
1615   WHAL_SETCABTO_CMDID = 1,
1616}WHAL_CMDID;
1617
1618typedef PREPACK struct {
1619    A_UINT8 cabTimeOut;
1620} POSTPACK WHAL_SETCABTO_PARAM;
1621
1622typedef PREPACK struct {
1623    A_UINT8 whalCmdId;
1624    A_UINT8 data[1];
1625} POSTPACK WHAL_PARAMCMD;
1626
1627
1628#define WOW_MAX_FILTER_LISTS 1 /*4*/
1629#define WOW_MAX_FILTERS_PER_LIST 4
1630#define WOW_PATTERN_SIZE 64
1631#define WOW_MASK_SIZE 64
1632
1633typedef PREPACK struct {
1634    A_UINT8 wow_valid_filter;
1635    A_UINT8 wow_filter_id;
1636    A_UINT8 wow_filter_size;
1637    A_UINT8 wow_filter_offset;
1638    A_UINT8 wow_filter_mask[WOW_MASK_SIZE];
1639    A_UINT8 wow_filter_pattern[WOW_PATTERN_SIZE];
1640} POSTPACK WOW_FILTER;
1641
1642
1643typedef PREPACK struct {
1644    A_UINT8 wow_valid_list;
1645    A_UINT8 wow_list_id;
1646    A_UINT8 wow_num_filters;
1647    A_UINT8 wow_total_list_size;
1648    WOW_FILTER list[WOW_MAX_FILTERS_PER_LIST];
1649} POSTPACK WOW_FILTER_LIST;
1650
1651typedef PREPACK struct {
1652    A_BOOL awake;
1653    A_BOOL asleep;
1654} POSTPACK WMI_SET_HOST_SLEEP_MODE_CMD;
1655
1656typedef PREPACK struct {
1657    A_BOOL enable_wow;
1658} POSTPACK WMI_SET_WOW_MODE_CMD;
1659
1660typedef PREPACK struct {
1661    A_UINT8 filter_list_id;
1662} POSTPACK WMI_GET_WOW_LIST_CMD;
1663
1664/*
1665 * WMI_GET_WOW_LIST_CMD reply
1666 */
1667typedef PREPACK struct {
1668    A_UINT8 num_filters; /* number of patterns in reply */
1669    A_UINT8 this_filter_num; /* this is filter # x of total num_filters */
1670    A_UINT8 wow_mode;
1671    A_UINT8 host_mode;
1672    WOW_FILTER wow_filters[1];
1673} POSTPACK WMI_GET_WOW_LIST_REPLY;
1674
1675typedef PREPACK struct {
1676    A_UINT8 filter_list_id;
1677    A_UINT8 filter_size;
1678    A_UINT8 filter_offset;
1679    A_UINT8 filter[1];
1680} POSTPACK WMI_ADD_WOW_PATTERN_CMD;
1681
1682typedef PREPACK struct {
1683    A_UINT16 filter_list_id;
1684    A_UINT16 filter_id;
1685} POSTPACK WMI_DEL_WOW_PATTERN_CMD;
1686
1687typedef PREPACK struct {
1688    A_UINT8 macaddr[ATH_MAC_LEN];
1689} POSTPACK WMI_SET_MAC_ADDRESS_CMD;
1690
1691/*
1692 * WMI_SET_AKMP_PARAMS_CMD
1693 */
1694
1695#define WMI_AKMP_MULTI_PMKID_EN 0x000001
1696
1697typedef PREPACK struct {
1698    A_UINT32 akmpInfo;
1699} POSTPACK WMI_SET_AKMP_PARAMS_CMD;
1700
1701typedef PREPACK struct {
1702    A_UINT8 pmkid[WMI_PMKID_LEN];
1703} POSTPACK WMI_PMKID;
1704
1705/*
1706 * WMI_SET_PMKID_LIST_CMD
1707 */
1708#define WMI_MAX_PMKID_CACHE 8
1709
1710typedef PREPACK struct {
1711    A_UINT32 numPMKID;
1712    WMI_PMKID pmkidList[WMI_MAX_PMKID_CACHE];
1713} POSTPACK WMI_SET_PMKID_LIST_CMD;
1714
1715/*
1716 * WMI_GET_PMKID_LIST_CMD Reply
1717 * Following the Number of PMKIDs is the list of PMKIDs
1718 */
1719typedef PREPACK struct {
1720    A_UINT32 numPMKID;
1721    WMI_PMKID pmkidList[1];
1722} POSTPACK WMI_PMKID_LIST_REPLY;
1723
1724/* index used for priority streams */
1725typedef enum {
1726    WMI_NOT_MAPPED = -1,
1727    WMI_CONTROL_PRI = 0,
1728    WMI_BEST_EFFORT_PRI = 1,
1729    WMI_LOW_PRI = 2,
1730    WMI_HIGH_PRI = 3,
1731    WMI_HIGHEST_PRI,
1732    WMI_PRI_MAX_COUNT
1733} WMI_PRI_STREAM_ID;
1734
1735#ifndef ATH_TARGET
1736#include "athendpack.h"
1737#endif
1738
1739#ifdef __cplusplus
1740}
1741#endif
1742
1743#endif /* _WMI_H_ */
1744

Archive Download this file



interactive