//------------------------------------------------------------------------------ // ISC License (ISC) // // Copyright (c) 2004-2010, The Linux Foundation // All rights reserved. // Software was previously licensed under ISC license by Qualcomm Atheros, Inc. // // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // // //------------------------------------------------------------------------------ //============================================================================== // This module implements the hardware independent layer of the // Wireless Module Interface (WMI) protocol. // // Author(s): ="Atheros" //============================================================================== #include #include #include #include //#include "ntddk.h" #include "wmi.h" #include "wmi_parser.h" #define TABLE_ENTRY(id) {id, #id} typedef struct { WMI_COMMAND_ID cmdId; A_INT8* cmdIdStr; } WMI_CMD_TABLE; WMI_CMD_TABLE wmiCmdTbl[] = { TABLE_ENTRY(WMI_CONNECT_CMDID ), TABLE_ENTRY(WMI_RECONNECT_CMDID), TABLE_ENTRY(WMI_DISCONNECT_CMDID), TABLE_ENTRY(WMI_SYNCHRONIZE_CMDID), TABLE_ENTRY(WMI_CREATE_PSTREAM_CMDID), TABLE_ENTRY(WMI_DELETE_PSTREAM_CMDID), TABLE_ENTRY(WMI_START_SCAN_CMDID), TABLE_ENTRY(WMI_SET_SCAN_PARAMS_CMDID), TABLE_ENTRY(WMI_SET_BSS_FILTER_CMDID), TABLE_ENTRY(WMI_SET_PROBED_SSID_CMDID), /* 10 */ TABLE_ENTRY(WMI_SET_LISTEN_INT_CMDID), TABLE_ENTRY(WMI_SET_BMISS_TIME_CMDID), TABLE_ENTRY(WMI_SET_DISC_TIMEOUT_CMDID), TABLE_ENTRY(WMI_GET_CHANNEL_LIST_CMDID), TABLE_ENTRY(WMI_SET_BEACON_INT_CMDID), TABLE_ENTRY(WMI_GET_STATISTICS_CMDID), TABLE_ENTRY(WMI_SET_CHANNEL_PARAMS_CMDID), TABLE_ENTRY(WMI_SET_POWER_MODE_CMDID), TABLE_ENTRY(WMI_SET_IBSS_PM_CAPS_CMDID), TABLE_ENTRY(WMI_SET_POWER_PARAMS_CMDID), /* 20 */ TABLE_ENTRY(WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID), TABLE_ENTRY(WMI_ADD_CIPHER_KEY_CMDID), TABLE_ENTRY(WMI_DELETE_CIPHER_KEY_CMDID), TABLE_ENTRY(WMI_ADD_KRK_CMDID), TABLE_ENTRY(WMI_DELETE_KRK_CMDID), TABLE_ENTRY(WMI_SET_PMKID_CMDID), TABLE_ENTRY(WMI_SET_TX_PWR_CMDID), TABLE_ENTRY(WMI_GET_TX_PWR_CMDID), TABLE_ENTRY(WMI_SET_ASSOC_INFO_CMDID), TABLE_ENTRY(WMI_ADD_BAD_AP_CMDID), /* 30 */ TABLE_ENTRY(WMI_DELETE_BAD_AP_CMDID), TABLE_ENTRY(WMI_SET_TKIP_COUNTERMEASURES_CMDID), TABLE_ENTRY(WMI_RSSI_THRESHOLD_PARAMS_CMDID), TABLE_ENTRY(WMI_TARGET_ERROR_REPORT_BITMASK_CMDID), TABLE_ENTRY(WMI_SET_ACCESS_PARAMS_CMDID), TABLE_ENTRY(WMI_SET_RETRY_LIMITS_CMDID), //TABLE_ENTRY(WMI_SET_OPT_MODE_CMDID), //TABLE_ENTRY(WMI_OPT_TX_FRAME_CMDID), TABLE_ENTRY(WMI_SET_VOICE_PKT_SIZE_CMDID), TABLE_ENTRY(WMI_SET_MAX_SP_LEN_CMDID), /* 40 */ TABLE_ENTRY(WMI_SET_ROAM_CTRL_CMDID), TABLE_ENTRY(WMI_GET_ROAM_TBL_CMDID), TABLE_ENTRY(WMI_GET_ROAM_DATA_CMDID), TABLE_ENTRY(WMI_ENABLE_RM_CMDID), TABLE_ENTRY(WMI_SET_MAX_OFFHOME_DURATION_CMDID), TABLE_ENTRY(WMI_EXTENSION_CMDID), /* Non-wireless extensions */ TABLE_ENTRY(WMI_SNR_THRESHOLD_PARAMS_CMDID), TABLE_ENTRY(WMI_LQ_THRESHOLD_PARAMS_CMDID), TABLE_ENTRY(WMI_SET_LPREAMBLE_CMDID), TABLE_ENTRY(WMI_SET_RTS_CMDID), /* 50 */ TABLE_ENTRY(WMI_CLR_RSSI_SNR_CMDID), TABLE_ENTRY(WMI_SET_FIXRATES_CMDID), TABLE_ENTRY(WMI_GET_FIXRATES_CMDID), TABLE_ENTRY(WMI_SET_AUTH_MODE_CMDID), TABLE_ENTRY(WMI_SET_REASSOC_MODE_CMDID), TABLE_ENTRY(WMI_SET_WMM_CMDID), TABLE_ENTRY(WMI_SET_WMM_TXOP_CMDID), TABLE_ENTRY(WMI_TEST_CMDID), /* COEX AR6002 only*/ TABLE_ENTRY(WMI_SET_BT_STATUS_CMDID), TABLE_ENTRY(WMI_SET_BT_PARAMS_CMDID), /* 60 */ TABLE_ENTRY(WMI_SET_KEEPALIVE_CMDID), TABLE_ENTRY(WMI_GET_KEEPALIVE_CMDID), TABLE_ENTRY(WMI_SET_APPIE_CMDID), TABLE_ENTRY(WMI_GET_APPIE_CMDID), TABLE_ENTRY(WMI_SET_WSC_STATUS_CMDID), /* Wake on Wireless */ TABLE_ENTRY(WMI_SET_HOST_SLEEP_MODE_CMDID), TABLE_ENTRY(WMI_SET_WOW_MODE_CMDID), TABLE_ENTRY(WMI_GET_WOW_LIST_CMDID), TABLE_ENTRY(WMI_ADD_WOW_PATTERN_CMDID), TABLE_ENTRY(WMI_DEL_WOW_PATTERN_CMDID), /* 70 */ TABLE_ENTRY(WMI_SET_FRAMERATES_CMDID), TABLE_ENTRY(WMI_SET_AP_PS_CMDID), TABLE_ENTRY(WMI_SET_QOS_SUPP_CMDID), /* WMI_THIN_RESERVED_... mark the start and end * values for WMI_THIN_RESERVED command IDs. These * command IDs can be found in wmi_thin.h */ TABLE_ENTRY(WMI_THIN_RESERVED_START), TABLE_ENTRY(WMI_THIN_RESERVED_END), /* * Developer commands starts at 0xF000 */ TABLE_ENTRY(WMI_SET_BITRATE_CMDID), TABLE_ENTRY(WMI_GET_BITRATE_CMDID), TABLE_ENTRY(WMI_SET_WHALPARAM_CMDID), /*Should add the new command to the tail for compatible with * etna. */ TABLE_ENTRY(WMI_SET_MAC_ADDRESS_CMDID), TABLE_ENTRY(WMI_SET_AKMP_PARAMS_CMDID), TABLE_ENTRY(WMI_SET_PMKID_LIST_CMDID), TABLE_ENTRY(WMI_GET_PMKID_LIST_CMDID), TABLE_ENTRY(WMI_ABORT_SCAN_CMDID), TABLE_ENTRY(WMI_SET_TARGET_EVENT_REPORT_CMDID), // Unused TABLE_ENTRY(WMI_UNUSED1), TABLE_ENTRY(WMI_UNUSED2), /* * AP mode commands */ TABLE_ENTRY(WMI_AP_HIDDEN_SSID_CMDID), /* F00B */ TABLE_ENTRY(WMI_AP_SET_NUM_STA_CMDID), TABLE_ENTRY(WMI_AP_ACL_POLICY_CMDID), TABLE_ENTRY(WMI_AP_ACL_MAC_LIST_CMDID), TABLE_ENTRY(WMI_AP_CONFIG_COMMIT_CMDID), TABLE_ENTRY(WMI_AP_SET_MLME_CMDID), /* F010 */ TABLE_ENTRY(WMI_AP_SET_PVB_CMDID), TABLE_ENTRY(WMI_AP_CONN_INACT_CMDID), TABLE_ENTRY(WMI_AP_PROT_SCAN_TIME_CMDID), TABLE_ENTRY(WMI_AP_SET_COUNTRY_CMDID), TABLE_ENTRY(WMI_AP_SET_DTIM_CMDID), TABLE_ENTRY(WMI_AP_MODE_STAT_CMDID), TABLE_ENTRY(WMI_SET_IP_CMDID), /* F017 */ TABLE_ENTRY(WMI_SET_PARAMS_CMDID), TABLE_ENTRY(WMI_SET_MCAST_FILTER_CMDID), TABLE_ENTRY(WMI_DEL_MCAST_FILTER_CMDID), TABLE_ENTRY(WMI_ALLOW_AGGR_CMDID), /* F01B */ TABLE_ENTRY(WMI_ADDBA_REQ_CMDID), TABLE_ENTRY(WMI_DELBA_REQ_CMDID), TABLE_ENTRY(WMI_SET_HT_CAP_CMDID), TABLE_ENTRY(WMI_SET_HT_OP_CMDID), TABLE_ENTRY(WMI_SET_TX_SELECT_RATES_CMDID), TABLE_ENTRY(WMI_SET_TX_SGI_PARAM_CMDID), TABLE_ENTRY(WMI_SET_RATE_POLICY_CMDID), TABLE_ENTRY(WMI_HCI_CMD_CMDID), /* F023 */ TABLE_ENTRY(WMI_RX_FRAME_FORMAT_CMDID), TABLE_ENTRY(WMI_SET_THIN_MODE_CMDID), TABLE_ENTRY(WMI_SET_BT_WLAN_CONN_PRECEDENCE_CMDID), TABLE_ENTRY(WMI_AP_SET_11BG_RATESET_CMDID), /* F027 */ TABLE_ENTRY(WMI_SET_PMK_CMDID), TABLE_ENTRY(WMI_MCAST_FILTER_CMDID), /* COEX CMDID AR6003*/ TABLE_ENTRY( WMI_SET_BTCOEX_FE_ANT_CMDID), /* F02A */ TABLE_ENTRY( WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID), TABLE_ENTRY( WMI_SET_BTCOEX_SCO_CONFIG_CMDID), TABLE_ENTRY( WMI_SET_BTCOEX_A2DP_CONFIG_CMDID), TABLE_ENTRY( WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMDID), TABLE_ENTRY( WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMDID), TABLE_ENTRY(WMI_SET_BTCOEX_DEBUG_CMDID), TABLE_ENTRY(WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID), TABLE_ENTRY(WMI_GET_BTCOEX_STATS_CMDID), TABLE_ENTRY(WMI_GET_BTCOEX_CONFIG_CMDID), TABLE_ENTRY(WMI_SET_DFS_ENABLE_CMDID), /* F034 */ TABLE_ENTRY(WMI_SET_DFS_MINRSSITHRESH_CMDID), TABLE_ENTRY(WMI_SET_DFS_MAXPULSEDUR_CMDID), TABLE_ENTRY(WMI_DFS_RADAR_DETECTED_CMDID), /* P2P CMDS */ TABLE_ENTRY(WMI_P2P_SET_CONFIG_CMDID), /* F038 */ TABLE_ENTRY(WMI_WPS_SET_CONFIG_CMDID), TABLE_ENTRY(WMI_SET_REQ_DEV_ATTR_CMDID), TABLE_ENTRY(WMI_P2P_FIND_CMDID), TABLE_ENTRY(WMI_P2P_STOP_FIND_CMDID), TABLE_ENTRY(WMI_P2P_GO_NEG_START_CMDID), TABLE_ENTRY(WMI_P2P_LISTEN_CMDID), TABLE_ENTRY(WMI_CONFIG_TX_MAC_RULES_CMDID), /* F040 */ TABLE_ENTRY(WMI_SET_PROMISCUOUS_MODE_CMDID), TABLE_ENTRY(WMI_RX_FRAME_FILTER_CMDID), TABLE_ENTRY(WMI_SET_CHANNEL_CMDID), /* WAC commands */ TABLE_ENTRY(WMI_ENABLE_WAC_CMDID), TABLE_ENTRY(WMI_WAC_SCAN_REPLY_CMDID), TABLE_ENTRY(WMI_WAC_CTRL_REQ_CMDID), TABLE_ENTRY(WMI_SET_DIV_PARAMS_CMDID), TABLE_ENTRY(WMI_GET_PMK_CMDID), TABLE_ENTRY(WMI_SET_PASSPHRASE_CMDID), TABLE_ENTRY(WMI_SEND_ASSOC_RES_CMDID), TABLE_ENTRY(WMI_SET_ASSOC_REQ_RELAY_CMDID), TABLE_ENTRY(WMI_GET_RFKILL_MODE_CMDID), //TABLE_ENTRY(WMI_AP_JOIN_BSS_CMDID), }; //#define PRINT_CMD_ID(id) KdPrintEx((0x50, 0, "Send WMI Cmd(%d: %s)\n"), id, #id) void wmi_cmd_decode(WMI_COMMAND_ID cmdId) { A_UINT32 i = 0; for (i=0; i<(sizeof(wmiCmdTbl)/sizeof(WMI_CMD_TABLE)); i++) { if (cmdId == wmiCmdTbl[i].cmdId ) { #ifdef WIN_NWF KdPrintEx((0x50, 0, "WMI Cmd(index=%d 0x%04x: %s)\n", i, wmiCmdTbl[i].cmdId, wmiCmdTbl[i].cmdIdStr)); #endif return; } } #ifdef WIN_NWF KdPrintEx((0x50, 0, "Unkown WMI CMD(0x%04x)\n", cmdId)); #endif }