| //------------------------------------------------------------------------------ |
| // <copyright file="wmi_thin.h" company="Atheros"> |
| // Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. |
| // |
| // The software source and binaries included in this development package are |
| // licensed, not sold. You, or your company, received the package under one |
| // or more license agreements. The rights granted to you are specifically |
| // listed in these license agreement(s). All other rights remain with Atheros |
| // Communications, Inc., its subsidiaries, or the respective owner including |
| // those listed on the included copyright notices. Distribution of any |
| // portion of this package must be in strict compliance with the license |
| // agreement(s) terms. |
| // </copyright> |
| // |
| // <summary> |
| // Wifi driver for AR6003 |
| // </summary> |
| // |
| //------------------------------------------------------------------------------ |
| //============================================================================== |
| // Author(s): ="Atheros" |
| //============================================================================== |
| |
| /* |
| * 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. |
| * |
| * 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_THIN_H_ |
| #define _WMI_THIN_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| typedef enum { |
| WMI_THIN_CONFIG_CMDID = 0x8000, // WMI_THIN_RESERVED_START |
| WMI_THIN_SET_MIB_CMDID, |
| WMI_THIN_GET_MIB_CMDID, |
| WMI_THIN_JOIN_CMDID, |
| WMI_THIN_CONNECT_CMDID, |
| WMI_THIN_RESET_CMDID, |
| /* add new CMDID's here */ |
| WMI_THIN_RESERVED_END_CMDID = 0x8fff // WMI_THIN_RESERVED_END |
| } WMI_THIN_COMMAND_ID; |
| |
| typedef enum{ |
| TEMPLATE_FRM_FIRST = 0, |
| TEMPLATE_FRM_PROBE_REQ =TEMPLATE_FRM_FIRST, |
| TEMPLATE_FRM_BEACON, |
| TEMPLATE_FRM_PROBE_RESP, |
| TEMPLATE_FRM_NULL, |
| TEMPLATE_FRM_QOS_NULL, |
| TEMPLATE_FRM_PSPOLL, |
| TEMPLATE_FRM_MAX |
| }WMI_TEMPLATE_FRM_TYPE; |
| |
| /* TEMPLATE_FRM_LEN... represent the maximum allowable |
| * data lengths (bytes) for each frame type */ |
| #define TEMPLATE_FRM_LEN_PROBE_REQ (256) /* Symbian dictates a minimum of 256 for these 3 frame types */ |
| #define TEMPLATE_FRM_LEN_BEACON (256) |
| #define TEMPLATE_FRM_LEN_PROBE_RESP (256) |
| #define TEMPLATE_FRM_LEN_NULL (32) |
| #define TEMPLATE_FRM_LEN_QOS_NULL (32) |
| #define TEMPLATE_FRM_LEN_PSPOLL (32) |
| #define TEMPLATE_FRM_LEN_SUM (TEMPLATE_FRM_LEN_PROBE_REQ + TEMPLATE_FRM_LEN_BEACON + TEMPLATE_FRM_LEN_PROBE_RESP + \ |
| TEMPLATE_FRM_LEN_NULL + TEMPLATE_FRM_LEN_QOS_NULL + TEMPLATE_FRM_LEN_PSPOLL) |
| |
| |
| /* MAC Header Build Rules */ |
| /* These values allow the host to configure the |
| * target code that is responsible for constructing |
| * the MAC header. In cases where the MAC header |
| * is provided by the host framework, the target |
| * has a diminished responsibility over what fields |
| * it must write. This will vary from framework to framework. |
| * Symbian requires different behavior from MAC80211 which |
| * requires different behavior from MS Native Wifi. */ |
| #define WMI_WRT_VER_TYPE 0x00000001 |
| #define WMI_WRT_DURATION 0x00000002 |
| #define WMI_WRT_DIRECTION 0x00000004 |
| #define WMI_WRT_POWER 0x00000008 |
| #define WMI_WRT_WEP 0x00000010 |
| #define WMI_WRT_MORE 0x00000020 |
| #define WMI_WRT_BSSID 0x00000040 |
| #define WMI_WRT_QOS 0x00000080 |
| #define WMI_WRT_SEQNO 0x00000100 |
| #define WMI_GUARD_TX 0x00000200 /* prevents TX ops that are not allowed for a current state */ |
| #define WMI_WRT_DEFAULT_CONFIG (WMI_WRT_VER_TYPE | WMI_WRT_DURATION | WMI_WRT_DIRECTION | \ |
| WMI_WRT_POWER | WMI_WRT_MORE | WMI_WRT_WEP | WMI_WRT_BSSID | \ |
| WMI_WRT_QOS | WMI_WRT_SEQNO | WMI_GUARD_TX) |
| |
| /* WMI_THIN_CONFIG_TXCOMPLETE -- Used to configure the params and content for |
| * TX Complete messages the will come from the Target. these messages are |
| * disabled by default but can be enabled using this structure and the |
| * WMI_THIN_CONFIG_CMDID. */ |
| typedef PREPACK struct { |
| A_UINT8 version; /* the versioned type of messages to use or 0 to disable */ |
| A_UINT8 countThreshold; /* msg count threshold triggering a tx complete message */ |
| A_UINT16 timeThreshold; /* timeout interval in MSEC triggering a tx complete message */ |
| } POSTPACK WMI_THIN_CONFIG_TXCOMPLETE; |
| |
| /* WMI_THIN_CONFIG_DECRYPT_ERR -- Used to configure behavior for received frames |
| * that have decryption errors. The default behavior is to discard the frame |
| * without notification. Alternately, the MAC Header is forwarded to the host |
| * with the failed status. */ |
| typedef PREPACK struct { |
| A_UINT8 enable; /* 1 == send decrypt errors to the host, 0 == don't */ |
| A_UINT8 reserved[3]; /* align padding */ |
| } POSTPACK WMI_THIN_CONFIG_DECRYPT_ERR; |
| |
| /* WMI_THIN_CONFIG_TX_MAC_RULES -- Used to configure behavior for transmitted |
| * frames that require partial MAC header construction. These rules |
| * are used by the target to indicate which fields need to be written. */ |
| typedef PREPACK struct { |
| A_UINT32 rules; /* combination of WMI_WRT_... values */ |
| } POSTPACK WMI_THIN_CONFIG_TX_MAC_RULES; |
| |
| /* WMI_THIN_CONFIG_RX_FILTER_RULES -- Used to configure behavior for received |
| * frames as to which frames should get forwarded to the host and which |
| * should get processed internally. */ |
| typedef PREPACK struct { |
| A_UINT32 rules; /* combination of WMI_FILT_... values */ |
| } POSTPACK WMI_THIN_CONFIG_RX_FILTER_RULES; |
| |
| |
| /* WMI_THIN_CONFIG_CIPHER_ENCAP -- Used to configure behavior for both |
| * TX and RX frames regarding security cipher encapsulation. The host may specify |
| * whether or not the firmware is responsible for cipher |
| * encapsulation. If the firmware is responsible it will add the security header |
| * and trailer for TX frames and remove the header and trailer for Rx frames. Also, |
| * the firmware will examine the resource counter if any and behave appropriately when |
| * a bad value is detected. If the host indicates responsibility for encapsulation |
| * then it is responsible for all aspects of encapsulation, however the device will |
| * still perform the encryption and decryption of the frame payload if a key has |
| * been provided. */ |
| typedef PREPACK struct { |
| A_UINT8 enable; /* enables/disables firmware cipher encapsulation */ |
| A_UINT8 reserved[3]; /* align padding */ |
| } POSTPACK WMI_THIN_CONFIG_CIPHER_ENCAP; |
| |
| /* WMI_THIN_CONFIG_CMD -- Used to contain some combination of the above |
| * WMI_THIN_CONFIG_... structures. The actual combination is indicated |
| * by the value of cfgField. Each bit in this field corresponds to |
| * one of the above structures. */ |
| typedef PREPACK struct { |
| #define WMI_THIN_CFG_TXCOMP 0x00000001 |
| #define WMI_THIN_CFG_DECRYPT 0x00000002 |
| #define WMI_THIN_UNUSED1 0x00000004 /* used to be WMI_THIN_CFG_MAC_RULES */ |
| #define WMI_THIN_CFG_FILTER_RULES 0x00000008 |
| #define WMI_THIN_CFG_CIPHER_ENCAP 0x00000010 |
| A_UINT32 cfgField; /* combination of WMI_THIN_CFG_... describes contents of config command */ |
| A_UINT16 length; /* length in bytes of appended sub-commands */ |
| A_UINT8 reserved[2]; /* align padding */ |
| } POSTPACK WMI_THIN_CONFIG_CMD; |
| |
| /* MIB Access Identifiers tailored for Symbian. */ |
| enum { |
| MIB_ID_STA_MAC = 1, // [READONLY] |
| MIB_ID_RX_LIFE_TIME, // [NOT IMPLEMENTED] |
| MIB_ID_SLOT_TIME, // [READ/WRITE] |
| MIB_ID_RTS_THRESHOLD, // [READ/WRITE] |
| MIB_ID_CTS_TO_SELF, // [READ/WRITE] |
| MIB_ID_TEMPLATE_FRAME, // [WRITE ONLY] |
| MIB_ID_RXFRAME_FILTER, // [READ/WRITE] |
| MIB_ID_BEACON_FILTER_TABLE, // [WRITE ONLY] |
| MIB_ID_BEACON_FILTER, // [READ/WRITE] |
| MIB_ID_BEACON_LOST_COUNT, // [WRITE ONLY] |
| MIB_ID_RSSI_THRESHOLD, // [WRITE ONLY] |
| MIB_ID_HT_CAP, // [NOT IMPLEMENTED] |
| MIB_ID_HT_OP, // [NOT IMPLEMENTED] |
| MIB_ID_HT_2ND_BEACON, // [NOT IMPLEMENTED] |
| MIB_ID_HT_BLOCK_ACK, // [NOT IMPLEMENTED] |
| MIB_ID_PREAMBLE, // [READ/WRITE] |
| /*MIB_ID_GROUP_ADDR_TABLE,*/ |
| /*MIB_ID_WEP_DEFAULT_KEY_ID */ // satisfied by wmi_addKey_cmd() |
| /*MIB_ID_TX_POWER */ |
| /*MIB_ID_ARP_IP_TABLE */ |
| /*MIB_ID_SLEEP_MODE */ |
| /*MIB_ID_WAKE_INTERVAL*/ |
| /*MIB_ID_STAT_TABLE*/ |
| /*MIB_ID_IBSS_PWR_SAVE*/ |
| /*MIB_ID_COUNTERS_TABLE*/ |
| /*MIB_ID_ETHERTYPE_FILTER*/ |
| /*MIB_ID_BC_UDP_FILTER*/ |
| |
| }; |
| |
| typedef PREPACK struct { |
| A_UINT8 addr[ATH_MAC_LEN]; |
| } POSTPACK WMI_THIN_MIB_STA_MAC; |
| |
| typedef PREPACK struct { |
| A_UINT32 time; // units == msec |
| } POSTPACK WMI_THIN_MIB_RX_LIFE_TIME; |
| |
| typedef PREPACK struct { |
| A_UINT8 enable; //1 = on, 0 = off |
| } POSTPACK WMI_THIN_MIB_CTS_TO_SELF; |
| |
| typedef PREPACK struct { |
| A_UINT32 time; // units == usec |
| } POSTPACK WMI_THIN_MIB_SLOT_TIME; |
| |
| typedef PREPACK struct { |
| A_UINT16 length; //units == bytes |
| } POSTPACK WMI_THIN_MIB_RTS_THRESHOLD; |
| |
| typedef PREPACK struct { |
| A_UINT8 type; // type of frame |
| A_UINT8 rate; // tx rate to be used (one of WMI_BIT_RATE) |
| A_UINT16 length; // num bytes following this structure as the template data |
| } POSTPACK WMI_THIN_MIB_TEMPLATE_FRAME; |
| |
| typedef PREPACK struct { |
| #define FRAME_FILTER_PROMISCUOUS 0x00000001 |
| #define FRAME_FILTER_BSSID 0x00000002 |
| A_UINT32 filterMask; |
| } POSTPACK WMI_THIN_MIB_RXFRAME_FILTER; |
| |
| |
| #define IE_FILTER_TREATMENT_CHANGE 1 |
| #define IE_FILTER_TREATMENT_APPEAR 2 |
| |
| typedef PREPACK struct { |
| A_UINT8 ie; |
| A_UINT8 treatment; |
| } POSTPACK WMI_THIN_MIB_BEACON_FILTER_TABLE; |
| |
| typedef PREPACK struct { |
| A_UINT8 ie; |
| A_UINT8 treatment; |
| A_UINT8 oui[3]; |
| A_UINT8 type; |
| A_UINT16 version; |
| } POSTPACK WMI_THIN_MIB_BEACON_FILTER_TABLE_OUI; |
| |
| typedef PREPACK struct { |
| A_UINT16 numElements; |
| A_UINT8 entrySize; // sizeof(WMI_THIN_MIB_BEACON_FILTER_TABLE) on host cpu may be 2 may be 4 |
| A_UINT8 reserved; |
| } POSTPACK WMI_THIN_MIB_BEACON_FILTER_TABLE_HEADER; |
| |
| typedef PREPACK struct { |
| A_UINT32 count; /* num beacons between deliveries */ |
| A_UINT8 enable; |
| A_UINT8 reserved[3]; |
| } POSTPACK WMI_THIN_MIB_BEACON_FILTER; |
| |
| typedef PREPACK struct { |
| A_UINT32 count; /* num consec lost beacons after which send event */ |
| } POSTPACK WMI_THIN_MIB_BEACON_LOST_COUNT; |
| |
| typedef PREPACK struct { |
| A_UINT8 rssi; /* the low threshold which can trigger an event warning */ |
| A_UINT8 tolerance; /* the range above and below the threshold to prevent event flooding to the host. */ |
| A_UINT8 count; /* the sample count of consecutive frames necessary to trigger an event. */ |
| A_UINT8 reserved[1]; /* padding */ |
| } POSTPACK WMI_THIN_MIB_RSSI_THRESHOLD; |
| |
| |
| typedef PREPACK struct { |
| A_UINT32 cap; |
| A_UINT32 rxRateField; |
| A_UINT32 beamForming; |
| A_UINT8 addr[ATH_MAC_LEN]; |
| A_UINT8 enable; |
| A_UINT8 stbc; |
| A_UINT8 maxAMPDU; |
| A_UINT8 msduSpacing; |
| A_UINT8 mcsFeedback; |
| A_UINT8 antennaSelCap; |
| } POSTPACK WMI_THIN_MIB_HT_CAP; |
| |
| typedef PREPACK struct { |
| A_UINT32 infoField; |
| A_UINT32 basicRateField; |
| A_UINT8 protection; |
| A_UINT8 secondChanneloffset; |
| A_UINT8 channelWidth; |
| A_UINT8 reserved; |
| } POSTPACK WMI_THIN_MIB_HT_OP; |
| |
| typedef PREPACK struct { |
| #define SECOND_BEACON_PRIMARY 1 |
| #define SECOND_BEACON_EITHER 2 |
| #define SECOND_BEACON_SECONDARY 3 |
| A_UINT8 cfg; |
| A_UINT8 reserved[3]; /* padding */ |
| } POSTPACK WMI_THIN_MIB_HT_2ND_BEACON; |
| |
| typedef PREPACK struct { |
| A_UINT8 txTIDField; |
| A_UINT8 rxTIDField; |
| A_UINT8 reserved[2]; /* padding */ |
| } POSTPACK WMI_THIN_MIB_HT_BLOCK_ACK; |
| |
| typedef PREPACK struct { |
| A_UINT8 enableLong; // 1 == long preamble, 0 == short preamble |
| A_UINT8 reserved[3]; |
| } POSTPACK WMI_THIN_MIB_PREAMBLE; |
| |
| typedef PREPACK struct { |
| A_UINT16 length; /* the length in bytes of the appended MIB data */ |
| A_UINT8 mibID; /* the ID of the MIB element being set */ |
| A_UINT8 reserved; /* align padding */ |
| } POSTPACK WMI_THIN_SET_MIB_CMD; |
| |
| typedef PREPACK struct { |
| A_UINT8 mibID; /* the ID of the MIB element being set */ |
| A_UINT8 reserved[3]; /* align padding */ |
| } POSTPACK WMI_THIN_GET_MIB_CMD; |
| |
| typedef PREPACK struct { |
| A_UINT32 basicRateMask; /* bit mask of basic rates */ |
| A_UINT32 beaconIntval; /* TUs */ |
| A_UINT16 atimWindow; /* TUs */ |
| A_UINT16 channel; /* frequency in Mhz */ |
| A_UINT8 networkType; /* INFRA_NETWORK | ADHOC_NETWORK */ |
| A_UINT8 ssidLength; /* 0 - 32 */ |
| A_UINT8 probe; /* != 0 : issue probe req at start */ |
| A_UINT8 reserved; /* alignment */ |
| A_UCHAR ssid[WMI_MAX_SSID_LEN]; |
| A_UINT8 bssid[ATH_MAC_LEN]; |
| } POSTPACK WMI_THIN_JOIN_CMD; |
| |
| typedef PREPACK struct { |
| A_UINT16 dtim; /* dtim interval in num beacons */ |
| A_UINT16 aid; /* 80211 association ID from Assoc resp */ |
| } POSTPACK WMI_THIN_CONNECT_CMD; |
| |
| typedef PREPACK struct { |
| A_UINT8 reserved[4]; |
| } POSTPACK WMI_THIN_RESET_CMD; |
| |
| typedef enum { |
| WMI_THIN_EVENTID_RESERVED_START = 0x8000, |
| WMI_THIN_GET_MIB_EVENTID, |
| WMI_THIN_JOIN_EVENTID, |
| |
| /* Add new THIN EVENTID's here */ |
| WMI_THIN_EVENTID_RESERVED_END = 0x8fff |
| } WMI_THIN_EVENT_ID; |
| |
| /* Possible values for WMI_THIN_JOIN_EVENT.result */ |
| typedef enum { |
| WMI_THIN_JOIN_RES_SUCCESS = 0, // device has joined the network |
| WMI_THIN_JOIN_RES_FAIL, // device failed for unspecified reason |
| WMI_THIN_JOIN_RES_TIMEOUT, // device failed due to no beacon rx in time limit |
| WMI_THIN_JOIN_RES_BAD_PARAM, // device failed due to bad cmd param. |
| WMI_THIN_JOIN_RES_IBSS_START, // device started new IBSS network. |
| }WMI_THIN_JOIN_RESULT; |
| |
| typedef PREPACK struct { |
| A_UINT8 result; /* the result of the join cmd. one of WMI_THIN_JOIN_RESULT */ |
| A_UINT8 reserved[3]; /* alignment */ |
| } POSTPACK WMI_THIN_JOIN_EVENT; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _WMI_THIN_H_ */ |