📄 wmi.h
字号:
//------------------------------------------------------------------------------
// <copyright file="wmi.h" company="Atheros">
// Copyright (c) 2006 Microsoft Corporation. All rights reserved.
// Copyright (c) 2006 Atheros Corporation. All rights reserved.
//
// The use and distribution terms for this software are covered by the
// Microsoft Limited Permissive License (Ms-LPL)
// http://www.microsoft.com/resources/sharedsource/licensingbasics/limitedpermissivelicense.mspx
// which can be found in the file MS-LPL.txt at the root of this distribution.
// By using this software in any fashion, you are agreeing to be bound by
// the terms of this license.
//
// You must not remove this notice, or any other, from this software.
// </copyright>
//
// <summary>
// Windows CE Wifi Driver for AR-6000
// </summary>
//------------------------------------------------------------------------------
//==============================================================================
// This file contains the definitions of the WMI protocol specified in the
// Wireless Module Interface (WMI). It includes definitions of all the
// commands and events. Commands are messages from the host to the WM.
// Events and Replies are messages from the WM to the host.
//
// Author(s): ="Atheros"
//==============================================================================
/*
* Ownership of correctness in regards to WMI commands
* belongs to the host driver and the WM is not required to validate
* parameters for value, proper range, or any other checking.
*
*/
#ifndef _WMI_H_
#define _WMI_H_
#include "wmix.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef UNDER_CE
#pragma pack (1)
#endif
#define WMI_PROTOCOL_VERSION 0x0001
#define WMI_PROTOCOL_REVISION 0x0000
#define ATH_MAC_LEN 6 /* length of mac in bytes */
#define WMI_CMD_MAX_LEN 100
#define WMI_CONTROL_MSG_MAX_LEN 256
#define WMI_OPT_CONTROL_MSG_MAX_LEN 1536
#define IS_ETHERTYPE(_typeOrLen) ((_typeOrLen) >= 0x0600)
#define RFC1042OUI {0x00, 0x00, 0x00}
#define IP_ETHERTYPE 0x0800
/*
* Data Path
*/
typedef struct {
A_UINT8 dstMac[ATH_MAC_LEN];
A_UINT8 srcMac[ATH_MAC_LEN];
A_UINT16 typeOrLen;
} ATH_MAC_HDR;
typedef struct {
A_UINT8 dsap;
A_UINT8 ssap;
A_UINT8 cntl;
A_UINT8 orgCode[3];
A_UINT16 etherType;
} ATH_LLC_SNAP_HDR;
typedef enum {
DATA_MSGTYPE = 0x0,
CNTL_MSGTYPE,
SYNC_MSGTYPE
} WMI_MSG_TYPE;
#ifdef AR6K_FIRMWARE_1_0
typedef struct {
A_UINT8 reserved1;
A_UINT8 msgType; /* see WMI_MSG_TYPE */
} WMI_DATA_HDR;
#define WMI_DATA_HDR_SET_MSG_TYPE(h, t) (h)->msgType = (t)
#define WMI_DATA_HDR_SET_UP(h, p)
#else // Firware 1.1
typedef struct {
A_INT8 rssi;
A_UINT8 info; /* WMI_MSG_TYPE in lower 2 bits - b1b0 */
/* UP in next 3 bits - b4b3b2 */
#define WMI_DATA_HDR_MSG_TYPE_MASK 0x03
#define WMI_DATA_HDR_MSG_TYPE_SHIFT 0
#define WMI_DATA_HDR_UP_MASK 0x07
#define WMI_DATA_HDR_UP_SHIFT 2
#define WMI_DATA_HDR_IS_MSG_TYPE(h, t) (((h)->info & (WMI_DATA_HDR_MSG_TYPE_MASK)) == (t))
} WMI_DATA_HDR;
#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))
#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))
#endif //AR6K_FIRMWARE_1_1
/*
* Control Path
*/
typedef struct {
A_UINT16 commandId;
} WMI_CMD_HDR; /* used for commands and events */
/*
* List of Commnands
*/
typedef enum {
WMI_CONNECT_CMDID = 0x0001,
WMI_RECONNECT_CMDID,
WMI_DISCONNECT_CMDID,
WMI_SYNCHRONIZE_CMDID,
WMI_CREATE_PSTREAM_CMDID,
WMI_DELETE_PSTREAM_CMDID,
WMI_START_SCAN_CMDID,
WMI_SET_SCAN_PARAMS_CMDID,
WMI_SET_BSS_FILTER_CMDID,
WMI_SET_PROBED_SSID_CMDID,
WMI_SET_LISTEN_INT_CMDID,
WMI_SET_BMISS_TIME_CMDID,
WMI_SET_DISC_TIMEOUT_CMDID,
WMI_GET_CHANNEL_LIST_CMDID,
WMI_SET_BEACON_INT_CMDID,
WMI_GET_STATISTICS_CMDID,
WMI_SET_CHANNEL_PARAMS_CMDID,
WMI_SET_POWER_MODE_CMDID,
WMI_SET_IBSS_PM_CAPS_CMDID,
WMI_SET_POWER_PARAMS_CMDID,
#ifndef AR6K_FIRMWARE_1_0
WMI_SET_POWERSAVE_TIMERS_CMDID,
#endif
WMI_ADD_CIPHER_KEY_CMDID,
WMI_DELETE_CIPHER_KEY_CMDID,
#ifndef AR6K_FIRMWARE_1_0
WMI_ADD_KRK_CMDID,
WMI_DELETE_KRK_CMDID,
#endif
WMI_SET_PMKID_CMDID,
WMI_SET_TX_PWR_CMDID,
WMI_GET_TX_PWR_CMDID,
WMI_SET_ASSOC_INFO_CMDID,
WMI_ADD_BAD_AP_CMDID,
WMI_DELETE_BAD_AP_CMDID,
WMI_SET_TKIP_COUNTERMEASURES_CMDID,
WMI_RSSI_THRESHOLD_PARAMS_CMDID,
WMI_TARGET_ERROR_REPORT_BITMASK_CMDID,
WMI_SET_ACCESS_PARAMS_CMDID,
WMI_SET_RETRY_LIMITS_CMDID,
WMI_SET_OPT_MODE_CMDID,
WMI_OPT_TX_FRAME_CMDID,
#ifndef AR6K_FIRMWARE_1_0
WMI_SET_VOICE_PKT_SIZE_CMDID,
WMI_SET_MAX_SP_LEN_CMDID,
WMI_SET_ROAM_CTRL_CMDID,
WMI_GET_ROAM_TBL_CMDID,
WMI_GET_ROAM_DATA_CMDID,
WMI_ENABLE_RM_CMDID,
WMI_SET_MAX_OFFHOME_DURATION_CMDID,
#endif
WMI_EXTENSION_CMDID, /* Non-wireless extensions */
#ifndef AR6K_FIRMWARE_1_0
WMI_SNR_THRESHOLD_PARAMS_CMDID,
WMI_LQ_THRESHOLD_PARAMS_CMDID,
WMI_SET_LPREAMBLE_CMDID,
WMI_SET_RTS_CMDID,
WMI_CLR_RSSI_SNR_CMDID,
WMI_SET_FIXRATES_CMDID,
WMI_GET_FIXRATES_CMDID,
WMI_SET_AUTH_MODE_CMDID,
#endif
/*
* Developer commands starts at 0xF000
*/
WMI_SET_BITRATE_CMDID = 0xF000,
WMI_GET_BITRATE_CMDID,
} WMI_COMMAND_ID;
/*
* Connect Command
*/
typedef enum {
INFRA_NETWORK = 0x01,
ADHOC_NETWORK = 0x02,
} NETWORK_TYPE;
typedef enum {
OPEN_AUTH = 0x01,
SHARED_AUTH = 0x02,
#ifdef AR6K_FIRMWARE_1_0
SHARED_OPEN_AUTH = 0x03,
#endif
LEAP_AUTH = 0x04,
} DOT11_AUTH_MODE;
typedef enum {
NONE_AUTH = 0x01,
WPA_AUTH = 0x02,
WPA_PSK_AUTH = 0x03,
WPA2_AUTH = 0x04,
WPA2_PSK_AUTH = 0x05,
WPA_AUTH_CCKM = 0x06,
WPA2_AUTH_CCKM = 0x07,
} AUTH_MODE;
typedef enum {
NONE_CRYPT = 0x01,
WEP_CRYPT = 0x02,
TKIP_CRYPT = 0x03,
AES_CRYPT = 0x04,
} CRYPTO_TYPE;
#define WMI_MIN_CRYPTO_TYPE NONE_CRYPT
#define WMI_MAX_CRYPTO_TYPE (AES_CRYPT + 1)
#define WMI_MIN_KEY_INDEX 0
#define WMI_MAX_KEY_INDEX 3
#define WMI_MAX_KEY_LEN 32
#define WMI_MAX_SSID_LEN 32
typedef struct {
A_UINT8 networkType;
A_UINT8 dot11AuthMode;
A_UINT8 authMode;
A_UINT8 pairwiseCryptoType;
#ifndef AR6K_FIRMWARE_1_0
A_UINT8 pairwiseCryptoLen;
#endif
A_UINT8 groupCryptoType;
#ifndef AR6K_FIRMWARE_1_0
A_UINT8 groupCryptoLen;
#endif
A_UINT8 ssidLength;
A_UCHAR ssid[WMI_MAX_SSID_LEN];
A_UINT16 channel;
A_UINT8 bssid[ATH_MAC_LEN];
} WMI_CONNECT_CMD;
/*
* WMI_RECONNECT_CMDID
*/
typedef struct {
A_UINT16 channel; /* hint */
A_UINT8 bssid[ATH_MAC_LEN]; /* mandatory if set */
} WMI_RECONNECT_CMD;
/*
* WMI_ADD_CIPHER_KEY_CMDID
*/
typedef enum {
PAIRWISE_USAGE = 0x00,
GROUP_USAGE = 0x01,
TX_USAGE = 0x02, /* default Tx Key - Static WEP only */
} KEY_USAGE;
typedef struct {
A_UINT8 keyIndex;
A_UINT8 keyType;
A_UINT8 keyUsage; /* KEY_USAGE */
A_UINT8 keyLength;
A_UINT8 keyRSC[8]; /* key replay sequence counter */
A_UINT8 key[WMI_MAX_KEY_LEN];
} WMI_ADD_CIPHER_KEY_CMD;
/*
* WMI_DELETE_CIPHER_KEY_CMDID
*/
typedef struct {
A_UINT8 keyIndex;
} WMI_DELETE_CIPHER_KEY_CMD;
#define WMI_KRK_LEN 16
/*
* WMI_ADD_KRK_CMDID
*/
typedef struct {
A_UINT8 krk[WMI_KRK_LEN];
} WMI_ADD_KRK_CMD;
/*
* WMI_SET_TKIP_COUNTERMEASURES_CMDID
*/
typedef enum {
WMI_TKIP_CM_DISABLE = 0x0,
WMI_TKIP_CM_ENABLE = 0x1,
} WMI_TKIP_CM_CONTROL;
typedef struct {
A_UINT8 cm_en; /* WMI_TKIP_CM_CONTROL */
} WMI_SET_TKIP_COUNTERMEASURES_CMD;
/*
* WMI_SET_PMKID_CMDID
*/
typedef enum {
PMKID_DISABLE = 0,
PMKID_ENABLE = 1,
} PMKID_ENABLE_FLG;
typedef struct {
A_UINT8 bssid[ATH_MAC_LEN];
A_UINT8 enable; /* PMKID_ENABLE_FLG */
A_UINT8 pmkid[16];
} WMI_SET_PMKID_CMD;
/*
* WMI_START_SCAN_CMD
*/
typedef enum {
WMI_LONG_SCAN = 0,
WMI_SHORT_SCAN = 1,
} WMI_SCAN_TYPE;
typedef struct {
A_UINT8 scanType; /* WMI_SCAN_TYPE */
} WMI_START_SCAN_CMD;
/*
* WMI_SET_SCAN_PARAMS_CMDID
*/
#define WMI_SHORTSCANRATIO_DEFAULT 3
typedef struct {
A_UINT16 fg_start_period; /* seconds */
A_UINT16 fg_end_period; /* seconds */
A_UINT16 bg_period; /* seconds */
A_UINT16 act_chdwell_time; /* msec */
A_UINT16 pas_chdwell_time; /* msec */
A_UINT8 shortScanRatio; /* how many shorts scan for one long */
} WMI_SCAN_PARAMS_CMD;
/*
* WMI_SET_BSS_FILTER_CMDID
*/
typedef enum {
NONE_BSS_FILTER = 0x0, /* no beacons forwarded */
ALL_BSS_FILTER, /* all beacons forwarded */
PROFILE_FILTER, /* only beacons matching profile */
ALL_BUT_PROFILE_FILTER, /* all but beacons matching profile */
CURRENT_BSS_FILTER, /* only beacons matching current BSS */
ALL_BUT_BSS_FILTER, /* all but beacons matching BSS */
PROBED_SSID_FILTER, /* beacons matching probed ssid */
LAST_BSS_FILTER, /* marker only */
} WMI_BSS_FILTER;
typedef struct {
A_UINT8 bssFilter; /* see WMI_BSS_FILTER */
} WMI_BSS_FILTER_CMD;
/*
* WMI_SET_PROBED_SSID_CMDID
*/
#define MAX_PROBED_SSID_INDEX 5
typedef enum {
DISABLE_SSID_FLAG = 0, /* disables entry */
SPECIFIC_SSID_FLAG = 0x01, /* probes specified ssid */
ANY_SSID_FLAG = 0x02, /* probes for any ssid */
} WMI_SSID_FLAG;
typedef struct {
A_UINT8 entryIndex; /* 0 to MAX_PROBED_SSID_INDEX */
A_UINT8 flag; /* WMI_SSID_FLG */
A_UINT8 ssidLength;
A_UINT8 ssid[32];
} WMI_PROBED_SSID_CMD;
/*
* WMI_SET_LISTEN_INT_CMDID
* The Listen interval is between 100 and 1000 TUs
*/
#define MIN_LISTEN_INTERVAL 100
#define MAX_LISTEN_INTERVAL 1000
#define MIN_LISTEN_BEACONS 1
#define MAX_LISTEN_BEACONS 50
typedef struct {
A_UINT16 listenInterval;
#ifndef AR6K_FIRMWARE_1_0
A_UINT16 numBeacons;
#endif
} WMI_LISTEN_INT_CMD;
/*
* WMI_SET_BEACON_INT_CMDID
*/
typedef struct {
A_UINT16 beaconInterval;
} WMI_BEACON_INT_CMD;
/*
* WMI_SET_BMISS_TIME_CMDID
* valid values are between 1000 and 5000 TUs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -