diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-12-18 17:54:02 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-12-18 17:54:02 +0000 |
commit | 82661f4b0ebe2c4173d178e94d529505458f8e0e (patch) | |
tree | 29177c3a256af17d3c3263f478b96f59baca9b1c /target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi | |
parent | 13e1228de3690c8c831b9cccbe5a34674e743362 (diff) |
s3c2442: R.I.P.
It is broken and it is not maintained by anyone since long time.
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34767 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi')
3 files changed, 0 insertions, 8446 deletions
diff --git a/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi.c b/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi.c deleted file mode 100644 index d322cf3f52..0000000000 --- a/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi.c +++ /dev/null @@ -1,3954 +0,0 @@ -/* - * Copyright (c) 2004-2007 Atheros Communications Inc. - * All rights reserved. - * - * This module implements the hardware independent layer of the - * Wireless Module Interface (WMI) protocol. - * - * $Id: //depot/sw/releases/olca2.0-GPL/host/wmi/wmi.c#3 $ - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * - * - */ - -#include <a_config.h> -#include <athdefs.h> -#include <a_types.h> -#include <a_osapi.h> -#include "htc.h" -#include "htc_api.h" -#include "wmi.h" -#include <ieee80211.h> -#include <ieee80211_node.h> -#include <wlan_api.h> -#include <wmi_api.h> -#include "dset_api.h" -#include "gpio_api.h" -#include "wmi_host.h" -#include "a_drv.h" -#include "a_drv_api.h" -#include "a_debug.h" -#include "dbglog_api.h" - -static A_STATUS wmi_ready_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -static A_STATUS wmi_connect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_tkip_micerr_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_bssInfo_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_opt_frame_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_pstream_timeout_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_sync_point(struct wmi_t *wmip); - -static A_STATUS wmi_bitrate_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_ratemask_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_channelList_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_regDomain_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_txPwr_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_neighborReport_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); - -static A_STATUS wmi_dset_open_req_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -#ifdef CONFIG_HOST_DSET_SUPPORT -static A_STATUS wmi_dset_close_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_dset_data_req_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -#endif /* CONFIG_HOST_DSET_SUPPORT */ - - -static A_STATUS wmi_scanComplete_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_errorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_statsEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_rssiThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_hbChallengeResp_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_reportErrorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_cac_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_roam_tbl_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_roam_data_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS wmi_get_wow_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, - int len); -static A_STATUS -wmi_get_pmkid_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len); - -#ifdef CONFIG_HOST_GPIO_SUPPORT -static A_STATUS wmi_gpio_intr_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_gpio_data_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -static A_STATUS wmi_gpio_ack_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -#endif /* CONFIG_HOST_GPIO_SUPPORT */ - -#ifdef CONFIG_HOST_TCMD_SUPPORT -static A_STATUS -wmi_tcmd_test_report_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); -#endif - -static A_STATUS -wmi_txRetryErrEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -static A_STATUS -wmi_snrThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -static A_STATUS -wmi_lqThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -static A_BOOL -wmi_is_bitrate_index_valid(struct wmi_t *wmip, A_UINT32 rateIndex); - -static A_STATUS -wmi_aplistEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -static A_STATUS -wmi_dbglog_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -static A_STATUS wmi_keepalive_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); - -int wps_enable; -static const A_INT32 wmi_rateTable[] = { - 1000, - 2000, - 5500, - 11000, - 6000, - 9000, - 12000, - 18000, - 24000, - 36000, - 48000, - 54000, - 0}; - -#define MODE_A_SUPPORT_RATE_START 4 -#define MODE_A_SUPPORT_RATE_STOP 11 - -#define MODE_GONLY_SUPPORT_RATE_START MODE_A_SUPPORT_RATE_START -#define MODE_GONLY_SUPPORT_RATE_STOP MODE_A_SUPPORT_RATE_STOP - -#define MODE_B_SUPPORT_RATE_START 0 -#define MODE_B_SUPPORT_RATE_STOP 3 - -#define MODE_G_SUPPORT_RATE_START 0 -#define MODE_G_SUPPORT_RATE_STOP 11 - -#define MAX_NUMBER_OF_SUPPORT_RATES (MODE_G_SUPPORT_RATE_STOP + 1) - -/* 802.1d to AC mapping. Refer pg 57 of WMM-test-plan-v1.2 */ -const A_UINT8 up_to_ac[]= { - WMM_AC_BE, - WMM_AC_BK, - WMM_AC_BK, - WMM_AC_BE, - WMM_AC_VI, - WMM_AC_VI, - WMM_AC_VO, - WMM_AC_VO, - }; - -void * -wmi_init(void *devt) -{ - struct wmi_t *wmip; - - wmip = A_MALLOC(sizeof(struct wmi_t)); - if (wmip == NULL) { - return (NULL); - } - A_MEMZERO(wmip, sizeof(*wmip)); - A_MUTEX_INIT(&wmip->wmi_lock); - wmip->wmi_devt = devt; - wlan_node_table_init(wmip, &wmip->wmi_scan_table); - wmi_qos_state_init(wmip); - wmip->wmi_powerMode = REC_POWER; - wmip->wmi_phyMode = WMI_11G_MODE; - - return (wmip); -} - -void -wmi_qos_state_init(struct wmi_t *wmip) -{ - A_UINT8 i; - - if (wmip == NULL) { - return; - } - LOCK_WMI(wmip); - - /* Initialize QoS States */ - wmip->wmi_numQoSStream = 0; - - wmip->wmi_fatPipeExists = 0; - - for (i=0; i < WMM_NUM_AC; i++) { - wmip->wmi_streamExistsForAC[i]=0; - } - - /* Initialize the static Wmi stream Pri to WMM AC mappings Arrays */ - WMI_INIT_WMISTREAM_AC_MAP(wmip); - - UNLOCK_WMI(wmip); - - A_WMI_SET_NUMDATAENDPTS(wmip->wmi_devt, 1); -} - -void -wmi_shutdown(struct wmi_t *wmip) -{ - if (wmip != NULL) { - wlan_node_table_cleanup(&wmip->wmi_scan_table); - if (A_IS_MUTEX_VALID(&wmip->wmi_lock)) { - A_MUTEX_DELETE(&wmip->wmi_lock); - } - A_FREE(wmip); - } -} - -/* - * performs DIX to 802.3 encapsulation for transmit packets. - * uses passed in buffer. Returns buffer or NULL if failed. - * Assumes the entire DIX header is contigous and that there is - * enough room in the buffer for a 802.3 mac header and LLC+SNAP headers. - */ -A_STATUS -wmi_dix_2_dot3(struct wmi_t *wmip, void *osbuf) -{ - A_UINT8 *datap; - A_UINT16 typeorlen; - ATH_MAC_HDR macHdr; - ATH_LLC_SNAP_HDR *llcHdr; - - A_ASSERT(osbuf != NULL); - - if (A_NETBUF_HEADROOM(osbuf) < - (sizeof(ATH_LLC_SNAP_HDR) + sizeof(WMI_DATA_HDR))) - { - return A_NO_MEMORY; - } - - datap = A_NETBUF_DATA(osbuf); - - typeorlen = *(A_UINT16 *)(datap + ATH_MAC_LEN + ATH_MAC_LEN); - - if (!IS_ETHERTYPE(A_BE2CPU16(typeorlen))) { - /* - * packet is already in 802.3 format - return success - */ - A_DPRINTF(DBG_WMI, (DBGFMT "packet already 802.3\n", DBGARG)); - return (A_OK); - } - - /* - * Save mac fields and length to be inserted later - */ - A_MEMCPY(macHdr.dstMac, datap, ATH_MAC_LEN); - A_MEMCPY(macHdr.srcMac, datap + ATH_MAC_LEN, ATH_MAC_LEN); - macHdr.typeOrLen = A_CPU2BE16(A_NETBUF_LEN(osbuf) - sizeof(ATH_MAC_HDR) + - sizeof(ATH_LLC_SNAP_HDR)); - - /* - * Make room for LLC+SNAP headers - */ - if (A_NETBUF_PUSH(osbuf, sizeof(ATH_LLC_SNAP_HDR)) != A_OK) { - return A_NO_MEMORY; - } - - datap = A_NETBUF_DATA(osbuf); - - A_MEMCPY(datap, &macHdr, sizeof (ATH_MAC_HDR)); - - llcHdr = (ATH_LLC_SNAP_HDR *)(datap + sizeof(ATH_MAC_HDR)); - llcHdr->dsap = 0xAA; - llcHdr->ssap = 0xAA; - llcHdr->cntl = 0x03; - llcHdr->orgCode[0] = 0x0; - llcHdr->orgCode[1] = 0x0; - llcHdr->orgCode[2] = 0x0; - llcHdr->etherType = typeorlen; - - return (A_OK); -} - -/* - * Adds a WMI data header - * Assumes there is enough room in the buffer to add header. - */ -A_STATUS -wmi_data_hdr_add(struct wmi_t *wmip, void *osbuf, A_UINT8 msgType) -{ - WMI_DATA_HDR *dtHdr; - - A_ASSERT(osbuf != NULL); - - if (A_NETBUF_PUSH(osbuf, sizeof(WMI_DATA_HDR)) != A_OK) { - return A_NO_MEMORY; - } - - dtHdr = (WMI_DATA_HDR *)A_NETBUF_DATA(osbuf); - dtHdr->info = msgType; - dtHdr->rssi = 0; - - return (A_OK); -} - -A_UINT8 wmi_implicit_create_pstream(struct wmi_t *wmip, void *osbuf, A_UINT8 dir, A_UINT8 up) -{ - A_UINT8 *datap; - A_UINT8 trafficClass = WMM_AC_BE, userPriority = up; - ATH_LLC_SNAP_HDR *llcHdr; - A_UINT16 ipType = IP_ETHERTYPE; - WMI_DATA_HDR *dtHdr; - WMI_CREATE_PSTREAM_CMD cmd; - A_BOOL streamExists = FALSE; - - A_ASSERT(osbuf != NULL); - - datap = A_NETBUF_DATA(osbuf); - - if (up == UNDEFINED_PRI) { - llcHdr = (ATH_LLC_SNAP_HDR *)(datap + sizeof(WMI_DATA_HDR) + - sizeof(ATH_MAC_HDR)); - - if (llcHdr->etherType == A_CPU2BE16(ipType)) { - /* Extract the endpoint info from the TOS field in the IP header */ - userPriority = A_WMI_IPTOS_TO_USERPRIORITY(((A_UINT8 *)llcHdr) + sizeof(ATH_LLC_SNAP_HDR)); - } - } - - if (userPriority < MAX_NUM_PRI) { - trafficClass = convert_userPriority_to_trafficClass(userPriority); - } - - dtHdr = (WMI_DATA_HDR *)datap; - if(dir==UPLINK_TRAFFIC) - dtHdr->info |= (userPriority & WMI_DATA_HDR_UP_MASK) << WMI_DATA_HDR_UP_SHIFT; /* lower 3-bits are 802.1d priority */ - - LOCK_WMI(wmip); - streamExists = wmip->wmi_fatPipeExists; - UNLOCK_WMI(wmip); - - if (!(streamExists & (1 << trafficClass))) { - - A_MEMZERO(&cmd, sizeof(cmd)); - cmd.trafficClass = trafficClass; - cmd.userPriority = userPriority; - cmd.inactivityInt = WMI_IMPLICIT_PSTREAM_INACTIVITY_INT; - /* Implicit streams are created with TSID 0xFF */ - cmd.tsid = WMI_IMPLICIT_PSTREAM; - wmi_create_pstream_cmd(wmip, &cmd); - } - - return trafficClass; -} - -WMI_PRI_STREAM_ID -wmi_get_stream_id(struct wmi_t *wmip, A_UINT8 trafficClass) -{ - return WMI_ACCESSCATEGORY_WMISTREAM(wmip, trafficClass); -} - -/* - * performs 802.3 to DIX encapsulation for received packets. - * Assumes the entire 802.3 header is contigous. - */ -A_STATUS -wmi_dot3_2_dix(struct wmi_t *wmip, void *osbuf) -{ - A_UINT8 *datap; - ATH_MAC_HDR macHdr; - ATH_LLC_SNAP_HDR *llcHdr; - - A_ASSERT(osbuf != NULL); - datap = A_NETBUF_DATA(osbuf); - - A_MEMCPY(&macHdr, datap, sizeof(ATH_MAC_HDR)); - llcHdr = (ATH_LLC_SNAP_HDR *)(datap + sizeof(ATH_MAC_HDR)); - macHdr.typeOrLen = llcHdr->etherType; - - if (A_NETBUF_PULL(osbuf, sizeof(ATH_LLC_SNAP_HDR)) != A_OK) { - return A_NO_MEMORY; - } - - datap = A_NETBUF_DATA(osbuf); - - A_MEMCPY(datap, &macHdr, sizeof (ATH_MAC_HDR)); - - return (A_OK); -} - -/* - * Removes a WMI data header - */ -A_STATUS -wmi_data_hdr_remove(struct wmi_t *wmip, void *osbuf) -{ - A_ASSERT(osbuf != NULL); - - return (A_NETBUF_PULL(osbuf, sizeof(WMI_DATA_HDR))); -} - -void -wmi_iterate_nodes(struct wmi_t *wmip, wlan_node_iter_func *f, void *arg) -{ - wlan_iterate_nodes(&wmip->wmi_scan_table, f, arg); -} - -/* - * WMI Extended Event received from Target. - */ -A_STATUS -wmi_control_rx_xtnd(struct wmi_t *wmip, void *osbuf) -{ - WMIX_CMD_HDR *cmd; - A_UINT16 id; - A_UINT8 *datap; - A_UINT32 len; - A_STATUS status = A_OK; - - if (A_NETBUF_LEN(osbuf) < sizeof(WMIX_CMD_HDR)) { - A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 1\n", DBGARG)); - wmip->wmi_stats.cmd_len_err++; - A_NETBUF_FREE(osbuf); - return A_ERROR; - } - - cmd = (WMIX_CMD_HDR *)A_NETBUF_DATA(osbuf); - id = cmd->commandId; - - if (A_NETBUF_PULL(osbuf, sizeof(WMIX_CMD_HDR)) != A_OK) { - A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 2\n", DBGARG)); - wmip->wmi_stats.cmd_len_err++; - A_NETBUF_FREE(osbuf); - return A_ERROR; - } - - datap = A_NETBUF_DATA(osbuf); - len = A_NETBUF_LEN(osbuf); - - switch (id) { - case (WMIX_DSETOPENREQ_EVENTID): - status = wmi_dset_open_req_rx(wmip, datap, len); - break; -#ifdef CONFIG_HOST_DSET_SUPPORT - case (WMIX_DSETCLOSE_EVENTID): - status = wmi_dset_close_rx(wmip, datap, len); - break; - case (WMIX_DSETDATAREQ_EVENTID): - status = wmi_dset_data_req_rx(wmip, datap, len); - break; -#endif /* CONFIG_HOST_DSET_SUPPORT */ -#ifdef CONFIG_HOST_GPIO_SUPPORT - case (WMIX_GPIO_INTR_EVENTID): - wmi_gpio_intr_rx(wmip, datap, len); - break; - case (WMIX_GPIO_DATA_EVENTID): - wmi_gpio_data_rx(wmip, datap, len); - break; - case (WMIX_GPIO_ACK_EVENTID): - wmi_gpio_ack_rx(wmip, datap, len); - break; -#endif /* CONFIG_HOST_GPIO_SUPPORT */ - case (WMIX_HB_CHALLENGE_RESP_EVENTID): - wmi_hbChallengeResp_rx(wmip, datap, len); - break; - case (WMIX_DBGLOG_EVENTID): - wmi_dbglog_event_rx(wmip, datap, len); - break; - default: - A_DPRINTF(DBG_WMI|DBG_ERROR, - (DBGFMT "Unknown id 0x%x\n", DBGARG, id)); - wmip->wmi_stats.cmd_id_err++; - status = A_ERROR; - break; - } - - return status; -} - -/* - * Control Path - */ -A_UINT32 cmdRecvNum; - -A_STATUS -wmi_control_rx(struct wmi_t *wmip, void *osbuf) -{ - WMI_CMD_HDR *cmd; - A_UINT16 id; - A_UINT8 *datap; - A_UINT32 len, i, loggingReq; - A_STATUS status = A_OK; - - A_ASSERT(osbuf != NULL); - if (A_NETBUF_LEN(osbuf) < sizeof(WMI_CMD_HDR)) { - A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 1\n", DBGARG)); - wmip->wmi_stats.cmd_len_err++; - A_NETBUF_FREE(osbuf); - return A_ERROR; - } - - cmd = (WMI_CMD_HDR *)A_NETBUF_DATA(osbuf); - id = cmd->commandId; - - if (A_NETBUF_PULL(osbuf, sizeof(WMI_CMD_HDR)) != A_OK) { - A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 2\n", DBGARG)); - wmip->wmi_stats.cmd_len_err++; - A_NETBUF_FREE(osbuf); - return A_ERROR; - } - - datap = A_NETBUF_DATA(osbuf); - len = A_NETBUF_LEN(osbuf); - - ar6000_get_driver_cfg(wmip->wmi_devt, - AR6000_DRIVER_CFG_LOG_RAW_WMI_MSGS, - &loggingReq); - - if(loggingReq) { - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("WMI %d \n",id)); - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("WMI recv, MsgNo %d : ", cmdRecvNum)); - for(i = 0; i < len; i++) - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("%x ", datap[i])); - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("\n")); - } - - LOCK_WMI(wmip); - cmdRecvNum++; - UNLOCK_WMI(wmip); - - switch (id) { - case (WMI_GET_BITRATE_CMDID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_BITRATE_CMDID\n", DBGARG)); - status = wmi_bitrate_reply_rx(wmip, datap, len); - break; - case (WMI_GET_CHANNEL_LIST_CMDID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_CHANNEL_LIST_CMDID\n", DBGARG)); - status = wmi_channelList_reply_rx(wmip, datap, len); - break; - case (WMI_GET_TX_PWR_CMDID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_TX_PWR_CMDID\n", DBGARG)); - status = wmi_txPwr_reply_rx(wmip, datap, len); - break; - case (WMI_READY_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_READY_EVENTID\n", DBGARG)); - status = wmi_ready_event_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - A_WMI_DBGLOG_INIT_DONE(wmip->wmi_devt); - break; - case (WMI_CONNECT_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_CONNECT_EVENTID\n", DBGARG)); - status = wmi_connect_event_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_DISCONNECT_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_DISCONNECT_EVENTID\n", DBGARG)); - status = wmi_disconnect_event_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_TKIP_MICERR_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_TKIP_MICERR_EVENTID\n", DBGARG)); - status = wmi_tkip_micerr_event_rx(wmip, datap, len); - break; - case (WMI_BSSINFO_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_BSSINFO_EVENTID\n", DBGARG)); - status = wmi_bssInfo_event_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_REGDOMAIN_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REGDOMAIN_EVENTID\n", DBGARG)); - status = wmi_regDomain_event_rx(wmip, datap, len); - break; - case (WMI_PSTREAM_TIMEOUT_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_PSTREAM_TIMEOUT_EVENTID\n", DBGARG)); - status = wmi_pstream_timeout_event_rx(wmip, datap, len); - /* pstreams are fatpipe abstractions that get implicitly created. - * User apps only deal with thinstreams. creation of a thinstream - * by the user or data traffic flow in an AC triggers implicit - * pstream creation. Do we need to send this event to App..? - * no harm in sending it. - */ - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_NEIGHBOR_REPORT_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_NEIGHBOR_REPORT_EVENTID\n", DBGARG)); - status = wmi_neighborReport_event_rx(wmip, datap, len); - break; - case (WMI_SCAN_COMPLETE_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SCAN_COMPLETE_EVENTID\n", DBGARG)); - status = wmi_scanComplete_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_CMDERROR_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_CMDERROR_EVENTID\n", DBGARG)); - status = wmi_errorEvent_rx(wmip, datap, len); - break; - case (WMI_REPORT_STATISTICS_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REPORT_STATISTICS_EVENTID\n", DBGARG)); - status = wmi_statsEvent_rx(wmip, datap, len); - break; - case (WMI_RSSI_THRESHOLD_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_RSSI_THRESHOLD_EVENTID\n", DBGARG)); - status = wmi_rssiThresholdEvent_rx(wmip, datap, len); - break; - case (WMI_ERROR_REPORT_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_ERROR_REPORT_EVENTID\n", DBGARG)); - status = wmi_reportErrorEvent_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_OPT_RX_FRAME_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_OPT_RX_FRAME_EVENTID\n", DBGARG)); - status = wmi_opt_frame_event_rx(wmip, datap, len); - break; - case (WMI_REPORT_ROAM_TBL_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REPORT_ROAM_TBL_EVENTID\n", DBGARG)); - status = wmi_roam_tbl_event_rx(wmip, datap, len); - break; - case (WMI_EXTENSION_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_EXTENSION_EVENTID\n", DBGARG)); - status = wmi_control_rx_xtnd(wmip, osbuf); - break; - case (WMI_CAC_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_CAC_EVENTID\n", DBGARG)); - status = wmi_cac_event_rx(wmip, datap, len); - break; - case (WMI_REPORT_ROAM_DATA_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REPORT_ROAM_DATA_EVENTID\n", DBGARG)); - status = wmi_roam_data_event_rx(wmip, datap, len); - break; -#ifdef CONFIG_HOST_TCMD_SUPPORT - case (WMI_TEST_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_TEST_EVENTID\n", DBGARG)); - status = wmi_tcmd_test_report_rx(wmip, datap, len); - break; -#endif - case (WMI_GET_FIXRATES_CMDID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_FIXRATES_CMDID\n", DBGARG)); - status = wmi_ratemask_reply_rx(wmip, datap, len); - break; - case (WMI_TX_RETRY_ERR_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_TX_RETRY_ERR_EVENTID\n", DBGARG)); - status = wmi_txRetryErrEvent_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_SNR_THRESHOLD_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SNR_THRESHOLD_EVENTID\n", DBGARG)); - status = wmi_snrThresholdEvent_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_LQ_THRESHOLD_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_LQ_THRESHOLD_EVENTID\n", DBGARG)); - status = wmi_lqThresholdEvent_rx(wmip, datap, len); - A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len); - break; - case (WMI_APLIST_EVENTID): - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Received APLIST Event\n")); - status = wmi_aplistEvent_rx(wmip, datap, len); - break; - case (WMI_GET_KEEPALIVE_CMDID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_KEEPALIVE_CMDID\n", DBGARG)); - status = wmi_keepalive_reply_rx(wmip, datap, len); - break; - case (WMI_GET_WOW_LIST_EVENTID): - status = wmi_get_wow_list_event_rx(wmip, datap, len); - break; - case (WMI_GET_PMKID_LIST_EVENTID): - A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_PMKID_LIST Event\n", DBGARG)); - status = wmi_get_pmkid_list_event_rx(wmip, datap, len); - break; - default: - A_DPRINTF(DBG_WMI|DBG_ERROR, - (DBGFMT "Unknown id 0x%x\n", DBGARG, id)); - wmip->wmi_stats.cmd_id_err++; - status = A_ERROR; - break; - } - - A_NETBUF_FREE(osbuf); - - return status; -} - -static A_STATUS -wmi_ready_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_READY_EVENT *ev = (WMI_READY_EVENT *)datap; - - if (len < sizeof(WMI_READY_EVENT)) { - return A_EINVAL; - } - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - wmip->wmi_ready = TRUE; - A_WMI_READY_EVENT(wmip->wmi_devt, ev->macaddr, ev->phyCapability); - - return A_OK; -} - -static A_STATUS -wmi_connect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_CONNECT_EVENT *ev; - - if (len < sizeof(WMI_CONNECT_EVENT)) { - return A_EINVAL; - } - ev = (WMI_CONNECT_EVENT *)datap; - A_DPRINTF(DBG_WMI, - (DBGFMT "freq %d bssid %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n", - DBGARG, ev->channel, - ev->bssid[0], ev->bssid[1], ev->bssid[2], - ev->bssid[3], ev->bssid[4], ev->bssid[5])); - - A_MEMCPY(wmip->wmi_bssid, ev->bssid, ATH_MAC_LEN); - - A_WMI_CONNECT_EVENT(wmip->wmi_devt, ev->channel, ev->bssid, - ev->listenInterval, ev->beaconInterval, - ev->networkType, ev->beaconIeLen, - ev->assocReqLen, ev->assocRespLen, - ev->assocInfo); - - return A_OK; -} - -static A_STATUS -wmi_regDomain_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_REG_DOMAIN_EVENT *ev; - - if (len < sizeof(*ev)) { - return A_EINVAL; - } - ev = (WMI_REG_DOMAIN_EVENT *)datap; - - A_WMI_REGDOMAIN_EVENT(wmip->wmi_devt, ev->regDomain); - - return A_OK; -} - -static A_STATUS -wmi_neighborReport_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_NEIGHBOR_REPORT_EVENT *ev; - int numAps; - - if (len < sizeof(*ev)) { - return A_EINVAL; - } - ev = (WMI_NEIGHBOR_REPORT_EVENT *)datap; - numAps = ev->numberOfAps; - - if (len < (int)(sizeof(*ev) + ((numAps - 1) * sizeof(WMI_NEIGHBOR_INFO)))) { - return A_EINVAL; - } - - A_WMI_NEIGHBORREPORT_EVENT(wmip->wmi_devt, numAps, ev->neighbor); - - return A_OK; -} - -static A_STATUS -wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_DISCONNECT_EVENT *ev; - - if (len < sizeof(WMI_DISCONNECT_EVENT)) { - return A_EINVAL; - } - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - ev = (WMI_DISCONNECT_EVENT *)datap; - - A_MEMZERO(wmip->wmi_bssid, sizeof(wmip->wmi_bssid)); - - A_WMI_DISCONNECT_EVENT(wmip->wmi_devt, ev->disconnectReason, ev->bssid, - ev->assocRespLen, ev->assocInfo, ev->protocolReasonStatus); - - return A_OK; -} - -static A_STATUS -wmi_tkip_micerr_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TKIP_MICERR_EVENT *ev; - - if (len < sizeof(*ev)) { - return A_EINVAL; - } - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - ev = (WMI_TKIP_MICERR_EVENT *)datap; - A_WMI_TKIP_MICERR_EVENT(wmip->wmi_devt, ev->keyid, ev->ismcast); - - return A_OK; -} - -static A_STATUS -wmi_bssInfo_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - bss_t *bss; - WMI_BSS_INFO_HDR *bih; - A_UINT8 *buf; - A_UINT32 nodeCachingAllowed; - - if (len <= sizeof(WMI_BSS_INFO_HDR)) { - return A_EINVAL; - } - - A_WMI_BSSINFO_EVENT_RX(wmip->wmi_devt, datap, len); - /* What is driver config for wlan node caching? */ - if(ar6000_get_driver_cfg(wmip->wmi_devt, - AR6000_DRIVER_CFG_GET_WLANNODECACHING, - &nodeCachingAllowed) != A_OK) { - return A_EINVAL; - } - - if(!nodeCachingAllowed) { - return A_OK; - } - - - bih = (WMI_BSS_INFO_HDR *)datap; - buf = datap + sizeof(WMI_BSS_INFO_HDR); - len -= sizeof(WMI_BSS_INFO_HDR); - - A_DPRINTF(DBG_WMI2, (DBGFMT "bssInfo event - ch %u, rssi %02x, " - "bssid \"%02x:%02x:%02x:%02x:%02x:%02x\"\n", DBGARG, - bih->channel, (unsigned char) bih->rssi, bih->bssid[0], - bih->bssid[1], bih->bssid[2], bih->bssid[3], bih->bssid[4], - bih->bssid[5])); - - if(wps_enable && (bih->frameType == PROBERESP_FTYPE) ) { - printk("%s() A_OK 2\n", __FUNCTION__); - return A_OK; - } - - bss = wlan_find_node(&wmip->wmi_scan_table, bih->bssid); - if (bss != NULL) { - /* - * Free up the node. Not the most efficient process given - * we are about to allocate a new node but it is simple and should be - * adequate. - */ - wlan_node_reclaim(&wmip->wmi_scan_table, bss); - } - - bss = wlan_node_alloc(&wmip->wmi_scan_table, len); - if (bss == NULL) { - return A_NO_MEMORY; - } - - bss->ni_snr = bih->snr; - bss->ni_rssi = bih->rssi; - A_ASSERT(bss->ni_buf != NULL); - A_MEMCPY(bss->ni_buf, buf, len); - - if (wlan_parse_beacon(bss->ni_buf, len, &bss->ni_cie) != A_OK) { - wlan_node_free(bss); - return A_EINVAL; - } - - /* - * Update the frequency in ie_chan, overwriting of channel number - * which is done in wlan_parse_beacon - */ - bss->ni_cie.ie_chan = bih->channel; - wlan_setup_node(&wmip->wmi_scan_table, bss, bih->bssid); - - return A_OK; -} - -static A_STATUS -wmi_opt_frame_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - bss_t *bss; - WMI_OPT_RX_INFO_HDR *bih; - A_UINT8 *buf; - - if (len <= sizeof(WMI_OPT_RX_INFO_HDR)) { - return A_EINVAL; - } - - bih = (WMI_OPT_RX_INFO_HDR *)datap; - buf = datap + sizeof(WMI_OPT_RX_INFO_HDR); - len -= sizeof(WMI_OPT_RX_INFO_HDR); - - A_DPRINTF(DBG_WMI2, (DBGFMT "opt frame event %2.2x:%2.2x\n", DBGARG, - bih->bssid[4], bih->bssid[5])); - - bss = wlan_find_node(&wmip->wmi_scan_table, bih->bssid); - if (bss != NULL) { - /* - * Free up the node. Not the most efficient process given - * we are about to allocate a new node but it is simple and should be - * adequate. - */ - wlan_node_reclaim(&wmip->wmi_scan_table, bss); - } - - bss = wlan_node_alloc(&wmip->wmi_scan_table, len); - if (bss == NULL) { - return A_NO_MEMORY; - } - - bss->ni_snr = bih->snr; - bss->ni_cie.ie_chan = bih->channel; - A_ASSERT(bss->ni_buf != NULL); - A_MEMCPY(bss->ni_buf, buf, len); - wlan_setup_node(&wmip->wmi_scan_table, bss, bih->bssid); - - return A_OK; -} - - /* This event indicates inactivity timeout of a fatpipe(pstream) - * at the target - */ -static A_STATUS -wmi_pstream_timeout_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_PSTREAM_TIMEOUT_EVENT *ev; - - if (len < sizeof(WMI_PSTREAM_TIMEOUT_EVENT)) { - return A_EINVAL; - } - - A_DPRINTF(DBG_WMI, (DBGFMT "wmi_pstream_timeout_event_rx\n", DBGARG)); - - ev = (WMI_PSTREAM_TIMEOUT_EVENT *)datap; - - /* When the pstream (fat pipe == AC) timesout, it means there were no - * thinStreams within this pstream & it got implicitly created due to - * data flow on this AC. We start the inactivity timer only for - * implicitly created pstream. Just reset the host state. - */ - /* Set the activeTsids for this AC to 0 */ - LOCK_WMI(wmip); - wmip->wmi_streamExistsForAC[ev->trafficClass]=0; - wmip->wmi_fatPipeExists &= ~(1 << ev->trafficClass); - UNLOCK_WMI(wmip); - - /*Indicate inactivity to driver layer for this fatpipe (pstream)*/ - A_WMI_STREAM_TX_INACTIVE(wmip->wmi_devt, ev->trafficClass); - - return A_OK; -} - -static A_STATUS -wmi_bitrate_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_BIT_RATE_CMD *reply; - A_INT32 rate; - - if (len < sizeof(WMI_BIT_RATE_CMD)) { - return A_EINVAL; - } - reply = (WMI_BIT_RATE_CMD *)datap; - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - rateindex %d\n", DBGARG, reply->rateIndex)); - - if (reply->rateIndex == RATE_AUTO) { - rate = RATE_AUTO; - } else { - rate = wmi_rateTable[(A_UINT32) reply->rateIndex]; - } - - A_WMI_BITRATE_RX(wmip->wmi_devt, rate); - - return A_OK; -} - -static A_STATUS -wmi_ratemask_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_FIX_RATES_CMD *reply; - - if (len < sizeof(WMI_BIT_RATE_CMD)) { - return A_EINVAL; - } - reply = (WMI_FIX_RATES_CMD *)datap; - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - fixed rate mask %x\n", DBGARG, reply->fixRateMask)); - - A_WMI_RATEMASK_RX(wmip->wmi_devt, reply->fixRateMask); - - return A_OK; -} - -static A_STATUS -wmi_channelList_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_CHANNEL_LIST_REPLY *reply; - - if (len < sizeof(WMI_CHANNEL_LIST_REPLY)) { - return A_EINVAL; - } - reply = (WMI_CHANNEL_LIST_REPLY *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_CHANNELLIST_RX(wmip->wmi_devt, reply->numChannels, - reply->channelList); - - return A_OK; -} - -static A_STATUS -wmi_txPwr_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TX_PWR_REPLY *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_TX_PWR_REPLY *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_TXPWR_RX(wmip->wmi_devt, reply->dbM); - - return A_OK; -} -static A_STATUS -wmi_keepalive_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_GET_KEEPALIVE_CMD *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_GET_KEEPALIVE_CMD *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_KEEPALIVE_RX(wmip->wmi_devt, reply->configured); - - return A_OK; -} - - -static A_STATUS -wmi_dset_open_req_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMIX_DSETOPENREQ_EVENT *dsetopenreq; - - if (len < sizeof(WMIX_DSETOPENREQ_EVENT)) { - return A_EINVAL; - } - dsetopenreq = (WMIX_DSETOPENREQ_EVENT *)datap; - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - dset_id=0x%x\n", DBGARG, dsetopenreq->dset_id)); - A_WMI_DSET_OPEN_REQ(wmip->wmi_devt, - dsetopenreq->dset_id, - dsetopenreq->targ_dset_handle, - dsetopenreq->targ_reply_fn, - dsetopenreq->targ_reply_arg); - - return A_OK; -} - -#ifdef CONFIG_HOST_DSET_SUPPORT -static A_STATUS -wmi_dset_close_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMIX_DSETCLOSE_EVENT *dsetclose; - - if (len < sizeof(WMIX_DSETCLOSE_EVENT)) { - return A_EINVAL; - } - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - dsetclose = (WMIX_DSETCLOSE_EVENT *)datap; - A_WMI_DSET_CLOSE(wmip->wmi_devt, dsetclose->access_cookie); - - return A_OK; -} - -static A_STATUS -wmi_dset_data_req_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMIX_DSETDATAREQ_EVENT *dsetdatareq; - - if (len < sizeof(WMIX_DSETDATAREQ_EVENT)) { - return A_EINVAL; - } - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - dsetdatareq = (WMIX_DSETDATAREQ_EVENT *)datap; - A_WMI_DSET_DATA_REQ(wmip->wmi_devt, - dsetdatareq->access_cookie, - dsetdatareq->offset, - dsetdatareq->length, - dsetdatareq->targ_buf, - dsetdatareq->targ_reply_fn, - dsetdatareq->targ_reply_arg); - - return A_OK; -} -#endif /* CONFIG_HOST_DSET_SUPPORT */ - -static A_STATUS -wmi_scanComplete_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_SCAN_COMPLETE_EVENT *ev; - - ev = (WMI_SCAN_COMPLETE_EVENT *)datap; - A_WMI_SCANCOMPLETE_EVENT(wmip->wmi_devt, ev->status); - - return A_OK; -} - -/* - * Target is reporting a programming error. This is for - * developer aid only. Target only checks a few common violations - * and it is responsibility of host to do all error checking. - * Behavior of target after wmi error event is undefined. - * A reset is recommended. - */ -static A_STATUS -wmi_errorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_CMD_ERROR_EVENT *ev; - - ev = (WMI_CMD_ERROR_EVENT *)datap; - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Programming Error: cmd=%d ", ev->commandId)); - switch (ev->errorCode) { - case (INVALID_PARAM): - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Illegal Parameter\n")); - break; - case (ILLEGAL_STATE): - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Illegal State\n")); - break; - case (INTERNAL_ERROR): - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Internal Error\n")); - break; - } - - return A_OK; -} - - -static A_STATUS -wmi_statsEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TARGET_STATS *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_TARGET_STATS *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_TARGETSTATS_EVENT(wmip->wmi_devt, reply); - - return A_OK; -} - -static A_STATUS -wmi_rssiThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_RSSI_THRESHOLD_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_RSSI_THRESHOLD_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_RSSI_THRESHOLD_EVENT(wmip->wmi_devt, reply->range, reply->rssi); - - return A_OK; -} - - -static A_STATUS -wmi_reportErrorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TARGET_ERROR_REPORT_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_TARGET_ERROR_REPORT_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_REPORT_ERROR_EVENT(wmip->wmi_devt, reply->errorVal); - - return A_OK; -} - -static A_STATUS -wmi_cac_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_CAC_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_CAC_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_CAC_EVENT(wmip->wmi_devt, reply->ac, - reply->cac_indication, reply->statusCode, - reply->tspecSuggestion); - - return A_OK; -} - -static A_STATUS -wmi_hbChallengeResp_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMIX_HB_CHALLENGE_RESP_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMIX_HB_CHALLENGE_RESP_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "wmi: challenge response event\n", DBGARG)); - - A_WMI_HBCHALLENGERESP_EVENT(wmip->wmi_devt, reply->cookie, reply->source); - - return A_OK; -} - -static A_STATUS -wmi_roam_tbl_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TARGET_ROAM_TBL *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_TARGET_ROAM_TBL *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_ROAM_TABLE_EVENT(wmip->wmi_devt, reply); - - return A_OK; -} - -static A_STATUS -wmi_roam_data_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TARGET_ROAM_DATA *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_TARGET_ROAM_DATA *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_ROAM_DATA_EVENT(wmip->wmi_devt, reply); - - return A_OK; -} - -static A_STATUS -wmi_txRetryErrEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_TX_RETRY_ERR_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_TX_RETRY_ERR_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_TX_RETRY_ERR_EVENT(wmip->wmi_devt); - - return A_OK; -} - -static A_STATUS -wmi_snrThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_SNR_THRESHOLD_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_SNR_THRESHOLD_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_SNR_THRESHOLD_EVENT_RX(wmip->wmi_devt, reply->range, reply->snr); - - return A_OK; -} - -static A_STATUS -wmi_lqThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_LQ_THRESHOLD_EVENT *reply; - - if (len < sizeof(*reply)) { - return A_EINVAL; - } - reply = (WMI_LQ_THRESHOLD_EVENT *)datap; - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_LQ_THRESHOLD_EVENT_RX(wmip->wmi_devt, reply->range, reply->lq); - - return A_OK; -} - -static A_STATUS -wmi_aplistEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - A_UINT16 ap_info_entry_size; - WMI_APLIST_EVENT *ev = (WMI_APLIST_EVENT *)datap; - WMI_AP_INFO_V1 *ap_info_v1; - A_UINT8 i; - - if (len < sizeof(WMI_APLIST_EVENT)) { - return A_EINVAL; - } - - if (ev->apListVer == APLIST_VER1) { - ap_info_entry_size = sizeof(WMI_AP_INFO_V1); - ap_info_v1 = (WMI_AP_INFO_V1 *)ev->apList; - } else { - return A_EINVAL; - } - - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Number of APs in APLIST Event is %d\n", ev->numAP)); - if (len < (int)(sizeof(WMI_APLIST_EVENT) + - (ev->numAP - 1) * ap_info_entry_size)) - { - return A_EINVAL; - } - - /* - * AP List Ver1 Contents - */ - for (i = 0; i < ev->numAP; i++) { - AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("AP#%d BSSID %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x "\ - "Channel %d\n", i, - ap_info_v1->bssid[0], ap_info_v1->bssid[1], - ap_info_v1->bssid[2], ap_info_v1->bssid[3], - ap_info_v1->bssid[4], ap_info_v1->bssid[5], - ap_info_v1->channel)); - ap_info_v1++; - } - return A_OK; -} - -static A_STATUS -wmi_dbglog_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - A_UINT32 dropped; - - dropped = *((A_UINT32 *)datap); - datap += sizeof(dropped); - len -= sizeof(dropped); - A_WMI_DBGLOG_EVENT(wmip->wmi_devt, dropped, datap, len); - return A_OK; -} - -#ifdef CONFIG_HOST_GPIO_SUPPORT -static A_STATUS -wmi_gpio_intr_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMIX_GPIO_INTR_EVENT *gpio_intr = (WMIX_GPIO_INTR_EVENT *)datap; - - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - intrmask=0x%x input=0x%x.\n", DBGARG, - gpio_intr->intr_mask, gpio_intr->input_values)); - - A_WMI_GPIO_INTR_RX(gpio_intr->intr_mask, gpio_intr->input_values); - - return A_OK; -} - -static A_STATUS -wmi_gpio_data_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMIX_GPIO_DATA_EVENT *gpio_data = (WMIX_GPIO_DATA_EVENT *)datap; - - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - reg=%d value=0x%x\n", DBGARG, - gpio_data->reg_id, gpio_data->value)); - - A_WMI_GPIO_DATA_RX(gpio_data->reg_id, gpio_data->value); - - return A_OK; -} - -static A_STATUS -wmi_gpio_ack_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_GPIO_ACK_RX(); - - return A_OK; -} -#endif /* CONFIG_HOST_GPIO_SUPPORT */ - -/* - * Called to send a wmi command. Command specific data is already built - * on osbuf and current osbuf->data points to it. - */ -A_STATUS -wmi_cmd_send(struct wmi_t *wmip, void *osbuf, WMI_COMMAND_ID cmdId, - WMI_SYNC_FLAG syncflag) -{ -#define IS_LONG_CMD(cmdId) ((cmdId == WMI_OPT_TX_FRAME_CMDID) || (cmdId == WMI_ADD_WOW_PATTERN_CMDID)) - WMI_CMD_HDR *cHdr; - WMI_PRI_STREAM_ID streamID = WMI_CONTROL_PRI; - - A_ASSERT(osbuf != NULL); - - if (syncflag >= END_WMIFLAG) { - return A_EINVAL; - } - - if ((syncflag == SYNC_BEFORE_WMIFLAG) || (syncflag == SYNC_BOTH_WMIFLAG)) { - /* - * We want to make sure all data currently queued is transmitted before - * the cmd execution. Establish a new sync point. - */ - wmi_sync_point(wmip); - } - - if (A_NETBUF_PUSH(osbuf, sizeof(WMI_CMD_HDR)) != A_OK) { - return A_NO_MEMORY; - } - - cHdr = (WMI_CMD_HDR *)A_NETBUF_DATA(osbuf); - cHdr->commandId = cmdId; - - /* - * Send cmd, some via control pipe, others via data pipe - */ - if (IS_LONG_CMD(cmdId)) { - wmi_data_hdr_add(wmip, osbuf, CNTL_MSGTYPE); - // TODO ... these can now go through the control endpoint via HTC 2.0 - streamID = WMI_BEST_EFFORT_PRI; - } - A_WMI_CONTROL_TX(wmip->wmi_devt, osbuf, streamID); - - if ((syncflag == SYNC_AFTER_WMIFLAG) || (syncflag == SYNC_BOTH_WMIFLAG)) { - /* - * We want to make sure all new data queued waits for the command to - * execute. Establish a new sync point. - */ - wmi_sync_point(wmip); - } - return (A_OK); -#undef IS_LONG_CMD -} - -A_STATUS -wmi_cmd_send_xtnd(struct wmi_t *wmip, void *osbuf, WMI_COMMAND_ID cmdId, - WMI_SYNC_FLAG syncflag) -{ - WMIX_CMD_HDR *cHdr; - - if (A_NETBUF_PUSH(osbuf, sizeof(WMIX_CMD_HDR)) != A_OK) { - return A_NO_MEMORY; - } - - cHdr = (WMIX_CMD_HDR *)A_NETBUF_DATA(osbuf); - cHdr->commandId = cmdId; - - return wmi_cmd_send(wmip, osbuf, WMI_EXTENSION_CMDID, syncflag); -} - -A_STATUS -wmi_connect_cmd(struct wmi_t *wmip, NETWORK_TYPE netType, - DOT11_AUTH_MODE dot11AuthMode, AUTH_MODE authMode, - CRYPTO_TYPE pairwiseCrypto, A_UINT8 pairwiseCryptoLen, - CRYPTO_TYPE groupCrypto,A_UINT8 groupCryptoLen, - int ssidLength, A_UCHAR *ssid, - A_UINT8 *bssid, A_UINT16 channel, A_UINT32 ctrl_flags) -{ - void *osbuf; - WMI_CONNECT_CMD *cc; - - if ((pairwiseCrypto == NONE_CRYPT) && (groupCrypto != NONE_CRYPT)) { - return A_EINVAL; - } - if ((pairwiseCrypto != NONE_CRYPT) && (groupCrypto == NONE_CRYPT)) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(WMI_CONNECT_CMD)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(WMI_CONNECT_CMD)); - - cc = (WMI_CONNECT_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cc, sizeof(*cc)); - - A_MEMCPY(cc->ssid, ssid, ssidLength); - cc->ssidLength = ssidLength; - cc->networkType = netType; - cc->dot11AuthMode = dot11AuthMode; - cc->authMode = authMode; - cc->pairwiseCryptoType = pairwiseCrypto; - cc->pairwiseCryptoLen = pairwiseCryptoLen; - cc->groupCryptoType = groupCrypto; - cc->groupCryptoLen = groupCryptoLen; - cc->channel = channel; - cc->ctrl_flags = ctrl_flags; - - if (bssid != NULL) { - A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN); - } - if (wmi_set_keepalive_cmd(wmip, wmip->wmi_keepaliveInterval) != A_OK) { - return(A_ERROR); - } - - return (wmi_cmd_send(wmip, osbuf, WMI_CONNECT_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_reconnect_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT16 channel) -{ - void *osbuf; - WMI_RECONNECT_CMD *cc; - - osbuf = A_NETBUF_ALLOC(sizeof(WMI_RECONNECT_CMD)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(WMI_RECONNECT_CMD)); - - cc = (WMI_RECONNECT_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cc, sizeof(*cc)); - - cc->channel = channel; - - if (bssid != NULL) { - A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN); - } - - return (wmi_cmd_send(wmip, osbuf, WMI_RECONNECT_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_disconnect_cmd(struct wmi_t *wmip) -{ - void *osbuf; - A_STATUS status; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - /* Bug fix for 24817(elevator bug) - the disconnect command does not - need to do a SYNC before.*/ - status = (wmi_cmd_send(wmip, osbuf, WMI_DISCONNECT_CMDID, - NO_SYNC_WMIFLAG)); - - return status; -} - -A_STATUS -wmi_startscan_cmd(struct wmi_t *wmip, WMI_SCAN_TYPE scanType, - A_BOOL forceFgScan, A_BOOL isLegacy, - A_UINT32 homeDwellTime, A_UINT32 forceScanInterval) -{ - void *osbuf; - WMI_START_SCAN_CMD *sc; - - if ((scanType != WMI_LONG_SCAN) && (scanType != WMI_SHORT_SCAN)) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*sc)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*sc)); - - sc = (WMI_START_SCAN_CMD *)(A_NETBUF_DATA(osbuf)); - sc->scanType = scanType; - sc->forceFgScan = forceFgScan; - sc->isLegacy = isLegacy; - sc->homeDwellTime = homeDwellTime; - sc->forceScanInterval = forceScanInterval; - - return (wmi_cmd_send(wmip, osbuf, WMI_START_SCAN_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_scanparams_cmd(struct wmi_t *wmip, A_UINT16 fg_start_sec, - A_UINT16 fg_end_sec, A_UINT16 bg_sec, - A_UINT16 minact_chdw_msec, A_UINT16 maxact_chdw_msec, - A_UINT16 pas_chdw_msec, - A_UINT8 shScanRatio, A_UINT8 scanCtrlFlags, - A_UINT32 max_dfsch_act_time) -{ - void *osbuf; - WMI_SCAN_PARAMS_CMD *sc; - - osbuf = A_NETBUF_ALLOC(sizeof(*sc)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*sc)); - - sc = (WMI_SCAN_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(sc, sizeof(*sc)); - sc->fg_start_period = fg_start_sec; - sc->fg_end_period = fg_end_sec; - sc->bg_period = bg_sec; - sc->minact_chdwell_time = minact_chdw_msec; - sc->maxact_chdwell_time = maxact_chdw_msec; - sc->pas_chdwell_time = pas_chdw_msec; - sc->shortScanRatio = shScanRatio; - sc->scanCtrlFlags = scanCtrlFlags; - sc->max_dfsch_act_time = max_dfsch_act_time; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_SCAN_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_bssfilter_cmd(struct wmi_t *wmip, A_UINT8 filter, A_UINT32 ieMask) -{ - void *osbuf; - WMI_BSS_FILTER_CMD *cmd; - - if (filter >= LAST_BSS_FILTER) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_BSS_FILTER_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->bssFilter = filter; - cmd->ieMask = ieMask; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_BSS_FILTER_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_probedSsid_cmd(struct wmi_t *wmip, A_UINT8 index, A_UINT8 flag, - A_UINT8 ssidLength, A_UCHAR *ssid) -{ - void *osbuf; - WMI_PROBED_SSID_CMD *cmd; - - if (index > MAX_PROBED_SSID_INDEX) { - return A_EINVAL; - } - if (ssidLength > sizeof(cmd->ssid)) { - return A_EINVAL; - } - if ((flag & (DISABLE_SSID_FLAG | ANY_SSID_FLAG)) && (ssidLength > 0)) { - return A_EINVAL; - } - if ((flag & SPECIFIC_SSID_FLAG) && !ssidLength) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_PROBED_SSID_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->entryIndex = index; - cmd->flag = flag; - cmd->ssidLength = ssidLength; - A_MEMCPY(cmd->ssid, ssid, ssidLength); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_PROBED_SSID_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_listeninterval_cmd(struct wmi_t *wmip, A_UINT16 listenInterval, A_UINT16 listenBeacons) -{ - void *osbuf; - WMI_LISTEN_INT_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_LISTEN_INT_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->listenInterval = listenInterval; - cmd->numBeacons = listenBeacons; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_LISTEN_INT_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_bmisstime_cmd(struct wmi_t *wmip, A_UINT16 bmissTime, A_UINT16 bmissBeacons) -{ - void *osbuf; - WMI_BMISS_TIME_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_BMISS_TIME_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->bmissTime = bmissTime; - cmd->numBeacons = bmissBeacons; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_BMISS_TIME_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_associnfo_cmd(struct wmi_t *wmip, A_UINT8 ieType, - A_UINT8 ieLen, A_UINT8 *ieInfo) -{ - void *osbuf; - WMI_SET_ASSOC_INFO_CMD *cmd; - A_UINT16 cmdLen; - - cmdLen = sizeof(*cmd) + ieLen - 1; - osbuf = A_NETBUF_ALLOC(cmdLen); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, cmdLen); - - cmd = (WMI_SET_ASSOC_INFO_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, cmdLen); - cmd->ieType = ieType; - cmd->bufferSize = ieLen; - A_MEMCPY(cmd->assocInfo, ieInfo, ieLen); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_ASSOC_INFO_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_powermode_cmd(struct wmi_t *wmip, A_UINT8 powerMode) -{ - void *osbuf; - WMI_POWER_MODE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_POWER_MODE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->powerMode = powerMode; - wmip->wmi_powerMode = powerMode; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_POWER_MODE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_ibsspmcaps_cmd(struct wmi_t *wmip, A_UINT8 pmEnable, A_UINT8 ttl, - A_UINT16 atim_windows, A_UINT16 timeout_value) -{ - void *osbuf; - WMI_IBSS_PM_CAPS_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_IBSS_PM_CAPS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->power_saving = pmEnable; - cmd->ttl = ttl; - cmd->atim_windows = atim_windows; - cmd->timeout_value = timeout_value; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_IBSS_PM_CAPS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_pmparams_cmd(struct wmi_t *wmip, A_UINT16 idlePeriod, - A_UINT16 psPollNum, A_UINT16 dtimPolicy) -{ - void *osbuf; - WMI_POWER_PARAMS_CMD *pm; - - osbuf = A_NETBUF_ALLOC(sizeof(*pm)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*pm)); - - pm = (WMI_POWER_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(pm, sizeof(*pm)); - pm->idle_period = idlePeriod; - pm->pspoll_number = psPollNum; - pm->dtim_policy = dtimPolicy; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_POWER_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_disctimeout_cmd(struct wmi_t *wmip, A_UINT8 timeout) -{ - void *osbuf; - WMI_DISC_TIMEOUT_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_DISC_TIMEOUT_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->disconnectTimeout = timeout; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_DISC_TIMEOUT_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_addKey_cmd(struct wmi_t *wmip, A_UINT8 keyIndex, CRYPTO_TYPE keyType, - A_UINT8 keyUsage, A_UINT8 keyLength, A_UINT8 *keyRSC, - A_UINT8 *keyMaterial, A_UINT8 key_op_ctrl, - WMI_SYNC_FLAG sync_flag) -{ - void *osbuf; - WMI_ADD_CIPHER_KEY_CMD *cmd; - - if ((keyIndex > WMI_MAX_KEY_INDEX) || (keyLength > WMI_MAX_KEY_LEN) || - (keyMaterial == NULL)) - { - return A_EINVAL; - } - - if ((WEP_CRYPT != keyType) && (NULL == keyRSC)) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_ADD_CIPHER_KEY_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->keyIndex = keyIndex; - cmd->keyType = keyType; - cmd->keyUsage = keyUsage; - cmd->keyLength = keyLength; - A_MEMCPY(cmd->key, keyMaterial, keyLength); - if (NULL != keyRSC) { - A_MEMCPY(cmd->keyRSC, keyRSC, sizeof(cmd->keyRSC)); - } - cmd->key_op_ctrl = key_op_ctrl; - - return (wmi_cmd_send(wmip, osbuf, WMI_ADD_CIPHER_KEY_CMDID, sync_flag)); -} - -A_STATUS -wmi_add_krk_cmd(struct wmi_t *wmip, A_UINT8 *krk) -{ - void *osbuf; - WMI_ADD_KRK_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_ADD_KRK_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - A_MEMCPY(cmd->krk, krk, WMI_KRK_LEN); - - return (wmi_cmd_send(wmip, osbuf, WMI_ADD_KRK_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_delete_krk_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); - - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_DELETE_KRK_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_deleteKey_cmd(struct wmi_t *wmip, A_UINT8 keyIndex) -{ - void *osbuf; - WMI_DELETE_CIPHER_KEY_CMD *cmd; - - if (keyIndex > WMI_MAX_KEY_INDEX) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_DELETE_CIPHER_KEY_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->keyIndex = keyIndex; - - return (wmi_cmd_send(wmip, osbuf, WMI_DELETE_CIPHER_KEY_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_setPmkid_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT8 *pmkId, - A_BOOL set) -{ - void *osbuf; - WMI_SET_PMKID_CMD *cmd; - - if (bssid == NULL) { - return A_EINVAL; - } - - if ((set == TRUE) && (pmkId == NULL)) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_PMKID_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMCPY(cmd->bssid, bssid, sizeof(cmd->bssid)); - if (set == TRUE) { - A_MEMCPY(cmd->pmkid, pmkId, sizeof(cmd->pmkid)); - cmd->enable = PMKID_ENABLE; - } else { - A_MEMZERO(cmd->pmkid, sizeof(cmd->pmkid)); - cmd->enable = PMKID_DISABLE; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMKID_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_tkip_countermeasures_cmd(struct wmi_t *wmip, A_BOOL en) -{ - void *osbuf; - WMI_SET_TKIP_COUNTERMEASURES_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_TKIP_COUNTERMEASURES_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->cm_en = (en == TRUE)? WMI_TKIP_CM_ENABLE : WMI_TKIP_CM_DISABLE; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_TKIP_COUNTERMEASURES_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_akmp_params_cmd(struct wmi_t *wmip, - WMI_SET_AKMP_PARAMS_CMD *akmpParams) -{ - void *osbuf; - WMI_SET_AKMP_PARAMS_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - cmd = (WMI_SET_AKMP_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->akmpInfo = akmpParams->akmpInfo; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_AKMP_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_pmkid_list_cmd(struct wmi_t *wmip, - WMI_SET_PMKID_LIST_CMD *pmkInfo) -{ - void *osbuf; - WMI_SET_PMKID_LIST_CMD *cmd; - A_UINT16 cmdLen; - A_UINT8 i; - - cmdLen = sizeof(pmkInfo->numPMKID) + - pmkInfo->numPMKID * sizeof(WMI_PMKID); - - osbuf = A_NETBUF_ALLOC(cmdLen); - - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, cmdLen); - cmd = (WMI_SET_PMKID_LIST_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->numPMKID = pmkInfo->numPMKID; - - for (i = 0; i < cmd->numPMKID; i++) { - A_MEMCPY(&cmd->pmkidList[i], &pmkInfo->pmkidList[i], - WMI_PMKID_LEN); - } - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMKID_LIST_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_pmkid_list_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_PMKID_LIST_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_dataSync_send(struct wmi_t *wmip, void *osbuf, WMI_PRI_STREAM_ID streamID) -{ - WMI_DATA_HDR *dtHdr; - - A_ASSERT(streamID != WMI_CONTROL_PRI); - A_ASSERT(osbuf != NULL); - - if (A_NETBUF_PUSH(osbuf, sizeof(WMI_DATA_HDR)) != A_OK) { - return A_NO_MEMORY; - } - - dtHdr = (WMI_DATA_HDR *)A_NETBUF_DATA(osbuf); - dtHdr->info = - (SYNC_MSGTYPE & WMI_DATA_HDR_MSG_TYPE_MASK) << WMI_DATA_HDR_MSG_TYPE_SHIFT; - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter - streamID %d\n", DBGARG, streamID)); - - return (A_WMI_CONTROL_TX(wmip->wmi_devt, osbuf, streamID)); -} - -typedef struct _WMI_DATA_SYNC_BUFS { - A_UINT8 trafficClass; - void *osbuf; -}WMI_DATA_SYNC_BUFS; - -static A_STATUS -wmi_sync_point(struct wmi_t *wmip) -{ - void *cmd_osbuf; - WMI_DATA_SYNC_BUFS dataSyncBufs[WMM_NUM_AC]; - A_UINT8 i,numPriStreams=0; - A_STATUS status; - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - memset(dataSyncBufs,0,sizeof(dataSyncBufs)); - - /* lock out while we walk through the priority list and assemble our local array */ - LOCK_WMI(wmip); - - for (i=0; i < WMM_NUM_AC ; i++) { - if (wmip->wmi_fatPipeExists & (1 << i)) { - numPriStreams++; - dataSyncBufs[numPriStreams-1].trafficClass = i; - } - } - - UNLOCK_WMI(wmip); - - /* dataSyncBufs is now filled with entries (starting at index 0) containing valid streamIDs */ - - do { - /* - * We allocate all network buffers needed so we will be able to - * send all required frames. - */ - cmd_osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (cmd_osbuf == NULL) { - status = A_NO_MEMORY; - break; - } - - for (i=0; i < numPriStreams ; i++) { - dataSyncBufs[i].osbuf = A_NETBUF_ALLOC(0); - if (dataSyncBufs[i].osbuf == NULL) { - status = A_NO_MEMORY; - break; - } - } //end for - - /* - * Send sync cmd followed by sync data messages on all endpoints being - * used - */ - status = wmi_cmd_send(wmip, cmd_osbuf, WMI_SYNCHRONIZE_CMDID, - NO_SYNC_WMIFLAG); - - if (A_FAILED(status)) { - break; - } - /* cmd buffer sent, we no longer own it */ - cmd_osbuf = NULL; - - for(i=0; i < numPriStreams; i++) { - A_ASSERT(dataSyncBufs[i].osbuf != NULL); - - status = wmi_dataSync_send(wmip, dataSyncBufs[i].osbuf, - WMI_ACCESSCATEGORY_WMISTREAM(wmip,dataSyncBufs[i].trafficClass)); - - if (A_FAILED(status)) { - break; - } - /* we don't own this buffer anymore, NULL it out of the array so it - * won't get cleaned up */ - dataSyncBufs[i].osbuf = NULL; - } //end for - - } while(FALSE); - - /* free up any resources left over (possibly due to an error) */ - - if (cmd_osbuf != NULL) { - A_NETBUF_FREE(cmd_osbuf); - } - - for (i = 0; i < numPriStreams; i++) { - if (dataSyncBufs[i].osbuf != NULL) { - A_NETBUF_FREE(dataSyncBufs[i].osbuf); - } - } - - return (status); -} - -A_STATUS -wmi_create_pstream_cmd(struct wmi_t *wmip, WMI_CREATE_PSTREAM_CMD *params) -{ - void *osbuf; - WMI_CREATE_PSTREAM_CMD *cmd; - A_UINT16 activeTsids=0; - A_UINT8 fatPipeExistsForAC=0; - - /* Validate all the parameters. */ - if( !((params->userPriority < 8) && - (params->userPriority <= 0x7) && - (convert_userPriority_to_trafficClass(params->userPriority) == params->trafficClass) && - (params->trafficDirection == UPLINK_TRAFFIC || - params->trafficDirection == DNLINK_TRAFFIC || - params->trafficDirection == BIDIR_TRAFFIC) && - (params->trafficType == TRAFFIC_TYPE_APERIODIC || - params->trafficType == TRAFFIC_TYPE_PERIODIC ) && - (params->voicePSCapability == DISABLE_FOR_THIS_AC || - params->voicePSCapability == ENABLE_FOR_THIS_AC || - params->voicePSCapability == ENABLE_FOR_ALL_AC) && - (params->tsid == WMI_IMPLICIT_PSTREAM || params->tsid <= WMI_MAX_THINSTREAM)) ) - { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - A_DPRINTF(DBG_WMI, - (DBGFMT "Sending create_pstream_cmd: ac=%d tsid:%d\n", DBGARG, - params->trafficClass, params->tsid)); - - cmd = (WMI_CREATE_PSTREAM_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - A_MEMCPY(cmd, params, sizeof(*cmd)); - - /* this is an implicitly created Fat pipe */ - if (params->tsid == WMI_IMPLICIT_PSTREAM) { - LOCK_WMI(wmip); - fatPipeExistsForAC = (wmip->wmi_fatPipeExists & (1 << params->trafficClass)); - wmip->wmi_fatPipeExists |= (1<<params->trafficClass); - UNLOCK_WMI(wmip); - } else { - /* this is an explicitly created thin stream within a fat pipe */ - LOCK_WMI(wmip); - fatPipeExistsForAC = (wmip->wmi_fatPipeExists & (1 << params->trafficClass)); - activeTsids = wmip->wmi_streamExistsForAC[params->trafficClass]; - wmip->wmi_streamExistsForAC[params->trafficClass] |= (1<<params->tsid); - /* if a thinstream becomes active, the fat pipe automatically - * becomes active - */ - wmip->wmi_fatPipeExists |= (1<<params->trafficClass); - UNLOCK_WMI(wmip); - } - - /* Indicate activty change to driver layer only if this is the - * first TSID to get created in this AC explicitly or an implicit - * fat pipe is getting created. - */ - if (!fatPipeExistsForAC) { - A_WMI_STREAM_TX_ACTIVE(wmip->wmi_devt, params->trafficClass); - } - - /* mike: should be SYNC_BEFORE_WMIFLAG */ - return (wmi_cmd_send(wmip, osbuf, WMI_CREATE_PSTREAM_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_delete_pstream_cmd(struct wmi_t *wmip, A_UINT8 trafficClass, A_UINT8 tsid) -{ - void *osbuf; - WMI_DELETE_PSTREAM_CMD *cmd; - A_STATUS status; - A_UINT16 activeTsids=0; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_DELETE_PSTREAM_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - - cmd->trafficClass = trafficClass; - cmd->tsid = tsid; - - LOCK_WMI(wmip); - activeTsids = wmip->wmi_streamExistsForAC[trafficClass]; - UNLOCK_WMI(wmip); - - /* Check if the tsid was created & exists */ - if (!(activeTsids & (1<<tsid))) { - - A_DPRINTF(DBG_WMI, - (DBGFMT "TSID %d does'nt exist for trafficClass: %d\n", DBGARG, tsid, trafficClass)); - /* TODO: return a more appropriate err code */ - return A_ERROR; - } - - A_DPRINTF(DBG_WMI, - (DBGFMT "Sending delete_pstream_cmd: trafficClass: %d tsid=%d\n", DBGARG, trafficClass, tsid)); - - status = (wmi_cmd_send(wmip, osbuf, WMI_DELETE_PSTREAM_CMDID, - SYNC_BEFORE_WMIFLAG)); - - LOCK_WMI(wmip); - wmip->wmi_streamExistsForAC[trafficClass] &= ~(1<<tsid); - activeTsids = wmip->wmi_streamExistsForAC[trafficClass]; - UNLOCK_WMI(wmip); - - - /* Indicate stream inactivity to driver layer only if all tsids - * within this AC are deleted. - */ - if(!activeTsids) { - A_WMI_STREAM_TX_INACTIVE(wmip->wmi_devt, trafficClass); - wmip->wmi_fatPipeExists &= ~(1<<trafficClass); - } - - return status; -} - -/* - * used to set the bit rate. rate is in Kbps. If rate == -1 - * then auto selection is used. - */ -A_STATUS -wmi_set_bitrate_cmd(struct wmi_t *wmip, A_INT32 rate) -{ - void *osbuf; - WMI_BIT_RATE_CMD *cmd; - A_INT8 index; - - if (rate != -1) { - index = wmi_validate_bitrate(wmip, rate); - if(index == A_EINVAL){ - return A_EINVAL; - } - } else { - index = -1; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_BIT_RATE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - - cmd->rateIndex = index; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_BITRATE_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_bitrate_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_BITRATE_CMDID, NO_SYNC_WMIFLAG)); -} - -/* - * Returns TRUE iff the given rate index is legal in the current PHY mode. - */ -A_BOOL -wmi_is_bitrate_index_valid(struct wmi_t *wmip, A_UINT32 rateIndex) -{ - WMI_PHY_MODE phyMode = wmip->wmi_phyMode; - A_BOOL isValid = TRUE; - switch(phyMode) { - case WMI_11A_MODE: - if ((rateIndex < MODE_A_SUPPORT_RATE_START) || (rateIndex > MODE_A_SUPPORT_RATE_STOP)) { - isValid = FALSE; - } - break; - - case WMI_11B_MODE: - if ((rateIndex < MODE_B_SUPPORT_RATE_START) || (rateIndex > MODE_B_SUPPORT_RATE_STOP)) { - isValid = FALSE; - } - break; - - case WMI_11GONLY_MODE: - if ((rateIndex < MODE_GONLY_SUPPORT_RATE_START) || (rateIndex > MODE_GONLY_SUPPORT_RATE_STOP)) { - isValid = FALSE; - } - break; - - case WMI_11G_MODE: - case WMI_11AG_MODE: - if ((rateIndex < MODE_G_SUPPORT_RATE_START) || (rateIndex > MODE_G_SUPPORT_RATE_STOP)) { - isValid = FALSE; - } - break; - - default: - A_ASSERT(FALSE); - break; - } - - return isValid; -} - -A_INT8 -wmi_validate_bitrate(struct wmi_t *wmip, A_INT32 rate) -{ - A_INT8 i; - if (rate != -1) - { - for (i=0;;i++) - { - if (wmi_rateTable[(A_UINT32) i] == 0) { - return A_EINVAL; - } - if (wmi_rateTable[(A_UINT32) i] == rate) { - break; - } - } - } - else{ - i = -1; - } - - if(wmi_is_bitrate_index_valid(wmip, i) != TRUE) { - return A_EINVAL; - } - - return i; -} - -A_STATUS -wmi_set_fixrates_cmd(struct wmi_t *wmip, A_INT16 fixRatesMask) -{ - void *osbuf; - WMI_FIX_RATES_CMD *cmd; - A_UINT32 rateIndex; - - /* Make sure all rates in the mask are valid in the current PHY mode */ - for(rateIndex = 0; rateIndex < MAX_NUMBER_OF_SUPPORT_RATES; rateIndex++) { - if((1 << rateIndex) & (A_UINT32)fixRatesMask) { - if(wmi_is_bitrate_index_valid(wmip, rateIndex) != TRUE) { - A_DPRINTF(DBG_WMI, (DBGFMT "Set Fix Rates command failed: Given rate is illegal in current PHY mode\n", DBGARG)); - return A_EINVAL; - } - } - } - - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_FIX_RATES_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - - cmd->fixRateMask = fixRatesMask; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_FIXRATES_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_ratemask_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_FIXRATES_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_channelList_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_CHANNEL_LIST_CMDID, - NO_SYNC_WMIFLAG)); -} - -/* - * used to generate a wmi sey channel Parameters cmd. - * mode should always be specified and corresponds to the phy mode of the - * wlan. - * numChan should alway sbe specified. If zero indicates that all available - * channels should be used. - * channelList is an array of channel frequencies (in Mhz) which the radio - * should limit its operation to. It should be NULL if numChan == 0. Size of - * array should correspond to numChan entries. - */ -A_STATUS -wmi_set_channelParams_cmd(struct wmi_t *wmip, A_UINT8 scanParam, - WMI_PHY_MODE mode, A_INT8 numChan, - A_UINT16 *channelList) -{ - void *osbuf; - WMI_CHANNEL_PARAMS_CMD *cmd; - A_INT8 size; - - size = sizeof (*cmd); - - if (numChan) { - if (numChan > WMI_MAX_CHANNELS) { - return A_EINVAL; - } - size += sizeof(A_UINT16) * (numChan - 1); - } - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_CHANNEL_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - - wmip->wmi_phyMode = mode; - cmd->scanParam = scanParam; - cmd->phyMode = mode; - cmd->numChannels = numChan; - A_MEMCPY(cmd->channelList, channelList, numChan * sizeof(A_UINT16)); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_CHANNEL_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_rssi_threshold_params(struct wmi_t *wmip, - WMI_RSSI_THRESHOLD_PARAMS_CMD *rssiCmd) -{ - void *osbuf; - A_INT8 size; - WMI_RSSI_THRESHOLD_PARAMS_CMD *cmd; - /* These values are in ascending order */ - if( rssiCmd->thresholdAbove6_Val <= rssiCmd->thresholdAbove5_Val || - rssiCmd->thresholdAbove5_Val <= rssiCmd->thresholdAbove4_Val || - rssiCmd->thresholdAbove4_Val <= rssiCmd->thresholdAbove3_Val || - rssiCmd->thresholdAbove3_Val <= rssiCmd->thresholdAbove2_Val || - rssiCmd->thresholdAbove2_Val <= rssiCmd->thresholdAbove1_Val || - rssiCmd->thresholdBelow6_Val <= rssiCmd->thresholdBelow5_Val || - rssiCmd->thresholdBelow5_Val <= rssiCmd->thresholdBelow4_Val || - rssiCmd->thresholdBelow4_Val <= rssiCmd->thresholdBelow3_Val || - rssiCmd->thresholdBelow3_Val <= rssiCmd->thresholdBelow2_Val || - rssiCmd->thresholdBelow2_Val <= rssiCmd->thresholdBelow1_Val) { - - return A_EINVAL; - } - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_RSSI_THRESHOLD_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, rssiCmd, sizeof(WMI_RSSI_THRESHOLD_PARAMS_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_RSSI_THRESHOLD_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_host_sleep_mode_cmd(struct wmi_t *wmip, - WMI_SET_HOST_SLEEP_MODE_CMD *hostModeCmd) -{ - void *osbuf; - A_INT8 size; - WMI_SET_HOST_SLEEP_MODE_CMD *cmd; - - if( hostModeCmd->awake == hostModeCmd->asleep) { - return A_EINVAL; - } - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_SET_HOST_SLEEP_MODE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, hostModeCmd, sizeof(WMI_SET_HOST_SLEEP_MODE_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_HOST_SLEEP_MODE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_wow_mode_cmd(struct wmi_t *wmip, - WMI_SET_WOW_MODE_CMD *wowModeCmd) -{ - void *osbuf; - A_INT8 size; - WMI_SET_WOW_MODE_CMD *cmd; - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_SET_WOW_MODE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, wowModeCmd, sizeof(WMI_SET_WOW_MODE_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_WOW_MODE_CMDID, - NO_SYNC_WMIFLAG)); - -} - -A_STATUS -wmi_get_wow_list_cmd(struct wmi_t *wmip, - WMI_GET_WOW_LIST_CMD *wowListCmd) -{ - void *osbuf; - A_INT8 size; - WMI_GET_WOW_LIST_CMD *cmd; - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_GET_WOW_LIST_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, wowListCmd, sizeof(WMI_GET_WOW_LIST_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_WOW_LIST_CMDID, - NO_SYNC_WMIFLAG)); - -} - -static A_STATUS -wmi_get_wow_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - WMI_GET_WOW_LIST_REPLY *reply; - - if (len < sizeof(WMI_GET_WOW_LIST_REPLY)) { - return A_EINVAL; - } - reply = (WMI_GET_WOW_LIST_REPLY *)datap; - - A_WMI_WOW_LIST_EVENT(wmip->wmi_devt, reply->num_filters, - reply); - - return A_OK; -} - -A_STATUS wmi_add_wow_pattern_cmd(struct wmi_t *wmip, - WMI_ADD_WOW_PATTERN_CMD *addWowCmd, - A_UINT8* pattern, A_UINT8* mask, - A_UINT8 pattern_size) -{ - void *osbuf; - A_INT8 size; - WMI_ADD_WOW_PATTERN_CMD *cmd; - A_UINT8 *filter_mask = NULL; - - size = sizeof (*cmd); - - size += ((2 * addWowCmd->filter_size)* sizeof(A_UINT8)); - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_ADD_WOW_PATTERN_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->filter_list_id = addWowCmd->filter_list_id; - cmd->filter_offset = addWowCmd->filter_offset; - cmd->filter_size = addWowCmd->filter_size; - - A_MEMCPY(cmd->filter, pattern, addWowCmd->filter_size); - - filter_mask = (A_UINT8*)(cmd->filter + cmd->filter_size); - A_MEMCPY(filter_mask, mask, addWowCmd->filter_size); - - - return (wmi_cmd_send(wmip, osbuf, WMI_ADD_WOW_PATTERN_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_del_wow_pattern_cmd(struct wmi_t *wmip, - WMI_DEL_WOW_PATTERN_CMD *delWowCmd) -{ - void *osbuf; - A_INT8 size; - WMI_DEL_WOW_PATTERN_CMD *cmd; - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_DEL_WOW_PATTERN_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, delWowCmd, sizeof(WMI_DEL_WOW_PATTERN_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_DEL_WOW_PATTERN_CMDID, - NO_SYNC_WMIFLAG)); - -} - -A_STATUS -wmi_set_snr_threshold_params(struct wmi_t *wmip, - WMI_SNR_THRESHOLD_PARAMS_CMD *snrCmd) -{ - void *osbuf; - A_INT8 size; - WMI_SNR_THRESHOLD_PARAMS_CMD *cmd; - /* These values are in ascending order */ - if( snrCmd->thresholdAbove4_Val <= snrCmd->thresholdAbove3_Val || - snrCmd->thresholdAbove3_Val <= snrCmd->thresholdAbove2_Val || - snrCmd->thresholdAbove2_Val <= snrCmd->thresholdAbove1_Val || - snrCmd->thresholdBelow4_Val <= snrCmd->thresholdBelow3_Val || - snrCmd->thresholdBelow3_Val <= snrCmd->thresholdBelow2_Val || - snrCmd->thresholdBelow2_Val <= snrCmd->thresholdBelow1_Val) { - - return A_EINVAL; - } - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_SNR_THRESHOLD_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, snrCmd, sizeof(WMI_SNR_THRESHOLD_PARAMS_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_SNR_THRESHOLD_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_clr_rssi_snr(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(sizeof(int)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_CLR_RSSI_SNR_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_lq_threshold_params(struct wmi_t *wmip, - WMI_LQ_THRESHOLD_PARAMS_CMD *lqCmd) -{ - void *osbuf; - A_INT8 size; - WMI_LQ_THRESHOLD_PARAMS_CMD *cmd; - /* These values are in ascending order */ - if( lqCmd->thresholdAbove4_Val <= lqCmd->thresholdAbove3_Val || - lqCmd->thresholdAbove3_Val <= lqCmd->thresholdAbove2_Val || - lqCmd->thresholdAbove2_Val <= lqCmd->thresholdAbove1_Val || - lqCmd->thresholdBelow4_Val <= lqCmd->thresholdBelow3_Val || - lqCmd->thresholdBelow3_Val <= lqCmd->thresholdBelow2_Val || - lqCmd->thresholdBelow2_Val <= lqCmd->thresholdBelow1_Val ) { - - return A_EINVAL; - } - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_LQ_THRESHOLD_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - A_MEMCPY(cmd, lqCmd, sizeof(WMI_LQ_THRESHOLD_PARAMS_CMD)); - - return (wmi_cmd_send(wmip, osbuf, WMI_LQ_THRESHOLD_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_error_report_bitmask(struct wmi_t *wmip, A_UINT32 mask) -{ - void *osbuf; - A_INT8 size; - WMI_TARGET_ERROR_REPORT_BITMASK *cmd; - - size = sizeof (*cmd); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_TARGET_ERROR_REPORT_BITMASK *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - - cmd->bitmask = mask; - - return (wmi_cmd_send(wmip, osbuf, WMI_TARGET_ERROR_REPORT_BITMASK_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_challenge_resp_cmd(struct wmi_t *wmip, A_UINT32 cookie, A_UINT32 source) -{ - void *osbuf; - WMIX_HB_CHALLENGE_RESP_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMIX_HB_CHALLENGE_RESP_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->cookie = cookie; - cmd->source = source; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_HB_CHALLENGE_RESP_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_config_debug_module_cmd(struct wmi_t *wmip, A_UINT16 mmask, - A_UINT16 tsr, A_BOOL rep, A_UINT16 size, - A_UINT32 valid) -{ - void *osbuf; - WMIX_DBGLOG_CFG_MODULE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMIX_DBGLOG_CFG_MODULE_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->config.cfgmmask = mmask; - cmd->config.cfgtsr = tsr; - cmd->config.cfgrep = rep; - cmd->config.cfgsize = size; - cmd->config.cfgvalid = valid; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_DBGLOG_CFG_MODULE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_stats_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_STATISTICS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_addBadAp_cmd(struct wmi_t *wmip, A_UINT8 apIndex, A_UINT8 *bssid) -{ - void *osbuf; - WMI_ADD_BAD_AP_CMD *cmd; - - if ((bssid == NULL) || (apIndex > WMI_MAX_BAD_AP_INDEX)) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_ADD_BAD_AP_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->badApIndex = apIndex; - A_MEMCPY(cmd->bssid, bssid, sizeof(cmd->bssid)); - - return (wmi_cmd_send(wmip, osbuf, WMI_ADD_BAD_AP_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_deleteBadAp_cmd(struct wmi_t *wmip, A_UINT8 apIndex) -{ - void *osbuf; - WMI_DELETE_BAD_AP_CMD *cmd; - - if (apIndex > WMI_MAX_BAD_AP_INDEX) { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_DELETE_BAD_AP_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->badApIndex = apIndex; - - return (wmi_cmd_send(wmip, osbuf, WMI_DELETE_BAD_AP_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_txPwr_cmd(struct wmi_t *wmip, A_UINT8 dbM) -{ - void *osbuf; - WMI_SET_TX_PWR_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_TX_PWR_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->dbM = dbM; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_TX_PWR_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_txPwr_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_TX_PWR_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_switch_radio(struct wmi_t *wmip, A_UINT8 on) -{ - WMI_SCAN_PARAMS_CMD scParams = {0, 0, 0, 0, 0, - WMI_SHORTSCANRATIO_DEFAULT, - DEFAULT_SCAN_CTRL_FLAGS, - 0}; - - if (on) { - /* Enable foreground scanning */ - if (wmi_scanparams_cmd(wmip, scParams.fg_start_period, - scParams.fg_end_period, - scParams.bg_period, - scParams.minact_chdwell_time, - scParams.maxact_chdwell_time, - scParams.pas_chdwell_time, - scParams.shortScanRatio, - scParams.scanCtrlFlags, - scParams.max_dfsch_act_time) != A_OK) { - return -EIO; - } - } else { - wmi_disconnect_cmd(wmip); - if (wmi_scanparams_cmd(wmip, 0xFFFF, 0, 0, 0, - 0, 0, 0, 0xFF, 0) != A_OK) { - return -EIO; - } - } - - return A_OK; -} - - -A_UINT16 -wmi_get_mapped_qos_queue(struct wmi_t *wmip, A_UINT8 trafficClass) -{ - A_UINT16 activeTsids=0; - - LOCK_WMI(wmip); - activeTsids = wmip->wmi_streamExistsForAC[trafficClass]; - UNLOCK_WMI(wmip); - - return activeTsids; -} - -A_STATUS -wmi_get_roam_tbl_cmd(struct wmi_t *wmip) -{ - void *osbuf; - - osbuf = A_NETBUF_ALLOC(0); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_ROAM_TBL_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_roam_data_cmd(struct wmi_t *wmip, A_UINT8 roamDataType) -{ - void *osbuf; - A_UINT32 size = sizeof(A_UINT8); - WMI_TARGET_ROAM_DATA *cmd; - - osbuf = A_NETBUF_ALLOC(size); /* no payload */ - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_TARGET_ROAM_DATA *)(A_NETBUF_DATA(osbuf)); - cmd->roamDataType = roamDataType; - - return (wmi_cmd_send(wmip, osbuf, WMI_GET_ROAM_DATA_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_roam_ctrl_cmd(struct wmi_t *wmip, WMI_SET_ROAM_CTRL_CMD *p, - A_UINT8 size) -{ - void *osbuf; - WMI_SET_ROAM_CTRL_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_SET_ROAM_CTRL_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - - A_MEMCPY(cmd, p, size); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_ROAM_CTRL_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_powersave_timers_cmd(struct wmi_t *wmip, - WMI_POWERSAVE_TIMERS_POLICY_CMD *pCmd, - A_UINT8 size) -{ - void *osbuf; - WMI_POWERSAVE_TIMERS_POLICY_CMD *cmd; - - /* These timers can't be zero */ - if(!pCmd->psPollTimeout || !pCmd->triggerTimeout || - !(pCmd->apsdTimPolicy == IGNORE_TIM_ALL_QUEUES_APSD || - pCmd->apsdTimPolicy == PROCESS_TIM_ALL_QUEUES_APSD) || - !(pCmd->simulatedAPSDTimPolicy == IGNORE_TIM_SIMULATED_APSD || - pCmd->simulatedAPSDTimPolicy == PROCESS_TIM_SIMULATED_APSD)) - return A_EINVAL; - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, size); - - cmd = (WMI_POWERSAVE_TIMERS_POLICY_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, size); - - A_MEMCPY(cmd, pCmd, size); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID, - NO_SYNC_WMIFLAG)); -} - -#ifdef CONFIG_HOST_GPIO_SUPPORT -/* Send a command to Target to change GPIO output pins. */ -A_STATUS -wmi_gpio_output_set(struct wmi_t *wmip, - A_UINT32 set_mask, - A_UINT32 clear_mask, - A_UINT32 enable_mask, - A_UINT32 disable_mask) -{ - void *osbuf; - WMIX_GPIO_OUTPUT_SET_CMD *output_set; - int size; - - size = sizeof(*output_set); - - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - set=0x%x clear=0x%x enb=0x%x dis=0x%x\n", DBGARG, - set_mask, clear_mask, enable_mask, disable_mask)); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, size); - output_set = (WMIX_GPIO_OUTPUT_SET_CMD *)(A_NETBUF_DATA(osbuf)); - - output_set->set_mask = set_mask; - output_set->clear_mask = clear_mask; - output_set->enable_mask = enable_mask; - output_set->disable_mask = disable_mask; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_OUTPUT_SET_CMDID, - NO_SYNC_WMIFLAG)); -} - -/* Send a command to the Target requesting state of the GPIO input pins */ -A_STATUS -wmi_gpio_input_get(struct wmi_t *wmip) -{ - void *osbuf; - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - osbuf = A_NETBUF_ALLOC(0); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_INPUT_GET_CMDID, - NO_SYNC_WMIFLAG)); -} - -/* Send a command to the Target that changes the value of a GPIO register. */ -A_STATUS -wmi_gpio_register_set(struct wmi_t *wmip, - A_UINT32 gpioreg_id, - A_UINT32 value) -{ - void *osbuf; - WMIX_GPIO_REGISTER_SET_CMD *register_set; - int size; - - size = sizeof(*register_set); - - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - reg=%d value=0x%x\n", DBGARG, gpioreg_id, value)); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, size); - register_set = (WMIX_GPIO_REGISTER_SET_CMD *)(A_NETBUF_DATA(osbuf)); - - register_set->gpioreg_id = gpioreg_id; - register_set->value = value; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_REGISTER_SET_CMDID, - NO_SYNC_WMIFLAG)); -} - -/* Send a command to the Target to fetch the value of a GPIO register. */ -A_STATUS -wmi_gpio_register_get(struct wmi_t *wmip, - A_UINT32 gpioreg_id) -{ - void *osbuf; - WMIX_GPIO_REGISTER_GET_CMD *register_get; - int size; - - size = sizeof(*register_get); - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter - reg=%d\n", DBGARG, gpioreg_id)); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, size); - register_get = (WMIX_GPIO_REGISTER_GET_CMD *)(A_NETBUF_DATA(osbuf)); - - register_get->gpioreg_id = gpioreg_id; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_REGISTER_GET_CMDID, - NO_SYNC_WMIFLAG)); -} - -/* Send a command to the Target acknowledging some GPIO interrupts. */ -A_STATUS -wmi_gpio_intr_ack(struct wmi_t *wmip, - A_UINT32 ack_mask) -{ - void *osbuf; - WMIX_GPIO_INTR_ACK_CMD *intr_ack; - int size; - - size = sizeof(*intr_ack); - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter ack_mask=0x%x\n", DBGARG, ack_mask)); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, size); - intr_ack = (WMIX_GPIO_INTR_ACK_CMD *)(A_NETBUF_DATA(osbuf)); - - intr_ack->ack_mask = ack_mask; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_INTR_ACK_CMDID, - NO_SYNC_WMIFLAG)); -} -#endif /* CONFIG_HOST_GPIO_SUPPORT */ - -A_STATUS -wmi_set_access_params_cmd(struct wmi_t *wmip, A_UINT16 txop, A_UINT8 eCWmin, - A_UINT8 eCWmax, A_UINT8 aifsn) -{ - void *osbuf; - WMI_SET_ACCESS_PARAMS_CMD *cmd; - - if ((eCWmin > WMI_MAX_CW_ACPARAM) || (eCWmax > WMI_MAX_CW_ACPARAM) || - (aifsn > WMI_MAX_AIFSN_ACPARAM)) - { - return A_EINVAL; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_ACCESS_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->txop = txop; - cmd->eCWmin = eCWmin; - cmd->eCWmax = eCWmax; - cmd->aifsn = aifsn; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_ACCESS_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_retry_limits_cmd(struct wmi_t *wmip, A_UINT8 frameType, - A_UINT8 trafficClass, A_UINT8 maxRetries, - A_UINT8 enableNotify) -{ - void *osbuf; - WMI_SET_RETRY_LIMITS_CMD *cmd; - - if ((frameType != MGMT_FRAMETYPE) && (frameType != CONTROL_FRAMETYPE) && - (frameType != DATA_FRAMETYPE)) - { - return A_EINVAL; - } - - if (maxRetries > WMI_MAX_RETRIES) { - return A_EINVAL; - } - - if (frameType != DATA_FRAMETYPE) { - trafficClass = 0; - } - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_RETRY_LIMITS_CMD *)(A_NETBUF_DATA(osbuf)); - cmd->frameType = frameType; - cmd->trafficClass = trafficClass; - cmd->maxRetries = maxRetries; - cmd->enableNotify = enableNotify; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_RETRY_LIMITS_CMDID, - NO_SYNC_WMIFLAG)); -} - -void -wmi_get_current_bssid(struct wmi_t *wmip, A_UINT8 *bssid) -{ - if (bssid != NULL) { - A_MEMCPY(bssid, wmip->wmi_bssid, ATH_MAC_LEN); - } -} - -A_STATUS -wmi_set_opt_mode_cmd(struct wmi_t *wmip, A_UINT8 optMode) -{ - void *osbuf; - WMI_SET_OPT_MODE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_OPT_MODE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->optMode = optMode; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_OPT_MODE_CMDID, - SYNC_BOTH_WMIFLAG)); -} - -A_STATUS -wmi_opt_tx_frame_cmd(struct wmi_t *wmip, - A_UINT8 frmType, - A_UINT8 *dstMacAddr, - A_UINT8 *bssid, - A_UINT16 optIEDataLen, - A_UINT8 *optIEData) -{ - void *osbuf; - WMI_OPT_TX_FRAME_CMD *cmd; - osbuf = A_NETBUF_ALLOC(optIEDataLen + sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, (optIEDataLen + sizeof(*cmd))); - - cmd = (WMI_OPT_TX_FRAME_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, (optIEDataLen + sizeof(*cmd)-1)); - - cmd->frmType = frmType; - cmd->optIEDataLen = optIEDataLen; - //cmd->optIEData = (A_UINT8 *)((int)cmd + sizeof(*cmd)); - A_MEMCPY(cmd->bssid, bssid, sizeof(cmd->bssid)); - A_MEMCPY(cmd->dstAddr, dstMacAddr, sizeof(cmd->dstAddr)); - A_MEMCPY(&cmd->optIEData[0], optIEData, optIEDataLen); - - return (wmi_cmd_send(wmip, osbuf, WMI_OPT_TX_FRAME_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_adhoc_bconIntvl_cmd(struct wmi_t *wmip, A_UINT16 intvl) -{ - void *osbuf; - WMI_BEACON_INT_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_BEACON_INT_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->beaconInterval = intvl; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_BEACON_INT_CMDID, - NO_SYNC_WMIFLAG)); -} - - -A_STATUS -wmi_set_voice_pkt_size_cmd(struct wmi_t *wmip, A_UINT16 voicePktSize) -{ - void *osbuf; - WMI_SET_VOICE_PKT_SIZE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_VOICE_PKT_SIZE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->voicePktSize = voicePktSize; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_VOICE_PKT_SIZE_CMDID, - NO_SYNC_WMIFLAG)); -} - - -A_STATUS -wmi_set_max_sp_len_cmd(struct wmi_t *wmip, A_UINT8 maxSPLen) -{ - void *osbuf; - WMI_SET_MAX_SP_LEN_CMD *cmd; - - /* maxSPLen is a two-bit value. If user trys to set anything - * other than this, then its invalid - */ - if(maxSPLen & ~0x03) - return A_EINVAL; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_MAX_SP_LEN_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->maxSPLen = maxSPLen; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_MAX_SP_LEN_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_UINT8 -convert_userPriority_to_trafficClass(A_UINT8 userPriority) -{ - return (up_to_ac[userPriority & 0x7]); -} - -A_UINT8 -wmi_get_power_mode_cmd(struct wmi_t *wmip) -{ - return wmip->wmi_powerMode; -} - -A_STATUS -wmi_verify_tspec_params(WMI_CREATE_PSTREAM_CMD *pCmd, A_BOOL tspecCompliance) -{ - return A_OK; -} - -#ifdef CONFIG_HOST_TCMD_SUPPORT -static A_STATUS -wmi_tcmd_test_report_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) -{ - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - A_WMI_TCMD_RX_REPORT_EVENT(wmip->wmi_devt, datap, len); - - return A_OK; -} - -#endif /* CONFIG_HOST_TCMD_SUPPORT*/ - -A_STATUS -wmi_set_authmode_cmd(struct wmi_t *wmip, A_UINT8 mode) -{ - void *osbuf; - WMI_SET_AUTH_MODE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_AUTH_MODE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->mode = mode; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_AUTH_MODE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_reassocmode_cmd(struct wmi_t *wmip, A_UINT8 mode) -{ - void *osbuf; - WMI_SET_REASSOC_MODE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_REASSOC_MODE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->mode = mode; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_REASSOC_MODE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_lpreamble_cmd(struct wmi_t *wmip, A_UINT8 status) -{ - void *osbuf; - WMI_SET_LPREAMBLE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_LPREAMBLE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->status = status; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_LPREAMBLE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_rts_cmd(struct wmi_t *wmip, A_UINT16 threshold) -{ - void *osbuf; - WMI_SET_RTS_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_RTS_CMD*)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->threshold = threshold; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_RTS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_wmm_cmd(struct wmi_t *wmip, WMI_WMM_STATUS status) -{ - void *osbuf; - WMI_SET_WMM_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_WMM_CMD*)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->status = status; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_WMM_CMDID, - NO_SYNC_WMIFLAG)); - -} - -A_STATUS -wmi_set_wmm_txop(struct wmi_t *wmip, WMI_TXOP_CFG cfg) -{ - void *osbuf; - WMI_SET_WMM_TXOP_CMD *cmd; - - if( !((cfg == WMI_TXOP_DISABLED) || (cfg == WMI_TXOP_ENABLED)) ) - return A_EINVAL; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_WMM_TXOP_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->txopEnable = cfg; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_WMM_TXOP_CMDID, - NO_SYNC_WMIFLAG)); - -} - -#ifdef CONFIG_HOST_TCMD_SUPPORT -/* WMI layer doesn't need to know the data type of the test cmd. - This would be beneficial for customers like Qualcomm, who might - have different test command requirements from differnt manufacturers - */ -A_STATUS -wmi_test_cmd(struct wmi_t *wmip, A_UINT8 *buf, A_UINT32 len) -{ - void *osbuf; - char *data; - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); - - osbuf= A_NETBUF_ALLOC(len); - if(osbuf == NULL) - { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, len); - data = A_NETBUF_DATA(osbuf); - A_MEMCPY(data, buf, len); - - return(wmi_cmd_send(wmip, osbuf, WMI_TEST_CMDID, - NO_SYNC_WMIFLAG)); -} - -#endif - -A_STATUS -wmi_set_bt_status_cmd(struct wmi_t *wmip, A_UINT8 streamType, A_UINT8 status) -{ - void *osbuf; - WMI_SET_BT_STATUS_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_BT_STATUS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->streamType = streamType; - cmd->status = status; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_BT_STATUS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_bt_params_cmd(struct wmi_t *wmip, WMI_SET_BT_PARAMS_CMD* cmd) -{ - void *osbuf; - WMI_SET_BT_PARAMS_CMD* alloc_cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - alloc_cmd = (WMI_SET_BT_PARAMS_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(alloc_cmd, sizeof(*cmd)); - A_MEMCPY(alloc_cmd, cmd, sizeof(*cmd)); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_BT_PARAMS_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_get_keepalive_configured(struct wmi_t *wmip) -{ - void *osbuf; - WMI_GET_KEEPALIVE_CMD *cmd; - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - cmd = (WMI_GET_KEEPALIVE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - return (wmi_cmd_send(wmip, osbuf, WMI_GET_KEEPALIVE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_UINT8 -wmi_get_keepalive_cmd(struct wmi_t *wmip) -{ - return wmip->wmi_keepaliveInterval; -} - -A_STATUS -wmi_set_keepalive_cmd(struct wmi_t *wmip, A_UINT8 keepaliveInterval) -{ - void *osbuf; - WMI_SET_KEEPALIVE_CMD *cmd; - - osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*cmd)); - - cmd = (WMI_SET_KEEPALIVE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, sizeof(*cmd)); - cmd->keepaliveInterval = keepaliveInterval; - wmip->wmi_keepaliveInterval = keepaliveInterval; - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_KEEPALIVE_CMDID, - NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_appie_cmd(struct wmi_t *wmip, A_UINT8 mgmtFrmType, A_UINT8 ieLen, - A_UINT8 *ieInfo) -{ - void *osbuf; - WMI_SET_APPIE_CMD *cmd; - A_UINT16 cmdLen; - - if (ieLen > WMI_MAX_IE_LEN) { - return A_ERROR; - } - cmdLen = sizeof(*cmd) + ieLen - 1; - osbuf = A_NETBUF_ALLOC(cmdLen); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, cmdLen); - - cmd = (WMI_SET_APPIE_CMD *)(A_NETBUF_DATA(osbuf)); - A_MEMZERO(cmd, cmdLen); - - cmd->mgmtFrmType = mgmtFrmType; - cmd->ieLen = ieLen; - A_MEMCPY(cmd->ieInfo, ieInfo, ieLen); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_APPIE_CMDID, NO_SYNC_WMIFLAG)); -} - -A_STATUS -wmi_set_halparam_cmd(struct wmi_t *wmip, A_UINT8 *cmd, A_UINT16 dataLen) -{ - void *osbuf; - A_UINT8 *data; - - osbuf = A_NETBUF_ALLOC(dataLen); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, dataLen); - - data = A_NETBUF_DATA(osbuf); - - A_MEMCPY(data, cmd, dataLen); - - return (wmi_cmd_send(wmip, osbuf, WMI_SET_WHALPARAM_CMDID, NO_SYNC_WMIFLAG)); -} - -A_INT32 -wmi_get_rate(A_INT8 rateindex) -{ - if (rateindex == RATE_AUTO) { - return 0; - } else { - return(wmi_rateTable[(A_UINT32) rateindex]); - } -} - -void -wmi_node_return (struct wmi_t *wmip, bss_t *bss) -{ - if (NULL != bss) - { - wlan_node_return (&wmip->wmi_scan_table, bss); - } -} - -bss_t * -wmi_find_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid, - A_UINT32 ssidLength, A_BOOL bIsWPA2) -{ - bss_t *node = NULL; - node = wlan_find_Ssidnode (&wmip->wmi_scan_table, pSsid, - ssidLength, bIsWPA2); - return node; -} - -void -wmi_free_allnodes(struct wmi_t *wmip) -{ - wlan_free_allnodes(&wmip->wmi_scan_table); -} - -bss_t * -wmi_find_node(struct wmi_t *wmip, const A_UINT8 *macaddr) -{ - bss_t *ni=NULL; - ni=wlan_find_node(&wmip->wmi_scan_table,macaddr); - return ni; -} - -A_STATUS -wmi_dset_open_reply(struct wmi_t *wmip, - A_UINT32 status, - A_UINT32 access_cookie, - A_UINT32 dset_size, - A_UINT32 dset_version, - A_UINT32 targ_handle, - A_UINT32 targ_reply_fn, - A_UINT32 targ_reply_arg) -{ - void *osbuf; - WMIX_DSETOPEN_REPLY_CMD *open_reply; - - A_DPRINTF(DBG_WMI, (DBGFMT "Enter - wmip=0x%x\n", DBGARG, (int)wmip)); - - osbuf = A_NETBUF_ALLOC(sizeof(*open_reply)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - A_NETBUF_PUT(osbuf, sizeof(*open_reply)); - open_reply = (WMIX_DSETOPEN_REPLY_CMD *)(A_NETBUF_DATA(osbuf)); - - open_reply->status = status; - open_reply->targ_dset_handle = targ_handle; - open_reply->targ_reply_fn = targ_reply_fn; - open_reply->targ_reply_arg = targ_reply_arg; - open_reply->access_cookie = access_cookie; - open_reply->size = dset_size; - open_reply->version = dset_version; - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_DSETOPEN_REPLY_CMDID, - NO_SYNC_WMIFLAG)); -} - -static A_STATUS -wmi_get_pmkid_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len) -{ - WMI_PMKID_LIST_REPLY *reply; - A_UINT32 expected_len; - - if (len < sizeof(WMI_PMKID_LIST_REPLY)) { - return A_EINVAL; - } - reply = (WMI_PMKID_LIST_REPLY *)datap; - expected_len = sizeof(reply->numPMKID) + reply->numPMKID * WMI_PMKID_LEN; - - if (len < expected_len) { - return A_EINVAL; - } - - A_WMI_PMKID_LIST_EVENT(wmip->wmi_devt, reply->numPMKID, - reply->pmkidList); - - return A_OK; -} - -#ifdef CONFIG_HOST_DSET_SUPPORT -A_STATUS -wmi_dset_data_reply(struct wmi_t *wmip, - A_UINT32 status, - A_UINT8 *user_buf, - A_UINT32 length, - A_UINT32 targ_buf, - A_UINT32 targ_reply_fn, - A_UINT32 targ_reply_arg) -{ - void *osbuf; - WMIX_DSETDATA_REPLY_CMD *data_reply; - int size; - - size = sizeof(*data_reply) + length; - - A_DPRINTF(DBG_WMI, - (DBGFMT "Enter - length=%d status=%d\n", DBGARG, length, status)); - - osbuf = A_NETBUF_ALLOC(size); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - A_NETBUF_PUT(osbuf, size); - data_reply = (WMIX_DSETDATA_REPLY_CMD *)(A_NETBUF_DATA(osbuf)); - - data_reply->status = status; - data_reply->targ_buf = targ_buf; - data_reply->targ_reply_fn = targ_reply_fn; - data_reply->targ_reply_arg = targ_reply_arg; - data_reply->length = length; - - if (status == A_OK) { - if (a_copy_from_user(data_reply->buf, user_buf, length)) { - return A_ERROR; - } - } - - return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_DSETDATA_REPLY_CMDID, - NO_SYNC_WMIFLAG)); -} -#endif /* CONFIG_HOST_DSET_SUPPORT */ - -A_STATUS -wmi_set_wsc_status_cmd(struct wmi_t *wmip, A_UINT32 status) -{ - void *osbuf; - char *cmd; - - wps_enable = status; - - osbuf = a_netbuf_alloc(sizeof(1)); - if (osbuf == NULL) { - return A_NO_MEMORY; - } - - a_netbuf_put(osbuf, sizeof(1)); - - cmd = (char *)(a_netbuf_to_data(osbuf)); - - A_MEMZERO(cmd, sizeof(*cmd)); - cmd[0] = (status?1:0); - return (wmi_cmd_send(wmip, osbuf, WMI_SET_WSC_STATUS_CMDID, - NO_SYNC_WMIFLAG)); -} - diff --git a/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi_doc.h b/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi_doc.h deleted file mode 100644 index 19cd9386ca..0000000000 --- a/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi_doc.h +++ /dev/null @@ -1,4421 +0,0 @@ -/* - * - * Copyright (c) 2004-2007 Atheros Communications Inc. - * All rights reserved. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * - * - */ - - -#if 0 -Wireless Module Interface (WMI) Documentaion - - This section describes the format and the usage model for WMI control and - data messages between the host and the AR6000-based targets. The header - file include/wmi.h contains all command and event manifest constants as - well as structure typedefs for each set of command and reply parameters. - -Data Frames - - The data payload transmitted and received by the target follows RFC-1042 - encapsulation and thus starts with an 802.2-style LLC-SNAP header. The - WLAN module completes 802.11 encapsulation of the payload, including the - MAC header, FCS, and WLAN security related fields. At the interface to the - message transport (HTC), a data frame is encapsulated in a WMI message. - -WMI Message Structure - - The WMI protocol leverages an 802.3-style Ethernet header in communicating - the source and destination information between the host and the AR6000 - modules using a 14-byte 802.3 header ahead of the 802.2-style payload. In - addition, the WMI protocol adds a header to all data messages: - - { - INT8 rssi - The RSSI of the received packet and its units are shown in db above the - noise floor, and the noise floor is shown in dbm. - UINT8 info - Contains information on message type and user priority. Message type - differentiates between a data packet and a synchronization message. - } WMI_DATA_HDR - - User priority contains the 802.1d user priority info from host to target. Host - software translates the host Ethernet format to 802.3 format prior to Tx and - 802.3 format to host format in the Rx direction. The host does not transmit the - FCS that follows the data. MsgType differentiates between a regular data - packet (msgType=0) and a synchronization message (msgType=1). - -Data Endpoints - - The AR6000 chipset provides several data endpoints to support quality of - service (QoS) and maintains separate queues and separate DMA engines for - each data endpoint. A data endpoint can be bi-directional. - - Best effort (BE) class traffic uses the default data endpoint (2). The host can - establish up to two additional data endpoints for other traffic classes. Once - such a data endpoint is established, it sends and receives corresponding QoS - traffic in a manner similar to the default data endpoint. - - If QoS is desired over the interconnect, host software must classify each data - packet and place it on the appropriate data endpoint. The information - required to classify data is generally available in-band as an 802.1p/q style - tag or as the ToS field in the IP header. The information may also be available - out-of-band depending on the host DDI. - -Connection States - - Table B-1 describes the AR6000 WLAN connection states: - - Table B-1. AR6000 Connection States - -Connection State - Description - - DISCONNECTED - In this state, the AR6000 device is not connected to a wireless - network. The device is in this state after reset when it sends the - WIRELESS MODULE “READY” EVENT, after it processes a - DISCONNECT command, and when it loses its link with the - access point (AP) that it was connected to. The device signals a - transition to the DISCONNECTED state with a “DISCONNECT” - event. - -CONNECTED - In this state, the AR6000 device is connected to wireless networks. - The device enters this state after successfully processing a - CONNECT, which establishes a connection with a wireless - network. The device signals a transition to the CONNECTED state - with a “CONNECT” event. - - -Message Types - - WMI uses commands, replies, and events for the control and configuration of - the AR6000 device. The control protocol is asynchronous. Table B-2 describes - AR6000 message types: - -Table B-2. AR6000 Message Types - -Message Type - Description - -Commands - Control messages that flow from the host to the device - -Replies/Events - Control messages that flow from the device to the host. - - The device issues a reply to some WMI commands, but not to others. - The payload in a reply is command-specific, and some commands do - not trigger a reply message at all. Events are control messages issued - by the device to signal the occurrence of an asynchronous event. - - -WMI Message Format - - All WMI control commands, replies and events use the header format: - - WMI_CMD_HDR Header Format - { - UINT16 id - This 16-bit constant identifies which WMI command the host is issuing, - which command the target is replying to, or which event has occurred. - WMI_CMD_HDR - } - - - A variable-size command-, reply-, or event-specific payload follows the - header. Over the interconnect, all fields in control messages (including - WMI_CMD_HDR and the command specific payload) use 32-bit little Endian - byte ordering and fields are packed. The AR6000 device always executes - commands in order, and the host may send multiple commands without - waiting for previous commands to complete. A majority of commands are - processed to completion once received. Other commands trigger a longer - duration activity whose completion is signaled to the host through an event. - -Command Restrictions - - Some commands may only be issued when the AR6000 device is in a certain - state. The host is required to wait for an event signaling a state transition - before such a command can be issued. For example, if a command requires - the device to be in the CONNECTED state, then the host is required to wait - for a “CONNECT” event before it issues that command. - - The device ignores any commands inappropriate for its current state. If the - command triggers a reply, the device generates an error reply. Otherwise, the - device silently ignores the inappropriate command. - -Command and Data Synchronization - - WMI provides a mechanism for a host to advise the device of necessary - synchronization between commands and data. The device implements - synchronization; no implicit synchronization exists between endpoints. - - The host controls synchronization using the “SYNCHRONIZE” command - over the control channel and synchronization messages over data channels. - The device stops each data channel upon receiving a synchronization message - on that channel, processing all data packets received prior to that message. - After the device receives synchronization messages for each data endpoint - and the “SYNCHRONIZE” command, it resumes all channels. - - When the host must guarantee a command executes before processing new - data packets, it first issues the command, then issues the “SYNCHRONIZE” - command and sends synchronization messages on data channels. When the - host must guarantee the device has processed all old data packets before a - processing a new command, it issues a “SYNCHRONIZE” command and - synchronization messages on all data channels, then issues the desired - command. - - - -WMI Commands - - ADD_BAD_AP - Cause the AR6000 device to avoid a particular AP - ADD_CIPHER_KEY - Add or replace any of the four AR6000 encryption keys - ADD_WOW_PATTERN - Used to add a pattern to the WoW pattern list - CLR_RSSI_SNR - Clear the current calculated RSSI and SNR value - CONNECT_CMD - Request that the AR6000 device establish a wireless connection - with the specified SSID - CREATE_PSTREAM - Create prioritized data endpoint between the host and device - DELETE_BAD_AP - Clear an entry in the bad AP table - DELETE_CIPHER_KEY - Delete a previously added cipher key - DELETE_PSTREAM - Delete a prioritized data endpoint - DELETE_WOW_PATTERN - Remove a pre-specified pattern from the WoW pattern list - EXTENSION - WMI message interface command - GET_BIT_RATE - Retrieve rate most recently used by the AR6000 - GET_CHANNEL_LIST - Retrieve list of channels used by the AR6000 - GET_FIXRATES - Retrieves the rate-mask set via the SET_FIXRATES command. - GET_PMKID_LIST_CMD - Retrieve the firmware list of PMKIDs - GET_ROAM_DATA - Internal use for data collection; available in special build only - GET_ROAM_TBL - Retrieve the roaming table maintained on the target - GET_TARGET_STATS - Request that the target send the statistics it maintains - GET_TX_PWR - Retrieve the current AR6000 device Tx power levels - GET_WOW_LIST - Retrieve the current list of WoW patterns - LQ_THRESHOLD_PARAMS - Set the link quality thresholds - OPT_TX_FRAME - Send a special frame (special feature) - RECONNECT - Request a reconnection to a BSS - RSSI_THRESHOLD_PARAMS - Configure how the AR6000 device monitors and reports signal - strength (RSSI) of the connected BSS - SCAN_PARAMS - Determine dwell time and changes scanned channels - SET_ACCESS_PARAMS - Set access parameters for the wireless network - SET_ADHOC_BSSID - Set the BSSID for an ad hoc network - SET_AKMP_PARAMS - Set multiPMKID mode - SET_APPIE - Add application-specified IE to a management frame - SET_ASSOC_INFO - Specify the IEs the device should add to association or - reassociation requests - SET_AUTH_MODE - Set 802.11 authentication mode of reconnection - SET_BEACON_INT - Set the beacon interval for an ad hoc network - SET_BIT_RATE - Set the AR6000 to a specific fixed bit rate - SET_BMISS_TIME - Set the beacon miss time - SET_BSS_FILTER - Inform the AR6000 of network types about which it wants to - receive information using a “BSSINFO” event - SET_BT_PARAMS - Set the status of a Bluetooth stream (SCO or A2DP) or set - Bluetooth coexistence register parameters - SET_BT_STATUS - Set the status of a Bluetooth stream (SCO or A2DP) - SET_CHANNEL_PARAMETERS - Configure WLAN channel parameters - SET_DISC_TIMEOUT - Set the amount of time the AR6000 spends attempting to - reestablish a connection - SET_FIXRATES - Set the device to a specific fixed PHY rate (supported subset) - SET_HALPARAM - Internal AR6000 command to set certain hardware parameters - SET_HOST_SLEEP_MODE - Set the host mode to asleep or awake - SET_IBSS_PM_CAPS - Support a non-standard power management scheme for an - ad hoc network - SET_LISTEN_INT - Request a listen interval - SET_LPREAMBLE - Override the short preamble capability of the AR6000 device - SET_MAX_SP_LEN - Set the maximum service period - SET_OPT_MODE - Set the special mode on/off (special feature) - SET_PMKID - Set the pairwise master key ID (PMKID) - SET_PMKID_LIST_CMD - Configure the firmware list of PMKIDs - SET_POWER_MODE - Set guidelines on trade-off between power utilization - SET_POWER_PARAMS - Configure power parameters - SET_POWERSAVE_PARAMS - Set the two AR6000 power save timers - SET_PROBED_SSID - Provide list of SSIDs the device should seek - SET_REASSOC_MODE - Specify whether the disassociated frame should be sent upon - reassociation - SET_RETRY_LIMITS - Limit how many times the device tries to send a frame - SET_ROAM_CTRL - Control roaming behavior - SET_RTS - Determine when RTS should be sent - SET_SCAN_PARAMS - Set the AR6000 scan parameters - SET_TKIP_COUNTERMEASURES - Enable/disable reports of TKIP MIC errors - SET_TX_PWR - Specify the AR6000 device Tx power levels - SET_VOICE_PKT_SIZE - Set voice packet size - SET_WMM - Override the AR6000 WMM capability - SET_WMM_TXOP - Configure TxOP bursting when sending traffic to a WMM- - capable AP - SET_WOW_MODE - Enable/disable WoW mode - SET_WSC_STATUS - Enable/disable profile check in cserv when the WPS protocol - is in progress - SNR_THRESHOLD_PARAMS - Configure how the device monitors and reports SNR of BSS - START_SCAN - Start a long or short channel scan - SYNCHRONIZE - Force a synchronization point between command and data - paths - TARGET_REPORT_ERROR_BITMASK - Control “ERROR_REPORT” events from the AR6000 - - - - -Name - ADD_BAD_AP - -Synopsis - The host uses this command to cause the AR6000 to avoid a particular AP. The - AR6000 maintain a table with up to two APs to avoid. An ADD_BAD_AP command - adds or replaces the specified entry in this bad AP table. - - If the AR6000 are currently connected to the AP specified in this command, they - disassociate. - -Command - wmiconfig eth1 --badap <bssid> <badApIndex> - -Command Parameters - UINT8 badApIndex Index [0...1] that identifies which entry in the - bad AP table to use - - - UINT8 bssid[6] MAC address of the AP to avoid - -Command Values - badApIndex = 0, 1 Entry in the bad AP table to use - -Reset Value - The bad AP table is cleared - -Restrictions - None - -See Also - “DELETE_BAD_AP” on page B-13 - -===================================================================== -Name - ADD_CIPHER_KEY - -Synopsis - The host uses this command to add/replace any of four encryption keys on the - AR6000. The ADD_CIPHER_KEY command is issued after the CONNECT event - has been received by the host for all dot11Auth modes except for SHARED_AUTH. - When the dot11AuthMode is SHARED_AUTH, then the ADD_CIPHER_KEY - command should be issued before the “CONNECT” command. - -Command - wmiconfig eth1 --cipherkey <keyIndex> <keyType> <keyUsage> - <keyLength> <keyopctrl> <keyRSC> <key> - -Command Parameters - UINT8 keyIndex Index (0...3) of the key to add/replace; - uniquely identifies the key - UINT8 keyType CRYPTO_TYPE - UINT8 keyUsage Specifies usage parameters of the key when - keyType = WEP_CRYPT - UINT8 keyLength Length of the key in bytes - UINT8 keyOpCtrl bit[0] = Initialize TSC (default), - bit[1] = Initialize RSC - UINT8 keyRSC[8] Key replay sequence counter (RSC) initial - value the device should use - UINT8 key[32] Key material used for this connection - Command Values - { - NONE_CRYPT = 1 - WEP_CRYPT = 2 - TKIP_CRYPT = 3 - AES_CRYPT = 4 - KEY_OP_INIT_TSC 0x01 - KEY_OP_INIT_RSC 0x02 - KEY_OP_INIT_VAL 0x03 - Default is to Initialize the TSC - KEY_OP_VALID_MASK 0x04 - Two operations defined - } CRYPTO_TYPE - - { - PAIRWISE_USAGE = 0 Set if the key is used for unicast traffic only - GROUP_USAGE = 1 Set if the key is used to receive multicast - traffic (also set for static WEP keys) - TX_USAGE = 2 Set for the GROUP key used to transmit frames - All others are reserved - } KEY_USAGE - -Reset Value - The four available keys are disabled. - -Restrictions - The cipher should correspond to the encryption mode specified in the “CONNECT” - command. - -See Also - “DELETE_CIPHER_KEY” - -===================================================================== - - -Name - ADD_WOW_PATTERN - -Synopsis - The host uses this command to add a pattern to the WoW pattern list; used for - pattern-matching for host wakeups by the WoW module. If the host mode is asleep - and WoW is enabled, all packets are matched against the existing WoW patterns. If a - packet matches any of the patterns specified, the target will wake up the host. All - non-matching packets are discarded by the target without being sent up to the host. - -Command - wmiconfig –addwowpattern <list-id> <filter-size> <filter-offset> - <pattern> <mask> - -Command Parameters - A_UINT8 filter_list_id ID of the list that is to include the new pattern - A_UINT8 filter_size Size of the new pattern - A_UINT8 filter_offset Offset at which the pattern matching for this - new pattern should begin at - A_UINT8 filter[1] Byte stream that contains both the pattern and - the mask of the new WoW wake-up pattern - -Reply Parameters - None - -Reset Value - None defined (default host mode is awake) - -Restrictions - None - -See Also - “DELETE_WOW_PATTERN” - -===================================================================== - - -Name - CLR_RSSI_SNR - -Synopsis - Clears the current calculated RSSI and SNR value. RSSI and SNR are reported by - running-average value. This command will clear the history and have a fresh start - for the running-average mechanism. - -Command - wmiconfig eth1 --cleanRssiSnr - -Command Parameters - None - -Reply Parameters - None - -Reset Value - None defined - -Restrictions - None - -===================================================================== - -Name - CONNECT_CMD - -Synopsis - New connect control information (connectCtrl) is added, with 32 possible modifiers. - - CONNECT_SEND_REASSOC - Valid only for a host-controlled connection to a - particular AP. If this bit is set, a reassociation frame is - sent. If this bit is clear, an association request frame is - sent to the AP. - - CONNECT_IGNORE_WPAx_GROUP_CIPHER - No group key is issued in the CONNECT command, - so use the group key advertised by the AP. In a target- - initiated roaming situation this allows a STA to roam - between APs that support different multicast ciphers. - - CONNECT_PROFILE_MATCH_DONE - In a host-controlled connection case, it is possible that - during connect, firmware may not have the - information for a profile match (e.g, when the AP - supports hidden SSIDs and the device may not - transmit probe requests during connect). By setting - this bit in the connection control information, the - firmware waits for a beacon from the AP with the - BSSID supplied in the CONNECT command. No - additional profile checks are done. - - CONNECT_IGNORE_AAC_BEACON - Ignore the Admission Capacity information in the - beacon of the AP - - CONNECT_ASSOC_POLICY_USER - When set, the CONNECT_SEND_REASSOC setting - determines if an Assoc or Reassoc is sent to an AP - -Command - wmiconfig --setconnectctrl <ctrl flags bitmask> - -Command Parameters - typedef struct{ - A_UINT8 networktype; - A_UINT8 dot11authmode; - A_UINT8 authmode; - A_UINT8 pairwiseCryptoType; /*CRYPTO_TYPE*/ - A_UINT8 pairwiseCryptoLen; - A_UINT8 groupCryptoType; /*CRYPTO_TYPE*/ - A_UINT8 groupCryptoLen; - A_UINT8 ssidLength; - A_UCHAR ssid[WMI_MAX_SSID_LEN]; - A_UINT16 channel; - A_UINT8 bssid[AUTH_MAC_LEN]; - A_UINT8 ctrl_flags; /*WMI_CONNECT_CTRL_FLAGS_BITS*/ - } WMI_CONNECT_CMD; - - ctrl flags bitmask - = 0x0001 CONNECT_ASSOC_POLICY_USER - Assoc frames are sent using the policy specified by - the flag - = 0x0002 CONNECT_SEND_REASSOC - Send Reassoc frame while connecting, otherwise send - assoc frames - = 0x0004 CONNECT_IGNORE_WPAx_GROUP_CIPHER - Ignore WPAx group cipher for WPA/WPA2 - = 0x0008 CONNECT_PROFILE_MATCH_DONE - Ignore any profile check - = 0x0010 CONNECT_IGNORE_AAC_BEACON - Ignore the admission control information in the - beacon - ... CONNECT_CMD, continued - Command Values - typedef enum { - INFRA_NETWORK = 0x01, - ADHOC_NETWORK = 0x02, - ADHOC_CREATOR = 0x04, - } NETWORK_TYPE; - - typedef enum { - OPEN_AUTH = 0x01, - SHARED_AUTH = 0x02, - 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; - typedef enum { - CONNECT_ASSOC_POLICY_USER = 0x0001, - CONNECT_SEND_REASSOC = 0x0002, - CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004, - CONNECT_PROFILE_MATCH_DONE = 0x0008, - CONNECT_IGNORE_AAC_BEACON = 0x0010, - } WMI_CONNECT_CTRL_FLAGS_BITS; - - pairwiseCryptoLen and groupCryptoLen are valid when the respective - CryptoTypesis WEP_CRYPT, otherwise this value should be 0. This is the length in - bytes. - -Reset Value - None defined - -Restrictions - None - -===================================================================== - - -Name - CREATE_PSTREAM - -Synopsis - The host uses this command to create a new prioritized data endpoint between the - host and the AR6000 device that carries a prioritized stream of data. If the AP that the - device connects to requires TSPEC stream establishment, the device requests the - corresponding TSPEC with the AP. The maximum and minimum service interval - ranges from 0 – 0x7FFFFFFF (ms), where 0 = disabled. The device does not send a - reply event for this command, as it is always assumed the command has succeeded. - An AP admission control response comes to the host via a WMI_CAC_INDICATION - event, once the response for the ADDTS frame comes. - - Examples of cases where reassociation is generated (when WMM) and cases where - ADDTS is generated (when WMM and enabling ACM) are when: - Changing UAPSD flags in WMM mode, reassociation is generated - Changing the interval of sending auto QoS Null frame in WMM mode; - reassociation is not generated - Issuing a command with same previous parameters in WMM mode and enabling - ACM, an ADDTS request is generated - Changing the interval of a QoS null frame sending in WMM mode and enabling - ACM, an ADDTS request is generated - Issuing the command in disconnected state, reassociation or ADDTS is not - generated but the parameters are available after (re)association - -Command - --createqos <user priority> <direction> <traffic class> -<trafficType> <voice PS capability> <min service interval> <max -service interval> <inactivity interval> <suspension interval> -<service start time> <tsid> <nominal MSDU> <max MSDU> <min data -rate> <mean data rate> <peak data rate> <max burst size> <delay -bound> <min phy rate> <sba> <medium time> where: - - <user priority> - 802.1D user priority range (0–7) - <direction> - = 0 Tx (uplink) traffic - = 1 Rx (downlink) traffic - = 2 Bi-directional traffic - <traffic class> - = 1 BK - = 2 VI - = 3 VO - <trafficType> - = 0 Aperiodic - = 1 Periodic - <voice PS capability> - Specifies whether the voice power save mechanism - (APSD if AP supports it or legacy/simulated APSD - [using PS-Poll]) should be used - = 0 Disable voice power save for traffic class - = 1 Enable APSD voice power save for traffic class - = 2 Enable voice power save for all traffic classes - <min service interval> - (In ms) - <max service interval> - Inactivity interval (in ms) (0 = Infinite) - <suspension interval> - (In ms) - <service start time> - Service start time - <tsid> - TSID range (0–15) - <nominal MSDU> - Nominal MAC SDU size - <max MSDU> - Maximum MAC SDU size - <min data rate> - Minimum data rate (in bps) - <mean data rate> - Mean data rate (in bps) - <peak data rate> - Peak data rate (in bps) - <max burst size> - Maximum burst size (in bps) - <delay bound> - Delay bound - <min phy rate> - Minimum PHY rate (in bps) - <sba> - Surplus bandwidth allowance - <medium time> - Medium time in TU of 32-ms periods per sec - ... CREATE_PSTREAM (continued) - -Command Parameters - UINT8 trafficClass TRAFFIC_CLASS value - UINT8 traffic - Direction - DIR_TYPE value - UINT8 rxQueueNum - AR6000 device mailbox index (2 or 3) - corresponding to the endpoint the host - wishes to use to receive packets for the - prioritized stream - UINT8 trafficType TRAFFIC_TYPE value - UINT8 voicePS -Capability - VOICEPS_CAP_TYPE value - UINT8 tsid Traffic stream ID - UINT8 userPriority 802.1D user priority - UINT16 nominalMSDU Nominal MSDU in octets - UINT16 maxMSDU Maximum MSDU in octets - UINT32 minServiceInt Minimum service interval: the min. - period of traffic specified (in ms) - UINT32 maxServiceInt Maximum service interval: the max. - period of traffic specified (in ms) - UINT32 inactivityInt Indicates how many ms an established - stream is inactive before the prioritized - data endpoint is taken down and the - corresponding T-SPEC deleted - UINT32 suspensionInt Suspension interval (in ms) - UINT32 service StartTime Service start time - UINT32 minDataRate Minimum data rate (in bps) - UINT32 meanDataRate Mean data rate (in bps) - UINT32 peakDataRate Peak data rate (in bps) - UINT32 maxBurstSize - UINT32 delayBound - UINT32 minPhyRate Minimum PHY rate for TSPEC (in bps) - UINT32 sba Surplus bandwidth allowance - UINT32 mediumTime Medium TSPEC time (in units of 32 ms) -Command Values - { - WMM_AC_BE = 0 Best Effort - WMM_AC_BK = 1 Background - WMM_AC_VI = 2 Video - WMM_AC_VO = 3 Voice - All other values reserved - } TRAFFIC_CLASS - { - UPLINK_TRAFFIC = 0 From the AR6000 device to the AP - DOWNLINK_TRAFFIC = 1 From the AP to the AR6000 device - BIDIR_TRAFFIC = 2 Bi-directional traffic - All other values reserved - } DIR_TYPE - { - DISABLE_FOR_THIS_AC = 0 - ENABLE_FOR_THIS_AC = 1 - ENABLE_FOR_ALL_AC = 2 - All other values reserved - } VOICEPS_CAP_TYPE - - ... CREATE_PSTREAM (continued) - - - VI BE BK Supported, Y/N? - 0 0 0 0 Y - 0 0 0 1 Y - 0 0 1 0 N - 0 0 1 1 N - 0 1 0 0 Y - 0 1 0 1 Y - 0 1 1 0 N - 0 1 1 1 N - 1 0 0 0 Y - 1 0 0 1 Y - 1 0 1 0 N - 1 1 0 0 N - 1 1 0 1 Y - 1 1 0 0 N - 1 1 1 0 N - 1 1 1 1 Y - -Reset Value - No pstream is present after reset; each of the BE, BK, VI,VO pstreams must be created - (either implicitly by data flow or explicitly by user) - -Restrictions - This command can only be issued when the device is in the CONNECTED state. If - the device receives the command while in DISCONNECTED state, it replies with a - failure indication. At most four prioritized data endpoints can be created, one for - each AC. - -See Also - “DELETE_PSTREAM” -===================================================================== - -Name - DELETE_BAD_AP - -Synopsis - The host uses this command to clear a particular entry in the bad AP table - -Command - wmiconfig eth1 --rmAP [--num=<index>] // used to clear a badAP - entry. num is index from 0-3 - -Command Parameters - UINT8 badApIndex Index [0...n] that identifies the entry in the bad - AP table to delete - -Command Values - badApIndex = 0, 1, 2, 3 - Entry in the bad AP table - -Reset Value - None defined - -Restrictions - None - -See Also - “ADD_BAD_AP” - -===================================================================== - - -Name - DELETE_CIPHER_KEY - -Synopsis - The host uses this command to delete a key that was previously added with the - “ADD_CIPHER_KEY” command. - -Command - TBD - -Command Parameters - UINT8 keyIndex Index (0...3) of the key to be deleted - -Command Values - keyIndex = 0, 1,2, 3 Key to delete - -Reset Value - None - -Restrictions - The host should not delete a key that is currently in use by the AR6000. - -See Also - “ADD_CIPHER_KEY” - -===================================================================== - -Name - DELETE_PSTREAM - -Synopsis - The host uses this command to delete a prioritized data endpoint created by a - previous “CREATE_PSTREAM” command - -Command - --deleteqos <trafficClass> <tsid>, where: - - <traffic class> - = 0 BE - = 1 BK - = 2 VI - = 3 VO - <tsid> - The TSpec ID; use the -qosqueue option - to get the active TSpec IDs for each traffic class - -Command Parameters - A_UINT8 trafficClass Indicate the traffic class of the stream - being deleted - -Command Values - { - WMM_AC_BE = 0 Best effort - WMM_AC_BK = 1 Background - WMM_AC_VI = 2 Video - WMM_AC_VO = 3 Voice - } TRAFFIC CLASS - - 0-15 for TSID - -Reply Values - N/A - -Restrictions - This command should only be issued after a “CREATE_PSTREAM” command has - successfully created a prioritized stream - -See Also - “CREATE_PSTREAM” - -===================================================================== - - -Name - DELETE_WOW_PATTERN - -Synopsis - The host uses this command to remove a pre-specified pattern from the - WoW pattern list. - -Command - wmiconfig –delwowpattern <list-id> <pattern-id> - -Command Parameters - A_UINT8 filter_list_id ID of the list that contains the WoW filter - pattern to delete - A_UINT8 filter_id ID of the WoW filter pattern to delete - -Reply Parameters - None - - - -Reset Value - None defined - -Restrictions - None - -See Also - “ADD_WOW_PATTERN” - -===================================================================== - - -Name - EXTENSION - -Synopsis - The WMI message interface is used mostly for wireless control messages to a wireless - module applicable to wireless module management regardless of the target platform - implementation. However, some commands only peripherally related to wireless - management are desired during operation. These wireless extension commands may - be platform-specific or implementation-dependent. - -Command - N/A - -Command Parameters - Command-specific - -Command Values - Command-specific - -Reply Parameters - Command-specific - -Reset Values - None defined - -Restrictions - None defined - -===================================================================== - - -Name - GET_BIT_RATE - -Synopsis - Used by the host to obtain the rate most recently used by the AR6000 device - -Command - wmiconfig eth1 --getfixrates - -Command Parameters - None - - - -Reply Parameters - INT8 - rateIndex - See the “SET_BIT_RATE” command - -Reset Values - None - -Restrictions - This command should only be used during development/debug; it is not intended -for use in production. It is only valid when the device is in the CONNECTED state - -See Also - “SET_BIT_RATE” - -===================================================================== - - -Name - GET_CHANNEL_LIST - -Synopsis - Used by the host uses to retrieve the list of channels that can be used by the device - while in the current wireless mode and in the current regulatory domain. - -Command - TBD - -Command Parameters - None - -Reply Parameters - UINT8 reserved Reserved - UINT8 numberOfChannels Number of channels the reply contains - UINT16 channelList[numberOfChannels] Array of channel frequencies (in MHz) - -Reset Values - None defined - -Restrictions - The maximum number of channels that can be reported are 32 - -===================================================================== - - -Name - GET_FIXRATES - -Synopsis - Clears the current calculated RSSI and SNR value. RSSI and SNR are reported by - running-average value. This command will clear the history and have a fresh start for - the running-average mechanism. - -Synopsis - This returns rate-mask set via WMI_SET_FIXRATES to retrieve the current fixed rate - that the AR6001 or AR6001 is using. See “SET_FIXRATES”. - -Command - wmiconfig eth1 --getfixrates - -Command Parameters - A_UINT16 fixRateMask; Note: if this command is used prior to - using WMI_SET_FIXRATES, AR6000 - returns 0xffff as fixRateMask, indicating - all the rates are enabled - -Reply Parameters - None - -Reset Value - None defined - -Restrictions - None - -See Also - “SET_FIXRATES” - -===================================================================== - - - -Name - GET_PMKID_LIST_CMD - -Synopsis - Retrieves the list of PMKIDs on the firmware. The - WMI_GET_PMKID_LIST_EVENT is generated by the firmware. - -Command - TBD - -Command Parameters - -Reset Values - None - -Restrictions - None - -See Also - SET_PMKID_LIST_CMD GET_PMKID_LIST_EVENT - -===================================================================== - - -Name - GET_ROAM_TBL - -Synopsis - Retrieve the roaming table maintained on the target. The response is reported - asynchronously through the ROAM_TBL_EVENT. - -Command - wmiconfig --getroamtable <roamctrl> <info> - -Command Parameters - A_UINT8 roamCtrlType; - A_UINT16 roamMode - A_UINT16 numEntries - WMI_BSS_ROAM_INFO bssRoamInfo[1] - -Reply Value - Reported asynchronously through the ROAM_TBL_EVENT - -Reset Value - None defined - -Restrictions - None - -See Also - SET_KEEPALIVE - -===================================================================== - - -Name - GET_TARGET_STATS - -Synopsis - The host uses this command to request that the target send the statistics that it - maintains. The statistics obtained from the target are accrued in the host every time - the GET_TARGET_STATS command is issued. The --clearStats option is added to - clear the target statistics maintained in the host. - -Command - wmiconfig --getTargetStats --clearStats - -Command Parameters - TARGET_STATS targetStats - WMI_TARGET_STATS - UINT8 clearStats - - -Reply Value - RSSI return value (0–100) - -Reset Values - All statistics are cleared (zeroed) - -Restrictions - The --getTargetStats option must be used; the --clearStats option is also available also - - -===================================================================== - -Name - GET_TX_PWR - -Synopsis - The host uses this command to retrieve the current Tx power level - -Command - wmiconfig -i eth1 --getpower - -Command Parameters - None - -Reply Parameters - UINT16 dbM The current Tx power level specified in dbM - -Reset Values - The maximum permitted by the regulatory domain - -Restrictions - None - -See Also - “SET_TX_PWR” - -===================================================================== - - -Name - GET_WOW_LIST - -Synopsis - The host uses this command to retrieve the current list of WoW patterns. - -Command - wmiconfig –getwowlist <list-id> - -Command Parameters - A_UINT8 filter_list_id ID of the list of WoW patterns to retrieve - -Reply Value(s) - A_UINT16 num_filters Number of WoW patterns contained in the list - A_UINT8 wow_mode Current mode of WoW (enabled or disabled) - A_UINT8 host_mode Current host mode (asleep or awake) - WOW_FILTER wow_filters[1] - Contents of the WoW filter pattern list - (contains mask, pattern, offset and size - information for each of the patterns) - -Reset Value - None defined - -Restrictions - None - -See Also - “SET_WSC_STATUS” - -===================================================================== - - -Name - LQ_THRESHOLD_PARAMS - -Synopsis - Sets Link Quality thresholds, the sampling will happen at every unicast data frame - Tx if a certain threshold is met, and the corresponding event will be sent to the host. - -Command - --lqThreshold <enable> <upper_threshold_1> ... - <upper_threshold_4> <lower_threshold_1> ... <lower_threshold_4> - -Command Parameters - <enable> = 0 Disable link quality sampling - = 1 Enable link quality sampling - <upper_threshold_x> Above thresholds (value in [0,100]), in - ascending order - <lower_threshold_x> Below thresholds (value in [0,100]), in - ascending order - -Command Values - See command parameters - -Reset Value - None defined - -Restrictions - None - -===================================================================== - - -Name - OPT_TX_FRAME - -Synopsis - Special feature, sends a special frame. - -Command - wmiconfig --sendframe <frmType> <dstaddr> <bssid> <optIEDatalen> - <optIEData> - -Command Parameters - { - A_UINT16 optIEDataLen; - A_UINT8 frmType; - A_UINT8 dstAddr[ATH_MAC_LEN]; - A_UINT8 bssid[ATH_MAC_LEN]; - A_UINT8 optIEData[1]; - } WMI_OPT_TX_FRAME_CMD; - -Command Values - <frmtype> = 1 Probe request frame - = 2 Probe response frame - = 3 CPPP start - = 4 CPPP stop - -Reset Value - None defined - -Restrictions - Send a special frame only when special mode is on. - -===================================================================== - - -Name - RECONNECT - -Synopsis - This command requests a reconnection to a BSS to which the AR6000 device was - formerly connected - -Command - TBD - -Command Parameters - UINT16 channel Provides a hint as to which channel was - used for a previous connection - UINT8 bssid[6] If set, indicates which BSSID to connect to - -Command Values - None - -Reset Values - None - -Restrictions - None - -See Also - “CONNECT_CMD” - -===================================================================== - - -Name - RSSI_THRESHOLD_PARAMS - -Synopsis - Configures how the AR6000 device monitors and reports signal strength (RSSI) of the - connected BSS, which is used as a link quality metric. The four RSSI threshold sets (in - dbM) of the host specification divide the signal strength range into six segments. - When signal strength increases or decreases across one of the boundaries, an - RSSI_THRESHOLD event is signaled to the host. The host may then choose to take - action (such as influencing roaming). - -Command - wmiconfig eth1 --rssiThreshold <weight> <pollTime> - <above_threshold_val_1> ... <above_threshold_tag_6> - <above_threshold_val_6> - <below_threshold_tag_1> <below_threshold_val_1> ... - <below_threshold_tag_6> <below_threshold_val_6> - -Command Parameters - UINT8 weight Range in [1, 16] used to calculate average RSSI - UINT32 pollTime RSSI (signal strength) sampling frequency in - seconds (if pollTime = 0, single strength - sampling is disabled) - USER_RSS__THOLD tholds[12] Thresholds (6 x 2) - -Command Values - None defined - -Reset Values - pollTime is 0, and sampling is disabled - -Restrictions - Can only be issued if the AR6000 device is connected - - -===================================================================== - -Name - SCAN_PARAMS - -Synopsis - The minact parameter determines the minimum active channel dwell time, within - which if the STA receives any beacon, it remains on that channel until the maxact - channel dwell time. If the STA does not receive a beacon within the minact dwell - time, it switches to scan the next channel. - -Command - wmiconfig -scan -minact=<ms> --maxact=<ms> - -Command Parameters - UINT16 maxact Channel dwell time (in ms), default = 0 - UINT16 minact Channel dwell time (in ms), default = 105 - -Command Values - See channel parameters - -Reset Values - None defined - -Restrictions - The minact value should be greater than 0; maxact should be between 5–65535 ms - and greater than minact - -===================================================================== - - -Name - SET_ACCESS_PARAMS - -Synopsis - Allows the host to set access parameters for the wireless network. A thorough - understanding of IEEE 802.11 is required to properly manipulate these parameters. - -Command - wmiconfig eth1 --acparams --txop <limit> --cwmin <0-15> - --cwmax <0-15> --aifsn<0-15> - -Command Parameters - UINT16 txop The maximum time (expressed in units of - 32 ms) the device can spend transmitting - after acquiring the right to transmit - UINT8 eCWmin Minimum contention window - UINT8 eCWmax Maximum contention window - UINT8 aifsn The arbitration inter-frame space number - -Command Values - None - -Reset Values - Reasonable defaults that vary, between endpoints (prioritized streams) - -Restrictions - None - -===================================================================== - - -Name - SET_ADHOC_BSSID - -Synopsis - Allows the host to set the BSSID for an ad hoc network. If a network with this BSSID - is not found, the target creates an ad hoc network with this BSSID after the connect - WMI command is triggered (e.g., by the SIOCSIWESSID IOCTL). - -Command - wmiconfig eth1 --adhocbssid <bssid> - -Command Parameters - A_UINT8 bssid[ATH_MAC_LEN] BSSID is specified in xx:xx:xx:xx:xx:xx format - -Command Values - None - -Reset Values - None - -Restrictions - None - -===================================================================== - - -Name - SET_AKMP_PARAMS - -Synopsis - Enables or disables multi PMKID mode. - -Command - wmiconfig eth1 --setakmp --multipmkid=<on/off> - -Command Parameters - typedef struct { - A_UINT32 akmpInfo; - } WMI_SET_AKMP_PARAMS_CMD; - -Command Values - akmpInfo; - bit[0] = 0 - MultiPMKID mode is disabled and PMKIDs that - were set using the WMI_SET_PMKID_CMD are - used in the [Re]AssocRequest frame. - bit[0] = 1 - MultiPMKID mode is enabled and PMKIDs issued - by the WMI_SET_PMKID_LIST_CMD are used in - the next [Re]AssocRequest sent to the AP. - -Reset Values - MultiPMKID mode is disabled - -Restrictions - None - -===================================================================== - - -Name - SET_APPIE - -Synopsis - Add an application-specified IE to a management frame. The maximum length is - 76 bytes. Including the length and the element ID, this translates to 78 bytes. - -Command - wmiconfig --setappie <frame> <IE>, where: - - frame - One of beacon, probe, respon, assoc - - IE - A hex string beginning with DD (if = 0, no - IE is sent in the management frame) - -Command Parameters - mgmtFrmType; - A WMI_MGMT_FRAME_TYPE - - ieLen; - Length of the IE to add to the GMT frame - -Command Values - None - -Reset Value - None defined - -Restrictions - Supported only for the probe request and association request management frame -types. Also, only one IE can be added per management frame type. - -===================================================================== - - -Name - SET_ASSOC_INFO - -Synopsis - The host uses this command to specify any information elements (IEs) it wishes the - AR6000 device to add to all future association and reassociation requests. IEs must be - correct and are used as is by the device. IEs specified through this command are - cleared with a DISCONNECT. - -Command - wmiconfig eth1 --setAssocIe <IE> - -Command Parameters - UINT8 ieType Used directly in 802.11 frames - UINT8 bufferSize Size of assocInfo (in bytes) ranging from - 0–240. If = 0, previously set IEs are cleared. - UINT8 assocInfo[bufferSize] Used directly in 802.11 frames - -Command Values - None - -Reset Values - IEs are cleared - -Restrictions - This command can only be issued in the DISCONNECTED state - -===================================================================== - - -Name - SET_AUTHMODE - -Synopsis - Sets the 802.11 authentication mode of reconnection - -Command - wmiconfig eth1 --setauthmode <mode> - -Command Parameters - UINT8 mode - -Command Values - mode = 0x00 Proceed with authentication during reconnect - = 0x01 Do not proceed with authentication during reconnect - -Reset Values - Authentication - -Restrictions - None - -===================================================================== - - -Name - SET_BEACON_INT - -Synopsis - Sets the beacon interval for an ad hoc network. Beacon interval selection may have an - impact on power savings. To some degree, a longer interval reduces power - consumption but also decreases throughput. A thorough understanding of IEEE - 802.11 ad hoc networks is required to use this command effectively. - -Command - wmiconfig eth1 --ibssconintv - -Command Parameters - UINT16 beaconInterval Specifies the beacon interval in TU units (1024 ms) - -Command Values - None - -Reset Values - The default beacon interval is 100 TUs (102.4 ms) - -Restrictions - This command can only be issued before the AR6000 device starts an ad hoc network - -See Also - “SET_IBSS_PM_CAPS” - -===================================================================== - - -Name - SET_BIT_RATE - -Synopsis - The host uses this command to set the AR6000 device to a specific fixed rate. - -Command - wmiconfig eth1 --setfixrates <rate_0> ... <rate_n> - -Command Parameters - INT8 rateIndex - A WMI_BIT_RATE value - { - RATE_AUTO = -1 - RATE_1Mb = 0 - RATE_2Mb = 1 - RATE_5_5M = 2 - RATE_11Mb = 3 - RATE_6Mb = 4 - RATE_9Mb = 5 - RATE_12Mb = 6 - RATE_18Mb = 7 - RATE_24Mb = 8 - RATE_36Mb = 9 - RATE_48Mb = 10 - RATE_54Mb = 11 - } WMI_BIT_RATE - - -Command Values - See command parameters - -Reset Values - The dynamic rate is determined by the AR6000 device - -Restrictions - This command is intended for use only during development/debug; it is not -intended for use in production - -See Also - “GET_BIT_RATE” - -===================================================================== - - -Name - SET_BMISS_TIME - -Synopsis - This command sets the beacon miss (BMISS) time, which the AR6000 hardware use - to recognize missed beacons. When an excessive number (15) of consecutive beacons - are missed, the AR6000 consider switching to a different BSS. The time can be - specified in number of beacons or in TUs. - -Command(s) - wmiconfig eth1 --setbmissbeacons=<val> - wmiconfig eth1 --setbmisstime=<val> - -Command Parameters - UINT16 bmissTime Specifies the beacon miss time - [1000...5000] in TUs (1024 ms) - UINT16 bmissbeacons Specifies the number of beacons [5...50] - -Command Values - None - -Reset Values - bmissTime is 1500 TUs (1536 ms) - -Restrictions - None - -===================================================================== - - -Name - SET_BSS_FILTER - -Synopsis - The host uses this to inform the AR6000 device of the types of networks about which - it wants to receive information from the “BSSINFO” event. As the device performs - either foreground or background scans, it applies the filter and sends “BSSINFO” - events only for the networks that pass the filter. If any of the bssFilter or the ieMask - filter matches, a BSS Info is sent to the host. The ieMask currently is used as a match - for the IEs in the beacons, probe reponses and channel switch action management - frame. See also “Scan and Roam” on page C-1. - - The BSS filter command has been enhanced to support IE based filtering. The IEs can - be specified as a bitmask through this command using this enum. - -Command - wmiconfig eth1 –filter = <filter> --ieMask 0x<mask> - -Command Parameters - UINT8 BssFilter - - Command Values - typedef struct { - A_UINT8 bssFilter; See WMI_BSS_FILTER - A_UINT32 ieMask; - } __ATTRIB_PACK WMI_BSS_FILTER_CMD; - - The ieMask can take this combination of values: - - enum { - BSS_ELEMID_CHANSWITCH = 0x01 - BSS_ELEMID_ATHEROS = 0x02, - } - -Reply Value - None - -Reset Value - BssFilter = NONE_BSS_FILTER (0) - -Restrictions - None - -See Also - “CONNECT_CMD” - -===================================================================== - - -Name - SET_BT_PARAMS - -Synopsis - This command is used to set the status of a Bluetooth stream or set Bluetooth - coexistence register parameters. The stream may be an SCO or an A2DP stream and - its status can be started/stopped/suspended/resumed. - -Command - wmiconfig –setBTparams <paramType> <params> - -Command Parameters - struct { - union { - BT_PARAMS_SCO scoParams; - BT_PARAMS_A2DP a2dpParams; - BT_PARAMS_MISC miscParams; - BT_COEX_REGS regs; - } info; - A_UINT8 paramType; - struct { - A_UINT8 noSCOPkts; Number of SCO packets between consecutive PS-POLLs - A_UINT8 pspollTimeout; - A_UINT8 stompbt; - } BT_PARAMS_SCO; - struct { - A2DP BT stream parameters - A_UINT32 period; - A_UINT32 dutycycle; - A_UINT8 stompbt; - } BT_PARAMS_A2DP; - struct { - union { - WLAN_PROTECT_POLICY_TYPE protectParams; - A_UINT16 wlanCtrlFlags; - }info; - A_UINT8 paramType; - } BT_PARAMS_MISC; - struct { - BT coexistence registers values - A_UINT32 mode; Coexistence mode - A_UINT32 scoWghts; WLAN and BT weights - A_UINT32 a2dpWghts; - A_UINT32 genWghts; - A_UINT32 mode2; Coexistence mode2 - A_UINT8 setVal; - } BT_COEX_REGS; - -Command Values - None defined - -Reset Value - None - -Restrictions - None - -===================================================================== - - -Name - SET_BT_STATUS - -Synopsis - Sets the status of a Bluetooth stream. The stream may be a SCO or an A2DP stream - and its status can be started/stopped/suspended/resumed. - -Command - wmiconfig –setBTstatus <streamType> <status> - -Command Parameters - { - A_UINT8 streamType; Stream type - A_UINT8 status; Stream status - }WMI_SET_BT_STATUS_CMD; - -Command Values - { - BT_STREAM_UNDEF = 0 - BT_STREAM_SCO - SCO stream - BT_STREAM_A2DP - A2DP stream - BT_STREAM_MAX - } BT_STREAM_TYPE; - - { - BT_STATUS_UNDEF = 0 - BT_STATUS_START - BT_STATUS_STOP - BT_STATUS_RESUME - BT_STATUS_SUSPEND - BT_STATUS_MAX - } BT_STREAM_STATUS; - -Reset Value - None defined - -Restrictions - None - -===================================================================== - - -Name - SET_CHANNEL_PARAMETERS - -Synopsis - Configures various WLAN parameters related to channels, sets the wireless mode, - and can restrict the AR6000 device to a subset of available channels. The list of - available channels varies depending on the wireless mode and the regulatory - domain. The device never operates on a channel outside of its regulatory domain. The - device starts to scan the list of channels right after this command. - -Command - wmiconfig eth1 --wmode <mode> <list> - -Command Parameters - UINT8 phyMode See Values below. - UINT8 numberOfChannels - Number of channels in the channel array that - follows. If = 0, then the device uses all of the - channels permitted by the regulatory domain - and by the specified phyMode. - UINT16 channel[numberOfChannels] - Array listing the subset of channels (expressed - as frequencies in MHz) the host wants the - device to use. Any channel not permitted by - the specified phyMode or by the specified - regulatory domain is ignored by the device. - -Command Values - phyMode = { - Wireless mode - 11a = 0x01 - 11g = 0x02 - 11ag = 0x03 - 11b = 0x04 - 11g only = 0x05 - } - -Reset Values - phyMode - 11ag - 802.11a/g modules - 11g - 802.11g module - channels - Defaults to all channels permitted by the - current regulatory domain. - -Restrictions - This command, if issued, should be issued soon after reset and prior to the first - connection. This command should only be issued in the DISCONNECTED state. - -===================================================================== - - -Name - SET_DISC_TIMEOUT - -Synopsis - The host uses this command to configure the amount of time that the AR6000 should - spend when it attempts to reestablish a connection after losing link with its current - BSS. If this time limit is exceeded, the AR6000 send a “DISCONNECT” event. After - sending the “DISCONNECT” event the AR6000 continues to attempt to reestablish a - connection, but they do so at the interval corresponding to a foreground scan as - established by the “SET_SCAN_PARAMS” command. - - A timeout value of 0 indicates that the AR6000 will disable all autonomous roaming, - so that the AR6000 will not perform any scans after sending a “DISCONNECT” - event to the host. The state is maintained until a shutdown or host sets different - timeout value from 0. - -Command - wmiconfig eth1 --disc=<timeout in seconds> - -Command Parameters - UINT8 disconnectTimeout - Specifies the time limit (in seconds) after - which a failure to reestablish a connection - results in a “DISCONNECT” event - -Command Values - None - -Reset Values - disconnectTimeout is 10 seconds - -Restrictions - This command can only be issued while in a DISCONNECTED state - -===================================================================== - - -Name - SET_FIXRATES - -Synopsis - By default, the AR6000 device uses all PHY rates based on mode of operation. If the - host application requires the device to use subset of supported rates, it can set those - rates with this command. In 802.11g mode, the AR6000 device takes the entire - 802.11g basic rate set and the rates specified with this command and uses it as the - supported rate set. - - This rate set is advertised in the probe request and the assoc/re-assoc request as - supported rates. Upon successful association, the device modifies the rate set pool - using the: intersection of AP-supported rates with the union of the 802.11g basic rate - set and rates set using this command. The device picks transmission rates from this - pool based on a rate control algorithm. - -Command - TBD - -Command Parameters - A_UINT16 fixRateMask; - The individual bit is an index for rate table, - and setting the that index to 1 would set that - corresponding rate. E.g., fixRateMask = 9 - (1001) sets 1 Mbps and 11 Mbps. - -Command Values - None - -Reset Value - None defined - -Restrictions - None - -See Also - “GET_FIXRATES” - -===================================================================== - - -Name - SET_WHAL_PARAM - -Synopsis - An internal AR6000 command that is used to set certain hardware parameters. The - description of this command is in $WORKAREA/include/halapi.h. - -Command - TBD - -Command Parameters - ATH_HAL_SETCABTO_CMDID - Sets the timeout waiting for the multicast - traffic after a DTIM beacon (in TUs). - -Command Values - None - -Reset Value - Default = 10 TUs - -Restrictions - This command should be executed before issuing a connect command. - -===================================================================== - - -Name - SET_HOST_SLEEP_MODE - -Synopsis - The host uses this command to set the host mode to asleep or awake. All packets are - delivered to the host when the host mode is awake. When host mode is asleep, only if - WoW is enabled and the incoming packet matches one of the specified WoW - patterns, will the packet be delivered to the host. The host will also be woken up by - the target for pattern-matching packets and important events. - -Command - wmiconfig –sethostmode=<asleep/awake> - -Command Parameters - A_BOOL awake Set the host mode to awake - A_BOOL asleep Set the host mode to asleep - -Command Values - 1 = awake, 0 = asleep - -Reset Value - None defined (default host mode is awake) - -Restrictions - None - - -===================================================================== - -Name - SET_IBSS_PM_CAPS - -Synopsis - Used to support a non-standard power management scheme for an ad hoc wireless - network consisting of up to eight stations (STAs) that support this form of power - saving (e.g., Atheros-based STAs). A thorough understanding of IEEE 802.11 ad hoc - networks is required to use this command effectively. - -Command - wmiconfig eth1 --ibsspmcaps --ps=<enable/disable> - --aw=<ATIM Windows in ms> - --ttl=<Time to live in number of beacon periods> - --to=<timeout in ms> - -Command Parameters - UINT8 power_saving - = 0 - The non-standard power saving scheme is - disabled and maximum throughput (with no - power saving) is obtained. - - = 1 - Ad hoc power saving scheme is enabled (but - throughput may be decreased) - - UINT16 atim_windows - Specifies the length (in ms) of the ad hoc traffic - indication message (ATIM) windows used in an ad - hoc network. All Atheros-based STAs that join the - network use this duration ATIM window. - - The duration is communicated between wireless - STAs through an IE in beacons and probe responses. - - The host sets atim_windows to control trade-offs - between power use and throughput. The value - chosen should be based on the beacon interval (see - the “SET_BEACON_INT” command) on the - expected number of STAs in the IBSS, and on the - amount of traffic and traffic patterns between STAs. - - UINT16 timeout_value - Specifies the timeout (in ms). The value is the same - for all ad hoc connections, but tracks separately for - each. - - Applicable only for a beacon period and used to - derive actual timeout values on the Tx and Rx sides. - On the Tx side, the value defines a window during - which the STA accepts the frame(s) from the host for a - particular connection. Until closed, the window - restarts with every frame received from the host. On - the Rx side, indicates the time until which the STA - continues accepting frames from a particular - connection. The value resets with every frame - received. The value can be used to determine the - trade off between throughput and power. - Default = 10 ms - - UINT8 ttl - Specifies the value in number of beacon periods. The - value is used to set a limit on the time until which a - frame is kept alive in the AR6001 before being - discarded. Default = 5 - -Command Values - None - -Reset Values - By default, power_saving is enabled with atim_window = 20 ms - -Restrictions - Can only be issued before the AR6000 starts an ad hoc network - -See Also - “SET_BEACON_INT” - -===================================================================== - - - -Name - SET_LISTEN_INT - -Synopsis - The host uses this command to request a listen interval, which determines how often - the AR6000 device should wake up and listen for traffic. The listen interval can be set - by the TUs or by the number of beacons. The device may not be able to comply with - the request (e.g., if the beacon interval is greater than the requested listen interval, the - device sets the listen interval to the beacon interval). The actual listen interval used - by the device is available in the “CONNECT” event. - -Command - wmiconfig eth1 --listen=<#of TUs, can range from 15 to 3000> - - --listenbeacons=<#of beacons, can range from 1 to 50> - -Command Parameters - UINT16 listenInterval - Specifies the listen interval in Kms - (1024 ms), ranging from 100 to 1000 - - UINT16 listenbeacons - Specifies the listen interval in beacons, - ranging from 1 to 50 - -Command Values - None - -Reset Values - The device sets the listen interval equal to the beacon interval of the AP it associates - to. - -Restrictions - None - -===================================================================== - - -Name - SET_LPREAMBLE - -Synopsis - Overrides the short preamble capability of the AR6000 device - -Command - TBD - -Command Parameters - WMI_LPREAMBLE_DISABLED - The device is short-preamble capable - - WMI_LPREAMBLE_ENABLED - The device supports only the long- - preamble mode - -Command Values - None - -Reset Value - None defined - -Restrictions - None - - -===================================================================== - -Name - SET_MAX_SP_LEN - -Synopsis - Set the maximum service period; indicates the number of packets the AR6001 can - receive from the AP when triggered - -Command - wmiconfig eth1 --setMaxSPLength <maxSPLen> - -Command Parameters - UINT8 maxSPLen - An APSD_SP_LEN_TYPE value - -Command Values - { - DELIVER_ALL_PKT = 0x0 - DELIVER_2_PKT = 0x1 - DELIVER_4_PKT = 0x2 - DELIVER_6_PKT = 0x3 - }APSD_SP_LEN_TYPE - - -Reset Values - maxSPLen is DELIVER_ALL_PKT - -Restrictions - None - -===================================================================== - - -Name - SET_OPT_MODE - -Synopsis - Special feature, sets the special mode on/off - -Command - wmiconfig eth1 --mode <mode> - Set the optional mode, where mode is special or off - -Command Parameters - enum { - SPECIAL_OFF - SPECIAL_ON - } OPT_MODE_TYPE; - -Command Values - -Reset Value - Mode = Off - -Restrictions - None - -===================================================================== - - -Name - SET_PMKID - -Synopsis - The host uses this command to enable or disable a pairwise master key ID (PMKID) - in the AR6000 PMKID cache. The AR6000 clears its PMKID cache on receipt of a - DISCONNECT command from the host. Individual entries in the cache might be - deleted as the AR6000 detect new APs and decides to remove old ones. - -Command - wmiconfig eth1 --setbsspmkid --bssid=<aabbccddeeff> - --bsspmkid=<pmkid> - -Command Parameters - UINT8 bssid[6] - The MAC address of the AP that the - PMKID corresponds to (6 bytes in hex - format) - - UINT8 enable - Either PMKID_DISABLE (0) to disable - the PMKID or PMKID_ENABLE (1) to - enable it (16 bytes in hex format) - - UINT8 pmkid[16] - Meaningful only if enable is - PMKID_ENABLE, when it is the PMKID - that the AR6000 should use on the next - reassociation with the specified AP - -Command Values - enable - = 0 (disable), 1 (enable) - PKMID enabled/disabled - -Reset Values - None defined - -Restrictions - Only supported in infrastructure networks - -===================================================================== - - -Name - SET_PMKID_LIST_CMD - -Synopsis - Configures the list of PMKIDs on the firmware. - -Command - wmiconfig --setpmkidlist --numpmkid=<n> --pmkid=<pmkid_1> - ... --pmkid=<pmkid_n> - - Where n is the number of pmkids (maximum = 8) and pmkid_i is the ith pmkid (16 - bytes in hex format) - -Command Parameters - { - A_UINT8 pmkid[WMI_PMKID_LEN]; - } __ATTRIB_PACK WMI_PMKID; - - { - A_UINT32 numPMKID; - WMI_PMKID pmkidList[WMI_MAX_PMKID_CACHE]; - } __ATTRIB_PACK WMI_SET_PMKID_LIST_CMD; - -Command Values - None - -Reset Values - None - -Restrictions - Supported only in infrastructure modes - -===================================================================== - - -Name - SET_POWER_MODE - -Synopsis - The host uses this command to provide the AR6000 device with guidelines on the - desired trade-off between power utilization and performance. - - In normal power mode, the device enters a sleep state if they have nothing to do, - which conserves power but may cost performance as it can take up to 2 ms to - resume operation after leaving sleep state. - - In maximum performance mode, the device never enters sleep state, thus no time - is spent waking up, resulting in higher power consumption and better - performance. - -Command - TBD - -Command Parameters - UINT8 powerMode - WMI_POWER_MODE value - { - REC_POWER = 1 - (Recommended setting) Tries to conserve - power without sacrificing performance - MAX_PERF_POWER = 2 - Setting that maximizes performance at - the expense of power - - All other values are reserved - } WMI_POWER_MODE - -Command Values - See command parameters - -Reset Values - powerMode is REC_POWER - -Restrictions - This command should only be issued in the DISCONNECTED state for the - infrastructure network. - - For a PM-disabled ad hoc network, the power mode should remain in - MAX_PERF_POWER. - - For a PM-enabled ad hoc network, the device can have REC_POWER or - MAX_PERF_POWER set, but either way it must follow the power save ad hoc - protocol. The host can change power modes in the CONNECTED state. - - Host changes to the PS setting when the STA is off the home channel take no effect - and cause a TARGET_PM_FAIL event. - -===================================================================== - - -Name - SET_POWER_PARAMS - -Synopsis - The host uses this command to configure power parameters - -Command - wmiconfig eth1 --pmparams --it=<ms> --np=<number of PS POLL> - --dp=<DTIM policy: ignore/normal/stick> - -Command Parameters - UINT16 idle_period - Length of time (in ms) the AR6000 device - remains awake after frame Rx/Tx before going - to SLEEP state - - UINT16 pspoll_number - The number of PowerSavePoll (PS-poll) - messages the device should send before - notifying the AP it is awake - - UINT16 dtim_policy - A WMI_POWER_PARAMS_CMD value - - { - IGNORE_DTIM =1 - The device does not listen to any content after - beacon (CAB) traffic - NORMAL_DTIM = 2 - DTIM period follows the listen interval (e.g., if - the listen interval is 4 and the DTIM period is 2, - the device wakes up every fourth beacon) - STICK_DTIM = 3 - Device attempt to receive all CAB traffic (e.g., if - the DTIM period is 2 and the listen interval is 4, - the device wakes up every second beacon) - } WMI_POWER_PARAMS_CMD - -Command Parameters - See command parameters - -Reset Values - idle_period - 200 ms - - pspoll_number - = 1 - - dtim_policy - = NORMAL_DTIM - -Restrictions - None - -===================================================================== - - -Name - SET_POWERSAVE_PARAMS - -Synopsis - Set the two AR6000 power save timers (PS-POLL timer and APSD trigger timer) and - the two ASPD TIM policies - -Command - wmiconfig eth1--psparams --psPollTimer=<psPollTimeout in ms> - --triggerTimer=<triggerTimeout in ms> --apsdTimPolicy=<ignore/ - adhere> --simulatedAPSDTimPolicy=<ignore/adhere> - -Command Parameters - typedef struct { - A_UINT16 psPollTimeout; - Timeout (in ms) after sending PS-POLL; the - AR6000 device sleeps if it does not receive a - data packet from the AP - - A_UINT16 triggerTimeout; - Timeout (in ms) after sending a trigger; the - device sleeps if it does not receive any data - or null frame from the AP - - APSD_TIM_POLICY apsdTimPolicy; - TIM behavior with queue APSD enabled - - APSD_TIM_POLICY simulatedAPSD - - TimPolicy; - TIM behavior with simulated APSD - enabled - - typedef enum { - IGNORE_TIM_ALL_QUEUES_APSD = 0, - PROCESS_TIM_ALL_QUEUES_APSD = 1, - IGNORE_TIM_SIMULATED_APSD = 2, - POWERSAVE_TIMERS_POLICY = 3, - } APSD_TIM_POLICY; - -Command Values - None - -Reset Values - psPollTimeout is 50 ms; triggerTimeout is 10 ms; - apsdTimPolicy = IGNORE_TIM_ALL_QUEUES_APSD; - simulatedAPSDTimPolicy = POWERSAVE_TIMERS_POLICY - -Restrictions - When this command is used, all parameters must be set; this command does not - allow setting only one parameter. - -===================================================================== - - -Name - SET_PROBED_SSID - -Synopsis - The host uses this command to provide a list of up to MAX_PROBED_SSID_INDEX - (six) SSIDs that the AR6000 device should actively look for. It lists the active SSID - table. By default, the device actively looks for only the SSID specified in the - “CONNECT_CMD” command, and only when the regulatory domain allows active - probing. With this command, specified SSIDs are probed for, even if they are hidden. - -Command - wmiconfig eth1 --ssid=<ssid> [--num=<index>] - -Command Parameters - { - A_UINT8 numSsids - A number from 0 to - MAX_PROBED_SSID_INDEX indicating - the active SSID table entry index for this - command (if the specified entry index - already has an SSID, the SSID specified in - this command replaces it) - - WMI_PROBED_SSID_INFO probedSSID[1] - } WMI_PROBED_SSID_CMD - - { - A_UINT8 flag - WMI_SSID_FLAG indicates the current - entry in the active SSID table - A_UINT8 ssidLength - Length of the specified SSID in bytes. - If = 0, the entry corresponding to the - index is erased - A_UINT8 ssid[32] - SSID string actively probed for when - permitted by the regulatory domain - } WMI_PROBED_SSID_INFO - -Command Values - WMI_SSID_FLAG - { - DISABLE_SSID_FLAG = 0 - Disables entry - SPECIFIC_SSID_FLAG = 1 - Probes specified SSID - ANY_SSID_FLAG = 2 - Probes for any SSID - } WMI_SSID_FLAG - -Reset Value - The entries are unused. - -Restrictions - None - -===================================================================== - - -Name - SET_REASSOC_MODE - -Synopsis - Specify whether the disassociated frame should be sent or not upon reassociation. - -Command - wmiconfig eth1 --setreassocmode <mode> - -Command Parameters - UINT8 mode - -Command Values - mode - = 0x00 - Send disassoc to a previously connected AP - upon reassociation - = 0x01 - Do not send disassoc to previously connected - AP upon reassociation - -Reset Values - None defined - -Restrictions - None - - -===================================================================== - -Name - SET_RETRY_LIMITS - -Synopsis - Allows the host to influence the number of times that the AR6000 device should - attempt to send a frame before they give up. - -Command - wmiconfig --setretrylimits <frameType> <trafficClass> <maxRetries> - <enableNotify> - -Command Parameters - { - UINT8 frameType - A WMI_FRAMETYPE specifying - which type of frame is of interest. - UINT8 trafficClass - Specifies a traffic class (see - “CREATE_PSTREAM”). This - parameter is only significant when - frameType = DATA_FRAMETYPE. - UINT8 maxRetries - Maximum number of times the - device attempts to retry a frame Tx, - ranging from WMI_MIN_RETRIES - (2) to WMI_MAX_RETRIES (15). If - the special value 0 is used, - maxRetries is set to 15. - A_UINT8 enableNotify - Notify when enabled - } WMI_RETRY_LIMIT_INFO - - { - A_UINT8 numEntries - WMI_RETRY_LIMIT_INFO retryLimitInfo[1] - } WMI_SET_RETRY_LIMITS_CMD - -Command Values - { - MGMT_FRAMETYPE = 0 Management frame - CONTROL_FRAMETYPE = 1 Control frame - DATA_FRAMETYPE = 2 Data frame - } WMI_FRAMETYPE - -Reset Values - Retries are set to 15 - -Restrictions - None - -===================================================================== - - -Name - SET_ROAM_CTRL - -Synopsis - Affects how the AR6000 device selects a BSS. The host uses this command to set and - enable low RSSI scan parameters. The time period of low RSSI background scan is - mentioned in scan period. Low RSSI scan is triggered when the current RSSI - threshold (75% of current RSSI) is equal to or less than scan threshold. - - Low RSSI roam is triggered when the current RSSI threshold falls below the roam - threshold and roams to a better AP by the end of the scan cycle. During Low RSSI - roam, if the STA finds a new AP with an RSSI greater than roam RSSI to floor, during - scan, it roams immediately to it instead of waiting for the end of the scan cycle. See - also “Scan and Roam” on page C-1. - -Command - wmiconfig --roam <roamctrl> <info>, where info is <scan period> - <scan threshold> <roam threshold> <roam rssi floor> - -Command Parameters - A_UINT8 roamCtrlType; - -Command Values - WMI_FORCE_ROAM = 1 - Roam to the specified BSSID - - WMI_SET_ROAM_MODE = 2 - Default, progd bias, no roam - - WMI_SET_HOST_BIAS = 3 - Set the host bias - - WMI_SET_LOWRSSI_SCAN_PARAMS = 4 - Info parameters - - A_UINT8 bssid[ATH_MAC_LEN]; - WMI_FORCE_ROAM - - A_UINT8 roamMode; - WMI_SET_ROAM_MODE - - A_UINT8 bssBiasInfo; - WMI_SET_HOST_BIAS - - A_UINT16 lowrssi_scan_period; - WMI_SET_LOWRSSI_SCAN_PARAMS - - A_INT16 - lowrssi_scan_threshold; - WMI_SET_LOWRSSI_SCAN_PARAMS - - A_INT16 lowrssi_roam_threshold; - WMI_SET_LOWRSSI_SCAN_PARAMS - - A_UINT8 roam_rssi_floor; - WMI_SET_LOWRSSI_SCAN_PARAMS - -Reset Value - None defined (default lowrssi scan is disabled. Enabled only when scan period is set.) - -Restrictions - None - -===================================================================== - - -Name - SET_RTS - -Synopsis - Decides when RTS should be sent. - -Command - wmiconfig eth1 --setRTS <pkt length threshold> - -Command Parameters - A_UINT16 - threshold; - Command parameter threshold in bytes. An RTS is - sent if the data length is more than this threshold. - The default is to NOT send RTS. - -Command Values - None - -Reset Value - Not to send RTS. - -Restrictions - None - - -===================================================================== - -Name - SET_SCAN_PARAMS - -Synopsis - The host uses this command to set the AR6000 scan parameters, including the duty - cycle for both foreground and background scanning. Foreground scanning takes - place when the AR6000 device is not connected, and discovers all available wireless - networks to find the best BSS to join. Background scanning takes place when the - device is already connected to a network and scans for potential roaming candidates - and maintains them in order of best to worst. A second priority of background - scanning is to find new wireless networks. - - The device initiates a scan when necessary. For example, a foreground scan is always - started on receipt of a “CONNECT_CMD” command or when the device cannot find - a BSS to connect to. Foreground scanning is disabled by default until receipt of a - CONNECT command. Background scanning is enabled by default and occurs every - 60 seconds after the device is connected. - - The device implements a binary backoff interval for foreground scanning when it - enters the DISCONNECTED state after losing connectivity with an AP or when a - CONNECT command is received. The first interval is ForegroundScanStartPeriod, - which doubles after each scan until the interval reaches ForegroundScanEndPeriod. - If the host terminates a connection with DISCONNECT, the foreground scan period - is ForegroundScanEndPeriod. All scan intervals are measured from the time a full - scan ends to the time the next full scan starts. The host starts a scan by issuing a - “START_SCAN” command. See also “Scan and Roam” on page C-1. - -Command - wmiconfig eth1 --scan --fgstart=<sec> --fgend=<sec> --bg=<sec> -- - act=<msec> --pas=<msec> --sr=<short scan ratio> --scanctrlflags - <connScan> <scanConnected> <activeScan> <reportBSSINFO> - -Command Parameters - UINT16 fgStartPeriod - First interval used by the device when it - disconnects from an AP or receives a - CONNECT command, specified in seconds (0– - 65535). If = 0, the device uses the reset value. - If = 65535, the device disables foreground - scanning. - - UINT16 fgEndPeriod - The maximum interval the device waits between - foreground scans specified in seconds (from - ForegroundScanStartPeriod to 65535). If = 0, the - device uses the reset value. - - UINT16 bgScanPeriod - The period of background scan specified in - seconds (0–65535). By default, it is set to the reset - value of 60 seconds. If 0 or 65535 is specified, the - device disables background scanning. - - UINT16 maxactChDwellTime - The period of time the device stays on a - particular channel while active scanning. It is - specified in ms (10–65535). If the special value of - 0 is specified, the device uses the reset value. - - UINT16 PasChDwellTime - The period of time the device remains on a - particular channel while passive scanning. It is - specified in ms (10–65535). If the special value of - 0 is specified, the device uses the reset value. - - UINT8 shortScanRatio - Number of short scans to perform for each - long scan. - - UINT8 scanCtrlFlasgs - - UINT16 minactChDwellTime - Specified in ms - - UINT32 maxDFSchActTime - The maximum time a DFS channel can stay - active before being marked passive, specified in - ms. - -Command Values - None - -Reset Values - ForegroundScanStart -Period - 1 sec - - ForegroundScanEndPeriod - 60 sec - - BackgroundScanPeriod - 60 sec - - ActiveChannelDwellTime - 105 ms - -===================================================================== - - -Name - SET_TKIP_COUNTERMEASURES - -Synopsis - The host issues this command to tell the target whether to enable or disable TKIP - countermeasures. - -Command - TBD - -Command Parameters - UINT8 WMI_TKIP_CM_ENABLE - Enables the countermeasures - - - UINT8 TKIP_CM_DISABLE - Disables the countermeasures - -Command Values - None - -Reset Values - By default, TKIP MIC reporting is disabled - -Restrictions - None - -===================================================================== - - -Name - SET_TX_PWR - -Synopsis - The host uses this command to specify the Tx power level of the AR6000. Cannot be - used to exceed the power limit permitted by the regulatory domain. The maximum - output power is limited in the chip to 31.5 dBm; the range is 0 – 31.5 dbm. - -Command - wmiconfig --power <dbM> - -Command Parameters - UINT8 dbM - The desired Tx power specified in dbM. - If = 0, the device chooses the maximum - permitted by the regulatory domain. - -Command Values - None - -Reset Values - The maximum permitted by the regulatory domain - -Restrictions - None - -See Also - “GET_TX_PWR” - - -===================================================================== - -Name - SET_VOICE_PKT_SIZE - -Synopsis - If an AP does not support WMM, it has no way to differentiate voice from data. - Because the voice packet is typically small, packet in size less than voicePktSize are - assumed to be voice, otherwise it is treated as data. - -Command - wmiconfig eth1 --setVoicePktSize <size-in-bytes> - -Command Parameters - UINT16 voicePktSize - Packet size in octets - -Command Values - None - -Reset Values - voicePktSize default is 400 bytes - -Restrictions - No effect if WMM is unavailable - - -===================================================================== - -Name - SET_WMM - -Synopsis - Overrides the AR6000 device WMM capability - -Command - wmiconfig eth1 --setwmm <enable> - -Command Parameters - WMI_WMM_ENABLED - Enables WMM - - WMI_WMM_DISABLED - Disables WMM support - -Command Values - 0 = disabled - 1 = enabled - -Reset Value - WMM Disabled - -Restrictions - None - - -===================================================================== - -Name - SET_WMM_TXOP - -Synopsis - Configures TxOP Bursting when sending traffic to a WMM capable AP - -Command - wmiconfig eth1 --txopbursting <burstEnable> - - <burstEnable> - = 0 - Disallow TxOp bursting - - = 1 - Allow TxOp bursting - -Command Parameters - txopEnable - = WMI_TXOP_DISABLED - Disabled - - = WMI_TXOP_ENABLED - Enabled - -Command Values - txopEnable - = 0 Disabled - - = 1 Enabled - -Reset Value - Bursting is off by default - -Restrictions - None - -===================================================================== - - -Name - SET_WOW_MODE - -Synopsis - The host uses this command to enable or disable the WoW mode. When WoW mode - is enabled and the host is asleep, pattern matching takes place at the target level. - Only packets that match any of the pre-specified WoW filter patterns, will be passed - up to the host. The host will also be woken up by the target. Packets which do not - match any of the WoW patterns are discarded. - -Command - wmiconfig –setwowmode <enable/disable> - -Command Parameters - A_BOOL enable_wow - Enable or disable WoW: - -Command Values - = 0 - Disable WoW - - = 1 - Enable WoW - -Reset Value - None defined (default WoW mode is disabled). - -Restrictions - None - -See Also - “GET_WOW_LIST” - - -===================================================================== - -Name - SET_WSC_STATUS - -Synopsis - The supplicant uses this command to inform the target about the status of the WSC - registration protocol. During the WSC registration protocol, a flag is set so the target - bypasses some of the checks in the CSERV module. At the end of the registration, this - flag is reset. - -Command - N/A - -Command Parameters - A_BOOL status - = 1 WSC registration in progress - = 0 WSC protocol not running - -Reply Parameters - None - -Reset Value - None defined (default = 0) - -Restrictions - None - - -===================================================================== - -Name - SNR_THRESHOLD_PARAMS - -Synopsis - Configures how the AR6000 device monitors and reports SNR of the connected BSS, - used as a link quality metric. - -Command - --snrThreshold <weight> <upper_threshold_1> ... - <upper_threshold_4> <lower_threshold_1> ... <lower_threshold_4> - <pollTimer> - -Command Parameters - <weight> - Share with rssiThreshold. Range in [1, 16], used - in the formula to calculate average RSSI - - <upper_threshold_x> - Above thresholds expressed in db, in ascending - order - - <lower_threshold_x> - Below thresholds expressed in db, in ascending - order - - <pollTimer> - The signal strength sampling frequency in - seconds. If polltime = 0, signal strength - sampling is disabled - -Command Values - None - -Reset Value - None defined - -Restrictions - None - -===================================================================== - - -Name - START_SCAN - -Synopsis - The host uses this command to start a long or short channel scan. All future scans are - relative to the time the AR6000 device processes this command. The device performs - a channel scan on receipt of this command, even if a scan was already in progress. - The host uses this command when it wishes to refresh its cached database of wireless - networks. The isLegacy field will be removed (0 for now) because it is achieved by - setting CONNECT_PROFILE_MATCH_DONE in the CONNECT command. See also - “Scan and Roam” - -Command - wmiconfig eth1 --startscan <scan type> <forcefgscan> 0 - <homeDwellTime> <forceScanInterval> - -Command Parameters - UINT8 scanType - WMI_SCAN_TYPE - -Command Values - { - WMI_LONG_SCAN =0x0 - Requests a full scan - WMI_SHORT_SCAN =0x1 - Requests a short scan - } WMI_SCAN_TYPE - - A_BOOL forceFgScan - forceFgScan - = 0 - Disable the foreground scan - - forceFgScan - = 1 - Forces a foreground scan - - A_UINT32 homeDwellTime - Maximum duration in the home - channel (in ms) - - A_UINT32 forceScanInterval - Time interval between scans (in ms) - - A_UINT32 scanType - WMI_SCAN_TYPE - -Reset Value - Disable forcing foreground scan - -Restrictions - isLegacy field will no longer be supported (pass as 0 for now) - - -===================================================================== - -Name - SYNCHRONIZE - -Synopsis - The host uses this command to force a synchronization point between the command - and data paths - -Command - TBD - -Command Parameters - None - - - -Command Values - None - - - -Reset Values - None - - - -Restrictions - None - - -===================================================================== - -Name - TARGET_ERROR_REPORT_BITMASK - -Synopsis - Allows the host to control “ERROR_REPORT” events from the AR6000 device. - - If error reporting is disabled for an error type, a count of errors of that type is - maintained by the device. - - If error reporting is enabled for an error type, an “ERROR_REPORT” event is - sent when an error occurs and the error report bit is cleared. - - Error counts for each error type are available through the “GET_TARGET_STATS” - command. - -Command - wmiconfig eth1 --setErrorReportingBitmask - -Command Parameters - UINT32 bitmask - Represents the set of - WMI_TARGET_ERROR_VAL error types - enabled for reporting - -Command Values - { - WMI_TARGET_PM_ERR_FAIL = 0x00000001 - Power save fails (only two cases): - Retry out of null function/QoS null - function to associated AP for PS - indication' - Host changes the PS setting when - STA is off home channel - - WMI_TARGET_KEY_NOT_FOUND = 0x00000002 - No cipher key - WMI_TARGET_DECRYPTION_ERR = 0x00000004 - Decryption error - WMI_TARGET_BMISS = 0x00000008 - Beacon miss - WMI_PSDISABLE_NODE_JOIN = 0x00000010 - A non-PS-enabled STA joined the - PS-enabled network - WMI_TARGET_COM_ERR = 0x00000020 - Host/target communication error - WMI_TARGET_FATAL_ERR = 0x00000040 - Fatal error - } WMI_TARGET_ERROR_VAL - -Reset Values - Bitmask is 0, and all error reporting is disabled - -Restrictions - None - - -===================================================================== -WMI Events - -Event - Description - Page - - -BSSINFO - Contains information describing BSSs collected during a scan - -CAC_EVENTID - Indicates signalling events in admission control - -CMDERROR - The AR6000 device encounters an error while attempting to process - a command - -CONNECT - The device has connected to a wireless network - -DISCONNECT - The device lost connectivity with a wireless network - -ERROR_REPORT - An error has occurred for which the host previously requested - notification with the command - “TARGET_ERROR_REPORT_BITMASK” - -EXTENSION - WMI extension event - -GET_PMKID_LIST_EVENT - Created in response to a “GET_PMKID_LIST_CMD” command - -GET_WOW_LIST_EVENT - Response to the wmiconfig “GET_WOW_LIST” command to - retrieve the configured WoW patterns - -NEIGHBOR_REPORT - Neighbor APs that match the current profile were detected - -OPT_RX_FRAME_EVENT - (Special feature) informs the host of the reception of a special frame - -PSTREAM_TIMEOUT - A prioritized stream has been idle for a specified interval - -READY - The AR6000 device is ready to accept commands - -REGDOMAIN - The regulatory domain has changed - -REPORT_ROAM_DATA_EVENT - Reports the roam time calculations made by the device - (generated with a special build) - — - -REPORT_STATISTICS - Reply to a “GET_TARGET_STATS” command - -ROAM_TBL_EVENT - Reports the roam table - -RSSI_THRESHOLD - Signal strength from the connected AP has crossed the threshold - defined in the “RSSI_THRESHOLD_PARAMS” command - -SCAN_COMPLETE_EVENT - A scan has completed (added status SCAN_ABORTED in release 2.0) - -TEST_EVENT - Event generated by the TCMD - -TKIP_MICERROR - TKIP MIC errors were detected - -===================================================================== - -Name - BSSINFO - -Synopsis - Contains information describing one or more BSSs as collected during a scan. - Information includes the BSSID, SSID, RSSI, network type, channel, supported rates, - and IEs. BSSINFO events are sent only after the device receives a beacon or probe- - response frame that pass the filter specified in the “SET_BSS_FILTER” command. - BSSINFO events consist of a small header followed by a copy of the beacon or probe - response frame. The 802.11 header is not present. For formats of beacon and probe- - response frames please consult the IEEE 802.11 specification. - - The beacons or probe responses containing the IE specified by the - WMI_BSS_FILTER_CMD are passed to the host through the - WMI_BSSINFO_EVENT. The event carries a 32-bit bitmask that indicates the IEs that - were detected in the management frame. The frame type field has been extended to - indicate action management frames. This would be helpful to route these frames - through the same event mechanism as used by the beacon processing function. - - If the bssFilter in the SET_BSS_FILTER matches, then the ieMask is not relevant - because the BSSINFO event is sent to the host. If the bssFilter doesnot match in the - beacons/probe respones, then the ieMask match dictates whether the BSSINFO - event is sent to the host. In the case of action management frames, the ieMask is the - filter that is applied. - -Event ID - 0x1004 - -Event Parameters - typedef struct { - A_UINT16 channel; - Specifies the frequency (in MHz) where the - frame was received - A_UINT8 frameType; - A WMI_BI_FTYPE value - A_UINT8 snr; - A_INT16 rssi; - Indicates signal strength - A_UINT8 bssid[ATH_MAC_LEN]; - A_UINT32 ieMask; - } _ATTRIB_PACK_WMI_BSS_INFO_HDR; - - Beacon or Probe Response Frame - -Event Values - { - BEACON_FTYPE = 0x1 - Indicates a beacon frame - PROBERESP_FTYPE - Indicates a probe response frame - ACTION_MGMT_FTYPE - } WMI_BI_FTYPE - -===================================================================== - -Name - CAC_EVENTID - -Synopsis - Indicates signalling events in admission control. Events are generated when - admission is accepted, rejected, or deleted by either the host or the AP. If the AP does - not respond to an admission request within a timeout of 500 ms, an event is - generated to the host. - -Event ID - 0x1011 - -Event Parameters - UINT8 - ac - Access class pertaining to the -signalling - - UINT8 cac_indication - Type of indication; indications are - listed in WMI_CAC_INDICATION - - UINT8 statusCode - AP response status code for a - request - - UINT8 tspecSuggestion[63] - Suggested TSPEC from AP - -Event Values - { - CAC_INDICATION_ADMISSION = 0x00 - CAC_INDICATION_ADMISSION_RESP = 0x01 - CAC_INDICATION_DELETE = 0x02 - CAC_INDICATION_NO_RESP = 0x03 - } WMI_CAC_INDICATION - - -===================================================================== - - -Name - CMDERROR - -Synopsis - Indicates that the AR6000 device encountered an error while attempting to process a - command. This error is fatal and indicates that the device requires a reset. - -Event ID - 0x1005 - -Event Parameters - UINT16 commandId - Corresponds to the command which generated - the error - UINT8 errorCode - A WMI_ERROR_CODE value - -Event Values - { - INVALID_PARAM = 1 - Invalid parameter - ILLEGAL_STATE = 2 - Illegal state - INTERNAL_ERROR = 3 - Internal Error - All other values reserved - } WMI_ERROR_CODE - - -===================================================================== - - -Name - CONNECT - -Synopsis - Signals that the AR6000 connected to a wireless network. Connection occurs due to a - “CONNECT” command or roaming to a new AP. For infrastructure networks, shows - that the AR6000 successfully performed 802.11 authentication and AP association. - -Event ID - 0x1002 - -Event Parameters - UINT16 channel - Channel frequency (in MHz) of the network the - AR6000 are connected to - - UINT8 bssid[6] - MAC address of the AP the AR6000 are - connected to or the BSSID of the ad hoc - network - - UINT16 listenInterval - Listen interval (in Kms) that the AR6000 are - using - - UINT 8 beaconIeLen - Length (in bytes) of the beacon IEs - - UINT8 assocInfo - Pointer to an array containing beacon IEs, - followed first by association request IEs then by - association response IEs - - UINT8 assocReqLen - Length (in bytes) of the assocReqIEs array - - UINT8 assocRespLen - Length (in bytes) of the assocRespIEs array - -Event Values - None defined - -===================================================================== - - -Name - DISCONNECT - -Synopsis - Signals that the AR6000 device lost connectivity with the wireless network. - DISCONENCT is generated when the device fails to complete a “CONNECT” - command or as a result of a transition from a connected state to disconnected state. - - After sending the “DISCONNECT” event the device continually tries to re-establish - a connection. A LOST_LINK occurs when STA cannot receive beacons within the - specified time for the SET_BMISS_TIME command. - -Event ID - 0x1003 - -Event Parameters - UINT8 disconnect - Reason - A WMI_DISCONNECT_REASON value - - UINT8 bssid[6] - Indicates which BSS the device was connected to - - UINT8 assocRespLen - Length of the 802.11 association response frame - that triggered this event, or 0 if not applicable - - UINT8 assocInfo[assocRespLen] - Copy of the 802.11 association response frame - -Event Values - { - NO_NETWORK_AVAIL =0x01 - Indicates that the device was unable to - establish or find the desired network - LOST_LINK =0x02 - Indicates the devices is no longer receiving - beacons from the BSS it was previously - connected to - - DISCONNECT_CMD =0x03 - Indicates a “DISCONNECT” command was - processed - BSS_DISCONNECTED =0x04 - Indicates the BSS explicitly disconnected the - device. Possible mechanisms include the AP - sending 802.11 management frames - (e.g., disassociate or deauthentication - messages). - AUTH_FAILED =0x05 - Indicates that the device failed 802.11 - authentication with the BSS - ASSOC_FAILED =0x06 - Indicates that the device failed 802.11 - association with the BSS - NO_RESOURCES_AVAIL =0x07 - Indicates that a connection failed because the - AP had insufficient resources to complete the - connection - CSERV_DISCONNECT =0x08 - Indicates that the device’s connection services - module decided to disconnect from a BSS, - which can happen for a variety of reasons (e.g., - the host marks the current connected AP as a - bad AP). - INVALID_PROFILE =0x0A - Indicates that an attempt was made to - reconnect to a BSS that no longer matches the - current profile - All other values are reserved - } WMI_DISCONNECT_REASON - - -===================================================================== - - -Name - ERROR_REPORT - -Synopsis - Signals that a type of error has occurred for which the host previously requested - notification through the “TARGET_ERROR_REPORT_BITMASK” command. - -Event ID - 0x100D - -Event Parameters - UINT32 errorVal - WMI_TARGET_ERROR_VAL value. See - “TARGET_ERROR_REPORT_BITMASK”. - -Event Values - errorVal - = 0x00000001 - Power save fails - - = 0x00000002 - No cipher key - - = 0x00000004 - Decryption error - - = 0x00000008 - Beacon miss - - = 0x00000010 - A non-power save disabled node has joined - the PS-enabled network - - -===================================================================== - - -Name - EXTENSION - -Synopsis - The WMI is used mostly for wireless control messages to a wireless module that - apply to wireless module management regardless of the target platform - implementation. However, some events peripherally related to wireless management - are desired during operation. These wireless extension events may be platform- - specific or implementation-dependent. See “WMI Extension Commands” - - -Event ID - 0x1010 - - -===================================================================== - - -Name - GET_PMKID_LIST_EVENT - -Synopsis - Generated by firmware in response to a “GET_PMKID_LIST_CMD” command. - -Event Parameters - typedef struct { - A_UINT32 numPMKID; - Contains the number of PMKIDs in the reply - WMI_PMKID pmkidList[1]; - } __ATTRIB_PACK WMI_PMKID_LIST_REPLY; - -Event Values - None - - -===================================================================== - - -Name - GET_WOW_LIST_EVENT - -Synopsis - Response to the wmiconfig –getwowlist command to retrieve the configured Wake on - Wireless patterns - -Event ID - 0x10018 - -Event Parameters - { - - A_UINT8 num_filters - Total number of patterns in the list - A_UINT8 this_filter_num - The filter number - A_UINT8 wow_mode - Shows whether WoW is enabled or disabled - A_UINT8 host_mode - Shows whether the host is asleep or awake - WOW_FILTER wow_filters[1] - List of WoW filters (pattern and mask data bytes) - } WMI_GET_WOW_LIST_REPLY; - - { - Each wow_filter_list element shows: - A_UINT8 wow_valid_filter - Whether the filter is valid - A_UINT8 wow_filter_list_id - Filter List ID (23 = default) - A_UINT8 wow_filter_size - Size in bytes of the filter - A_UINT8 wow_filter_offset - Offset of the pattern to search in the data packet - A_UINT8 wow_filter_mask[MASK_SIZE] - The mask to be applied to the pattern - A_UINT8 wow_filter_pattern[WOW_PATTERN_SIZE] - The pattern that to match to wake up the host - } WOW_FILTER - -Event Values - None - -===================================================================== - - - -Name - NEIGHBOR_REPORT - -Synopsis - Indicates the existence of neighbor APs that match the current profile. The host uses - this event to populate the PMKID cache on the AR6000 and/or to perform - preauthentication. This event is only generated in infrastructure mode. - - A total of numberOfAps pairs of bssid/bssFlags exist, one pair for each AP. - -Event ID - 0x1008 - -Event Parameters - UINT8 numberOfAps - The number of APs reported about in - this event - { - UINT8 bssid[6] - MAC address of a neighbor AP - UINT8 bssFlags - A WMI_BSS_FLAGS value - }[numberOfAps] - - -Event Values - { - WMI_DEFAULT_BSS_FLAGS = 0 - Logical OR of 1 or more - WMI_BSS_FLAGS - WMI_PREAUTH_CAPABLE_BSS - = 1 - Indicates that this AP is capable of - preauthentication - WMI_PMKID_VALID_BSS - = 2 - Indicates that the AR6000 have a - valid pairwise master key for this AP - } WMI_BSS_FLAGS - - -===================================================================== - - - -Name - OPT_RX_FRAME_EVENT - -Synopsis - Special feature, informs host of the reception of a special frame. - -Event ID - 0x100E - -Event Parameters - { - A_UINT16 channel; - A_UINT8 frameType; - A_INT8 snr; - A_UINT8 srcAddr[ATH_MAC_LEN]; - A_UINT8 bssid[ATH_MAC_LEN]; - }WMI_OPT_RX_INFO_HDR - -Event Values - None - -===================================================================== - - - -Name - PSTREAM_TIMEOUT - -Synopsis - Indicates that a priority stream that got created as a result of priority-marked data - flow (priority marked in IP TOS) being idle for the default inactivity interval period - (specified in the “CREATE_PSTREAM” command) used for priority streams created - implicitly by the driver. This event is not indicated for user-created priority streams. - User-created priority streams exist until the users delete them explicitly. They do not - timeout due to data inactivity. - -Event ID - 0x1007 - -Event Parameters - A_UINT8 - trafficClass - Indicated the traffic class of priority - stream that timed out - -Event Values - { - WMM_AC_BE = 0 - Best effort - WMM_AC_BK = 1 - Background - WMM_AC_VI = 2 - Video - WMM_AC_VO = 3 - Voice - } TRAFFIC CLASS - - -===================================================================== - -Name - READY - -Synopsis - Indicates that the AR6000 device is prepared to accept commands. It is sent once after - power on or reset. It also indicates the MAC address of the device. - -Event ID - 0x1001 - -Event Parameters - UINT8 macAddr[6] - Device MAC address - UINT8 phyCapability - A WMI_PHY_CAPABILITY value. Indicates the - capabilities of the device wireless module’s radio - -Event Values - { - WMI_11A_CAPABILITY = 1 - WMI_11G_CAPABILITY = 2 - WMI_11AG_CAPABILITY = 3 - } WMI_PHY_CAPABILITY - - -===================================================================== - -Name - REGDOMAIN - -Synopsis - Indicates that the regulatory domain has changed. It initially occurs when the - AR6000 device reads the board data information. The regulatory domain can also - change when the device is a world-mode SKU. In this case, the regulatory domain is - based on the country advertised by APs per the IEEE 802.11d specification. A - potential side effect of a regulatory domain change is a change in the list of available - channels. Any channel restrictions that exist as a result of a previous - “SET_CHANNEL_PARAMETERS” command are lifted. - -Event ID - 0x1006 - -Event Parameters - UINT32 regDomain - The range of 0x0000 – 0x00FF - corresponds to an ISO country code. - - Other regCodes are reserved for world - mode settings and specific regulatory - domains. - -Event Values - None - - -===================================================================== - - - -Name - REPORT_STATISTICS - -Synopsis - A reply to a “GET_TARGET_STATS” command. - -Event ID - 0x100B - -Event Parameters - When the statistics are sent to the host, the AR6001 clear them so that a new set of - statistics are collected for the next report. - - UINT32 tx_packets - UINT32 tx_bytes - UINT32 tx_unicast_pkts - UINT32 tx_unicast_bytes - UINT32 tx_multicast_pkts - UINT32 tx_multicast_bytes - UINT32 tx_broadcast_pkts - UINT32 tx_broadcast_bytes - UINT32 tx_rts_success_cnt - UINT32 tx_packet_per_ac[4] - Tx packets per AC: [0] = BE, [1] = BK, - [2] = VI, [3] = VO - UINT32 tx_errors - Number of packets which failed Tx, due - to all failures - ... REPORT_STATISTICS, continued - UINT32 tx_failed_cnt - Number of data packets that failed Tx - UINT32 tx_retry_cnt - Number of Tx retries for all packets - UINT32 tx_rts_fail_cnt - Number of RTS Tx failed count - UINT32 rx_packets - UINT32 rx_bytes - UINT32 rx_unicast_pkts - UINT32 rx_unicast_bytes - UINT32 rx_multicast_pkts - UINT32 rx_multicast_bytes - UINT32 rx_broadcast_pkts - UINT32 rx_broadcast_bytes - UINT32 rx_fragment_pkt - Number of fragmented packets received - UINT32 rx_errors - Number of Rx errors due to all failures - UINT32 rx_crcerr - Number of Rx errors due to CRC errors - UINT32 rx_key_cache_miss - Number of Rx errors due to a key not - being plumbed - UINT32 rx_decrypt_err - Number of Rx errors due to decryption - failure - UINT32 rx_duplicate_frames - Number of duplicate frames received - UINT32 tkip_local_mic_failure - Number of TKIP MIC errors detected - UINT32 tkip_counter_measures_invoked - Number of times TKIP countermeasures - were invoked - UINT32 tkip_replays - Number of frames that replayed a TKIP - encrypted frame received earlier - UINT32 tkip_format_errors - Number of frames that did not conform - to the TKIP frame format - UINT32 ccmp_format_errors - Number of frames that did not conform - to the CCMP frame format - UINT32 ccmp_replays - Number of frames that replayed a CCMP - encrypted frame received earlier - UINT32 power_save_failure_cnt - Number of failures that occurred when - the AR6001 could not go to sleep - UINT32 cs_bmiss_cnt - Number of BMISS interrupts since - connection - UINT32 cs_lowRssi_cnt - Number of the times the RSSI went below - the low RSSI threshold - UINT16 cs_connect_cnt - Number of connection times - UINT16 cs_disconnect_cnt - Number of disconnection times - UINT8 cs_aveBeacon_rssi - The current averaged value of the RSSI - from the beacons of the connected BSS - UINT8 cs_lastRoam_msec - Time that the last roaming took, in ms. - This time is the difference between - roaming start and actual connection. - -Event Values - None defined - - -===================================================================== - -Name - ROAM_TBL_EVENT - -Synopsis - Reports the roam table, which contains the current roam mode and this information - for every BSS: - -Event ID - 0x100F - -Event Parameters - A_UINT8 bssid[ATH_MAC_LEN]; - BSSID - A_UINT8 rssi - Averaged RSSI - A_UINT8 rssidt - Change in RSSI - A_UINT8 last_rssi - Last recorded RSSI - A_UINT8 roam_util - Utility value used in roaming decision - A_UINT8 util - Base utility with the BSS - A_UINT8 bias - Host configured for this BSS - -Event Values - roamMode - Current roam mode - - = 1 - RSSI based roam - - = 2 - Host bias-based roam - - = 3 - Lock to the current BSS - - = 4 - Autonomous roaming disabled - - -===================================================================== - -Name - RSSI_THRESHOLD - -Synopsis - Alerts the host that the signal strength from the connected AP has crossed a - interesting threshold as defined in a previous “RSSI_THRESHOLD_PARAMS” - command. - -Event ID - 0x100C - -Event Parameters - UINT8 range - A WMI_RSSI_THRESHOLD_VAL - value, which indicates the range of - the average signal strength - -Event Values - { - WMI_RSSI_LOWTHRESHOLD_BELOW_LOWERVAL = 1 - WMI_RSSI_LOWTHRESHOLD_LOWERVAL = 2 - WMI_RSSI_LOWTHRESHOLD_UPPERVAL = 3 - WMI_RSSI_HIGHTHRESHOLD_LOWERVAL = 4 - WMI_RSSI_HIGHTHRESHOLD_HIGHERVAL = 5 - } WMI_RSSI_THRESHOLD_VAL - - -===================================================================== - -Name - SCAN_COMPLETE_EVENT - -Synopsis - Indicates the scan status. if the Scan was not completed, this event is generated with - the status A_ECANCELED. - -Event ID - 0x100A - -Event Parameters - A_UINT8 scanStatus - -Event Values - { - #define SCAN_ABORTED 16 - #define SCAN_COMPLETED 0 - A_UINT8 scanStatus - A_OK or A_ECANCELED - } WMI_SCAN_COMPLETE_EVENT; - - -===================================================================== - -Name - TEST_EVENT - -Synopsis - The TCMD application uses a single WMI event (WMI_TEST_EVENTID) to - communicate events from target to host. The events are parsed by the TCMD - application and WMI layer is oblivious of it. - -Event ID - 0x1016 - -Event Parameters - WMI_TEST_EVENTID - - -Event Values - None - - -===================================================================== - - - -Name - TKIP_MICERR - -Synopsis - Indicates that TKIP MIC errors were detected. - -Event ID - 0x1009 - -Event Parameters - UINT8 keyid - Indicates the TKIP key ID - - UINT8 ismcast - 0 = Unicast - 1 = Multicast - -Event Values - See event parameters - -===================================================================== - -WMI Extension Commands - -The WMI EXTENSION command is used to multiplex a collection of -commands that: - - Are not generic wireless commands - May be implementation-specific - May be target platform-specific - May be optional for a host implementation - - An extension command is sent to the AR6000 targets like any other WMI -command message and uses the WMI_EXTENSION. The first field of the -payload for this EXTENSION command is another commandId, sometimes -called the subcommandId, which indicates which extension command is -being used. A subcommandId-specific payload follows the subcommandId. - -All extensions (subcommandIds) are listed in the header file include/wmix.h. -See also “WMI Extension Events” on page B-58. - - -WMI Extension Commands - - -GPIO_INPUT_GET - Read GPIO pins configured for input - -GPIO_INTR_ACK - Acknowledge and re-arm GPIO interrupts reported earlier - -GPIO_OUTPUT_SET - Manage output on GPIO pins configured for output - -GPIO_REGISTER_GET - Read an arbitrary GPIO register - -GPIO_REGISTER_SET - Dynamically change GPIO configuration - -SET_LQTHRESHOLD - Set link quality thresholds; the sampling happens at every unicast - data frame Tx, if certain thresholds are met, and corresponding - events are sent to the host - - -===================================================================== - -Name - GPIO_INPUT_GET - -Synopsis - Allows the host to read GPIO pins that are configured for input. The values read are - returned through a “GPIO_DATA” extension event. - -NOTE: Support for GPIO is optional. - -Command - N/A - -Command Parameters - None - - - -Reply Parameters - None - - -Reset Value - None - - - -Restrictions - None - -===================================================================== - - -Name - GPIO_INTR_ACK - -Synopsis - The host uses this command to acknowledge and to re-arm GPIO interrupts reported - through an earlier “GPIO_INTR” extension event. A single “GPIO_INTR_ACK” - command should be used to acknowledge all GPIO interrupts that the host knows to - be outstanding (if pending interrupts are not acknowledged through - “GPIO_INTR_ACK”, another “GPIO_INTR” extension event is raised). - -NOTE: Support for GPIO is optional. - -Command - N/A - -Command Parameters - UINT32 ack_mask - A mask of interrupting GPIO pins (e.g., ack_mask - bit [3] acknowledges an interrupt from the pin GPIO3). - -Command Values - None - -Reset Value - None - -Restrictions - The host should acknowledge only interrupts about which it was notified. - - -===================================================================== - -Name - GPIO_OUTPUT_SET - -Synopsis - Manages output on GPIO pins configured for output. - - Conflicts between set_mask and clear_mask or enable_mask and disable_mask result - in undefined behavior. - -NOTE: Support for GPIO is optional. - -Command - N/A - -Command Parameters - UINT32 set_mask - Specifies which pins should drive a 1 out - UINT32 clear_mask - Specifies which pins should drive a 0 out - UINT32 enable_mask - Specifies which pins should be enabled for output - UINT32 disable_mask - Specifies which pins should be disabled for output - -Command Values - None - - -Reset Value - None - - -Restrictions - None - - - -===================================================================== - - -Name - GPIO_REGISTER_GET - -Synopsis - Allows the host to read an arbitrary GPIO register. It is intended for use during - bringup/debug. The target responds to this command with a “GPIO_DATA” event. - -NOTE: Support for GPIO is optional. - -Command - N/A - -Command Parameters - UINT32 - gpioreg_id - Specifies a GPIO register identifier, as defined -in include/AR6000/AR6000_gpio.h - -Reply Parameters - None - -Reset Value - N/A - -Restrictions - None - - -===================================================================== - -Name - GPIO_REGISTER_SET - -Synopsis - Allows the host to dynamically change GPIO configuration (usually handled - statically through the GPIO configuration DataSet). - -NOTE: Support for GPIO is optional. - -Command - N/A - -Command Parameters - UINT32 gpioreg_id - Specifies a GPIO register identifier, as defined in - include/AR6000/AR6000_gpio.h - UINT32 value - Specifies a value to write to the specified - GPIO register - -Command Values - None - - -Reset Value - Initial hardware configuration is as defined in the AR6001 or AR6002 ROCmTM - Single-Chip MAC/BB/Radio for 2.4/5 GHz Embedded WLAN Applications data sheet. This - configuration is modified by the GPIO Configuration DataSet, if one exists. - -Restrictions - None - - -===================================================================== - - -Name - SET_LQTHRESHOLD - -Synopsis - Set link quality thresholds, the sampling happens at every unicast data frame Tx, if - certain threshold is met, corresponding event will be sent to host. - -Command - wmiconfig eth1 --lqThreshold <enable> <upper_threshold_1>... - <upper_threshold_4> <lower_threshold_1>... <lower_threshold_4> - -Command Parameters - A_UINT8 enable; - A_UINT8 thresholdAbove1_Val; - A_UINT8 thresholdAbove2_Val; - A_UINT8 thresholdAbove3_Val; - A_UINT8 thresholdAbove4_Val; - A_UINT8 thresholdBelow1_Val; - A_UINT8 thresholdBelow2_Val; - A_UINT8 thresholdBelow3_Val; - A_UINT8 thresholdBelow4_Val; - -Command Values - enable - = 0 - Disable link quality sampling - - = 1 - Enable link quality sampling - - - thresholdAbove_Val - [1...4] - Above thresholds (value in [0,100]), in ascending - order threshold - - Below_Val [1...4] = below thresholds (value - in [0,100]), in ascending order - -Reset Values - None - -Restrictions - None - -===================================================================== -WMI Extension Events - -The WMI EXTENSION event is used for a collection of events that: - - Are not generic wireless events - May be implementation-specific - May be target platform-specific - May be optional for a host implementation - - An extension event is sent from the AR6000 device targets to the host just like -any other WMI event message, using the WMI_EXTENSION_EVENTID. The -first field of the payload for this “EXTENSION” event is another commandId -(sometimes called the subcommandId) that indicates which “EXTENSION” -event is being used. A subcommandId-specific payload follows the -subcommandId. - -All extensions (subcommandIds) are listed in the header file include/wmix.h. -See also “WMI Extension Commands” on page B-55. - - -WMI Extension Events - - -GPIO_ACK - Acknowledges a host set command has been processed by the device - -GPIO_DATA - Response to a host’s request for data - -GPIO_INTR - Signals that GPIO interrupts are pending - - -===================================================================== - -Name - GPIO_ACK - -Synopsis - Acknowledges that a host set command (either “GPIO_OUTPUT_SET” or - “GPIO_REGISTER_SET”) has been processed by the AR6000 device. - -NOTE: Support for GPIO is optional. - -Event ID - N/A - -Event Parameters - None - - -Event Values - None - -===================================================================== - - -Name - GPIO_DATA - -Synopsis - The AR6000 device uses this event to respond to the host’s earlier request for data - (through either a “GPIO_REGISTER_GET” or a “GPIO_INPUT_GET” command). - -NOTE: Support for GPIO is optional. - -Event ID - N/A - -Event Parameters - UINT32 value - Holds the data of interest, which is either a register value - (in the case of “GPIO_REGISTER_GET”) or a mask of - pin inputs (in the case of “GPIO_INPUT_GET”). - UINT32 reg_id - Indicates which register was read (in the case of - “GPIO_REGISTER_GET”) or is GPIO_ID_NONE (in the - case of “GPIO_INPUT_GET”) - -Event Values - None - - -===================================================================== - - - -Name - GPIO_INTR - -Synopsis - The AR6000 device raises this event to signal that GPIO interrupts are pending. - These GPIOs may be interrupts that occurred after the last “GPIO_INTR_ACK” - command was issued, or may be GPIO interrupts that the host failed to acknowledge - in the last “GPIO_INTR_ACK”. The AR6000 will not raise another GPIO_INTR - event until this event is acknowledged through a “GPIO_INTR_ACK” command. - -NOTE: Support for GPIO is optional. - -Event ID - N/A - -Event Parameters - UINT32 intr_mask - Indicates which GPIO interrupts are currently pending - - UINT32 input_values - A recent copy of the GPIO input values, taken at the - time the most recent GPIO interrupt was processed - -Event Values - None - - - -===================================================================== -#endif diff --git a/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi_host.h b/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi_host.h deleted file mode 100644 index 57844bcf3d..0000000000 --- a/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/wmi/wmi_host.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef _WMI_HOST_H_ -#define _WMI_HOST_H_ -/* - * Copyright (c) 2004-2006 Atheros Communications Inc. - * All rights reserved. - * - * This file contains local definitios for the wmi host module. - * - * $Id: //depot/sw/releases/olca2.0-GPL/host/wmi/wmi_host.h#1 $ - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -struct wmi_stats { - A_UINT32 cmd_len_err; - A_UINT32 cmd_id_err; -}; - -struct wmi_t { - A_BOOL wmi_ready; - A_BOOL wmi_numQoSStream; - A_UINT8 wmi_wmiStream2AcMapping[WMI_PRI_MAX_COUNT]; - WMI_PRI_STREAM_ID wmi_ac2WmiStreamMapping[WMM_NUM_AC]; - A_UINT16 wmi_streamExistsForAC[WMM_NUM_AC]; - A_UINT8 wmi_fatPipeExists; - void *wmi_devt; - struct wmi_stats wmi_stats; - struct ieee80211_node_table wmi_scan_table; - A_UINT8 wmi_bssid[ATH_MAC_LEN]; - A_UINT8 wmi_powerMode; - A_UINT8 wmi_phyMode; - A_UINT8 wmi_keepaliveInterval; - A_MUTEX_T wmi_lock; -}; - -#define WMI_INIT_WMISTREAM_AC_MAP(w) \ -{ (w)->wmi_wmiStream2AcMapping[WMI_BEST_EFFORT_PRI] = WMM_AC_BE; \ - (w)->wmi_wmiStream2AcMapping[WMI_LOW_PRI] = WMM_AC_BK; \ - (w)->wmi_wmiStream2AcMapping[WMI_HIGH_PRI] = WMM_AC_VI; \ - (w)->wmi_wmiStream2AcMapping[WMI_HIGHEST_PRI] = WMM_AC_VO; \ - (w)->wmi_ac2WmiStreamMapping[WMM_AC_BE] = WMI_BEST_EFFORT_PRI; \ - (w)->wmi_ac2WmiStreamMapping[WMM_AC_BK] = WMI_LOW_PRI; \ - (w)->wmi_ac2WmiStreamMapping[WMM_AC_VI] = WMI_HIGH_PRI; \ - (w)->wmi_ac2WmiStreamMapping[WMM_AC_VO] = WMI_HIGHEST_PRI; } - -#define WMI_WMISTREAM_ACCESSCATEGORY(w,s) (w)->wmi_wmiStream2AcMapping[s] -#define WMI_ACCESSCATEGORY_WMISTREAM(w,ac) (w)->wmi_ac2WmiStreamMapping[ac] - -#define LOCK_WMI(w) A_MUTEX_LOCK(&(w)->wmi_lock); -#define UNLOCK_WMI(w) A_MUTEX_UNLOCK(&(w)->wmi_lock); - -#ifdef __cplusplus -} -#endif - -#endif /* _WMI_HOST_H_ */ |