For nest-cam v350 release

Bug: 259322762
diff --git a/artagent/Android.mk b/artagent/Android.mk
new file mode 100755
index 0000000..dc09243
--- /dev/null
+++ b/artagent/Android.mk
@@ -0,0 +1,27 @@
+#-------------------------------------------------
+# Copyright (c) 2012 Qualcomm Atheros, Inc..
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#-------------------------------------------------
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := artagent
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/libtcmd \
+
+LOCAL_CFLAGS+=
+
+LOCAL_SRC_FILES:= \ artagent.c
+
+LOCAL_LDLIBS += -lpthread -lrt
+
+LOCAL_MODULE_TAGS := optional eng
+
+LOCAL_SHARED_LIBRARIES += libcutils
+LOCAL_SHARED_LIBRARIES += libnl_2
+LOCAL_STATIC_LIBRARIES += libtcmd
+
+include $(BUILD_EXECUTABLE)
diff --git a/artagent/COPYING b/artagent/COPYING
new file mode 100644
index 0000000..77650bc
--- /dev/null
+++ b/artagent/COPYING
@@ -0,0 +1,13 @@
+Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/artagent/Makefile b/artagent/Makefile
new file mode 100644
index 0000000..8f4e719
--- /dev/null
+++ b/artagent/Makefile
@@ -0,0 +1,23 @@
+CC = gcc
+CFLAGS += -Wall -g
+
+PREFIX ?= /usr
+SBINDIR ?= $(PREFIX)/sbin
+INSTALL ?= install
+
+NLLIBNAME = libnl-1
+LIBTCMD_DIR := ../libtcmd
+
+#LDLIBS += -L/home/mattwagner/ambarella-a5s-sdk/packages/wireless/dist/usr/lib/libnl-3.so  -lrt -ltcmd
+override LDLIBS += -lrt -ltcmd $(shell pkg-config --libs $(NLLIBNAME)) 
+override CFLAGS += $(shell pkg-config --cflags $(NLLIBNAME)) -I$(LIBTCMD_DIR) -L$(LIBTCMD_DIR) -L../../dist/usr/lib/
+
+artagent: artagent.c artagent.h
+	$(MAKE) -C $(LIBTCMD_DIR)
+	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
+
+install: artagent
+	install -m 755 artagent $(DESTDIR)$(SBINDIR)
+
+clean:
+	rm -f artagent
diff --git a/artagent/artagent b/artagent/artagent
new file mode 100755
index 0000000..1a0e2de
--- /dev/null
+++ b/artagent/artagent
Binary files differ
diff --git a/artagent/artagent.c b/artagent/artagent.c
new file mode 100755
index 0000000..ab1ee57
--- /dev/null
+++ b/artagent/artagent.c
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/errno.h>
+#include <sys/socket.h>
+#include <linux/types.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include <time.h>
+#include "artagent.h"
+#include "libtcmd.h"
+
+static int sid, cid, aid;
+static char ar6kifname[32];
+unsigned int readLength = 0;
+unsigned char  line[LINE_ARRAY_SIZE];
+int cmdId,cmdLen;
+
+void callback_rx(void *buf, int len)
+{
+    int length, version;
+
+     /* skip cmd id, act */
+    buf += 2 * sizeof(unsigned int);
+    unsigned char *reply = (unsigned char*)buf;
+    length = *(unsigned short *)&(reply[0]);
+    version = (unsigned char)(reply[2]);
+
+    readLength = *(unsigned int *)&(reply[4]);
+    //printf("Version %d rx length %d read Length %d\n",version,length,readLength);
+    memcpy((void*)line, (void*)&(reply[8]),readLength);
+}
+
+static int initInterface(char *ifname)
+{
+    int err = 0;
+    err = tcmd_tx_init(ifname, callback_rx);
+    return err;
+}
+
+static int wmiSend(unsigned char *cmdBuf, unsigned int len, unsigned int totalLen, unsigned char version, bool resp)
+{
+    TC_CMDS tCmd;
+    int err=0;
+
+    memset(&tCmd,0,sizeof(tCmd));
+
+    tCmd.hdr.testCmdId = TC_CMDS_ID;
+    tCmd.hdr.u.parm.length = totalLen;
+    tCmd.hdr.u.parm.version = version;
+    tCmd.hdr.u.parm.bufLen = len;   // less than 256
+    memcpy((void*)tCmd.buf, (void*)cmdBuf, len);
+
+    if ((err = tcmd_tx((char*)&tCmd, sizeof(tCmd), resp))) {
+        fprintf(stderr, "tcmd_tx had error: %s!\n", strerror(err));
+        return 0;
+    }
+
+    return 1;
+}
+
+static void cleanup(int sig)
+{
+    if (cid>=0) {
+        close(cid);
+    }
+    if (sid>=0) {
+        close(sid);
+    }
+}
+
+int sock_init(int port)
+{
+    int                sockid;
+    struct sockaddr_in myaddr;
+    socklen_t          sinsize;
+    int                i, res;
+
+    /* Create socket */
+    sockid = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+    if (sockid == -1) {
+        perror(__FUNCTION__);
+        printf("Create socket to PC failed\n");
+        return -1;
+    }
+
+    i = 1;
+    res = setsockopt(sockid, SOL_SOCKET, SO_REUSEADDR, (char *)&i, sizeof(i));
+    if (res == -1) {
+        close(sockid);
+        return -1;
+    }
+
+    i = 1;
+    res = setsockopt(sockid, IPPROTO_TCP, TCP_NODELAY, (char *)&i, sizeof(i));
+    if (res == -1) {
+        close(sockid);
+        return -1;
+    }
+
+    myaddr.sin_family      = AF_INET;
+    myaddr.sin_port        = htons(port);
+    myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+    memset(&(myaddr.sin_zero), 0, 8);
+
+    res = bind(sockid, (struct sockaddr *)&myaddr, sizeof(struct sockaddr));
+
+    if (res != 0) {
+        perror(__FUNCTION__);
+        printf("Bind failed\n");
+		close(sockid);
+        return -1;
+    }
+
+    if (listen(sockid, 4) == -1) {
+        perror(__FUNCTION__);
+        printf("Listen failed\n");
+		close(sockid);
+        return -1;
+    }
+
+    printf("Waiting for client to connect...\n");
+
+    sinsize = sizeof(struct sockaddr_in);
+    if ((cid = accept(sockid, (struct sockaddr *)&myaddr, &sinsize)) == -1) {
+        printf("Accept failed\n");
+		close(sockid);
+        return -1;
+    }
+
+    i = 1;
+    res = setsockopt(cid, IPPROTO_TCP, TCP_NODELAY, (char *)&i, sizeof(i));
+    if (res == -1) {
+        printf("cannot set NOdelay for cid\n");
+        close(sockid);
+        return -1;
+    }
+    printf("Client connected!\n");
+
+    return sockid;
+}
+
+int sock_recv(int sockid, unsigned char *buf, int buflen)
+{
+    int recvbytes;
+    recvbytes = recv(sockid, buf, buflen, 0);
+    if (recvbytes == 0) {
+        printf("Connection close!? zero bytes received\n");
+        return -1;
+    } else if (recvbytes > 0) {
+        return recvbytes;
+    }
+    return -1;
+}
+
+int sock_send(int sockid, unsigned char *buf, int bytes)
+{
+    int cnt;
+    unsigned char* bufpos = buf;
+    while (bytes) {
+        cnt = write(sockid, bufpos, bytes);
+
+        if (!cnt) {
+            break;
+        }
+        if (cnt == -1) {
+            if (errno == EINTR) {
+                continue;
+            } else {
+                return -1;
+            }
+        }
+
+        bytes -= cnt;
+        bufpos += cnt;
+    }
+    return (bufpos - buf);
+}
+
+static void print_help(char *pname)
+{
+    printf("An agent program to connect ART host and AR6K device, must be\n");
+    printf("started after AR6K device driver is installed.\n\n");
+    printf("Usage: %s ifname fragsize\n\n", pname);
+    printf("  ifname      AR6K interface name\n");
+    printf("  fragsize    Fragment size, must be multiple of 4\n\n");
+    printf("Example:\n");
+    printf("%s eth1 80\n\n", pname);
+}
+
+int main (int argc, char **argv)
+{
+    int recvbytes=0,bytesRcvd=0;
+    int chunkLen = 0;
+    unsigned char *bufpos;
+    int reducedARTPacket = 1;
+    int frag_size = 200;
+    //int i=0;
+    int port = ART_PORT;
+    bool resp = false;
+    bool firstpacket = true;
+
+    struct sigaction sa;
+
+    printf("setup signal\n");
+    memset(&sa, 0, sizeof(struct sigaction));
+
+    sa.sa_flags = SA_NOCLDSTOP;
+    sa.sa_handler = cleanup;
+
+    printf("before call sigaction\n");
+    sigaction(SIGTERM, &sa, NULL);
+    sigaction(SIGINT,  &sa, NULL);
+    sigaction(SIGHUP, &sa, NULL);
+    sigaction(SIGABRT, &sa, NULL);
+
+    cid = sid = aid = -1;
+    printf("setup ifname\n");
+    memset(ar6kifname, '\0', sizeof(ar6kifname));
+
+    if (argc == 1 ) {
+        print_help(argv[0]);
+        return -1;
+    }
+
+    if (argc > 1 ) {
+        strcpy(ar6kifname, argv[1]);
+    }
+    else {
+        strcpy(ar6kifname, "wlan0");
+    }
+
+    if (argc > 2) {
+        frag_size = atoi(argv[2]);
+    }
+
+    if (argc > 3) {
+        port = atoi(argv[3]);
+    }
+
+    if (port == 0)
+	port = ART_PORT;
+    else if (port < 0 || port >65534) {
+	printf("Invalid port number\n");
+	goto main_exit;
+    }
+
+    //NOTE: issue with bigger size on ath6kl driver..
+    if ( ((frag_size == 0) || ((frag_size % 4) != 0)) || (frag_size > 200) ) {
+        printf("Invalid fragsize, should be multiple of 4 and frag size less than 200\n");
+        goto main_exit;
+    }
+
+    if ( initInterface(ar6kifname) ) {
+        printf("Init interface cfg80211 failed\n");
+        cleanup(0);
+        return -1;
+    }
+
+    printf("open sock\n");
+    sid = sock_init(port);
+    if (sid < 0) {
+        printf("Create socket to ART failed\n");
+        cleanup(0);
+        return -1;
+    }
+
+    if ((recvbytes=sock_recv(cid, line, LINE_ARRAY_SIZE)) < 0) {
+        printf("Cannot nego packet size\n");
+        cleanup(0);
+        return -1;
+    }
+
+    printf("Get nego bytes %d\n", recvbytes);
+
+    if (1 == (*(unsigned int *)line)) {
+	reducedARTPacket = 1;
+        printf("Not supporting reducedARTPacket\n");
+        goto main_exit;
+    }
+    else {
+	reducedARTPacket = 0;
+    }
+
+    sock_send(cid, &(line[0]), 1);
+
+    printf("Ready to loop for art packet reduce %d\n", reducedARTPacket);
+
+    while (1) {
+        //printf("wait for tcp socket\n");
+        if ((recvbytes = sock_recv(cid, line, LINE_ARRAY_SIZE)) < 0) {
+            printf("Cannot recv packet size %d\n", recvbytes);
+            cleanup(0);
+            return -1;
+        }
+
+        bytesRcvd = recvbytes;
+        readLength = 0;
+        resp = false;
+
+        if ( firstpacket == true )
+        {
+            cmdLen = *(unsigned short *)&(line[0]);
+            cmdId = *(unsigned char *)&(line[2]);
+
+            printf("->FW len %d Command %d recvbytes %d\n",cmdLen,cmdId,recvbytes);
+            firstpacket = false;
+        }
+
+        if (!reducedARTPacket) {
+            //printf("Recived bytes from NART %d frag size %d\n",recvbytes,frag_size);
+            bufpos = line;
+
+            while (recvbytes) {
+                if (recvbytes > frag_size) {
+                    chunkLen = frag_size;
+                } else {
+                    chunkLen = recvbytes;
+                }
+
+                //we have to find out whether we need a resp or not for the last packet..
+                recvbytes-=chunkLen;
+
+                if ( recvbytes <=0 )
+                {
+                    resp = true;
+                    firstpacket = true; //look for first packet again..
+                }
+
+                //printf("Chunk Len %d total size %d respNeeded %d\n",chunkLen,bytesRcvd,resp);
+                wmiSend(bufpos, chunkLen, bytesRcvd, 1, resp);
+
+                bufpos+=chunkLen;
+            }
+        }
+
+        //line and readLength is populated in the callback
+        if ((REG_WRITE_CMD_ID != line[0]) && (MEM_WRITE_CMD_ID != line[0]) &&
+            (M_PCI_WRITE_CMD_ID != line[0]) && (M_PLL_PROGRAM_CMD_ID != line[0]) &&
+            (M_CREATE_DESC_CMD_ID != line[0])) {
+            printf("<- N/ART len %d Command %d status %d\n", readLength,(int)line[0],(int)line[4]);
+            sock_send(cid, line, readLength);
+        } else {
+            printf("<- N/ART ACK Command %d\n", (int)line[0]);
+            sock_send(cid, &(line[0]), 1);
+        }
+    }
+
+
+main_exit:
+    printf("Normal exit\n");
+    cleanup(0);
+    return 0;
+}
diff --git a/artagent/artagent.h b/artagent/artagent.h
new file mode 100755
index 0000000..0aa3227
--- /dev/null
+++ b/artagent/artagent.h
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef _ARTAGENT_H_
+#define _ARTAGENT_H_
+
+/* ATHENV */
+#define ART_PORT                5454
+//#define ART_PORT                33120
+/* ATHENV */
+#define LINE_ARRAY_SIZE         4096
+#define SEND_ENDPOINT	        0
+#define HTC_RAW_WRITE_MAX_LEN   (16 * 5) // 96, 112
+#define TC_CMDS_SIZE_MAX  255
+
+#ifndef POSTPACK
+#ifdef __GNUC__
+#define POSTPACK __attribute__ ((packed))
+#else
+#define POSTPACK
+#endif
+#endif
+
+#ifndef PREPACK
+#ifdef __GNUC__
+#define PREPACK
+#else
+#define PREPACK
+#endif
+#endif
+
+typedef enum {
+    TCMD_CONT_TX_ID,
+    TCMD_CONT_RX_ID,
+    TCMD_PM_ID,
+    TC_CMDS_ID,
+    TCMD_SET_REG_ID,
+
+    INVALID_CMD_ID=255,
+} TCMD_ID;
+
+typedef enum {
+    TCMD_CONT_RX_PROMIS =0,
+    TCMD_CONT_RX_FILTER,
+    TCMD_CONT_RX_REPORT,
+    TCMD_CONT_RX_SETMAC,
+    TCMD_CONT_RX_SET_ANT_SWITCH_TABLE,
+
+    TC_CMD_RESP,
+} TCMD_CONT_RX_ACT;
+
+typedef struct cmdReply {
+        unsigned int replyCmdLen;
+        unsigned int replyCmdId; // command ID of command to which this is a reply
+        unsigned int status; // status of the command
+        unsigned char cmdBytes[4000]; // bytes of the command reply
+} CMD_REPLY;
+
+typedef PREPACK struct {
+    unsigned int   testCmdId;
+    unsigned int   act;
+    PREPACK union {
+        unsigned int  enANI;    // to be identical to CONT_RX struct
+        struct PREPACK {
+            unsigned short   length;
+            unsigned char    version;
+            unsigned char    bufLen;
+        } POSTPACK parm;
+    } POSTPACK u;
+} POSTPACK TC_CMDS_HDR;
+
+typedef PREPACK struct {
+    TC_CMDS_HDR  hdr;
+    unsigned char      buf[TC_CMDS_SIZE_MAX+1];
+} POSTPACK TC_CMDS;
+
+
+enum COMMAND_IDS {
+	INIT_F2_CMD_ID,                         //0
+	SELECT_HW_CMD_ID,						//1
+	MEM_WRITE_CMD_ID,						//2
+	MEM_READ_CMD_ID,						//3
+	REG_READ_CMD_ID,						//4
+	REG_WRITE_CMD_ID,						//5
+	CFG_READ_CMD_ID,						//6
+	CFG_WRITE_CMD_ID,					//7
+	MEM_ALLOC_CMD_ID,					//8
+	MEM_FREE_CMD_ID,					//9
+	MEM_WRITE_BLOCK_CMD_ID,				//10
+	MEM_READ_BLOCK_CMD_ID,				//11
+	REMAP_HW_CMD_ID,					//12
+	CREATE_EVENT_CMD_ID,				//13
+	ANY_EVENTS_CMD_ID,					//14
+	GET_EVENT_CMD_ID,					//15
+	DISCONNECT_PIPE_CMD_ID,				//16
+	CLOSE_PIPE_CMD_ID,					//17
+	ISR_FEATURE_ENABLE_CMD_ID,			//18
+	ISR_GET_RX_STATS_CMD_ID,			//19
+	ISR_GET_TX_STATS_CMD_ID,			//20
+	ISR_SINGLE_RX_STAT_CMD_ID,			//21
+	ISR_SINGLE_TX_STAT_CMD_ID,			//22
+	WAIT_ON_EVENT_CMD_ID,				//23
+	WAIT_ON_TIME_CMD_ID,					//24
+	ISR_FEATURE_DISABLE_CMD_ID,				//25
+	M_EEPROM_READ_CMD_ID,					//26
+	M_EEPROM_WRITE_CMD_ID,					//27
+	M_EEPROM_READ_BLOCK_CMD_ID,				//28
+	M_EEPROM_WRITE_BLOCK_CMD_ID,			//29
+	M_RESET_DEVICE_CMD_ID,					//30
+	M_GENERIC_CMD_ID,						//31
+	M_CHECK_REGS_CMD_ID,				//31
+	M_CHANGE_CHANNEL_CMD_ID,			//33
+	M_CHECK_PROM_CMD_ID,				//34
+	M_REREAD_PROM_CMD_ID,				//35
+	M_TX_DATA_SETUP_CMD_ID,				//36
+	M_TX_DATA_BEGIN_CMD_ID,				//37
+	M_TX_DATA_START_CMD_ID,					//38
+	M_TX_DATA_COMPLETE_CMD_ID,				//39
+	M_RX_DATA_SETUP_CMD_ID,				//40
+	M_RX_DATA_BEGIN_CMD_ID,				//41
+	M_RX_DATA_START_CMD_ID,					//42
+	M_RX_DATA_COMPLETE_CMD_ID,				//43
+	M_RX_STATS_SNAPSHOT_CMD_ID,				//44
+	M_TXRX_DATA_BEGIN_CMD_ID,			//45
+	M_CLEANUP_TXRX_MEMORY_CMD_ID,			//46
+	M_TX_GET_STATS_CMD_ID,				//47
+	M_RX_GET_STATS_CMD_ID,				//48
+	M_RX_GET_DATA_CMD_ID,				//49
+	M_TX_CONT_BEGIN_CMD_ID,				//50
+	M_TX_CONT_FRAME_BEGIN_CMD_ID,			//51
+	M_TX_CONT_END_CMD_ID,				//52
+	M_SET_ANTENNA_CMD_ID,				//53
+	M_SET_POWER_SCALE_CMD_ID,			//54
+	M_SET_TRANSMIT_POWER_CMD_ID,		//55
+	M_SET_SINGLE_TRANSMIT_POWER_CMD_ID,	//56
+	M_DEV_SLEEP_CMD_ID,					//57
+	M_CLOSE_DEVICE_CMD_ID,				//58
+	M_CHANGE_FIELD_CMD_ID,					//59
+	M_ENABLE_WEP_CMD_ID,					//60
+	M_ENABLE_PA_PRE_DIST_CMD_ID,			//61
+	M_DUMP_REGS_CMD_ID,						//62
+	M_DUMP_PCI_WRITES_CMD_ID,				//63
+	M_TEST_LIB_CMD_ID,						//64
+	M_DISPLAY_FIELD_VALUES_CMD_ID,			//65
+	M_GET_FIELD_VALUE_CMD_ID,				//66
+	M_READ_FIELD_CMD_ID,					//67
+	M_WRITE_FIELD_CMD_ID,					//68
+	M_SET_RESET_PARAMS_CMD_ID,				//69
+	M_CHANGE_MULTIPLE_FIELDS_ALL_MODES_CMD_ID, //70
+	M_CHANGE_MULTIPLE_FIELDS_CMD_ID,		//71
+	M_GET_FIELD_FOR_MODE_CMD_ID,			//72
+	LOAD_AND_RUN_CODE_CMD_ID,				//73
+	M_FORCE_SINGLE_PCDAC_TABLE_CMD_ID,		//74
+	M_FORCE_PCDAC_TABLE_CMD_ID,				//75
+	M_FORCE_POWER_TX_MAX_CMD_ID,			//76
+	M_GET_EEPROM_STRUCT_CMD_ID,				//77
+	M_GET_DEVICE_INFO_CMD_ID,				//78
+	M_WRITE_PROD_DATA_CMD_ID,				//79
+	M_WRITE_NEW_PROD_DATA_CMD_ID,			//80
+	M_SPECIFY_SUBSYSTEM_CMD_ID,				//81
+	M_FORCE_SINGLE_POWER_TX_MAX_CMD_ID,		//82
+	M_SET_QUEUE_CMD_ID,						//83
+	M_MAP_QUEUE_CMD_ID,						//84
+	M_CLEAR_KEY_CACHE_CMD_ID,				//85
+	RUN_SCREENING_TEST_CMD_ID,				//86
+	DIAG_CMD,								//87
+	ENABLE_HW_CAL_CMD,						//88
+	TRAM_WRITE_BLOCK_CMD_ID,				//89
+	TRAM_READ_BLOCK_CMD_ID,					//90
+	M_GET_MAX_POWER_CMD_ID,					//91
+	M_GET_PCDAC_FOR_POWER_CMD_ID,			//92
+	M_FALSE_DETECT_BACKOFF_VALS_CMD_ID,		//93
+	M_GET_MAC_ADDR_CMD_ID,					//94
+	M_MASK_TRIGGER_SWEEP_CMD_ID,			//95
+	M_MASK_DETECT_SIGNAL_CMD_ID,			//96
+	M_MASK_SET_DEV_NUMS_CMD_ID,				//97
+	M_MASK_FORCE_MIN_CCAPWR_CMD_ID,			//98
+	M_MASK_CONFIG_CAPTURE_CMD_ID,			//99
+	AP_REG_READ_CMD_ID,						//100
+	AP_REG_WRITE_CMD_ID,					//101
+	M_SET_LIB_CONFIG_CMD_ID,				//102
+	M_GET_XPDGAIN_CMD_ID,					//103
+	M_SELECT_DEV_NUM_CMD_ID,				//104
+	M_GET_POWER_INDEX_CMD_ID,				//105
+	M_GET_ART_ANI_LEVEL_CMD_ID,				//106
+	M_SET_ART_ANI_LEVEL_CMD_ID,				//107
+	M_FTP_DOWNLOAD_FILE_CMD_ID,				//108
+	M_GET_CTL_INFO_CMD_ID,					//109
+	M_GET_MAX_LIN_PWR_CMD_ID,				//110
+	M_HW_RESET_CMD_ID,						//111
+	M_PLL_PROGRAM_CMD_ID,					//112
+	M_PCI_WRITE_CMD_ID,						//113
+	M_CAL_CHECK_CMD_ID,						//114
+	M_FILL_TX_STATS_CMD_ID,					//115
+	M_CREATE_DESC_CMD_ID,					//116
+	LOAD_AND_PROGRAM_CODE_CMD_ID,			//117
+	M_FORCE_SINGLE_PCDAC_TABLE_GRIFFIN_CMD_ID,		//118
+	PHS_CHANNEL_TOGGLE_CMD_ID,				//119
+	STOP_PHS_CHANNEL_TOGGLE_CMD_ID,					//120
+	GENERIC_FN_CALL_CMD_ID,					//121
+	SEND_FRAME_CMD_ID,					// 122
+	RECV_FRAME_CMD_ID,					// 123
+	M_EEPROM_READ_LOCS_CMD_ID,				//124
+	GET_REF_CLK_SPEED_CMD_ID,				//125
+	SLEEP_CMD_ID,				//126
+
+        ART_IMAGE_DOWNLOAD_ID,       //127
+	ART_TEST_UITRON,					//128
+	ART_TEST_CLIENT,					//129
+
+	ART_CLIENT_REWIND_ID,     //130
+	ART_THROUGHPUT_TEST_CMD_ID,   //131
+	ART_THROUGHPUT_TEST_CMD_ID_1,   //132
+
+	ART_BMI_WRITE_SOC_REGISTER_ID,     //133
+	ART_BMI_WRITE_SOC_MEMORY_ID,               //134
+	ART_BMI_OP_DONE_ID,           //135
+        ART_BMI_READ_SOC_REGISTER_ID,     //136
+        ART_BMI_READ_SOC_TARGET_ID //137
+
+};
+
+
+#endif /* _ARTAGENT_H_ */
diff --git a/ath6kl-tcmd/.gitignore b/ath6kl-tcmd/.gitignore
new file mode 100644
index 0000000..1a72503
--- /dev/null
+++ b/ath6kl-tcmd/.gitignore
@@ -0,0 +1,2 @@
+/athtestcmd
+*~
diff --git a/ath6kl-tcmd/Android.mk b/ath6kl-tcmd/Android.mk
new file mode 100755
index 0000000..214f4ba
--- /dev/null
+++ b/ath6kl-tcmd/Android.mk
@@ -0,0 +1,52 @@
+#-------------------------------------------------
+# Copyright (c) 2012 Qualcomm Atheros, Inc..
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#-------------------------------------------------
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := athtestcmd 
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/libtcmd \
+
+LOCAL_CFLAGS+=
+
+LOCAL_SRC_FILES:= \
+    athtestcmd.c  \
+    sinit_common.c
+
+LOCAL_LDLIBS += -lpthread -lrt
+
+LOCAL_MODULE_TAGS := optional eng
+
+LOCAL_SHARED_LIBRARIES += libcutils
+LOCAL_SHARED_LIBRARIES += libnl_2
+LOCAL_STATIC_LIBRARIES += libtcmd
+
+include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := psatUtil
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/libtcmd \
+
+LOCAL_CFLAGS+=
+
+LOCAL_SRC_FILES:= \
+    psatUtil.c \
+    sinit_common.c
+
+LOCAL_LDLIBS += -lpthread -lrt
+
+LOCAL_MODULE_TAGS := optional eng
+
+LOCAL_SHARED_LIBRARIES += libcutils
+LOCAL_SHARED_LIBRARIES += libnl_2
+LOCAL_STATIC_LIBRARIES += libtcmd
+
+include $(BUILD_EXECUTABLE)
+
diff --git a/ath6kl-tcmd/COPYING b/ath6kl-tcmd/COPYING
new file mode 100644
index 0000000..77650bc
--- /dev/null
+++ b/ath6kl-tcmd/COPYING
@@ -0,0 +1,13 @@
+Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/ath6kl-tcmd/Makefile b/ath6kl-tcmd/Makefile
new file mode 100644
index 0000000..00d99fc
--- /dev/null
+++ b/ath6kl-tcmd/Makefile
@@ -0,0 +1,31 @@
+CC = gcc
+CFLAGS = -Wall -g
+
+NLLIBNAME = libnl-1
+LIBTCMD_DIR := ../libtcmd
+
+PREFIX ?= /usr
+SBINDIR ?= $(PREFIX)/sbin
+INSTALL ?= install
+
+override LDLIBS += $(shell pkg-config --libs $(NLLIBNAME)) -lrt -ltcmd -lm 
+override CFLAGS += $(shell pkg-config --cflags $(NLLIBNAME)) -I$(LIBTCMD_DIR) -L$(LIBTCMD_DIR)
+
+all:
+	$(MAKE) athtestcmd
+	$(MAKE) psatUtil
+
+athtestcmd: athtestcmd.c athtestcmd.h testcmd.h sinit_common.h sinit_common.c sinit_eep.h
+	$(MAKE) -C $(LIBTCMD_DIR)
+	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
+
+psatUtil: psatUtil.c athtestcmd.h testcmd.h sinit_common.h sinit_common.c
+	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
+
+install: psatUtil athtestcmd
+	install -m 755 psatUtil $(DESTDIR)$(SBINDIR)
+	install -m 755 athtestcmd $(DESTDIR)$(SBINDIR)
+
+clean:
+	rm -f athtestcmd
+	rm -f psatUtil
diff --git a/ath6kl-tcmd/athtestcmd.c b/ath6kl-tcmd/athtestcmd.c
new file mode 100644
index 0000000..ecd6bc4
--- /dev/null
+++ b/ath6kl-tcmd/athtestcmd.c
@@ -0,0 +1,1557 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <linux/types.h>
+#include <net/if.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <assert.h>
+#include <ctype.h>
+#include <math.h>
+#include <time.h>
+
+#include "athtestcmd.h"
+#include "libtcmd.h"
+#include "testcmd.h"
+#include "sinit_eep.h"
+#include "sinit_common.h"
+
+const char *progname;
+const char commands[] = "commands:\n"
+	"--tx <sine/frame/tx99/tx100/off>\n"
+	"--txfreq <Tx channel or freq(default 2412)>\n"
+	"--txrate <rate index>\n"
+        "--txpwr <frame/tx99/tx100: 0-30dBm,0.5dBm resolution; sine: 0-60, PCDAC vaule>\n"
+	"--txantenna <1/2/0 (auto)>\n"
+	"--txpktsz <pkt size, [32-1500](default 1500)>\n"
+	"--txpattern <tx data pattern, 0: all zeros; 1: all ones;"
+	" 2: repeating 10; 3: PN7; 4: PN9; 5: PN15\n"
+	"--ani (Enable ANI. The ANI is disabled if this option is not specified)\n"
+	"--scrambleroff (Disable scrambler. The scrambler is enabled by default)\n"
+	"--aifsn <AIFS slots num,[0-252](Used only under '--tx frame' mode)>\n"
+	"--shortguard (use short guard)\n"
+	"--mode <ht40plus/ht40minus/ht20>\n"
+	"--setlongpreamble <1/0>\n"
+	"--numpackets <number of packets to send 0-65535>\n"
+        "--tx sine --txfreq <Tx channel or freq(default 2412)>\n"
+	"--rx <promis/filter/report>\n"
+	"--rxfreq <Rx channel or freq(default 2412)>\n"
+	"--rxantenna <1/2/0 (auto)>\n"
+	"--mode <ht40plus/ht40minus>\n"
+	"--pm <wakeup/sleep/deepsleep>\n"
+	"--setmac <mac addr like 00:03:7f:be:ef:11>\n"
+	"--getmac\n"
+	"--SetAntSwitchTable <table1 in decimal value>"
+	" <table2 in decimal value>  (Set table1=0 and table2=0 will"
+	" restore the default AntSwitchTable)\n"
+        "--efusedump --start <start address> --end <end address>\n"
+        "--efusewrite --start <start address> --data <data> (could be one or multiple data in quotation marks)\n"
+        "--otpwrite --data (could be one or multiple data in quotation marks)\n"
+        "--otpdump\n";
+
+#define A_ERR(ret, args...) printf(args); exit(ret);
+
+#define A_FREQ_MIN              4920
+#define A_FREQ_MAX              5825
+
+#define A_CHAN0_FREQ            5000
+#define A_CHAN_MAX              ((A_FREQ_MAX - A_CHAN0_FREQ)/5)
+
+#define BG_FREQ_MIN             2412
+#define BG_FREQ_MAX             2484
+
+#define BG_CHAN0_FREQ           2407
+#define BG_CHAN_MIN             ((BG_FREQ_MIN - BG_CHAN0_FREQ)/5)
+#define BG_CHAN_MAX             14	/* corresponding to 2484 MHz */
+
+#define A_20MHZ_BAND_FREQ_MAX   5000
+
+#define INVALID_FREQ    0
+#define A_OK            0
+
+#define ATH6KL_INTERFACE "wlan0"
+
+#define A_RATE_NUM      28
+#define G_RATE_NUM      28
+
+#define RATE_STR_LEN    20
+#define VENUS_OTP_SIZE  512
+typedef const char RATE_STR[RATE_STR_LEN];
+
+const RATE_STR bgRateStrTbl[G_RATE_NUM] = {
+	{"1   Mb"},
+	{"2   Mb"},
+	{"5.5 Mb"},
+	{"11  Mb"},
+	{"6   Mb"},
+	{"9   Mb"},
+	{"12  Mb"},
+	{"18  Mb"},
+	{"24  Mb"},
+	{"36  Mb"},
+	{"48  Mb"},
+	{"54  Mb"},
+	{"HT20 MCS0 6.5  Mb"},
+	{"HT20 MCS1 13  Mb"},
+	{"HT20 MCS2 19.5  Mb"},
+	{"HT20 MCS3 26  Mb"},
+	{"HT20 MCS4 39  Mb"},
+	{"HT20 MCS5 52  Mb"},
+	{"HT20 MCS6 58.5  Mb"},
+	{"HT20 MCS7 65  Mb"},
+	{"HT40 MCS0 13.5  Mb"},
+	{"HT40 MCS1 27.0  Mb"},
+	{"HT40 MCS2 40.5  Mb"},
+	{"HT40 MCS3 54  Mb"},
+	{"HT40 MCS4 81  Mb"},
+	{"HT40 MCS5 108  Mb"},
+	{"HT40 MCS6 121.5  Mb"},
+	{"HT40 MCS7 135  Mb"}
+};
+#if !defined(_printf)
+#define _printf printf
+#endif
+
+#define _NAME_MAX  256
+#define _LABEL_MAX  16
+
+typedef struct _calSetup {
+    double         attenDUT2PM_5G;
+    double         attenDUT2PM_2G;
+    char           testflowBinFilename[_NAME_MAX];
+    char           goldenBinFilename[_NAME_MAX];
+    char           outputBinFilename[_NAME_MAX];
+    char           label[_LABEL_MAX];
+} _CAL_SETUP;
+_CAL_SETUP  calSetup = {
+    19.0,
+    18.0,
+    "calTestFlow.bin",
+#ifdef ANDROID
+    "/system/etc/firmware/ath6k/AR6003/hw2.1.1/bdata.bin",
+#else
+    "/lib/firmware/ath6k/AR6003/hw2.1.1/bdata.bin",
+#endif
+#ifdef ANDROID
+    "/persist/bdata.bin",
+#else
+    "new_bdata.bin",
+#endif
+    "wbgf10_010_d0001",
+};
+
+uint32_t  AR6003_EEPROM_SIZE;
+uint32_t  AR6K_EEPROM_SIZE;
+static bool bCalResult;
+#define FIRST_WAIT_INTERVAL	2
+#define POLLING_INTERVAL	1
+#define MAX_WAIT_CYCLE		20
+
+static time_t startTime, endTime;
+static void rxReport(void *buf);
+static void rx_cb(void *buf, int len);
+static uint32_t freqValid(uint32_t val);
+static uint16_t wmic_ieee2freq(uint32_t chan);
+static void prtRateTbl(uint32_t freq);
+static uint32_t rateValid(uint32_t val, uint32_t freq);
+static uint32_t antValid(uint32_t val);
+static bool txPwrValid(TCMD_CONT_TX * txCmd);
+static int ath_ether_aton(const char *orig, uint8_t * eth);
+static uint32_t pktSzValid(uint32_t val);
+static void updateCALData(_CAL_SETUP *pCalSetup, TC_MSG *pTCMsg);
+static bool dumpPSATCharResult2File(TC_MSG *pTCMsg);
+
+static bool isHex(char c) {
+    return (((c >= '0') && (c <= '9')) ||
+            ((c >= 'A') && (c <= 'F')) ||
+            ((c >= 'a') && (c <= 'f')));
+}
+
+static int usage(void)
+{
+	fprintf(stderr, "usage:\n%s [-i device] commands\n", progname);
+	fprintf(stderr, "%s\n", commands);
+	prtRateTbl(INVALID_FREQ);
+	A_ERR(-1, "Incorrect usage");
+}
+
+unsigned int cmd = 0;
+unsigned int act = 0;
+uint16_t data_length = 0;
+uint16_t efuse_begin = 0, efuse_end = (VENUS_OTP_SIZE - 1);
+static TC_CMDS sTcCmds;
+
+int main(int argc, char **argv)
+{
+	int c, err,i;
+	char ifname[IFNAMSIZ];
+	progname = argv[0];
+	char buf[2048];
+	bool resp = false;
+	TCMD_CONT_TX *txCmd = (TCMD_CONT_TX *) buf;
+	TCMD_CONT_RX *rxCmd = (TCMD_CONT_RX *) buf;
+	TCMD_PM *pmCmd = (TCMD_PM *) buf;
+        TCMD_SET_REG *setRegCmd = (TCMD_SET_REG *)buf;
+        TC_CMDS  *tCmds = (TC_CMDS *)buf;
+        char efuseBuf[VENUS_OTP_SIZE];
+        char efuseWriteBuf[VENUS_OTP_SIZE];
+        int bufferLength = sizeof(*txCmd);
+
+	txCmd->numPackets = 0;
+	txCmd->wlanMode = TCMD_WLAN_MODE_NOHT;
+        txCmd->tpcm = TPC_TX_PWR;
+	rxCmd->u.para.wlanMode = TCMD_WLAN_MODE_NOHT;
+        rxCmd->u.para.freq = 2412;
+
+	if (argc == 1) {
+		usage();
+	}
+
+	/* Log The Start time */
+	startTime = time(NULL);
+
+	while (1) {
+		int option_index = 0;
+
+                static struct option long_options[] = {
+			{"version", 0, NULL, 'v'},
+			{"interface", 1, NULL, 'i'},
+			{"tx", 1, NULL, 't'},
+			{"txfreq", 1, NULL, 'f'},
+			{"txrate", 1, NULL, 'g'},
+			{"txpwr", 1, NULL, 'h'},
+			{"tgtpwr", 0, NULL, 'H'},
+			{"pcdac", 1, NULL, 'I'},
+			{"txantenna", 1, NULL, 'j'},
+			{"txpktsz", 1, NULL, 'z'},
+			{"txpattern", 1, NULL, 'e'},
+			{"rx", 1, NULL, 'r'},
+			{"rxfreq", 1, NULL, 'p'},
+			{"rxantenna", 1, NULL, 'q'},
+			{"pm", 1, NULL, 'x'},
+			{"setmac", 1, NULL, 's'},
+			{"getmac", 0, NULL, 'C'},
+			{"ani", 0, NULL, 'a'},
+			{"scrambleroff", 0, NULL, 'o'},
+			{"aifsn", 1, NULL, 'u'},
+			{"SetAntSwitchTable", 1, NULL, 'S'},
+			{"shortguard", 0, NULL, 'G'},
+			{"numpackets", 1, NULL, 'n'},
+			{"mode", 1, NULL, 'M'},
+			{"setlongpreamble", 1, NULL, 'l'},
+			{"setreg", 1, NULL, 'R'},
+			{"regval", 1, NULL, 'V'},
+			{"flag", 1, NULL, 'F'},
+			{"writeotp", 0, NULL, 'w'},
+			{"otpregdmn", 1, NULL, 'E'},
+			{"efusedump", 0, NULL, 'm'},
+			{"efusewrite", 0, NULL, 'W'},
+			{"start", 1, NULL, 'A'},
+			{"end", 1, NULL, 'L'},
+			{"data", 1, NULL, 'U'},
+			{"otpwrite", 0, NULL, 'O'},
+			{"otpdump", 0, NULL, 'P'},
+			{"btaddr", 1, NULL, 'B'},
+			{"therm", 0, NULL, 'c'},
+			{"selfInit", 0, NULL, TCMD_PSAT_CAL},
+			{"selfInit_result", 0, NULL, TCMD_PSAT_CAL_RESULT},
+			{"psat_char", 1, NULL, TCMD_CHAR_PSAT},
+			{"psat_char_result", 0, NULL, TCMD_CHAR_PSAT_RESULT},
+			{"sinit", 0, NULL, TCMD_SINIT_WAIT},
+			{0, 0, 0, 0}
+		};
+
+		c = getopt_long(argc, argv, "vi:t:f:g:h:HI:r:p:q:x:u:ao:M:A:L:mU:WOP",
+                         long_options, &option_index);
+
+		if (c == -1)
+			break;
+
+        switch (c) {
+        case 'i':
+            memset(ifname, '\0', 8);
+            strcpy(ifname, optarg);
+            break;
+        case 't':
+            cmd = TESTMODE_CONT_TX;
+	    txCmd->testCmdId = TCMD_CONT_TX_ID;
+            if (!strcmp(optarg, "sine")) {
+                txCmd->mode = TCMD_CONT_TX_SINE;
+            } else if (!strcmp(optarg, "offset")) {
+                txCmd->mode = TCMD_CONT_TX_OFFSETTONE;
+            } else if (!strcmp(optarg, "frame")) {
+                txCmd->mode = TCMD_CONT_TX_FRAME;
+            } else if (!strcmp(optarg, "tx99")) {
+                txCmd->mode = TCMD_CONT_TX_TX99;
+            } else if (!strcmp(optarg, "tx100")) {
+                txCmd->mode = TCMD_CONT_TX_TX100;
+            } else if (!strcmp(optarg, "off")) {
+                txCmd->mode = TCMD_CONT_TX_OFF;
+            }else {
+                cmd = 0;
+            }
+            break;
+        case 'f':
+          if (TESTMODE_CMDS == cmd) {
+                uint32_t freq = freqValid(atoi(optarg));
+                uint8_t  freqBin;
+                // TBD: temporarily borrow the length's high B for freq 
+                if (freq < 4900) {
+                    freqBin = FREQ2FBIN(atoi(optarg), 1);
+                }
+                else {
+                    freqBin = FREQ2FBIN(atoi(optarg), 0);
+                }
+                tCmds->hdr.u.parm.length &= 0x00ff;
+                tCmds->hdr.u.parm.length |= (freqBin << 8) & 0xff00;
+            } 
+            else {
+                txCmd->freq = freqValid(atoi(optarg));
+            }
+            break;
+        case 'G':
+            txCmd->shortGuard = 1;
+            break;
+        case 'M':
+            if(cmd == TESTMODE_CONT_TX) {
+                if (!strcmp(optarg, "ht20")) {
+                    txCmd->wlanMode = TCMD_WLAN_MODE_HT20;
+                } else if (!strcmp(optarg, "ht40plus")) {
+                    txCmd->wlanMode = TCMD_WLAN_MODE_HT40PLUS;
+                } else if (!strcmp(optarg, "ht40minus")) {
+                    txCmd->wlanMode = TCMD_WLAN_MODE_HT40MINUS;
+                }
+            } else if(cmd == TESTMODE_CONT_RX) {
+                if (!strcmp(optarg, "ht20")) {
+                    rxCmd->u.para.wlanMode = TCMD_WLAN_MODE_HT20;
+                } else if (!strcmp(optarg, "ht40plus")) {
+                    rxCmd->u.para.wlanMode = TCMD_WLAN_MODE_HT40PLUS;
+                } else if (!strcmp(optarg, "ht40minus")) {
+                    rxCmd->u.para.wlanMode = TCMD_WLAN_MODE_HT40MINUS;
+                }
+            }
+            break;
+        case 'n':
+            txCmd->numPackets = atoi(optarg);
+            break;
+        case 'g':
+            /* let user input index of rateTable instead of string parse */
+            txCmd->dataRate = rateValid(atoi(optarg), txCmd->freq);
+            break;
+        case 'h':
+        {
+            int txPowerAsInt;
+            /* Get tx power from user.  This is given in the form of a number
+             * that's supposed to be either an integer, or an integer + 0.5
+             */
+            double txPowerIndBm = atof(optarg);
+
+            /*
+             * Check to make sure that the number given is either an integer
+             * or an integer + 0.5
+             */
+            txPowerAsInt = (int)txPowerIndBm;
+            if (((txPowerIndBm - (double)txPowerAsInt) == 0) ||
+                (((txPowerIndBm - (double)txPowerAsInt)) == 0.5) ||
+                (((txPowerIndBm - (double)txPowerAsInt)) == -0.5)) {
+                if ((txCmd->mode != TCMD_CONT_TX_SINE) && (txCmd->mode != TCMD_CONT_TX_OFFSETTONE)) {
+                    txCmd->txPwr = txPowerIndBm * 2;
+                } else {
+                    txCmd->txPwr = txPowerIndBm;
+                }
+           } else {
+                printf("Bad argument to --txpwr, must be in steps of 0.5 dBm\n");
+                cmd = 0;
+           }
+
+            txCmd->tpcm = TPC_TX_PWR;
+        }
+            break;
+        case 'H':
+            txCmd->tpcm = TPC_TGT_PWR;
+            break;
+        case 'I':
+            txCmd->tpcm = TPC_FORCED_GAIN;
+            txCmd->txPwr = atof(optarg);
+            break;
+        case 'j':
+            txCmd->antenna = antValid(atoi(optarg));
+            break;
+        case 'z':
+            txCmd->pktSz = pktSzValid(atoi(optarg));
+            break;
+        case 'e':
+            txCmd->txPattern = atoi(optarg);
+            break;
+        case 'r':
+            cmd = TESTMODE_CONT_RX;
+	    rxCmd->testCmdId = TCMD_CONT_RX_ID;
+            if (!strcmp(optarg, "promis")) {
+                rxCmd->act = TCMD_CONT_RX_PROMIS;
+		printf(" Its cont Rx promis mode \n");
+            } else if (!strcmp(optarg, "filter")) {
+                rxCmd->act = TCMD_CONT_RX_FILTER;
+		printf(" Its cont Rx  filter  mode \n");
+            } else if (!strcmp(optarg, "report")) {
+		printf(" Its cont Rx report  mode \n");
+                rxCmd->act = TCMD_CONT_RX_REPORT;
+                resp = true;
+            } else {
+                cmd = 0;
+            }
+            break;
+        case 'p':
+            rxCmd->u.para.freq = freqValid(atoi(optarg));
+            break;
+        case 'q':
+            rxCmd->u.para.antenna = antValid(atoi(optarg));
+            break;
+        case 'x':
+            cmd = TESTMODE_PM;
+	    pmCmd->testCmdId = TCMD_PM_ID;
+            if (!strcmp(optarg, "wakeup")) {
+                pmCmd->mode = TCMD_PM_WAKEUP;
+            } else if (!strcmp(optarg, "sleep")) {
+                pmCmd->mode = TCMD_PM_SLEEP;
+            } else if (!strcmp(optarg, "deepsleep")) {
+                pmCmd->mode = TCMD_PM_DEEPSLEEP;
+            } else {
+                cmd = 0;
+            }
+            break;
+        case 's':
+            {
+                uint8_t mac[ATH_MAC_LEN];
+
+                cmd = TESTMODE_CONT_RX;
+                rxCmd->testCmdId = TCMD_CONT_RX_ID;
+                rxCmd->act = TCMD_CONT_RX_SETMAC;
+                if (ath_ether_aton(optarg, mac) != 0) {
+                    printf("Invalid mac address format! \n");
+                }
+                memcpy(rxCmd->u.mac.addr, mac, ATH_MAC_LEN);
+                printf("JLU: tcmd: setmac 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
+                        mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+                break;
+            }
+        case 'C':
+            cmd = TESTMODE_CONT_RX;
+            rxCmd->testCmdId = TCMD_CONT_RX_ID;
+            act = rxCmd->act = TCMD_CONT_RX_GETMAC;
+            resp = true;
+            break;
+        case 'u':
+            {
+                txCmd->aifsn = atoi(optarg) & 0xff;
+                printf("AIFS:%d\n", txCmd->aifsn);
+            }
+            break;
+        case 'a':
+            if(cmd == TESTMODE_CONT_TX) {
+                txCmd->enANI = true;
+            } else if(cmd == TESTMODE_CONT_RX) {
+                rxCmd->enANI = true;
+            }
+            break;
+        case 'o':
+            txCmd->scramblerOff = true;
+            break;
+        case 'S':
+            if (argc < 4)
+                usage();
+            cmd = TESTMODE_CONT_RX;
+            rxCmd->testCmdId = TCMD_CONT_RX_ID;
+            rxCmd->act = TCMD_CONT_RX_SET_ANT_SWITCH_TABLE;
+            rxCmd->u.antswitchtable.antswitch1 = strtoul(argv[2], (char **)NULL,0);
+            rxCmd->u.antswitchtable.antswitch2 = strtoul(argv[3], (char **)NULL,0);
+            break;
+        case 'l':
+            printf("Not supported\n");
+            return 0;
+            break;
+        case 'R':
+            if (argc < 5) {
+                printf("usage:athtestcmd -i wlan0 --setreg 0x1234 --regval 0x01 --flag 0\n");
+            }
+            cmd = TESTMODE_SETREG;
+            setRegCmd->testCmdId = TCMD_SET_REG_ID;
+            setRegCmd->regAddr   = strtoul(optarg, (char **)NULL, 0);//atoi(optarg);
+            break;
+        case 'V':
+            setRegCmd->val = strtoul(optarg, (char **)NULL, 0);
+            break;
+        case 'F':
+            setRegCmd->flag = atoi(optarg);
+            break;
+        case 'w':
+            rxCmd->u.mac.otpWriteFlag = 1;
+            break;
+        case 'E':
+            rxCmd->u.mac.regDmn[0] = 0xffff&(strtoul(optarg, (char **)NULL, 0));
+            rxCmd->u.mac.regDmn[1] = 0xffff&(strtoul(optarg, (char **)NULL, 0)>>16);
+            break;
+        case 'B':
+            {
+                uint8_t btaddr[ATH_MAC_LEN];
+                if (ath_ether_aton(optarg, btaddr) != 0) {
+                    printf("Invalid mac address format! \n");
+                }
+                memcpy(rxCmd->u.mac.btaddr, btaddr, ATH_MAC_LEN);
+                printf("JLU: tcmd: setbtaddr 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
+                        btaddr[0], btaddr[1], btaddr[2], btaddr[3], btaddr[4], btaddr[5]);
+            }
+            break;
+        case 'c':
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId = TC_CMDS_ID;
+            {
+                tCmds->hdr.u.parm.length = 0;
+                tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;
+                act = tCmds->hdr.act = TC_CMDS_READTHERMAL;//TC_CMDS_CAL_THERMALVOLT;
+                resp = true;
+            }
+            break;
+        case 'A':
+            efuse_begin = atoi(optarg);
+            break;
+
+        case 'L':
+            efuse_end = atoi(optarg);
+            break;
+
+        case 'U':
+            {
+                uint8_t* pucArg = (uint8_t*)optarg;
+                uint8_t  c;
+                uint8_t  strBuf[256];
+                uint8_t  pos = 0;
+                uint16_t length = 0;
+                uint32_t  data;
+
+                /* Sweep string to end */
+                while (1) {
+                    c = *pucArg++;
+                    if (isHex(c)) {
+                        strBuf[pos++] = c;
+                    } else {
+                        strBuf[pos] = '\0';
+                        pos = 0;
+                        sscanf(((char *)&strBuf), "%x", &data);
+                        efuseWriteBuf[length++] = (data & 0xFF);
+
+                        /* End of arg string */
+                        if (c == '\0') {
+                            break;
+                        }
+                    }
+                }
+
+                data_length = length;
+            }
+            break;
+
+        case 'm':
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId      = TC_CMDS_ID;
+            act = tCmds->hdr.act      = TC_CMDS_EFUSEDUMP;
+            resp = true;
+            break;
+
+        case 'W':
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId      = TC_CMDS_ID;
+            act = tCmds->hdr.act      = TC_CMDS_EFUSEWRITE;
+            resp = true;
+            break;
+
+        case 'O':
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId      = TC_CMDS_ID;
+            act = tCmds->hdr.act      = TC_CMDS_OTPSTREAMWRITE;
+            resp = true;
+            break;
+
+        case 'P':
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId      = TC_CMDS_ID;
+            act = tCmds->hdr.act      = TC_CMDS_OTPDUMP;
+            resp = true;
+            break;
+
+        case TCMD_PSAT_CAL:
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId = TC_CMDS_ID;
+            tCmds->hdr.u.parm.length = 0;    
+            tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;    
+            tCmds->hdr.act = TC_CMDS_PSAT_CAL;
+            resp = true;
+            break;
+
+        case TCMD_SINIT_WAIT:
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId = TC_CMDS_ID;
+            tCmds->hdr.u.parm.length = (uint16_t)0;    
+            tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;    
+            tCmds->hdr.act = TC_CMDS_SINIT_WAIT;
+            resp = true;
+            break;
+
+        case TCMD_PSAT_CAL_RESULT:
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId = TC_CMDS_ID;
+            {
+                tCmds->hdr.u.parm.length = 0;    
+                tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;    
+                tCmds->hdr.act = TC_CMDS_PSAT_CAL_RESULT;
+            }
+            resp = true;
+            bCalResult = false;
+            break;
+
+        case TCMD_CHAR_PSAT:
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId = TC_CMDS_ID;
+            {
+                tCmds->hdr.u.parm.length = 0;    
+                tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;    
+                tCmds->hdr.act = TC_CMDS_CHAR_PSAT;
+            }
+            // TBD: temporarily borrow the length's lower B for sweep entry
+            tCmds->hdr.u.parm.length &= 0xff00;
+            tCmds->hdr.u.parm.length |= (atoi(optarg)) & 0xff;
+            printf("optarg %s %d\n", optarg, tCmds->hdr.u.parm.length );
+
+            break;
+
+        case TCMD_CHAR_PSAT_RESULT:
+            cmd = TESTMODE_CMDS;
+            tCmds->hdr.testCmdId = TC_CMDS_ID;
+            {
+                tCmds->hdr.u.parm.length = NUM_PSAT_CHAR_PARMS;    
+                tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;    
+                tCmds->hdr.act = TC_CMDS_CHAR_PSAT_RESULT;
+            }
+            resp = true;
+            break;
+
+        default:
+            usage();
+        }
+     }
+
+     if ( cmd == TESTMODE_CMDS )
+     {
+         if ( tCmds->hdr.act == TC_CMDS_EFUSEWRITE )
+         {
+            int i;
+            /* Error check */
+            if (data_length == 0) {
+                printf("No data to write, exit..\n");
+                return 0;
+            } else if ((efuse_begin + data_length + 4) > TC_CMDS_SIZE_MAX) {
+                printf("Exceed eFuse border: %d, exit..\n", (TC_CMDS_SIZE_MAX - 1));
+                return 0;
+            }
+
+            /* PRINT */
+            printf("eFuse data (%d Bytes): ", data_length);
+            for (i = 0; i < data_length; i++) {
+                printf("%02X ", efuseWriteBuf[i]);
+            }
+            printf("\n");
+
+            /* Write address and data length */
+            tCmds->buf[0] = (efuse_begin & 0xFF);
+            tCmds->buf[1] = (efuse_begin >> 8) & 0xFF;
+            tCmds->buf[2] = (data_length & 0xFF);
+            tCmds->buf[3] = (data_length >> 8) & 0xFF;
+
+            /* Copy data to tcmd buffer. The first 4 bytes are the ID and length */
+            memcpy((void*)&(tCmds->buf[4]), (void*)&(efuseWriteBuf[0]), data_length);
+
+            /* Construct eFuse Write */
+            tCmds->hdr.u.parm.length  = (4 + data_length);
+            tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;
+        }
+        else if ( tCmds->hdr.act == TC_CMDS_OTPSTREAMWRITE )
+        {
+            int i;
+
+            /* Error check */
+            if (data_length == 0) {
+                printf("No data to write, exit..\n");
+                return 0;
+            } else if ((data_length + 4) > TC_CMDS_SIZE_MAX) {
+                printf("Exceed OTP size: %d, exit..\n", data_length);
+                return 0;
+            }
+
+            /* PRINT */
+            printf("Write OTP data (%d Bytes): ", data_length);
+            for (i = 0; i < data_length; i++) {
+                printf("%02X ", efuseWriteBuf[i]);
+            }
+            printf("\n");
+
+            /* Copy data to tcmd buffer. The first 4 bytes are the ID and length */
+            memcpy((void*)&(tCmds->buf[0]), (void*)&(efuseWriteBuf[0]), data_length);
+
+            /* Construct eFuse Write */
+            tCmds->hdr.u.parm.length  = data_length;
+            tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;
+        }
+        else if ( tCmds->hdr.act == TC_CMDS_OTPDUMP )
+        {
+            tCmds->hdr.u.parm.length  = 0;
+            tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;
+        }
+        else if ( tCmds->hdr.act == TC_CMDS_CHAR_PSAT )
+        {
+            uint32_t ii = tCmds->hdr.u.parm.length & 0xff;
+            uint8_t freq= (uint8_t)((tCmds->hdr.u.parm.length >> 8) & 0xff);
+            tCmds->hdr.u.parm.length = NUM_PSAT_CHAR_PARMS;
+            tCmds->buf[0] = psatSweepTbl[ii].an_txrf3_rdiv2g;
+            tCmds->buf[1] = psatSweepTbl[ii].an_txrf3_pdpredist2g;
+            tCmds->buf[2] = psatSweepTbl[ii].an_rxtx2_mxrgain;
+            tCmds->buf[3] = psatSweepTbl[ii].an_rxrf_bias1_pwd_ic25mxr2gh;
+            tCmds->buf[4] = psatSweepTbl[ii].an_bias2_pwd_ic25rxrf;
+            tCmds->buf[5] = psatSweepTbl[ii].an_bb1_i2v_curr2x;
+            tCmds->buf[6] = psatSweepTbl[ii].an_txrf3_capdiv2g;
+            tCmds->buf[7] = freq;
+            printf("freq %d %d %d %d %d %d %d %d\n", tCmds->buf[7], tCmds->buf[0], tCmds->buf[1], tCmds->buf[2], tCmds->buf[3],tCmds->buf[4], tCmds->buf[5], tCmds->buf[6]);
+        }
+    }
+
+    /* default bufferLength = sizeof(*txCmd)*/
+    if ( cmd == TESTMODE_CONT_TX )
+    {
+	bufferLength = sizeof(*txCmd);
+    }
+    else if ( cmd == TESTMODE_CONT_RX )
+    {
+	bufferLength = sizeof(*rxCmd);
+    }
+    else if ( cmd == TESTMODE_PM )
+    {
+	bufferLength = sizeof(*pmCmd);
+    }
+    else if ( cmd == TESTMODE_SETREG)
+    {
+	bufferLength = sizeof(*setRegCmd);
+    }
+    else if ( cmd == TESTMODE_CMDS )
+    {
+	bufferLength = sizeof(*tCmds);
+    }
+
+     printf("Cmd %d length %d respNeeded %d\n",cmd,bufferLength,resp);
+
+     err = tcmd_tx_init(ATH6KL_INTERFACE, rx_cb);
+
+     if (err)
+        return err;
+
+     if ( (cmd == TESTMODE_CMDS) && (tCmds->hdr.act == TC_CMDS_EFUSEDUMP) )
+     {
+        int i, k;
+        int blkNum;
+        uint16_t efuseEnd   = efuse_end;
+        uint16_t efuseBegin = efuse_begin;
+        uint16_t efusePrintAnkor;
+        uint16_t numPlaceHolder;
+
+        /* Input check */
+        if (efuseEnd > (VENUS_OTP_SIZE - 1)) {
+            efuseEnd = (VENUS_OTP_SIZE - 1);
+        }
+
+        if (efuseBegin > efuseEnd) {
+            efuseBegin = efuseEnd;
+        }
+
+        efusePrintAnkor = efuseBegin;
+
+        blkNum = ((efuseEnd - efuseBegin) / TC_CMDS_SIZE_MAX) + 1;
+
+        /* Request data in several trys */
+        for (i = 0; i < blkNum; i++) {
+            tCmds->hdr.testCmdId      = TC_CMDS_ID;
+            tCmds->hdr.act            = TC_CMDS_EFUSEDUMP;
+            tCmds->hdr.u.parm.length  = 4;
+            tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;
+
+            tCmds->buf[0] = (efuseBegin & 0xFF);
+            tCmds->buf[1] = (efuseBegin >> 8) & 0xFF;
+            tCmds->buf[2] = (efuseEnd & 0xFF);
+            tCmds->buf[3] = (efuseEnd >> 8) & 0xFF;
+
+            /* This field may get polluted so needs a refresh here */
+            tCmds->hdr.u.parm.bufLen = 4;
+
+            if ((err = tcmd_tx(buf, bufferLength /* weak */, resp))) {
+	        fprintf(stderr, "tcmd_tx had error: %s!\n", strerror(-err));
+                return 0;
+            }
+
+            /* Last block? */
+            //sTcCmds populated in the callback..
+            if ((efuseEnd - efuseBegin + 1) < TC_CMDS_SIZE_MAX) {
+                memcpy((void*)(efuseBuf + efuseBegin), (void*)&(sTcCmds.buf[0]), (efuseEnd - efuseBegin + 1));
+            } else {
+                memcpy((void*)(efuseBuf + efuseBegin), (void*)&(sTcCmds.buf[0]), TC_CMDS_SIZE_MAX);
+            }
+
+            /* Adjust the efuseBegin but keep efuseEnd unchanged */
+            efuseBegin += TC_CMDS_SIZE_MAX;
+         }
+
+         /* Output Dump */
+         printf("------------------- eFuse Dump ----------------------");
+         for (i = efusePrintAnkor; i <= efuseEnd; i++) {
+             /* Cosmetics */
+             if (i == efusePrintAnkor) {
+                 numPlaceHolder = (efusePrintAnkor & 0x0F);
+                 printf("\n%04X:", (efusePrintAnkor & 0xFFF0));
+                 for (k = 0; k < numPlaceHolder; k++) {
+                     printf("   ");
+                  }
+             } else if ((i & 0x0F) == 0) {
+                 printf("\n%04X:", i);
+             }
+
+             printf(" %02X", efuseBuf[i]);
+         }
+         printf("\n\n");
+     }
+     else if ( (cmd == TESTMODE_CMDS) && (tCmds->hdr.act == TC_CMDS_SINIT_WAIT) )
+     {
+         if ((err = tcmd_tx(buf, bufferLength /* weak */, resp))) {
+	    fprintf(stderr, "tcmd_tx had error: %s!\n", strerror(-err));
+            return 0;
+          }
+
+         sleep(FIRST_WAIT_INTERVAL); /* Wait 2s first */
+
+         /* Request data in several trys */
+         for (i = 0; i < MAX_WAIT_CYCLE; i++) {
+             tCmds->hdr.testCmdId      = TC_CMDS_ID;
+             tCmds->hdr.u.parm.length  = (uint16_t)0;    
+             tCmds->hdr.u.parm.version = TC_CMDS_VERSION_TS;    
+             tCmds->hdr.act            = TC_CMDS_PSAT_CAL_RESULT;
+             resp = true;
+             bCalResult = false;
+
+             if ((err = tcmd_tx(buf, bufferLength /* weak */, resp))) {
+	        /*don't let main return bcs the reply may not be ready. Try again.*/
+                /*fprintf(stderr, "tcmd_tx had error: %s!\n", strerror(-err));*/
+                /*return 0;*/
+             }
+             if (!bCalResult) {
+                 sleep(POLLING_INTERVAL);
+                 printf(".");
+             } else {
+                 endTime = time(NULL);
+                 printf("Wait time = %ld(s)\n", (endTime - startTime));
+                 break;
+             }
+          }
+     }
+     else
+     {
+         if ((err = tcmd_tx(buf, bufferLength /* weak */, resp))) {
+	    fprintf(stderr, "tcmd_tx had error: %s!\n", strerror(-err));
+          }
+    }
+
+     return 0;
+}
+
+static void rxReport(void *buf)
+{
+	struct TCMD_CONT_RX_REPORT *report = &((TCMD_CONT_RX *) buf)->u.report;
+	uint32_t pkt = report->totalPkt;
+	int32_t rssi = report->rssiInDBm;
+	uint32_t crcError = report->crcErrPkt;
+	uint32_t secErr = report->secErrPkt;
+	uint16_t *rateCnt = report->rateCnt;
+	uint16_t *rateCntShortGuard = report->rateCntShortGuard;
+
+	printf
+	    ("total pkt %d ; crcError pkt %d ; secErr pkt %d ;  average rssi %d\n",
+	     pkt, crcError, secErr,
+	     (int32_t) (pkt ? (rssi / (int32_t) pkt) : 0));
+
+	printf("1Mbps     %d\n", rateCnt[0]);
+	printf("2Mbps     %d\n", rateCnt[1]);
+	printf("5.5Mbps   %d\n", rateCnt[2]);
+	printf("11Mbps    %d\n", rateCnt[3]);
+	printf("6Mbps     %d\n", rateCnt[4]);
+	printf("9Mbps     %d\n", rateCnt[5]);
+	printf("12Mbps    %d\n", rateCnt[6]);
+	printf("18Mbps    %d\n", rateCnt[7]);
+	printf("24Mbps    %d\n", rateCnt[8]);
+	printf("36Mbps    %d\n", rateCnt[9]);
+	printf("48Mbps    %d\n", rateCnt[10]);
+	printf("54Mbps    %d\n", rateCnt[11]);
+	printf("\n");
+	printf("HT20 MCS0 6.5Mbps   %d (SGI: %d)\n", rateCnt[12],
+	       rateCntShortGuard[12]);
+	printf("HT20 MCS1 13Mbps    %d (SGI: %d)\n", rateCnt[13],
+	       rateCntShortGuard[13]);
+	printf("HT20 MCS2 19.5Mbps  %d (SGI: %d)\n", rateCnt[14],
+	       rateCntShortGuard[14]);
+	printf("HT20 MCS3 26Mbps    %d (SGI: %d)\n", rateCnt[15],
+	       rateCntShortGuard[15]);
+	printf("HT20 MCS4 39Mbps    %d (SGI: %d)\n", rateCnt[16],
+	       rateCntShortGuard[16]);
+	printf("HT20 MCS5 52Mbps    %d (SGI: %d)\n", rateCnt[17],
+	       rateCntShortGuard[17]);
+	printf("HT20 MCS6 58.5Mbps  %d (SGI: %d)\n", rateCnt[18],
+	       rateCntShortGuard[18]);
+	printf("HT20 MCS7 65Mbps    %d (SGI: %d)\n", rateCnt[19],
+	       rateCntShortGuard[19]);
+	printf("\n");
+	printf("HT40 MCS0 13.5Mbps    %d (SGI: %d)\n", rateCnt[20],
+	       rateCntShortGuard[20]);
+	printf("HT40 MCS1 27.0Mbps    %d (SGI: %d)\n", rateCnt[21],
+	       rateCntShortGuard[21]);
+	printf("HT40 MCS2 40.5Mbps    %d (SGI: %d)\n", rateCnt[22],
+	       rateCntShortGuard[22]);
+	printf("HT40 MCS3 54Mbps      %d (SGI: %d)\n", rateCnt[23],
+	       rateCntShortGuard[23]);
+	printf("HT40 MCS4 81Mbps      %d (SGI: %d)\n", rateCnt[24],
+	       rateCntShortGuard[24]);
+	printf("HT40 MCS5 108Mbps     %d (SGI: %d)\n", rateCnt[25],
+	       rateCntShortGuard[25]);
+	printf("HT40 MCS6 121.5Mbps   %d (SGI: %d)\n", rateCnt[26],
+	       rateCntShortGuard[26]);
+	printf("HT40 MCS7 135Mbps     %d (SGI: %d)\n", rateCnt[27],
+	       rateCntShortGuard[27]);
+
+}
+
+static void readThermal(void *buf,int len)
+{
+    TC_CMDS *tCmd;
+
+    tCmd = (TC_CMDS *)buf;
+
+    printf("Length rx cb rcvd %d\n",len);
+    printf("act %d version %d length %d\n",tCmd->hdr.act,tCmd->hdr.u.parm.version,tCmd->hdr.u.parm.length);
+    printf("chip thermal value:%d\n", tCmd->buf[0]);
+    return;
+}
+
+static void getMac(void *buf,int len)
+{
+    TC_CMDS *tCmd;
+
+    tCmd = (TC_CMDS *)buf;
+
+    printf("Length rx cb rcvd %d\n",len);
+    printf("act %d version %d length %d\n",tCmd->hdr.act,tCmd->hdr.u.parm.version,tCmd->hdr.u.parm.length);
+    printf("MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n", tCmd->buf[0], tCmd->buf[1], tCmd->buf[2], tCmd->buf[3], tCmd->buf[4], tCmd->buf[5]);
+    return;
+}
+
+static void cmdReply(void *buf, int len)
+{
+    TC_CMDS  tCmdReply;
+    TC_MSG *pTCMsg;
+    uint32_t act;
+    uint16_t wBytes;
+    int i=0;
+
+    printf("Length rx cb rcvd %d\n",len);
+
+    buf = (void*)((uint8_t*)buf + (2 * sizeof(unsigned int)));
+
+    uint8_t *reply = (uint8_t*)buf;
+
+    tCmdReply.hdr.u.parm.length = *(uint16_t *)&(reply[0]);
+    tCmdReply.hdr.u.parm.version = (uint8_t)(reply[2]);
+    act = tCmdReply.hdr.u.parm.version;
+    pTCMsg = (TC_MSG *)&(tCmdReply.buf[0]);
+
+    /* Error Check */
+    if (tCmdReply.hdr.u.parm.length > (TC_CMDS_SIZE_MAX + 1)) {
+        printf("Error: Reply lenth=%d, limit=%d\n", tCmdReply.hdr.u.parm.length, TC_CMDS_SIZE_MAX);
+        return;
+    } else {
+        ;
+    }
+
+    if (tCmdReply.hdr.u.parm.length > 0) {
+        memcpy((void*)&(tCmdReply.buf), (void*)((uint8_t*)buf+4),  tCmdReply.hdr.u.parm.length);
+        memcpy((void*)&(sTcCmds.buf[0]), (void*)&(tCmdReply.buf[0]),  tCmdReply.hdr.u.parm.length);
+        sTcCmds.hdr.u.parm.length = tCmdReply.hdr.u.parm.length;
+   }
+
+    switch (act) {
+        case TC_CMDS_EFUSEDUMP:
+            printf("eFuse data:\n");
+            break;
+        case TC_CMDS_EFUSEWRITE:
+            printf("(write eFuse data)\n");
+            wBytes = ((sTcCmds.buf[1] << 8) | sTcCmds.buf[0]);
+            printf("%d bytes written to eFuse.\n", wBytes);
+            break;
+        case TC_CMDS_OTPSTREAMWRITE:
+            printf("(OTP stream write)\n");
+
+            if (sTcCmds.buf[0] == A_OK) {
+                printf("Write %d bytes to OTP\n", data_length);
+            } else {
+                printf("Failed to write OTP\n");
+            }
+            break;
+        case TC_CMDS_OTPDUMP:
+            printf("OTP Dump\n");
+            if (sTcCmds.hdr.u.parm.length) {
+                /* Received bytes are in sTcCmds */
+                for (i = 0; i < sTcCmds.hdr.u.parm.length; i++) {
+                    printf("%02x ", sTcCmds.buf[i]);
+                }
+                printf("\n");
+            } else {
+                printf("No valid stream found in OTP!\n");
+            }
+            break;
+        case TC_CMDS_PSAT_CAL:
+            break;
+        case TC_CMDS_SINIT_WAIT:
+            if (TC_MSG_PSAT_CAL_ACK == (TC_MSG_ID)pTCMsg->msgId) {
+                printf("ACK Received.\n");
+            }
+            break;
+        case TC_CMDS_PSAT_CAL_RESULT:
+            if (TC_MSG_PSAT_CAL_RESULTS == (TC_MSG_ID)pTCMsg->msgId) {
+              // update CAL data, read eeprom bin,  re-generate eeprom bin
+              updateCALData(&calSetup, pTCMsg);
+              bCalResult = true;
+            }
+            break;
+        case TC_CMDS_CHAR_PSAT:
+            break;
+        case TC_CMDS_CHAR_PSAT_RESULT:
+            if (TC_MSG_CHAR_PSAT_RESULTS == (TC_MSG_ID)pTCMsg->msgId) {
+              dumpPSATCharResult2File(pTCMsg);
+            }
+            break;
+        default:
+            printf("Invalid action!\n");
+            break;
+    }
+}
+
+static void rx_cb(void *buf, int len)
+{
+	TCMD_ID tcmd;
+
+	if ( cmd == TESTMODE_CMDS )
+        {
+            if ( act == TC_CMDS_READTHERMAL )
+            {
+                readThermal(buf,len);
+	    }
+            else
+            {
+               cmdReply(buf,len);
+            }
+
+            return;
+        }
+
+	if ( cmd == TESTMODE_CONT_RX )
+	{
+            if ( act == TCMD_CONT_RX_GETMAC )
+            {
+                getMac(buf, len);
+            }
+	}
+
+	tcmd = * ((uint32_t *) buf + 1);
+
+	switch (tcmd) {
+	case TCMD_CONT_RX_REPORT:
+		rxReport(buf);
+		break;
+	default:
+		 break;
+	}
+
+}
+
+static uint32_t freqValid(uint32_t val)
+{
+	do {
+		if (val <= A_CHAN_MAX) {
+			uint16_t freq;
+
+			if (val < BG_CHAN_MIN)
+				break;
+
+			freq = wmic_ieee2freq(val);
+			if (INVALID_FREQ == freq)
+				break;
+			else
+				return freq;
+		}
+
+		if ((val == BG_FREQ_MAX) ||
+		    ((val < BG_FREQ_MAX) && (val >= BG_FREQ_MIN)
+		     && !((val - BG_FREQ_MIN) % 5)))
+			return val;
+		else if ((val >= A_FREQ_MIN) && (val < A_20MHZ_BAND_FREQ_MAX)
+			 && !((val - A_FREQ_MIN) % 20))
+			return val;
+		else if ((val >= A_20MHZ_BAND_FREQ_MAX) && (val <= A_FREQ_MAX)
+			 && !((val - A_20MHZ_BAND_FREQ_MAX) % 5))
+			return val;
+	} while (false);
+
+	A_ERR(-1, "Invalid channel or freq #: %d !\n", val);
+	return 0;
+}
+
+static uint32_t rateValid(uint32_t val, uint32_t freq)
+{
+	if (((freq >= A_FREQ_MIN) && (freq <= A_FREQ_MAX)
+	     && (val >= A_RATE_NUM)) || ((freq >= BG_FREQ_MIN)
+					 && (freq <= BG_FREQ_MAX)
+					 && (val >= G_RATE_NUM))) {
+		printf("Invalid rate value %d for frequency %d! \n", val, freq);
+		prtRateTbl(freq);
+		A_ERR(-1, "Invalid rate value %d for frequency %d! \n", val,
+		      freq);
+	}
+
+	return val;
+}
+
+static void prtRateTbl(uint32_t freq)
+{
+	int i;
+
+	for (i = 0; i < G_RATE_NUM; i++) {
+		printf("<rate> %d \t \t %s \n", i, bgRateStrTbl[i]);
+	}
+	printf("\n");
+}
+
+/*
+ * converts ieee channel number to frequency
+ */
+static uint16_t wmic_ieee2freq(uint32_t chan)
+{
+	if (chan == BG_CHAN_MAX) {
+		return BG_FREQ_MAX;
+	}
+	if (chan < BG_CHAN_MAX) {	/* 0-13 */
+		return (BG_CHAN0_FREQ + (chan * 5));
+	}
+	if (chan <= A_CHAN_MAX) {
+		return (A_CHAN0_FREQ + (chan * 5));
+	} else {
+		return INVALID_FREQ;
+	}
+}
+
+static uint32_t antValid(uint32_t val)
+{
+	if (val > 2) {
+		A_ERR(-1,
+		      "Invalid antenna setting! <0: auto;  1/2: ant 1/2>\n");
+	}
+
+	return val;
+}
+
+static bool txPwrValid(TCMD_CONT_TX * txCmd)
+{
+	bool rc = false;
+	if (txCmd->mode == TCMD_CONT_TX_SINE) {
+		if ((txCmd->txPwr >= 0) && (txCmd->txPwr <= 150))
+			rc = true;
+	} else if (txCmd->mode == TCMD_CONT_TX_OFFSETTONE) {
+		if ((txCmd->txPwr >= 0) && (txCmd->txPwr <= 150))
+			rc = true;
+	} else if (txCmd->mode != TCMD_CONT_TX_OFF) {
+		if (txCmd->tpcm != TPC_FORCED_GAIN) {
+			if ((txCmd->txPwr >= -30) && (txCmd->txPwr <= 60))
+				rc = true;
+		} else {
+			if ((txCmd->txPwr >= 0) && (txCmd->txPwr <= 120))
+				rc = true;
+		}
+	} else if (txCmd->mode == TCMD_CONT_TX_OFF) {
+		rc = true;
+	}
+
+	if (!rc)
+		A_ERR(1,
+		"Invalid Tx Power value! \nTx data: [-15 - 14]dBm  \nTx sine: [  0 - 150]PCDAC value\n");
+	return rc;
+}
+
+static uint32_t pktSzValid(uint32_t val)
+{
+	if ((val < 32) || (val > 1500)) {
+		A_ERR(-1, "Invalid package size! < 32 - 1500 >\n");
+	}
+	return val;
+}
+
+#ifdef NOTYET
+
+// Validate a hex character
+static bool _is_hex(char c)
+{
+	return (((c >= '0') && (c <= '9')) ||
+		((c >= 'A') && (c <= 'F')) || ((c >= 'a') && (c <= 'f')));
+}
+
+// Convert a single hex nibble
+static int _from_hex(char c)
+{
+	int ret = 0;
+
+	if ((c >= '0') && (c <= '9')) {
+		ret = (c - '0');
+	} else if ((c >= 'a') && (c <= 'f')) {
+		ret = (c - 'a' + 0x0a);
+	} else if ((c >= 'A') && (c <= 'F')) {
+		ret = (c - 'A' + 0x0A);
+	}
+	return ret;
+}
+
+// Convert a character to lower case
+static char _tolower(char c)
+{
+	if ((c >= 'A') && (c <= 'Z')) {
+		c = (c - 'A') + 'a';
+	}
+	return c;
+}
+
+// Validate alpha
+static bool isalpha(int c)
+{
+	return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')));
+}
+
+// Validate digit
+static bool isdigit(int c)
+{
+	return ((c >= '0') && (c <= '9'));
+}
+
+// Validate alphanum
+static bool isalnum(int c)
+{
+	return (isalpha(c) || isdigit(c));
+}
+#endif
+
+/*------------------------------------------------------------------*/
+/*
+ * Input an Ethernet address and convert to binary.
+ */
+static int ath_ether_aton(const char *orig, uint8_t * eth)
+{
+	int mac[6];
+	if (sscanf(orig, "%02x:%02x:%02X:%02X:%02X:%02X",
+		   &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) == 6) {
+		int i;
+#ifdef DEBUG
+		if (*(orig + 12 + 5) != 0) {
+			fprintf(stderr, "%s: trailing junk '%s'!\n", __func__,
+				orig);
+			return -1;
+		}
+#endif
+		for (i = 0; i < 6; ++i)
+			eth[i] = mac[i] & 0xff;
+		return 0;
+	}
+	return -1;
+}
+
+// Read "golden" eeprom bin
+// Update it with CAL data
+
+bool readCalDataFromFileBin(char *fileName, AR6003_EEPROM *eepromData)
+{
+    FILE *fp;
+    bool rc=true;
+    uint32_t numBytes;
+
+    printf("readCalDataFromFile - reading EEPROM file %s\n",fileName);
+    if( (fp = fopen(fileName, "rb")) == NULL) {
+        _printf("Could not open %s to read\n", fileName);
+        return false;
+    }
+
+    if (AR6K_EEPROM_SIZE_LARGEST == (numBytes = fread((uint8_t *)eepromData, 1, AR6K_EEPROM_SIZE_LARGEST, fp))) {
+        printf("Read %d from %s\n", numBytes, fileName);  
+        rc = true;
+    }
+    else {
+        if (feof(fp)) {
+            printf("good Read %d from %s\n", numBytes, fileName);  
+            rc = true;
+        } 
+        else if (ferror(fp)) {
+            _printf("Error reading %s\n", fileName);
+            rc = false;
+        }
+        else { _printf("Unknown fread rc\n"); rc = false; }
+    }
+    if (fp) fclose(fp);
+
+    if (rc) {
+        if ((eepromData->baseEepHeader.version & AR6003_EEP_VER_MINOR_MASK) >= AR6003_EEP_MINOR_VER10) {
+            if (AR6K_EEPROM_SIZE_LARGEST != numBytes) {
+                printf("Num of bytes read %d mismatch expected %d\n", numBytes, AR6K_EEPROM_SIZE_LARGEST);
+                rc = false;
+            }
+            else {
+                AR6K_EEPROM_SIZE = AR6003_EEPROM_SIZE = AR6K_EEPROM_SIZE_LARGEST;
+                printf("New TPC scheme selected! %x %d\n", eepromData->baseEepHeader.version, AR6K_EEPROM_SIZE);
+            }
+        }
+        else {
+            _printf("EEPROM file version %d not supported, please re-calibrate it.\n", eepromData->baseEepHeader.version);
+            rc = false;
+        }
+    }
+    return rc;
+}
+
+#define _PSAT_COMMON_4_HOST
+
+// if host doesn't support math.h, this section can be skipped, it is purely for data gathering
+static double cmacPwr(double cmac)
+{
+    double pwr;
+    double vfull=1.0, cycles = -15.0;
+
+    pwr = 10*log10(4*((double)cmac)*((double)pow(2.0, cycles))*((double)pow(vfull/512, 2)));
+    return(pwr);
+}
+static bool dumpPSATCharResult2File(TC_MSG *pTCMsg)
+{
+    FILE *dbgFp;
+    int i;
+    uint32_t cmac_i;
+
+#ifdef ANDROID
+    if ( (dbgFp = fopen("/persist/psatCharData.csv", "a+")) == NULL) {
+        printf("Error: open _psatCharData.csv\n");
+        return(false);
+    }
+#else
+    if ( (dbgFp = fopen("_psatCharData.csv", "a+")) == NULL) {
+        printf("Error: open _psatCharData.csv\n");
+        return(false);
+    }
+#endif
+    
+    fprintf(dbgFp, "%d, %d, %d, %d, %d, %d, %d, %d\n", 
+    pTCMsg->msg.psatCharResults.freq, 
+    pTCMsg->msg.psatCharResults.an_txrf3_rdiv2g, 
+    pTCMsg->msg.psatCharResults.an_txrf3_pdpredist2g, 
+    pTCMsg->msg.psatCharResults.an_rxtx2_mxrgain, 
+    pTCMsg->msg.psatCharResults.an_rxrf_bias1_pwd_ic25mxr2gh, 
+    pTCMsg->msg.psatCharResults.an_bias2_pwd_ic25rxrf, 
+    pTCMsg->msg.psatCharResults.an_bb1_i2v_curr2x, 
+    pTCMsg->msg.psatCharResults.an_txrf3_capdiv2g); 
+    for (i=0;i<_MAX_TX_GAIN_ENTRIES;i++) {
+        cmac_i = pTCMsg->msg.psatCharResults.cmac_i[i]; 
+        fprintf(dbgFp, "%d, %d, %f, %d\n", pTCMsg->msg.psatCharResults.pcdac[i], cmac_i, cmacPwr(cmac_i), cmac2Pwr_t10(cmac_i)); 
+    }
+
+    if (dbgFp) fclose(dbgFp);
+    return(true); 
+}
+   
+uint16_t computeChecksumOnly(uint16_t *pHalf, uint16_t length)
+{
+    uint16_t sum = 0, i;
+    for (i = 0; i < length; i++) { sum ^= *pHalf++; }
+    return(sum);
+}
+
+void computeChecksum(AR6003_EEPROM *pEepStruct)
+{
+  uint16_t sum, *pHalf;
+  uint8_t eepromVersion;
+    
+  eepromVersion = pEepStruct->baseEepHeader.version & AR6003_EEP_VER_MINOR_MASK;
+  if (eepromVersion >= AR6003_EEP_MINOR_VER5) {
+    // first checksum
+    pEepStruct->baseEepHeader.checksum = 0x0000;
+    pHalf = (uint16_t *)pEepStruct;
+    sum = computeChecksumOnly(pHalf, AR6K_EEPROM_SIZE_PRIOR_VER4/2);
+    pEepStruct->baseEepHeader.checksum = 0xFFFF ^ sum;
+
+    // second (expanded checksum)
+    pEepStruct->checksumExpanded = 0x0000;
+    pHalf = (uint16_t *)pEepStruct;
+    pHalf += AR6K_EEPROM_SIZE_PRIOR_VER4/2;
+    sum = computeChecksumOnly(pHalf, (AR6003_EEPROM_SIZE - AR6K_EEPROM_SIZE_PRIOR_VER4)/2);
+    pEepStruct->checksumExpanded = 0xFFFF ^ sum;
+
+    _printf("--computeChecksum old 0x%x expanded 0x%x\n", pEepStruct->baseEepHeader.checksum, pEepStruct->checksumExpanded);
+  }
+  else {
+    pEepStruct->baseEepHeader.checksum = 0x0000;
+    pHalf = (uint16_t *)pEepStruct;
+    sum = computeChecksumOnly(pHalf, AR6K_EEPROM_SIZE_PRIOR_VER4/2);
+    pEepStruct->baseEepHeader.checksum = 0xFFFF ^ sum;
+    _printf("--computeChecksum old 0x%x\n", pEepStruct->baseEepHeader.checksum);
+  }
+}
+
+bool genEepromBinFile(char *fileName, AR6003_EEPROM *pEepStruct) 
+{
+    FILE *fp;
+    
+    // re-computing checksum
+    pEepStruct->baseEepHeader.checksum = 0;
+    computeChecksum(pEepStruct);
+
+    if ( (fp = fopen(fileName, "wb")) == NULL) {
+        _printf("Error: open to write eeprom bin %s \n", fileName);
+        return false;
+    }
+    if (sizeof(AR6003_EEPROM) != fwrite((uint8_t *)pEepStruct, 1, sizeof(AR6003_EEPROM), fp)) {
+        _printf("Error: writing to %s\n", fileName);
+    }
+    if (fp) fclose(fp);
+    return(true);
+}
+
+static void updateCALData(_CAL_SETUP *pCalSetup, TC_MSG *pTCMsg)
+{
+    bool rc;
+    AR6003_EEPROM     eepromData, *pEeprom=&eepromData;
+    AR6003_BASE_EEP_HEADER   *pBase;
+    AR6003_CAL_DATA_PER_FREQ_OLPC_EXPANDED *pRawDataSet2G_ext, *pRawDataSet5G_ext;
+    uint8_t  *pCalChans2G, *pCalChans5G;
+    uint32_t numPiers2G, numPiers5G;
+    uint32_t i; 
+    
+    // read in golden bin 
+    rc = readCalDataFromFileBin(pCalSetup->goldenBinFilename, pEeprom);
+    assert(rc);
+    printf("Read %s\n", pCalSetup->goldenBinFilename);
+
+    numPiers2G = numPiers5G = 0;
+    pBase = &(pEeprom->baseEepHeader);
+
+    {
+        if (pBase->opCapFlags & WLAN_11G_CAPABILITY) { 
+            pRawDataSet2G_ext = pEeprom->calPierData2GExpanded;
+            pCalChans2G = pEeprom->calFreqPier2GExpanded;
+            for (numPiers2G = 0; numPiers2G < AR6003_NUM_2G_CAL_PIERS_EXPANDED; numPiers2G++) {
+                if (pCalChans2G[numPiers2G] == AR6003_BCHAN_UNUSED) {
+                    break;
+                }
+            }
+        }
+
+        if (pBase->opCapFlags & WLAN_11A_CAPABILITY) {
+            pRawDataSet5G_ext = pEeprom->calPierData5GExpanded;
+            pCalChans5G = pEeprom->calFreqPier5GExpanded;
+            for (numPiers5G = 0; numPiers5G < AR6003_NUM_5G_CAL_PIERS_EXPANDED; numPiers5G++) {
+                if (pCalChans5G[numPiers5G] == AR6003_BCHAN_UNUSED) {
+                    break;
+                }
+            }
+        }
+    }
+
+    PSAT_CAL_RESULTS *pPsatCalResults = &(pTCMsg->msg.psatCalResults);
+
+    for (i=0;i<numPiers2G;i++) {
+                printf("%d %d %d %d %d %.2f %.2f %d %d 0x%x %d %d 0x%x\n", pPsatCalResults->olpcGainTherm2G[i].olpcGainDelta_diff, pPsatCalResults->olpcGainTherm2G[i].olpcGainDelta_abs, pPsatCalResults->olpcGainTherm2G[i].thermCalVal,
+                    pPsatCalResults->olpcGainTherm2G[i].cmac_psat, pPsatCalResults->olpcGainTherm2G[i].cmac_olpc,
+                    cmacPwr(pPsatCalResults->olpcGainTherm2G[i].cmac_psat), cmacPwr(pPsatCalResults->olpcGainTherm2G[i].cmac_olpc),
+                    pPsatCalResults->olpcGainTherm2G[i].cmac_psat_pcdac, pPsatCalResults->olpcGainTherm2G[i].cmac_olpc_pcdac,
+                    pPsatCalResults->olpcGainTherm2G[i].numTryBF, 
+                    pPsatCalResults->olpcGainTherm2G[i].lineSlope, pPsatCalResults->olpcGainTherm2G[i].lineVariance,
+                    pPsatCalResults->olpcGainTherm2G[i].psatParm);
+            //}
+    }
+    for (i=0;i<numPiers5G ;i++) {
+                printf("%d %d %d %d %d %.2f %.2f %d %d 0x%x\n", pPsatCalResults->olpcGainTherm5G[i].olpcGainDelta_diff, pPsatCalResults->olpcGainTherm5G[i].olpcGainDelta_abs, pPsatCalResults->olpcGainTherm5G[i].thermCalVal,
+                    pPsatCalResults->olpcGainTherm5G[i].cmac_psat, pPsatCalResults->olpcGainTherm5G[i].cmac_olpc,
+                    cmacPwr(pPsatCalResults->olpcGainTherm5G[i].cmac_psat), cmacPwr(pPsatCalResults->olpcGainTherm5G[i].cmac_olpc),
+                    pPsatCalResults->olpcGainTherm5G[i].cmac_psat_pcdac, pPsatCalResults->olpcGainTherm5G[i].cmac_olpc_pcdac,
+                    pPsatCalResults->olpcGainTherm5G[i].numTryBF);
+            //}
+    }
+
+    for (i=0;i<numPiers2G;i++) {
+        if (pEeprom->baseEepHeader.boardFlagsExt & AR6003_BOARDFLAGSEXT_PSAT_CAL_ABS) {
+            pRawDataSet2G_ext[i].olpcBasic.olpcGainDelta = (int8_t)  (pPsatCalResults->olpcGainTherm2G[i].olpcGainDelta_abs); 
+            pRawDataSet2G_ext[i].olpcGainDelta_t10       = (int16_t) (pPsatCalResults->olpcGainTherm2G[i].olpcGainDelta_abs *5);
+        }
+        else {
+            pRawDataSet2G_ext[i].olpcBasic.olpcGainDelta = (int8_t)  (pPsatCalResults->olpcGainTherm2G[i].olpcGainDelta_diff); 
+            pRawDataSet2G_ext[i].olpcGainDelta_t10       = (int16_t) (pPsatCalResults->olpcGainTherm2G[i].olpcGainDelta_diff *5);
+        }
+        pRawDataSet2G_ext[i].olpcBasic.thermCalVal   = (uint8_t) pPsatCalResults->olpcGainTherm2G[i].thermCalVal;
+    }
+
+    for (i=0;i<numPiers5G;i++) {
+        if (pEeprom->baseEepHeader.boardFlagsExt & AR6003_BOARDFLAGSEXT_PSAT_CAL_ABS) {
+        pRawDataSet5G_ext[i].olpcBasic.olpcGainDelta = (int8_t)pPsatCalResults->olpcGainTherm5G[i].olpcGainDelta_abs; 
+        }
+        else {
+        pRawDataSet5G_ext[i].olpcBasic.olpcGainDelta = (int8_t)pPsatCalResults->olpcGainTherm5G[i].olpcGainDelta_diff; 
+        }
+        pRawDataSet5G_ext[i].olpcBasic.thermCalVal   = (uint8_t)pPsatCalResults->olpcGainTherm5G[i].thermCalVal;
+        pRawDataSet5G_ext[i].olpcGainDelta_t10       = (int16_t)(pPsatCalResults->olpcGainTherm5G[i].olpcGainDelta_diff * 5); 
+    }
+    
+    memcpy((void*)&(pEeprom->baseEepHeader.custData[0]), pCalSetup->label, sizeof(pCalSetup->label));
+    
+    // Generate bin
+    if (pEeprom->baseEepHeader.boardFlagsExt & AR6003_BOARDFLAGSEXT_PSAT_CAL_GEN_EEPROM) {
+    rc = genEepromBinFile(pCalSetup->outputBinFilename, pEeprom);
+    assert(rc);
+    }
+
+    return;
+}
+
diff --git a/ath6kl-tcmd/athtestcmd.h b/ath6kl-tcmd/athtestcmd.h
new file mode 100644
index 0000000..0b0977f
--- /dev/null
+++ b/ath6kl-tcmd/athtestcmd.h
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef _TCMD_H_
+#define _TCMD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+enum {
+    TESTMODE_CONT_TX = 801,     /* something that doesn't collide with ascii */
+    TESTMODE_CONT_RX,
+    TESTMODE_PM,
+    TESTMODE_SETLPREAMBLE,
+    TESTMODE_SETREG,
+    TESTMODE_CMDS,
+};
+
+enum {
+    TCMD_SET_RX_LPL=501,     /* something that doesn't collide with ascii */
+    TCMD_EFUSE_START=502,
+    TCMD_EFUSE_END=503,
+    TCMD_EFUSE_DATA=504,
+    TCMD_EFUSE_DUMP=505,
+    TCMD_EFUSE_WRITE=506,
+    TCMD_OTP_DUMP=507,
+    TCMD_OTP_WRITE=508,
+    TCMD_READ_THERMAL=509,
+    TCMD_PSAT_CAL=510,
+    TCMD_PSAT_CAL_RESULT,
+    TCMD_PM_CAL_RESULT, 
+    TCMD_PM_CAL,
+    TCMD_UPDATE_CAL_OTP, 
+    TCMD_CHAR_PSAT,
+    TCMD_CHAR_PSAT_RESULT,    
+    TCMD_SINIT_WAIT,
+};
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* _TCMD_H_ */
diff --git a/ath6kl-tcmd/psatUtil b/ath6kl-tcmd/psatUtil
new file mode 100755
index 0000000..223a0a9
--- /dev/null
+++ b/ath6kl-tcmd/psatUtil
Binary files differ
diff --git a/ath6kl-tcmd/psatUtil.c b/ath6kl-tcmd/psatUtil.c
new file mode 100644
index 0000000..b8a79ef
--- /dev/null
+++ b/ath6kl-tcmd/psatUtil.c
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <linux/types.h>
+#include <linux/if.h>
+#include <linux/wireless.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <math.h>
+
+#include "testcmd.h"
+#include "athtestcmd.h"
+#include "sinit_common.h"
+
+#ifdef ATHTESTCMD_LIB
+#include <setjmp.h>
+extern void testcmd_error(int code, const char *fmt, ...);
+#define A_ERR testcmd_error
+#else
+#define A_ERR err
+#endif
+
+// defines
+
+#define strnicmp strncmp
+
+typedef unsigned long A_UINT32;
+typedef unsigned char A_UINT8;
+typedef int           A_BOOL;
+
+#ifdef ANDROID
+#define _TCMD_PATH "/system/bin/athtestcmd -i wlan0"
+#else
+#define _TCMD_PATH "./athtestcmd -i wlan0"
+#endif
+
+int main(void)
+{
+    char  cmd[128];
+    A_UINT32 i;
+    A_UINT32 freq;
+
+#ifdef ANDROID
+    system("insmod /system/lib/modules/cfg80211.ko");
+    sleep(2);
+
+    system("insmod /system/lib/modules/ath6kl_sdio.ko testmode=2");
+    sleep(3);
+#else
+    system("insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko testmode=2");
+    sleep(3);
+#endif
+
+    freq=2412;
+
+    for (i = 0; i < NumEntriesPSTSweepTable; i++) 
+    {
+            sprintf(cmd, "%s --psat_char %ld --txfreq %ld", _TCMD_PATH, i, freq);
+            //printf("%s\n", cmd);
+            system(cmd);
+            sprintf(cmd, "%s --psat_char_result", _TCMD_PATH);
+            //printf("%s\n", cmd);
+            system(cmd);
+            sleep(1);
+    }
+
+#ifdef ANDROID
+    system("rmmod ath6kl_sdio");
+    sleep(1);
+    system("rmmod cfg80211");
+#else
+    system("rmmod ath6kl_sdio.ko");
+#endif
+
+    return 0;
+}
+
diff --git a/ath6kl-tcmd/sinit_common.c b/ath6kl-tcmd/sinit_common.c
new file mode 100644
index 0000000..56214ce
--- /dev/null
+++ b/ath6kl-tcmd/sinit_common.c
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <stdint.h>
+#include "testcmd.h"
+#include "sinit_common.h"
+
+PSAT_SWEEP_TABLE psatSweepTbl[] = {
+{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+{3, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+{0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
+{3, 1, 0, 0, 0, 0, 0, 0, 0, 0},
+{0, 0, 3, 0, 0, 0, 0, 0, 0, 0},
+{3, 0, 3, 0, 0, 0, 0, 0, 0, 0},
+{0, 1, 3, 0, 0, 0, 0, 0, 0, 0},
+{3, 1, 3, 0, 0, 0, 0, 0, 0, 0},
+{0, 0, 0, 3, 0, 0, 0, 0, 0, 0},
+{3, 0, 0, 3, 0, 0, 0, 0, 0, 0},
+{0, 1, 0, 3, 0, 0, 0, 0, 0, 0},
+{3, 1, 0, 3, 0, 0, 0, 0, 0, 0},
+{0, 0, 3, 3, 0, 0, 0, 0, 0, 0},
+{3, 0, 3, 3, 0, 0, 0, 0, 0, 0},
+{0, 1, 3, 3, 0, 0, 0, 0, 0, 0},
+{3, 1, 3, 3, 0, 0, 0, 0, 0, 0},
+{0, 0, 0, 0, 3, 0, 0, 0, 0, 0},
+{3, 0, 0, 0, 3, 0, 0, 0, 0, 0},
+{0, 1, 0, 0, 3, 0, 0, 0, 0, 0},
+{3, 1, 0, 0, 3, 0, 0, 0, 0, 0},
+{0, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+{3, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+{0, 1, 3, 0, 3, 0, 0, 0, 0, 0},
+{3, 1, 3, 0, 3, 0, 0, 0, 0, 0},
+{0, 0, 0, 3, 3, 0, 0, 0, 0, 0},
+{3, 0, 0, 3, 3, 0, 0, 0, 0, 0},
+{0, 1, 0, 3, 3, 0, 0, 0, 0, 0},
+{3, 1, 0, 3, 3, 0, 0, 0, 0, 0},
+{0, 0, 3, 3, 3, 0, 0, 0, 0, 0},
+{3, 0, 3, 3, 3, 0, 0, 0, 0, 0},
+{0, 1, 3, 3, 3, 0, 0, 0, 0, 0},
+{3, 1, 3, 3, 3, 0, 0, 0, 0, 0},
+{0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
+{3, 0, 0, 0, 0, 1, 0, 0, 0, 0},
+{0, 1, 0, 0, 0, 1, 0, 0, 0, 0},
+{3, 1, 0, 0, 0, 1, 0, 0, 0, 0},
+{0, 0, 3, 0, 0, 1, 0, 0, 0, 0},
+{3, 0, 3, 0, 0, 1, 0, 0, 0, 0},
+{0, 1, 3, 0, 0, 1, 0, 0, 0, 0},
+{3, 1, 3, 0, 0, 1, 0, 0, 0, 0},
+{0, 0, 0, 3, 0, 1, 0, 0, 0, 0},
+{3, 0, 0, 3, 0, 1, 0, 0, 0, 0},
+{0, 1, 0, 3, 0, 1, 0, 0, 0, 0},
+{3, 1, 0, 3, 0, 1, 0, 0, 0, 0},
+{0, 0, 3, 3, 0, 1, 0, 0, 0, 0},
+{3, 0, 3, 3, 0, 1, 0, 0, 0, 0},
+{0, 1, 3, 3, 0, 1, 0, 0, 0, 0},
+{3, 1, 3, 3, 0, 1, 0, 0, 0, 0},
+{0, 0, 0, 0, 3, 1, 0, 0, 0, 0},
+{3, 0, 0, 0, 3, 1, 0, 0, 0, 0},
+{0, 1, 0, 0, 3, 1, 0, 0, 0, 0},
+{3, 1, 0, 0, 3, 1, 0, 0, 0, 0},
+{0, 0, 3, 0, 3, 1, 0, 0, 0, 0},
+{3, 0, 3, 0, 3, 1, 0, 0, 0, 0},
+{0, 1, 3, 0, 3, 1, 0, 0, 0, 0},
+{3, 1, 3, 0, 3, 1, 0, 0, 0, 0},
+{0, 0, 0, 3, 3, 1, 0, 0, 0, 0},
+{3, 0, 0, 3, 3, 1, 0, 0, 0, 0},
+{0, 1, 0, 3, 3, 1, 0, 0, 0, 0},
+{3, 1, 0, 3, 3, 1, 0, 0, 0, 0},
+{0, 0, 3, 3, 3, 1, 0, 0, 0, 0},
+{3, 0, 3, 3, 3, 1, 0, 0, 0, 0},
+{0, 1, 3, 3, 3, 1, 0, 0, 0, 0},
+{3, 1, 3, 3, 3, 1, 0, 0, 0, 0},
+{0, 0, 0, 0, 0, 0, 15, 0, 0, 0},
+{3, 0, 0, 0, 0, 0, 15, 0, 0, 0},
+{0, 1, 0, 0, 0, 0, 15, 0, 0, 0},
+{3, 1, 0, 0, 0, 0, 15, 0, 0, 0},
+{0, 0, 3, 0, 0, 0, 15, 0, 0, 0},
+{3, 0, 3, 0, 0, 0, 15, 0, 0, 0},
+{0, 1, 3, 0, 0, 0, 15, 0, 0, 0},
+{3, 1, 3, 0, 0, 0, 15, 0, 0, 0},
+{0, 0, 0, 3, 0, 0, 15, 0, 0, 0},
+{3, 0, 0, 3, 0, 0, 15, 0, 0, 0},
+{0, 1, 0, 3, 0, 0, 15, 0, 0, 0},
+{3, 1, 0, 3, 0, 0, 15, 0, 0, 0},
+{0, 0, 3, 3, 0, 0, 15, 0, 0, 0},
+{3, 0, 3, 3, 0, 0, 15, 0, 0, 0},
+{0, 1, 3, 3, 0, 0, 15, 0, 0, 0},
+{3, 1, 3, 3, 0, 0, 15, 0, 0, 0},
+{0, 0, 0, 0, 3, 0, 15, 0, 0, 0},
+{3, 0, 0, 0, 3, 0, 15, 0, 0, 0},
+{0, 1, 0, 0, 3, 0, 15, 0, 0, 0},
+{3, 1, 0, 0, 3, 0, 15, 0, 0, 0},
+{0, 0, 3, 0, 3, 0, 15, 0, 0, 0},
+{3, 0, 3, 0, 3, 0, 15, 0, 0, 0},
+{0, 1, 3, 0, 3, 0, 15, 0, 0, 0},
+{3, 1, 3, 0, 3, 0, 15, 0, 0, 0},
+{0, 0, 0, 3, 3, 0, 15, 0, 0, 0},
+{3, 0, 0, 3, 3, 0, 15, 0, 0, 0},
+{0, 1, 0, 3, 3, 0, 15, 0, 0, 0},
+{3, 1, 0, 3, 3, 0, 15, 0, 0, 0},
+{0, 0, 3, 3, 3, 0, 15, 0, 0, 0},
+{3, 0, 3, 3, 3, 0, 15, 0, 0, 0},
+{0, 1, 3, 3, 3, 0, 15, 0, 0, 0},
+{3, 1, 3, 3, 3, 0, 15, 0, 0, 0},
+{0, 0, 0, 0, 0, 1, 15, 0, 0, 0},
+{3, 0, 0, 0, 0, 1, 15, 0, 0, 0},
+{0, 1, 0, 0, 0, 1, 15, 0, 0, 0},
+{3, 1, 0, 0, 0, 1, 15, 0, 0, 0},
+{0, 0, 3, 0, 0, 1, 15, 0, 0, 0},
+{3, 0, 3, 0, 0, 1, 15, 0, 0, 0},
+{0, 1, 3, 0, 0, 1, 15, 0, 0, 0},
+{3, 1, 3, 0, 0, 1, 15, 0, 0, 0},
+{0, 0, 0, 3, 0, 1, 15, 0, 0, 0},
+{3, 0, 0, 3, 0, 1, 15, 0, 0, 0},
+{0, 1, 0, 3, 0, 1, 15, 0, 0, 0},
+{3, 1, 0, 3, 0, 1, 15, 0, 0, 0},
+{0, 0, 3, 3, 0, 1, 15, 0, 0, 0},
+{3, 0, 3, 3, 0, 1, 15, 0, 0, 0},
+{0, 1, 3, 3, 0, 1, 15, 0, 0, 0},
+{3, 1, 3, 3, 0, 1, 15, 0, 0, 0},
+{0, 0, 0, 0, 3, 1, 15, 0, 0, 0},
+{3, 0, 0, 0, 3, 1, 15, 0, 0, 0},
+{0, 1, 0, 0, 3, 1, 15, 0, 0, 0},
+{3, 1, 0, 0, 3, 1, 15, 0, 0, 0},
+{0, 0, 3, 0, 3, 1, 15, 0, 0, 0},
+{3, 0, 3, 0, 3, 1, 15, 0, 0, 0},
+{0, 1, 3, 0, 3, 1, 15, 0, 0, 0},
+{3, 1, 3, 0, 3, 1, 15, 0, 0, 0},
+{0, 0, 0, 3, 3, 1, 15, 0, 0, 0},
+{3, 0, 0, 3, 3, 1, 15, 0, 0, 0},
+{0, 1, 0, 3, 3, 1, 15, 0, 0, 0},
+{3, 1, 0, 3, 3, 1, 15, 0, 0, 0},
+{0, 0, 3, 3, 3, 1, 15, 0, 0, 0},
+{3, 0, 3, 3, 3, 1, 15, 0, 0, 0},
+{0, 1, 3, 3, 3, 1, 15, 0, 0, 0},
+{3, 1, 3, 3, 3, 1, 15, 0, 0, 0},
+};
+
+_CMAP_PWR_MAPPING CmacPwrLkupTbl[] = { 
+{100000, -433},
+{110000, -429},
+{120000, -425},
+{130000, -421},
+{140000, -418},
+{150000, -415},
+{160000, -412},
+{170000, -410},
+{180000, -407},
+{190000, -405},
+{200000, -403},
+{210000, -400},
+{220000, -398},
+{230000, -397},
+{240000, -395},
+{250000, -393},
+{260000, -391},
+{280000, -388},
+{290000, -386},
+{310000, -384},
+{330000, -381},
+{350000, -378},
+{380000, -375},
+{400000, -372},
+{430000, -369},
+{460000, -366},
+{500000, -363},
+{550000, -359},
+{600000, -355},
+{650000, -351},
+{700000, -348},
+{750000, -345},
+{800000, -342},
+{850000, -340},
+{900000, -337},
+{950000, -335},
+{1000000, -333},
+{1100000, -329},
+{1200000, -325},
+{1300000, -321},
+{1400000, -318},
+{1500000, -315},
+{1600000, -312},
+{1700000, -310},
+{1800000, -307},
+{1900000, -305},
+{2000000, -303},
+{2100000, -300},
+{2200000, -298},
+{2400000, -295},
+{2500000, -293},
+{2700000, -290},
+{2800000, -288},
+{3000000, -285},
+{3200000, -282},
+{3500000, -278},
+{3800000, -275},
+{4000000, -272},
+{4200000, -270},
+{4400000, -268},
+{4800000, -265},
+{5200000, -261},
+{5400000, -259},
+{5800000, -256},
+{6200000, -253},
+{6800000, -249},
+{7400000, -246},
+{7800000, -243},
+{8400000, -240},
+{8600000, -239},
+{9300000, -236},
+{10200000, -232},
+{10800000, -229},
+{11700000, -226},
+{12400000, -223},
+{13600000, -219},
+{14800000, -216},
+{15600000, -213},
+{16800000, -210},
+{17600000, -208},
+{18800000, -205},
+{20500000, -202},
+{21500000, -199},
+{23500000, -196},
+{25000000, -193},
+{26500000, -190},
+{29000000, -186},
+{33500000, -180},
+{42000000, -170},
+{53000000, -160},
+{67000000, -150},
+{84000000, -140},
+{106000000, -130},
+{135000000, -120},
+{155000000, -114},
+{175000000, -109},
+{200000000, -103},
+{230000000, -97},
+{265000000, -91},
+{300000000, -85},
+{330000000, -81},
+{360000000, -78},
+{390000000, -74},
+{430000000, -70},
+{470000000, -66},
+{520000000, -62},
+{570000000, -58},
+{620000000, -54},
+{680000000, -50},
+{750000000, -46},
+};
+
+uint16_t NumEntriesPSTSweepTable = sizeof(psatSweepTbl)/sizeof(PSAT_SWEEP_TABLE);
+
+int32_t
+interpolate_round(int32_t target, int32_t srcLeft, int32_t srcRight,
+            int32_t targetLeft, int32_t targetRight, int32_t roundUp)
+{
+    int32_t rv, tmp;
+
+    if (srcRight == srcLeft) {
+        rv = targetLeft;
+    } else {
+        tmp = srcRight - srcLeft;
+        rv = (((target - srcLeft) * targetRight) / tmp) +
+             (((srcRight - target) * targetLeft) / tmp);
+    }
+
+    return(rv);
+}
+
+
+int16_t cmac2Pwr_t10(uint32_t cmac)
+{
+   uint32_t i;
+   int16_t cmacResult;
+   for (i=0;i<CMAC_PWR_LOOKUP_MAX;i++) {
+       if (cmac < CmacPwrLkupTbl[i].cmac) {
+           break;
+       }
+   } 
+   if (0 == i) {
+       return(CmacPwrLkupTbl[0].pwr_t10);
+   }
+   else if (CMAC_PWR_LOOKUP_MAX == i) {
+       return(CmacPwrLkupTbl[CMAC_PWR_LOOKUP_MAX -1].pwr_t10);
+   }
+   else {
+        /* Added a "DEVIDE_COEFF" to avoid the overflow */      
+        cmacResult = interpolate_round((cmac / DEVIDE_COEFF), (CmacPwrLkupTbl[i-1].cmac / DEVIDE_COEFF), (CmacPwrLkupTbl[i].cmac / DEVIDE_COEFF), 
+            CmacPwrLkupTbl[i-1].pwr_t10, CmacPwrLkupTbl[i].pwr_t10, 10);
+   }
+
+   return(cmacResult);
+}
+
+
diff --git a/ath6kl-tcmd/sinit_common.h b/ath6kl-tcmd/sinit_common.h
new file mode 100644
index 0000000..b19770f
--- /dev/null
+++ b/ath6kl-tcmd/sinit_common.h
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef  _PSAT_COMMON_H_
+#define  _PSAT_COMMON_H_
+
+#include <stdint.h>
+#include "testcmd.h"
+
+#define DEVIDE_COEFF 10000
+
+// CMAC to power lookup table, for platform such as embedded without sophisticated math function 
+typedef struct {
+    uint32_t cmac;
+    int32_t  pwr_t10;
+} _CMAP_PWR_MAPPING;
+
+extern _CMAP_PWR_MAPPING CmacPwrLkupTbl[];
+#define CMAC_PWR_LOOKUP_MAX (sizeof(CmacPwrLkupTbl) / sizeof(_CMAP_PWR_MAPPING))
+
+extern PSAT_SWEEP_TABLE psatSweepTbl[];
+extern uint16_t NumEntriesPSTSweepTable;
+
+int32_t interpolate_round(int32_t target, int32_t srcLeft, int32_t srcRight,
+            int32_t targetLeft, int32_t targetRight, int32_t roundUp);
+int16_t cmac2Pwr_t10(uint32_t cmac);
+
+#endif //#ifndef _PSAT_COMMON_H_
diff --git a/ath6kl-tcmd/sinit_eep.h b/ath6kl-tcmd/sinit_eep.h
new file mode 100644
index 0000000..709be34
--- /dev/null
+++ b/ath6kl-tcmd/sinit_eep.h
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef _AR6003_EEPROM_STRUCT_H_
+#define _AR6003_EEPROM_STRUCT_H_
+
+#include <stdint.h>
+
+#define PREPACK
+#define POSTPACK __attribute__ ((packed))
+
+#define AR6003_EEP_VER_MINOR_MASK    0xFFF
+#define AR6003_EEP_MINOR_VER5        0x5  
+#define AR6003_EEP_MINOR_VER10        0xA
+#define AR6K_EEPROM_SIZE_PRIOR_VER4   1024
+#define AR6K_EEPROM_SIZE_LARGEST      2048
+
+#define AR6003_NUM_5G_CAL_PIERS      8
+#define AR6003_NUM_2G_CAL_PIERS      3
+#define AR6003_NUM_5G_CAL_PIERS_EXPANDED      32
+#define AR6003_NUM_2G_CAL_PIERS_EXPANDED      16
+#define AR6003_BCHAN_UNUSED          0xFF
+
+#define AR6003_BOARDFLAGSEXT_PSAT_CAL_GEN_EEPROM    0x04
+#define AR6003_BOARDFLAGSEXT_PSAT_CAL_ABS           0x08
+
+#define FREQ2FBIN(x,y) ((y) ? ((x) - 2300) : (((x) - 4800) / 5))
+#define FBIN2FREQ(x,y) ((y) ? ((x) + 2300) : (((x) * 5) + 4800))
+#define AR6003_MAX_CHAINS            1
+#define AR6003_EEPROM_MODAL_SPURS    5
+#define AR6003_NUM_ALPHATHERM_CHAN_PIERS        4
+#define AR6003_NUM_ALPHATHERM_TEMP_PIERS        4
+#define AR6003_NUM_5G_20_TARGET_POWERS  8
+#define AR6003_NUM_5G_40_TARGET_POWERS  8
+#define AR6003_NUM_2G_CCK_TARGET_POWERS 2
+#define AR6003_NUM_2G_20_TARGET_POWERS  3
+#define AR6003_NUM_2G_40_TARGET_POWERS  3
+#define AR6003_NUM_CTLS              21
+#define AR6003_NUM_BAND_EDGES        8
+#define AR6003_NUM_PD_GAINS          4
+#define NUM_ATECAL_CHANS_2G  4
+#define NUM_ATECAL_CHANS_5G  10
+#define AR6003_PD_GAIN_ICEPTS        5
+#define STICKY_REG_TBL_SIZE_MAX 8
+#define MAX_CUSTDATA_BYTES 16
+
+typedef enum {
+    WLAN_11A_CAPABILITY   = 1,
+    WLAN_11G_CAPABILITY   = 2,
+    WLAN_11AG_CAPABILITY  = 3,
+}WALN_CAPABILITY;
+
+typedef enum {
+    TGTPWR_LEG_6_24 = 0,
+    TGTPWR_LEG_36,
+    TGTPWR_LEG_48,
+    TGTPWR_LEG_54,
+    TGTPWR_LEG_LAST
+} TGTPWR_LEG;
+
+typedef enum {
+    TGTPWR_HT_0 = 0,
+    TGTPWR_HT_1,
+    TGTPWR_HT_2,
+    TGTPWR_HT_3,
+    TGTPWR_HT_4,
+    TGTPWR_HT_5,
+    TGTPWR_HT_6,
+    TGTPWR_HT_7,
+    TGTPWR_HT_LAST
+} TGTPWR_HT;
+
+typedef PREPACK struct Ar6003_spurChanStruct {
+    uint8_t   spurChan;                      /*spur mitigation enabled in the channel bitmap, 1 bit 1 channel*/
+    uint8_t   spurABChoose;              /*choose which is master spur ,spur_A or spur_B*/
+    uint8_t   spurA_PrimSecChoose; /*choose primary and secondary spur which produce by spur_A*/            
+    uint8_t   spurB_PrimSecChoose; /*choose primary and secondary spur which produce by spur_B*/            
+} POSTPACK AR6003_SPUR_CHAN;
+
+typedef union Ar6003_obdbStruct {
+    uint16_t value;
+    struct g_bits {
+        uint16_t paloff   :  3,
+                 qam      :  3,
+                 psk      :  3,
+                 cck      :  3,
+                 db       :  3,
+                 unused   :  1;
+    } g_obdb;
+    struct a_bits {
+        uint16_t d2b      :  3,
+                 d3b      :  3,
+                 d4b      :  3,
+                 ob       :  3,
+                 unused   :  4;
+    } a_obdb;
+} POSTPACK AR6003_OBDB;
+
+typedef PREPACK struct Ar6003_BaseEepHeader {
+    uint32_t  length;                                                  // 4 B
+    uint16_t  checksum;                                                // 2 B
+    uint16_t  version;                                                 // 2 B
+    uint16_t  opCapFlags;                                              // 2 B
+    uint16_t  boardFlags;                                              // 2 B
+    uint16_t  regDmn[2];                                               // 4 B
+    uint16_t  subSystemId;                                             // 2 B
+    uint16_t  blueToothOptions;                                        // 2 B 
+    uint16_t  binBuildNumber; // major(4):minor(5):build(7)            // 2 B   
+    uint8_t   macAddr[6];                                              // 6 B
+    uint8_t   bdAddr[6];                                               // 6 B
+    uint8_t   rxMask;                                                  // 1 B
+    uint8_t   txMask;                                                  // 1 B
+    int8_t    cckOfdmDelta;                                            // 1 B
+    uint8_t   custData[MAX_CUSTDATA_BYTES];                            // 16 B    
+    uint8_t   reserved[4];                                             // 4 B reserved for custData. Sometimes custData exceed the max bytes
+    uint8_t   spurBaseA;                                               // 1 B
+    uint8_t   spurBaseB;                                               // 1 B
+    uint8_t   spurRssiThresh;                                          // 1 B
+    uint8_t   HTCapFlags;                                              // 1 B 
+    uint8_t   boardFlagsExt;                                           // 1 B
+    uint8_t   futureBase[6];                                           // 6 B
+} POSTPACK AR6003_BASE_EEP_HEADER;                                     // 68 B
+
+// Notes:
+// - IQ CAL is done by sw for every reset, here we store the default values in case IQ CAL 
+//   is not done for whatever reason.
+typedef PREPACK struct Ar6003_ModalEepHeader {
+    uint32_t  antCtrlChain[AR6003_MAX_CHAINS];                         // 4B, "chn_b0_switch_table", AntE only  
+    uint32_t  antCtrlCom1;                                             // 4B, "com1_switch_table", AntA, B, C, D
+    uint32_t  antCtrlCom2;                                             // 4B, "com2_switch_table"
+    AR6003_OBDB ob_db;                                                 // 2B, a number of ob, db fields
+    uint8_t   anaXtalConfig[6];                                        // 6B, tbd?: for xtal/synth related fields, tobe replaced with a struct
+    int8_t    antennaGainCh[AR6003_MAX_CHAINS];                        // 1B, affect antenna gain calculation
+    uint8_t   switchSettling;                                          // 1B, "time_switch_settling"
+    uint8_t   swSettleHt40;                                            // 1B, "time_switch_settling" for HT40 
+    uint8_t   xatten1Db[AR6003_MAX_CHAINS];                            // 1B, "xatten1_db_0"
+    uint8_t   xatten1Margin[AR6003_MAX_CHAINS];                        // 1B, "xatten1_margin_0"    
+    uint8_t   xatten1Hyst[AR6003_MAX_CHAINS];                          // 1B, "xatten1_hyst_margin_0"
+    uint8_t   xatten2Db[AR6003_MAX_CHAINS];                            // 1B, "xatten2_db_0"
+    uint8_t   xatten2Margin[AR6003_MAX_CHAINS];                        // 1B, "xatten2_margin_0"    
+    uint8_t   xatten2Hyst[AR6003_MAX_CHAINS];                          // 1B, "xatten2_hyst_margin_0"    
+    int8_t    adcDesiredSize;                                          // 1B, "adc_desired_size"
+    uint8_t   txEndToXpaOff;                                           // 1B, "tx_end_to_xpaa_off", "tx_end_to_xpab_off"
+    uint8_t   txEndToRxOn;                                             // 1B, "tx_end_to_a2_rx_on"
+    uint8_t   txFrameToXpaOn;                                          // 1B, "tx_frame_to_xpaa_on", "tx_frame_to_xpab_on"
+    uint8_t   txFrameToDataStart;                                      // 1B, "tx_frame_to_tx_d_start"
+    uint8_t   txFrameToPaOn;                                           // 1B, "tx_frame_to_pa_on"
+    uint8_t   thresh62;                                                // 1B, "cf_thresh62"
+    int8_t    noiseFloorThreshCh[AR6003_MAX_CHAINS];                   // 1B, tbd?: what to set?
+    int8_t    rxIqCalICh[AR6003_MAX_CHAINS];                           // 1B, "rx_iqcorr_q_i_coff_0"  
+    int8_t    rxIqCalQCh[AR6003_MAX_CHAINS];                           // 1B, "rx_iqcorr_q_q_coff_0"
+    uint8_t   xpaBiasLvl;                                              // 1B, "an_top_xpabiaslvl"
+    uint8_t   ht40PowerIncForPdadc;                                    // 1B, affect tx power in HT40
+    uint8_t   enableXpa;                                               // 1B, "bb_enable_xpab | bb_enable_xpaa"
+    AR6003_SPUR_CHAN spurChans[AR6003_EEPROM_MODAL_SPURS];             // 4 * 5 = 20 B, tbd?:     
+    uint8_t   alphaTherm;                                              // 1B, "alpha_therm"
+    uint8_t   alphaThermPalOn;                                         // 1B, "alpha_therm_pal_on"
+    uint8_t   alphaVolt;                                               // 1B, "alpha_volt"
+    uint8_t   alphaVoltPalOn;                                          // 1B, "alpha_volt_pal_on"
+    int8_t    adcDesiredSizeHT40;                                      // 1B, "adc_desired_size" for HT40
+    uint8_t   paprdQuickDrop;                                          // 1B, "bb_paprd_trainer_cntl3_cf_paprd_quick_drop"
+    uint8_t   txGainTbl_0;           // bb_tx_gain_table_0
+    uint8_t   txGainTblDelta[16];    // bb_tx_gain_table_x (_1 to _32, 4 bits per delta) for PAL OFF??
+    uint8_t   reserved[3];
+    uint32_t  antCtrlExtCommon1;
+    uint32_t  antCtrlExtCommon2;
+    uint8_t   alphaThermChans[AR6003_NUM_ALPHATHERM_CHAN_PIERS];        // 4B, "alpha therm channels"
+    uint8_t   alphaThermTbl[AR6003_NUM_ALPHATHERM_CHAN_PIERS][AR6003_NUM_ALPHATHERM_TEMP_PIERS];      // 16B, "alpha_therm_tbl" lowtemp midtemp1 midtemp2 hightemp
+    uint8_t   areg_lvlctr;                                              // 1 B
+    uint8_t   pareg_lvlctr;                                             // 1 B
+    uint8_t   txGainTblMax;                                             // 1 B
+    uint8_t   cckInitRfGain;                                            // 1 B
+    uint16_t  paprdMinCorrThreshold;                                    // 2 B
+    uint8_t   an_rxrf_bias1_pwd_ic25vga5g;                              // 1 B
+    uint8_t   futureModal[5];                                           // 5 B  
+} POSTPACK AR6003_MODAL_EEP_HEADER;                                     // 128 B
+
+typedef PREPACK struct Ar6003_calDataPerFreq {
+    uint8_t pwrPdg[AR6003_NUM_PD_GAINS][AR6003_PD_GAIN_ICEPTS];        // 20 B
+    uint8_t vpdPdg[AR6003_NUM_PD_GAINS][AR6003_PD_GAIN_ICEPTS];        // 20 B
+} POSTPACK AR6003_CAL_DATA_PER_FREQ;                                   // 40 B
+
+typedef PREPACK struct Ar6003_calDataPerFreqOlpc {
+    int8_t  olpcGainDelta;                                             // 1B, "olpc_gain_delta"
+    uint8_t thermCalVal;                                               // 1B, "therm_cal_value"
+    uint8_t voltCalVal;                                                // 1B, "volt_cal_value"
+    int8_t  olpcGainDeltaPALOn;                                        // 1B, "olpc_gain_delta_pal_on"
+} POSTPACK AR6003_CAL_DATA_PER_FREQ_OLPC;                              // 4 B
+
+typedef PREPACK struct Ar6003_calDataPerFreqOlpcExpanded {
+    AR6003_CAL_DATA_PER_FREQ_OLPC olpcBasic;                            // 4B
+    int16_t  olpcGainDelta_t10;                                         // 2B  "untruncated olpc gain delta 0.1dB resolution"
+    uint8_t  desiredScaleCck_t10;                                       // 1B, "desired_scale_cck"
+    uint8_t  desiredScale6M_t10;                                        // 1B
+    uint8_t  desiredScale36M_t10;                                       // 1B
+    uint8_t  desiredScale54M_t10;                                       // 1B
+    uint8_t  desiredScaleMCS0HT20_t10;                                  // 1B
+    uint8_t  desiredScaleMCS7HT20_t10;                                  // 1B
+    uint8_t  desiredScaleMCS0HT40_t10;                                  // 1B
+    uint8_t  desiredScaleMCS7HT40_t10;                                  // 1B
+} POSTPACK AR6003_CAL_DATA_PER_FREQ_OLPC_EXPANDED;                      // 14 B
+
+typedef PREPACK struct Ar6003_calDataPerFreqOlpcATEDelta {
+    int16_t olpcGainDelta_t10;                                         // 2B  
+} POSTPACK AR6003_CAL_DATA_PER_FREQ_OLPC_FE_DELTA;                     // 2B
+
+typedef PREPACK struct Ar6003_CalTargetPowerLegacy {
+    uint8_t  bChannel;
+    uint8_t  tPow2x[4];
+} POSTPACK AR6003_CAL_TARGET_POWER_LEG;     // 5B
+
+typedef PREPACK struct Ar6003_CalTargetPowerHt {
+    uint8_t  bChannel;
+    uint8_t  tPow2x[8];
+} POSTPACK AR6003_CAL_TARGET_POWER_HT;
+
+typedef PREPACK struct Ar6003_CalCtlEdges {
+    uint8_t  bChannel;
+    uint8_t  tPower :6,
+             flag   :2;
+} POSTPACK AR6003_CAL_CTL_EDGES;
+
+typedef PREPACK struct Ar6003_CalCtlData {
+    AR6003_CAL_CTL_EDGES  ctlEdges[AR6003_MAX_CHAINS][AR6003_NUM_BAND_EDGES];                     // 2 * 8 = 16 B 
+} POSTPACK AR6003_CAL_CTL_DATA;  // 16 B
+
+typedef PREPACK struct Ar6003_CalDataPerChip {
+    int16_t     thermAdcScaledGain;   // 2B, "therm_adc_scaled_gain"
+    int8_t      thermAdcOffset;       // 1B, "therm_adc_offset"
+    uint8_t     xtalCapOutDac;        // 1B, "xtal_capoutdac"
+    uint8_t     xtalCapInDac;         // 1B, "xtal_capindac"
+    uint8_t     refBiasTrim;          // 1B, tbd?: what field? 
+} POSTPACK AR6003_CAL_DATA_PER_CHIP;  // 6 B
+
+typedef PREPACK struct ateProvided {
+    uint8_t GoldenTherm;
+    uint8_t GoldenVolt;
+    uint8_t pcDac;
+    uint8_t vtestLCodeGolden;           
+    int8_t  vtestLVoltGolden;            
+    uint8_t vtestHCodeGolden;             
+    int8_t  vtestHVoltGolden;              
+    uint8_t numCalChans5G;
+    uint8_t numCalChans2G;                            // 1B
+    uint8_t calFreqPier5G[NUM_ATECAL_CHANS_5G];       // 10B
+    uint8_t calFreqPier2G[NUM_ATECAL_CHANS_2G];       // 4B
+    uint8_t ateZeroCalFlag;                           // 1B
+} POSTPACK AR6003_ATE_PROVIDED_DATA;                  // 24B
+
+typedef PREPACK struct stickyRegTbl {
+	uint32_t address;
+	uint32_t value;
+} POSTPACK AR6003_STICKY_REG_TABLE;             // 8B
+
+#define PSAT_AN_TXRF3_RDIV2G_LSB                    0        // an_txrf3_rdiv2g;
+#define PSAT_AN_TXRF3_RDIV2G_MASK                   0x3      // an_txrf3_rdiv2g;
+#define PSAT_AN_TXRF3_PDPREDIST2G_LSB               2        // an_txrf3_pdpredist2g;               
+#define PSAT_AN_TXRF3_PDPREDIST2G_MASK              0x1      // an_txrf3_pdpredist2g;               
+#define PSAT_AN_RXTX2_MXRGAIN_LSB                   3        // an_rxtx2_mxrgain;            
+#define PSAT_AN_RXTX2_MXRGAIN_MASK                  0x3      // an_rxtx2_mxrgain;            
+#define PSAT_AN_RXRF_BIAS1_PWD_IC25MXR2GH_LSB       5        // an_rxrf_bias1_pwd_ic25mxr2gh;
+#define PSAT_AN_RXRF_BIAS1_PWD_IC25MXR2GH_MASK      0x7      // an_rxrf_bias1_pwd_ic25mxr2gh;
+#define PSAT_AN_BIAS2_PWD_IC25RXRF_LSB              8        // an_bias2_pwd_ic25rxrf;      
+#define PSAT_AN_BIAS2_PWD_IC25RXRF_MASK             0x7      // an_bias2_pwd_ic25rxrf;      
+#define PSAT_AN_BB1_I2V_CURR2X_LSB                  11       // an_bb1_i2v_curr2x;         
+#define PSAT_AN_BB1_I2V_CURR2X_MASK                 0x1      // an_bb1_i2v_curr2x;         
+#define PSAT_AN_TXRF6_CAPDIV2G_LSB                  12       // an_txrf6_capdiv2g;         
+#define PSAT_AN_TXRF6_CAPDIV2G_MASK                 0xF      // an_txrf6_capdiv2g;         
+
+typedef PREPACK struct ar6kPSATCAL {
+    int16_t    psat_t10;
+    int16_t    ofdmCwDelta_t10;
+    int16_t    cmacOlpcPsatDeltaGu_t10;
+    int16_t    olpcGainDeltaGu_t10;
+    uint8_t    olpcPcdac;
+    uint8_t    psatPcdac;
+    uint16_t   psatTuneParms;
+    uint16_t   psatTuneParmsAlt1;
+} POSTPACK AR6003_PSAT_CAL_PARMS;             
+
+typedef PREPACK struct ar6kEeprom {
+    // base
+    AR6003_BASE_EEP_HEADER       baseEepHeader;                                                // 68 B
+    // modal
+    AR6003_MODAL_EEP_HEADER      modalHeader[2];                                               // 256 B
+
+    // CAL section
+    uint8_t                      calFreqPier5G[AR6003_NUM_5G_CAL_PIERS];                       // 8 B
+    uint8_t                      calFreqPier2G[AR6003_NUM_2G_CAL_PIERS];                       // 3 B
+    uint8_t                      padding1;                                                     // 1 B
+    AR6003_CAL_DATA_PER_FREQ_OLPC calPierData5G[AR6003_NUM_5G_CAL_PIERS];                      // 4 * 8 = 32 B
+    AR6003_CAL_DATA_PER_FREQ_OLPC calPierData2G[AR6003_NUM_2G_CAL_PIERS];                      // 4 * 3 = 12 B 
+    // ATE CAL data from OTP
+    AR6003_CAL_DATA_PER_CHIP     calPerChip;                                                   // 6 B
+    // future expansion of CAL data
+    AR6003_PSAT_CAL_PARMS        psatCAL;                                                      // 14B
+
+    // target power
+    AR6003_CAL_TARGET_POWER_LEG  calTargetPower5G[AR6003_NUM_5G_20_TARGET_POWERS];             // 5 * 8 = 40 B 
+    AR6003_CAL_TARGET_POWER_HT   calTargetPower5GHT20[AR6003_NUM_5G_20_TARGET_POWERS];         // 9 * 8 = 72 B 
+    AR6003_CAL_TARGET_POWER_HT   calTargetPower5GHT40[AR6003_NUM_5G_40_TARGET_POWERS];         // 9 * 8 = 72 B
+    AR6003_CAL_TARGET_POWER_LEG  calTargetPowerCck[AR6003_NUM_2G_CCK_TARGET_POWERS];           // 5 * 2 = 10 B 
+    AR6003_CAL_TARGET_POWER_LEG  calTargetPower2G[AR6003_NUM_2G_20_TARGET_POWERS];             // 5 * 3 = 15 B  
+    AR6003_CAL_TARGET_POWER_HT   calTargetPower2GHT20[AR6003_NUM_2G_20_TARGET_POWERS];         // 9 * 3 = 27 B
+    AR6003_CAL_TARGET_POWER_HT   calTargetPower2GHT40[AR6003_NUM_2G_40_TARGET_POWERS];         // 9 * 3 = 27 B    // 263B  
+    uint8_t                      psatTuneParmsAlt4_H;                                          // 1 B             // 264B
+    // CTL
+    uint8_t                      ctlIndex[AR6003_NUM_CTLS];                                    // 21 B
+    uint8_t                      psatTuneParmsAlt4_L;                                          // 1 B             
+    uint16_t                     psatTuneParmsAlt2;                                            // 2 B             
+    AR6003_CAL_CTL_DATA          ctlData[AR6003_NUM_CTLS];                                     // 16 * 21 = 336 B  // 360B 
+                                                                                               // total: 1024B
+    uint8_t                      calFreqPier5GExpanded[AR6003_NUM_5G_CAL_PIERS_EXPANDED];      // 32 B
+    uint8_t                      calFreqPier2GExpanded[AR6003_NUM_2G_CAL_PIERS_EXPANDED];      // 16 B
+    AR6003_CAL_DATA_PER_FREQ_OLPC_EXPANDED calPierData5GExpanded[AR6003_NUM_5G_CAL_PIERS_EXPANDED]; // 14 * 32 = 448 B
+    AR6003_CAL_DATA_PER_FREQ_OLPC_EXPANDED calPierData2GExpanded[AR6003_NUM_2G_CAL_PIERS_EXPANDED]; // 14 * 16 = 224 B 
+
+    AR6003_ATE_PROVIDED_DATA     ateProvidedData;                                              // 24B
+
+    int8_t                       calTgtPwrBkoff2GLeg[TGTPWR_LEG_LAST];                         // 4B
+    int8_t                       calTgtPwrBkoff2GHT20[TGTPWR_HT_LAST];                         // 8B
+    int8_t                       calTgtPwrBkoff2GHT40[TGTPWR_HT_LAST];                         // 8B
+
+    uint16_t                     psatTuneParmsAlt3;                                            // 2B
+    uint16_t                     checksumExpanded;                                             // 2B
+                                                                                               // total: 768B 
+    AR6003_CAL_DATA_PER_FREQ_OLPC_FE_DELTA calDataFEDelta5G[AR6003_NUM_5G_CAL_PIERS_EXPANDED];                  // 2 * 32 =  64 B	
+    AR6003_CAL_DATA_PER_FREQ_OLPC_FE_DELTA calDataFEDelta2G[AR6003_NUM_2G_CAL_PIERS_EXPANDED];                  // 2 * 16 = 32 B
+    uint16_t                    psatTuneParmsAlt7;                                               // 2B
+    uint16_t                    psatTuneParmsAlt8;                                               // 2B
+    uint16_t                    psatTuneParmsAlt9;                                               // 2B
+    int16_t                     cmacOlpcPsatDeltaGuMid_t10;                                      // 2B
+    int16_t                     cmacOlpcPsatDeltaGuHigh_t10;                                     // 2B
+    uint16_t                    psatTuneParmsAltSet[10];                                         // 20B
+    int8_t                      psatTuneParmsOlpcPsatCmacDelta[20];                              // 20B               
+    uint8_t                     padding5[42];                                                    // 42B 
+	  //uint32_t                   pllClkModa;                                                          
+    AR6003_STICKY_REG_TABLE stickyRegTable[STICKY_REG_TBL_SIZE_MAX];                             // 64B
+    //uint8_t                     stickyRegTableSize;                                            
+    uint16_t                    psatTuneParmsAlt5;                                               // 2B 
+    uint16_t                    psatTuneParmsAlt6;                                               // 2B 
+    //uint16_t                    checksum0CAL;                                                  
+                                                                                                 // total: 256B
+} POSTPACK AR6003_EEPROM;                                                                        // 1024 + 768 + 256 = 2048B
+
+#endif //_AR6003_EEPROM_STRUCT_H_
diff --git a/ath6kl-tcmd/testcmd.h b/ath6kl-tcmd/testcmd.h
new file mode 100644
index 0000000..f543e39
--- /dev/null
+++ b/ath6kl-tcmd/testcmd.h
@@ -0,0 +1,364 @@
+/*
+* Copyright (c) 2011-2012 Qualcomm Atheros Inc.
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef  TESTCMD_H_
+#define  TESTCMD_H_
+
+#include <stdint.h>
+
+#ifdef AR6002_REV2
+#define TCMD_MAX_RATES 12
+#else
+#define TCMD_MAX_RATES 28
+#endif
+
+#define PREPACK
+#define POSTPACK __attribute__ ((packed))
+
+#define ATH_MAC_LEN 6
+#define TC_CMDS_SIZE_MAX  256
+
+typedef enum {
+	ZEROES_PATTERN = 0,
+	ONES_PATTERN,
+	REPEATING_10,
+	PN7_PATTERN,
+	PN9_PATTERN,
+	PN15_PATTERN
+} TX_DATA_PATTERN;
+
+/* Continous tx
+   mode : TCMD_CONT_TX_OFF - Disabling continous tx
+          TCMD_CONT_TX_SINE - Enable continuous unmodulated tx
+          TCMD_CONT_TX_FRAME- Enable continuous modulated tx
+   freq : Channel freq in Mhz. (e.g 2412 for channel 1 in 11 g)
+dataRate: 0 - 1 Mbps
+          1 - 2 Mbps
+          2 - 5.5 Mbps
+          3 - 11 Mbps
+          4 - 6 Mbps
+          5 - 9 Mbps
+          6 - 12 Mbps
+          7 - 18 Mbps
+          8 - 24 Mbps
+          9 - 36 Mbps
+         10 - 28 Mbps
+         11 - 54 Mbps
+  txPwr: Tx power in dBm[5 -11] for unmod Tx, [5-14] for mod Tx
+antenna:  1 - one antenna
+          2 - two antenna
+Note : Enable/disable continuous tx test cmd works only when target is awake.
+*/
+
+typedef enum {
+	TCMD_CONT_TX_OFF = 0,
+	TCMD_CONT_TX_SINE,
+	TCMD_CONT_TX_FRAME,
+	TCMD_CONT_TX_TX99,
+	TCMD_CONT_TX_TX100,
+	TCMD_CONT_TX_OFFSETTONE,
+} TCMD_CONT_TX_MODE;
+
+typedef enum {
+	TCMD_WLAN_MODE_NOHT = 0,
+	TCMD_WLAN_MODE_HT20 = 1,
+	TCMD_WLAN_MODE_HT40PLUS = 2,
+	TCMD_WLAN_MODE_HT40MINUS = 3,
+        TCMD_WLAN_MODE_CCK = 4,
+
+        TCMD_WLAN_MODE_MAX,
+        TCMD_WLAN_MODE_INVALID = TCMD_WLAN_MODE_MAX
+} TCMD_WLAN_MODE;
+
+typedef enum {
+    TPC_TX_PWR = 0,
+    TPC_FORCED_GAIN,
+    TPC_TGT_PWR
+} TPC_TYPE;
+
+typedef PREPACK struct {
+	uint32_t testCmdId;
+	uint32_t mode;
+	uint32_t freq;
+	uint32_t dataRate;
+	int32_t txPwr;
+	uint32_t antenna;
+	uint32_t enANI;
+	uint32_t scramblerOff;
+	uint32_t aifsn;
+	uint16_t pktSz;
+	uint16_t txPattern;
+	uint32_t shortGuard;
+	uint32_t numPackets;
+	uint32_t wlanMode;
+        uint32_t tpcm;
+} POSTPACK TCMD_CONT_TX;
+
+#define TCMD_TXPATTERN_ZERONE                 0x1
+#define TCMD_TXPATTERN_ZERONE_DIS_SCRAMBLE    0x2
+
+/* Continuous Rx
+ act: TCMD_CONT_RX_PROMIS - promiscuous mode (accept all incoming frames)
+      TCMD_CONT_RX_FILTER - filter mode (accept only frames with dest
+                                             address equal specified
+                                             mac address (set via act =3)
+      TCMD_CONT_RX_REPORT  off mode  (disable cont rx mode and get the
+                                          report from the last cont
+                                          Rx test)
+
+     TCMD_CONT_RX_SETMAC - set MacAddr mode (sets the MAC address for the
+                                                 target. This Overrides
+                                                 the default MAC address.)
+
+*/
+typedef enum {
+	TCMD_CONT_RX_PROMIS = 0,
+	TCMD_CONT_RX_FILTER,
+	TCMD_CONT_RX_REPORT,
+	TCMD_CONT_RX_SETMAC,
+	TCMD_CONT_RX_SET_ANT_SWITCH_TABLE,
+	TC_CMD_RESP,
+	TCMD_CONT_RX_GETMAC,
+} TCMD_CONT_RX_ACT;
+
+typedef PREPACK struct {
+	uint32_t testCmdId;
+	uint32_t act;
+	uint32_t enANI;
+	PREPACK union {
+		struct PREPACK TCMD_CONT_RX_PARA {
+			uint32_t freq;
+			uint32_t antenna;
+			uint32_t wlanMode;
+		} POSTPACK para;
+		struct PREPACK TCMD_CONT_RX_REPORT {
+			uint32_t totalPkt;
+			int32_t rssiInDBm;
+			uint32_t crcErrPkt;
+			uint32_t secErrPkt;
+			uint16_t rateCnt[TCMD_MAX_RATES];
+			uint16_t rateCntShortGuard[TCMD_MAX_RATES];
+		} POSTPACK report;
+		struct PREPACK TCMD_CONT_RX_MAC {
+			char addr[ATH_MAC_LEN];
+			char btaddr[ATH_MAC_LEN];
+                        uint16_t regDmn[2];
+                        uint32_t otpWriteFlag;
+		} POSTPACK mac;
+		struct PREPACK TCMD_CONT_RX_ANT_SWITCH_TABLE {
+			uint32_t antswitch1;
+			uint32_t antswitch2;
+		} POSTPACK antswitchtable;
+	} POSTPACK u;
+} POSTPACK TCMD_CONT_RX;
+
+/* Force sleep/wake  test cmd
+ mode: TCMD_PM_WAKEUP - Wakeup the target
+       TCMD_PM_SLEEP - Force the target to sleep.
+ */
+typedef enum {
+	TCMD_PM_WAKEUP = 1,	/* be consistent with target */
+	TCMD_PM_SLEEP,
+	TCMD_PM_DEEPSLEEP
+} TCMD_PM_MODE;
+
+typedef enum {
+    TC_CMDS_VERSION_RESERVED=0,
+    TC_CMDS_VERSION_MDK,
+    TC_CMDS_VERSION_TS,
+    TC_CMDS_VERSION_LAST,
+} TC_CMDS_VERSION;
+
+typedef enum {
+    TC_CMDS_TS =0,
+    TC_CMDS_CAL,
+    TC_CMDS_TPCCAL = TC_CMDS_CAL,
+    TC_CMDS_TPCCAL_WITH_OTPWRITE,
+    TC_CMDS_OTPDUMP,
+    TC_CMDS_OTPSTREAMWRITE,
+    TC_CMDS_EFUSEDUMP,
+    TC_CMDS_EFUSEWRITE,
+    TC_CMDS_READTHERMAL,
+    TC_CMDS_PM_CAL,
+    TC_CMDS_PSAT_CAL,
+    TC_CMDS_PSAT_CAL_RESULT,
+    TC_CMDS_CAL_PWRS,
+    TC_CMDS_WRITE_CAL_2_OTP,
+    TC_CMDS_CHAR_PSAT,
+    TC_CMDS_CHAR_PSAT_RESULT,
+    TC_CMDS_PM_CAL_RESULT,
+    TC_CMDS_SINIT_WAIT,
+    TC_CMDS_COUNT
+} TC_CMDS_ACT;
+
+typedef PREPACK struct {
+    uint32_t   testCmdId;
+    uint32_t   act;
+    PREPACK union {
+        uint32_t  enANI;    // to be identical to CONT_RX struct
+        struct PREPACK {
+            uint16_t   length;
+            uint8_t    version;
+            uint8_t    bufLen;
+        } POSTPACK parm;
+    } POSTPACK u;
+} POSTPACK TC_CMDS_HDR;
+
+typedef PREPACK struct {
+    TC_CMDS_HDR  hdr;
+    char buf[TC_CMDS_SIZE_MAX];
+} POSTPACK TC_CMDS;
+
+typedef PREPACK struct {
+    uint32_t    testCmdId;
+    uint32_t    regAddr;
+    uint32_t    val;
+    uint16_t    flag;
+} POSTPACK TCMD_SET_REG;
+
+typedef PREPACK struct {
+	uint32_t testCmdId;
+	uint32_t mode;
+} POSTPACK TCMD_PM;
+
+typedef enum {
+	TCMD_CONT_TX_ID,
+	TCMD_CONT_RX_ID,
+	TCMD_PM_ID,
+        TC_CMDS_ID,
+        TCMD_SET_REG_ID,
+
+	/*For synergy purpose we added the following tcmd id but these
+	tcmd's will not go to the firmware instead we will write values
+	to the NV area */
+
+	TCMD_NIC_MAC = 100,
+	TCMD_CAL_FILE_INDEX = 101,
+} TCMD_ID;
+
+typedef PREPACK struct
+{
+    uint32_t  testCmdId;
+    char   mac_address[ATH_MAC_LEN];
+} POSTPACK TCMD_NIC_MAC_S;
+
+typedef PREPACK struct
+{
+       uint32_t  testCmdId;
+       uint32_t  cal_file_index;
+} POSTPACK TCMD_CAL_FILE_INDEX_S;
+
+typedef PREPACK union {
+	TCMD_CONT_TX contTx;
+	TCMD_CONT_RX contRx;
+	TCMD_PM pm;
+          // New test cmds from ART/MDK ...
+        TC_CMDS              tcCmds;
+        TCMD_SET_REG setReg;
+} POSTPACK TEST_CMD;
+
+/* New structure for selfinit */
+typedef enum {
+    TC_MSG_RESERVED,
+    TC_MSG_PSAT_CAL_RESULTS,
+    TC_MSG_CAL_POWER,
+    TC_MSG_CHAR_PSAT_RESULTS,
+    TC_MSG_PM_CAL_RESULTS,
+    TC_MSG_PSAT_CAL_ACK,
+    TC_MSG_COUNT
+} TC_MSG_ID;
+
+typedef PREPACK struct {
+    int8_t  olpcGainDelta_diff;
+    int8_t  olpcGainDelta_abs;
+    uint8_t thermCalVal;
+    uint8_t numTryBF;
+    uint32_t  cmac_olpc;
+    uint32_t  cmac_psat;
+    uint16_t  cmac_olpc_pcdac;
+    uint16_t  cmac_psat_pcdac;
+    int16_t   lineSlope;
+    int16_t   lineVariance;
+    uint16_t  psatParm;
+    uint8_t reserved[2];
+} POSTPACK OLPCGAIN_THERM_DUPLET;
+
+#define WHAL_NUM_11G_CAL_PIERS_EXT 16
+#define WHAL_NUM_11A_CAL_PIERS_EXT 32
+#define PSAT_WHAL_NUM_11G_CAL_PIERS_MAX 3
+#define PSAT_WHAL_NUM_11A_CAL_PIERS_MAX 5
+#define NUM_PSAT_CHAR_PARMS  7
+#define _MAX_TX_GAIN_ENTRIES 32
+
+typedef PREPACK struct {
+    OLPCGAIN_THERM_DUPLET olpcGainTherm2G[PSAT_WHAL_NUM_11G_CAL_PIERS_MAX];
+    OLPCGAIN_THERM_DUPLET olpcGainTherm5G[PSAT_WHAL_NUM_11A_CAL_PIERS_MAX];
+} POSTPACK PSAT_CAL_RESULTS;
+
+typedef PREPACK struct {
+    uint32_t  cmac_i[_MAX_TX_GAIN_ENTRIES];
+    uint8_t pcdac[_MAX_TX_GAIN_ENTRIES];
+
+    uint8_t freq;
+    uint8_t an_txrf3_rdiv2g;
+    uint8_t an_txrf3_pdpredist2g;
+    uint8_t an_rxtx2_mxrgain;
+    uint8_t an_rxrf_bias1_pwd_ic25mxr2gh;
+    uint8_t an_bias2_pwd_ic25rxrf;
+    uint8_t an_bb1_i2v_curr2x;
+    uint8_t an_txrf3_capdiv2g;
+
+} POSTPACK CHAR_PSAT_RESULTS;
+
+typedef PREPACK struct {
+    int16_t txPwr2G_t10[WHAL_NUM_11G_CAL_PIERS_EXT];
+    int16_t txPwr5G_t10[WHAL_NUM_11A_CAL_PIERS_EXT];
+} POSTPACK CAL_TXPWR;
+
+typedef PREPACK struct {
+    uint8_t thermCalVal;
+    uint8_t future[3];
+} POSTPACK PM_CAL_RESULTS;
+
+typedef PREPACK struct {
+    TC_MSG_ID msgId;
+    PREPACK union {
+        PSAT_CAL_RESULTS  psatCalResults;
+        CAL_TXPWR txPwrs;
+        CHAR_PSAT_RESULTS psatCharResults;
+        PM_CAL_RESULTS  pmCalResults;
+    } POSTPACK msg;
+
+} POSTPACK TC_MSG;
+
+typedef struct _psat_sweep_table {
+    uint8_t  an_txrf3_rdiv2g;
+    uint8_t  an_txrf3_pdpredist2g;
+    uint8_t  an_rxtx2_mxrgain;
+    uint8_t  an_rxrf_bias1_pwd_ic25mxr2gh;
+    uint8_t  an_bias2_pwd_ic25rxrf;
+    uint8_t  an_bb1_i2v_curr2x;
+    uint8_t  an_txrf3_capdiv2g;
+    int8_t   olpcPsatCmacDelta;
+    uint16_t psatParm;
+    uint16_t padding2;
+} PSAT_SWEEP_TABLE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TESTCMD_H_ */
diff --git a/ath6kl-wmiconfig/Android.mk b/ath6kl-wmiconfig/Android.mk
new file mode 100755
index 0000000..9f62851
--- /dev/null
+++ b/ath6kl-wmiconfig/Android.mk
@@ -0,0 +1,28 @@
+#------------------------------------------------
+# Copyright (c) 2012 Qualcomm Atheros, Inc..
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#------------------------------------------------
+

+LOCAL_PATH := $(call my-dir)

+

+include $(CLEAR_VARS)

+

+LOCAL_MODULE := wmiconfig

+LOCAL_C_INCLUDES := \

+	$(TARGET_OUT_HEADERS)/libtcmd \

+	$(LOCAL_PATH)/include \

+	$(LOCAL_PATH)/../../bionic/libc/kernel/common \

+	#$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \

+

+

+LOCAL_CFLAGS+=-DUSER_KEYS

+LOCAL_SRC_FILES:= wmiconfig.c

+

+LOCAL_MODULE_TAGS := debug eng optional

+LOCAL_SHARED_LIBRARIES += libcutils

+LOCAL_SHARED_LIBRARIES += libnl_2

+LOCAL_STATIC_LIBRARIES += libtcmd

+include $(BUILD_EXECUTABLE)

+

+

diff --git a/ath6kl-wmiconfig/Makefile b/ath6kl-wmiconfig/Makefile
new file mode 100755
index 0000000..10d4832
--- /dev/null
+++ b/ath6kl-wmiconfig/Makefile
@@ -0,0 +1,31 @@
+#------------------------------------------------
+# Copyright (c) 2012 Qualcomm Atheros, Inc..
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#------------------------------------------------
+-include .config

+

+LDFLAGS +=  $(shell pkg-config --cflags --libs glib-2.0)

+

+CC :=$(ATH_CROSS_COMPILE_TYPE)gcc

+APP=wmiconfig

+

+NLLIBNAME = libnl-1

+LIBTCMD_DIR := ../libtcmd

+
+PREFIX ?= /usr
+SBINDIR ?= $(PREFIX)/sbin
+INSTALL ?= install
+
+

+override LDFLAGS += -ltcmd $(shell pkg-config --libs $(NLLIBNAME)) -lrt
+override CFLAGS += $(shell pkg-config --cflags $(NLLIBNAME)) -I$(LIBTCMD_DIR) -L$(LIBTCMD_DIR)

+all:

+	$(CC) -Wall -DUSER_KEYS -g -I$(KERNEL_SRC)/include -Iinclude wmiconfig.c -o $(APP) $(CFLAGS) $(LDFLAGS)
+
+install: wmiconfig
+	install -m 755 wmiconfig $(DESTDIR)$(SBINDIR)
+	
+

+clean:

+	$(RM) $(APP)

diff --git a/ath6kl-wmiconfig/include/a_config.h b/ath6kl-wmiconfig/include/a_config.h
new file mode 100755
index 0000000..93d3d08
--- /dev/null
+++ b/ath6kl-wmiconfig/include/a_config.h
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+//==============================================================================

+// This file contains software configuration options that enables

+// specific software "features"

+//

+// Author(s): ="Atheros"

+//==============================================================================

+#ifndef _A_CONFIG_H_

+#define _A_CONFIG_H_

+

+#ifdef ATHR_WM_NWF

+#include "../os/windows/include/config.h"

+#endif

+

+#ifdef ATHR_CE_LEGACY

+#include "../os/windows/include/config.h"

+#endif

+

+#if defined(__linux__) && !defined(LINUX_EMULATION)

+//#include "/config_linux.h"

+#endif

+

+#ifdef REXOS

+#include "../os/rexos/include/common/config_rexos.h"

+#endif

+

+#ifdef ATHR_WIN_NWF

+#include "../os/windows/include/config.h"

+#pragma warning( disable:4242)

+#pragma warning( disable:4100)

+#pragma warning( disable:4189)

+#pragma warning( disable:4244)

+#pragma warning( disable:4701)

+#pragma warning( disable:4389)

+#pragma warning( disable:4057)

+#pragma warning( disable:28193)

+#endif

+

+#endif

+

diff --git a/ath6kl-wmiconfig/include/a_osapi.h b/ath6kl-wmiconfig/include/a_osapi.h
new file mode 100755
index 0000000..6396255
--- /dev/null
+++ b/ath6kl-wmiconfig/include/a_osapi.h
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+//==============================================================================

+// This file contains the definitions of the basic atheros data types.

+// It is used to map the data types in atheros files to a platform specific

+// type.

+//

+// Author(s): ="Atheros"

+//==============================================================================

+#ifndef _A_OSAPI_H_

+#define _A_OSAPI_H_

+

+#if defined(__linux__) && !defined(LINUX_EMULATION)

+#include "osapi_linux.h"

+#endif

+

+#ifdef ATHR_WM_NWF

+#include "../os/windows/include/osapi.h"

+#include "../os/windows/include/netbuf.h"

+#endif

+

+#ifdef ATHR_CE_LEGACY

+#include "../os/windows/include/osapi.h"

+#include "../os/windows/include/netbuf.h"

+#endif

+

+#ifdef REXOS

+#include "../os/rexos/include/common/osapi_rexos.h"

+#endif

+

+#if defined ART_WIN

+#include "../os/win_art/include/osapi_win.h"

+#include "../os/win_art/include/netbuf.h"

+#endif

+

+#ifdef ATHR_WIN_NWF

+#include "../os/windows/include/win/osapi_win.h"

+#include "../os/windows/include/netbuf.h"

+#endif

+

+#endif /* _OSAPI_H_ */

+

diff --git a/ath6kl-wmiconfig/include/a_types.h b/ath6kl-wmiconfig/include/a_types.h
new file mode 100755
index 0000000..d489337
--- /dev/null
+++ b/ath6kl-wmiconfig/include/a_types.h
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+//==============================================================================

+// This file contains the definitions of the basic atheros data types.

+// It is used to map the data types in atheros files to a platform specific

+// type.

+//

+// Author(s): ="Atheros"

+//==============================================================================

+#ifndef _A_TYPES_H_

+#define _A_TYPES_H_

+

+#if defined(__linux__) && !defined(LINUX_EMULATION)

+#include "athtypes_linux.h"

+#endif

+

+#ifdef ATHR_WM_NWF

+#include "../os/windows/include/athtypes.h"

+#endif

+

+#ifdef ATHR_CE_LEGACY

+#include "../os/windows/include/athtypes.h"

+#endif

+

+#ifdef REXOS

+#include "../os/rexos/include/common/athtypes_rexos.h"

+#endif

+

+#if defined ART_WIN

+#include "../os/win_art/include/athtypes_win.h"

+#endif

+

+#ifdef ATHR_WIN_NWF

+#include <athtypes_win.h>

+#endif

+

+#endif /* _ATHTYPES_H_ */

+

diff --git a/ath6kl-wmiconfig/include/athdefs.h b/ath6kl-wmiconfig/include/athdefs.h
new file mode 100755
index 0000000..8ba5945
--- /dev/null
+++ b/ath6kl-wmiconfig/include/athdefs.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+#ifndef __ATHDEFS_H__

+#define __ATHDEFS_H__

+

+/*

+ * This file contains definitions that may be used across both

+ * Host and Target software.  Nothing here is module-dependent

+ * or platform-dependent.

+ */

+

+/*

+ * Generic error codes that can be used by hw, sta, ap, sim, dk

+ * and any other environments. Since these are enums, feel free to

+ * add any more codes that you need.

+ */

+

+typedef enum {

+    A_ERROR = -1,               /* Generic error return */

+    A_OK = 0,                   /* success */

+                                /* Following values start at 1 */

+    A_DEVICE_NOT_FOUND,         /* not able to find PCI device */

+    A_NO_MEMORY,                /* not able to allocate memory, not available */

+    A_MEMORY_NOT_AVAIL,         /* memory region is not free for mapping */

+    A_NO_FREE_DESC,             /* no free descriptors available */

+    A_BAD_ADDRESS,              /* address does not match descriptor */

+    A_WIN_DRIVER_ERROR,         /* used in NT_HW version, if problem at init */

+    A_REGS_NOT_MAPPED,          /* registers not correctly mapped */

+    A_EPERM,                    /* Not superuser */

+    A_EACCES,                   /* Access denied */

+    A_ENOENT,                   /* No such entry, search failed, etc. */

+    A_EEXIST,                   /* The object already exists (can't create) */

+    A_EFAULT,                   /* Bad address fault */

+    A_EBUSY,                    /* Object is busy */

+    A_EINVAL,                   /* Invalid parameter */

+    A_EMSGSIZE,                 /* Inappropriate message buffer length */

+    A_ECANCELED,                /* Operation canceled */

+    A_ENOTSUP,                  /* Operation not supported */

+    A_ECOMM,                    /* Communication error on send */

+    A_EPROTO,                   /* Protocol error */

+    A_ENODEV,                   /* No such device */

+    A_EDEVNOTUP,                /* device is not UP */

+    A_NO_RESOURCE,              /* No resources for requested operation */

+    A_HARDWARE,                 /* Hardware failure */

+    A_PENDING,                  /* Asynchronous routine; will send up results la

+ter (typically in callback) */

+    A_EBADCHANNEL,              /* The channel cannot be used */

+    A_DECRYPT_ERROR,            /* Decryption error */

+    A_PHY_ERROR,                /* RX PHY error */

+    A_CONSUMED                  /* Object was consumed */

+} A_STATUS;

+

+#define A_SUCCESS(x)        (x == A_OK)

+#define A_FAILED(x)         (!A_SUCCESS(x))

+

+#ifndef TRUE

+#define TRUE 1

+#endif

+

+#ifndef FALSE

+#define FALSE 0

+#endif

+

+#endif /* __ATHDEFS_H__ */

+

diff --git a/ath6kl-wmiconfig/include/athdrv_linux.h b/ath6kl-wmiconfig/include/athdrv_linux.h
new file mode 100755
index 0000000..71a7578
--- /dev/null
+++ b/ath6kl-wmiconfig/include/athdrv_linux.h
@@ -0,0 +1,1461 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef _ATHDRV_LINUX_H

+#define _ATHDRV_LINUX_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+

+/*

+ * There are two types of ioctl's here: Standard ioctls and

+ * eXtended ioctls.  All extended ioctls (XIOCTL) are multiplexed

+ * off of the single ioctl command, AR6000_IOCTL_EXTENDED.  The

+ * arguments for every XIOCTL starts with a 32-bit command word

+ * that is used to select which extended ioctl is in use.  After

+ * the command word are command-specific arguments.

+ */

+

+/* Linux standard Wireless Extensions, private ioctl interfaces */

+#define IEEE80211_IOCTL_SETPARAM             (SIOCIWFIRSTPRIV+0)

+#define IEEE80211_IOCTL_SETKEY               (SIOCIWFIRSTPRIV+1)

+#define IEEE80211_IOCTL_DELKEY               (SIOCIWFIRSTPRIV+2)

+#define IEEE80211_IOCTL_SETMLME              (SIOCIWFIRSTPRIV+3)

+#define IEEE80211_IOCTL_ADDPMKID             (SIOCIWFIRSTPRIV+4)

+#define IEEE80211_IOCTL_SETOPTIE             (SIOCIWFIRSTPRIV+5)

+//#define IEEE80211_IOCTL_GETPARAM             (SIOCIWFIRSTPRIV+6)

+//#define IEEE80211_IOCTL_SETWMMPARAMS         (SIOCIWFIRSTPRIV+7)

+//#define IEEE80211_IOCTL_GETWMMPARAMS         (SIOCIWFIRSTPRIV+8)

+//#define IEEE80211_IOCTL_GETOPTIE             (SIOCIWFIRSTPRIV+9)

+//#define IEEE80211_IOCTL_SETAUTHALG           (SIOCIWFIRSTPRIV+10)

+#define IEEE80211_IOCTL_LASTONE              (SIOCIWFIRSTPRIV+10)

+

+

+

+/*                      ====WMI Ioctls====                                    */

+/*

+ *

+ * Many ioctls simply provide WMI services to application code:

+ * an application makes such an ioctl call with a set of arguments

+ * that are packaged into the corresponding WMI message, and sent

+ * to the Target.

+ */

+

+#define AR6000_IOCTL_WMI_GETREV              (SIOCIWFIRSTPRIV+11)

+/*

+ * arguments:

+ *   ar6000_version *revision

+ */

+

+#define AR6000_IOCTL_WMI_SETPWR              (SIOCIWFIRSTPRIV+12)

+/*

+ * arguments:

+ *   WMI_POWER_MODE_CMD pwrModeCmd (see include/wmi.h)

+ * uses: WMI_SET_POWER_MODE_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SETSCAN             (SIOCIWFIRSTPRIV+13)

+/*

+ * arguments:

+ *   WMI_SCAN_PARAMS_CMD scanParams (see include/wmi.h)

+ * uses: WMI_SET_SCAN_PARAMS_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SETLISTENINT        (SIOCIWFIRSTPRIV+14)

+/*

+ * arguments:

+ *   UINT32 listenInterval

+ * uses: WMI_SET_LISTEN_INT_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SETBSSFILTER        (SIOCIWFIRSTPRIV+15)

+/*

+ * arguments:

+ *   WMI_BSS_FILTER filter (see include/wmi.h)

+ * uses: WMI_SET_BSS_FILTER_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_CHANNELPARAMS   (SIOCIWFIRSTPRIV+16)

+/*

+ * arguments:

+ *   WMI_CHANNEL_PARAMS_CMD chParams

+ * uses: WMI_SET_CHANNEL_PARAMS_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_PROBEDSSID      (SIOCIWFIRSTPRIV+17)

+/*

+ * arguments:

+ *   WMI_PROBED_SSID_CMD probedSsids (see include/wmi.h)

+ * uses: WMI_SETPROBED_SSID_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_PMPARAMS        (SIOCIWFIRSTPRIV+18)

+/*

+ * arguments:

+ *   WMI_POWER_PARAMS_CMD powerParams (see include/wmi.h)

+ * uses: WMI_SET_POWER_PARAMS_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_BADAP           (SIOCIWFIRSTPRIV+19)

+/*

+ * arguments:

+ *   WMI_ADD_BAD_AP_CMD badAPs (see include/wmi.h)

+ * uses: WMI_ADD_BAD_AP_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_GET_QOS_QUEUE       (SIOCIWFIRSTPRIV+20)

+/*

+ * arguments:

+ *   ar6000_queuereq queueRequest (see below)

+ */

+

+#define AR6000_IOCTL_WMI_CREATE_QOS          (SIOCIWFIRSTPRIV+21)

+/*

+ * arguments:

+ *   WMI_CREATE_PSTREAM createPstreamCmd (see include/wmi.h)

+ * uses: WMI_CREATE_PSTREAM_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_DELETE_QOS          (SIOCIWFIRSTPRIV+22)

+/*

+ * arguments:

+ *   WMI_DELETE_PSTREAM_CMD deletePstreamCmd (see include/wmi.h)

+ * uses: WMI_DELETE_PSTREAM_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_SNRTHRESHOLD   (SIOCIWFIRSTPRIV+23)

+/*

+ * arguments:

+ *   WMI_SNR_THRESHOLD_PARAMS_CMD thresholdParams (see include/wmi.h)

+ * uses: WMI_SNR_THRESHOLD_PARAMS_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_ERROR_REPORT_BITMASK (SIOCIWFIRSTPRIV+24)

+/*

+ * arguments:

+ *   WMI_TARGET_ERROR_REPORT_BITMASK errorReportBitMask (see include/wmi.h)

+ * uses: WMI_TARGET_ERROR_REPORT_BITMASK_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_GET_TARGET_STATS    (SIOCIWFIRSTPRIV+25)

+/*

+ * arguments:

+ *   TARGET_STATS *targetStats (see below)

+ * uses: WMI_GET_STATISTICS_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_ASSOC_INFO      (SIOCIWFIRSTPRIV+26)

+/*

+ * arguments:

+ *   WMI_SET_ASSOC_INFO_CMD setAssocInfoCmd

+ * uses: WMI_SET_ASSOC_INFO_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_ACCESS_PARAMS   (SIOCIWFIRSTPRIV+27)

+/*

+ * arguments:

+ *   WMI_SET_ACCESS_PARAMS_CMD setAccessParams (see include/wmi.h)

+ * uses: WMI_SET_ACCESS_PARAMS_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_BMISS_TIME      (SIOCIWFIRSTPRIV+28)

+/*

+ * arguments:

+ *   UINT32 beaconMissTime

+ * uses: WMI_SET_BMISS_TIME_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_DISC_TIMEOUT    (SIOCIWFIRSTPRIV+29)

+/*

+ * arguments:

+ *   WMI_DISC_TIMEOUT_CMD disconnectTimeoutCmd (see include/wmi.h)

+ * uses: WMI_SET_DISC_TIMEOUT_CMDID

+ */

+

+#define AR6000_IOCTL_WMI_SET_IBSS_PM_CAPS    (SIOCIWFIRSTPRIV+30)

+/*

+ * arguments:

+ *   WMI_IBSS_PM_CAPS_CMD ibssPowerMgmtCapsCmd

+ * uses: WMI_SET_IBSS_PM_CAPS_CMDID

+ */

+

+/*

+ * There is a very small space available for driver-private

+ * wireless ioctls.  In order to circumvent this limitation,

+ * we multiplex a bunch of ioctls (XIOCTLs) on top of a

+ * single AR6000_IOCTL_EXTENDED ioctl.

+ */

+#define AR6000_IOCTL_EXTENDED                (SIOCIWFIRSTPRIV+31)

+

+typedef enum {

+    AR6000_XIOCTL_BMI_DONE = 1,

+    AR6000_XIOCTL_BMI_READ_MEMORY,

+    AR6000_XIOCTL_BMI_WRITE_MEMORY,

+    AR6000_XIOCTL_BMI_EXECUTE,

+    AR6000_XIOCTL_BMI_SET_APP_START,

+    AR6000_XIOCTL_BMI_READ_SOC_REGISTER,

+    AR6000_XIOCTL_BMI_WRITE_SOC_REGISTER,

+    AR6000_XIOCTL_BMI_TEST,

+    AR6000_XIOCTL_UNUSED9,

+    AR6000_XIOCTL_UNUSED10, /* 10 */

+    AR6000_XIOCTL_UNUSED11,

+    AR6000_XIOCTL_FORCE_TARGET_RESET,

+    AR6000_XIOCTL_HTC_RAW_OPEN,

+    AR6000_XIOCTL_HTC_RAW_CLOSE,

+    AR6000_XIOCTL_HTC_RAW_READ,

+    AR6000_XIOCTL_HTC_RAW_WRITE,

+    AR6000_XIOCTL_CHECK_TARGET_READY,

+    AR6000_XIOCTL_GPIO_OUTPUT_SET,

+    AR6000_XIOCTL_GPIO_INPUT_GET,

+    AR6000_XIOCTL_GPIO_REGISTER_SET,  /* 20 */

+    AR6000_XIOCTL_GPIO_REGISTER_GET,

+    AR6000_XIOCTL_GPIO_INTR_ACK,

+    AR6000_XIOCTL_GPIO_INTR_WAIT,

+    AR6000_XIOCTL_SET_ADHOC_BSSID,

+    AR6000_XIOCTL_UNUSED25,

+    AR6000_XIOCTL_UNUSED26,

+    AR6000_XIOCTL_SET_BEACON_INTVAL,

+    IEEE80211_IOCTL_SETAUTHALG,

+    AR6000_XIOCTL_SET_VOICE_PKT_SIZE,

+    AR6000_XIOCTL_SET_MAX_SP,   /* 30 */

+    AR6000_XIOCTL_WMI_GET_ROAM_TBL,

+    AR6000_XIOCTL_WMI_SET_ROAM_CTRL,

+    AR6000_XIOCTRL_WMI_SET_POWERSAVE_TIMERS,

+    AR6000_XIOCTRL_WMI_GET_POWER_MODE,

+    AR6000_XIOCTRL_WMI_SET_WLAN_STATE,

+    AR6000_XIOCTL_WMI_GET_ROAM_DATA,

+    AR6000_XIOCTL_WMI_SETRETRYLIMITS,

+    AR6000_XIOCTL_TCMD_CONT_TX,

+    AR6000_XIOCTL_TCMD_CONT_RX,

+    AR6000_XIOCTL_TCMD_PM,  /* 40 */

+    AR6000_XIOCTL_WMI_STARTSCAN,

+    AR6000_XIOCTL_WMI_SETFIXRATES,

+    AR6000_XIOCTL_WMI_GETFIXRATES,

+    AR6000_XIOCTL_WMI_SET_RSSITHRESHOLD,

+    AR6000_XIOCTL_WMI_CLR_RSSISNR,                   

+    AR6000_XIOCTL_WMI_SET_LQTHRESHOLD,               

+    AR6000_XIOCTL_WMI_SET_RTS,

+    AR6000_XIOCTL_WMI_SET_LPREAMBLE,

+    AR6000_XIOCTL_WMI_SET_AUTHMODE,

+    AR6000_XIOCTL_WMI_SET_REASSOCMODE, /* 50 */

+    AR6000_XIOCTL_WMI_SET_WMM,

+    AR6000_XIOCTL_WMI_SET_HB_CHALLENGE_RESP_PARAMS,

+    AR6000_XIOCTL_WMI_GET_HB_CHALLENGE_RESP,

+    AR6000_XIOCTL_WMI_GET_RD,

+    AR6000_XIOCTL_DIAG_READ,

+    AR6000_XIOCTL_DIAG_WRITE,

+    AR6000_XIOCTL_WMI_SET_TXOP,

+    AR6000_XIOCTL_USER_SETKEYS,

+    AR6000_XIOCTL_WMI_SET_KEEPALIVE,

+    AR6000_XIOCTL_WMI_GET_KEEPALIVE, /* 60 */

+    AR6000_XIOCTL_BMI_ROMPATCH_INSTALL,

+    AR6000_XIOCTL_BMI_ROMPATCH_UNINSTALL,

+    AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE,

+    AR6000_XIOCTL_BMI_ROMPATCH_DEACTIVATE,

+    AR6000_XIOCTL_WMI_SET_APPIE,

+    AR6000_XIOCTL_WMI_SET_MGMT_FRM_RX_FILTER,

+    AR6000_XIOCTL_DBGLOG_CFG_MODULE,

+    AR6000_XIOCTL_DBGLOG_GET_DEBUG_LOGS,

+    AR6000_XIOCTL_WMI_SET_WSC_STATUS = 70,  /* 70 */

+    AR6000_XIOCTL_WMI_SET_BT_STATUS,

+    AR6000_XIOCTL_WMI_SET_BT_PARAMS,

+    AR6000_XIOCTL_WMI_SET_HOST_SLEEP_MODE,

+    AR6000_XIOCTL_WMI_SET_WOW_MODE,

+    AR6000_XIOCTL_WMI_GET_WOW_LIST,

+    AR6000_XIOCTL_WMI_ADD_WOW_PATTERN,

+    AR6000_XIOCTL_WMI_DEL_WOW_PATTERN,

+    AR6000_XIOCTL_TARGET_INFO,

+    AR6000_XIOCTL_DUMP_HTC_CREDIT_STATE,

+    AR6000_XIOCTL_TRAFFIC_ACTIVITY_CHANGE,  /* 80 */

+    AR6000_XIOCTL_WMI_SET_CONNECT_CTRL_FLAGS,

+    AR6000_XIOCTL_WMI_SET_AKMP_PARAMS,

+    AR6000_XIOCTL_WMI_GET_PMKID_LIST,

+    AR6000_XIOCTL_WMI_SET_PMKID_LIST,

+    AR6000_XIOCTL_WMI_SET_PARAMS,

+    AR6000_XIOCTL_WMI_SET_MCAST_FILTER,

+    AR6000_XIOCTL_WMI_DEL_MCAST_FILTER,

+    AR6000_XIOCTL_UNUSED90 = 90,  /* 90 */

+    AR6000_XIOCTL_BMI_LZ_STREAM_START,

+    AR6000_XIOCTL_BMI_LZ_DATA,

+    AR6000_XIOCTL_PROF_CFG,

+    AR6000_XIOCTL_PROF_ADDR_SET,

+    AR6000_XIOCTL_PROF_START,

+    AR6000_XIOCTL_PROF_STOP,

+    AR6000_XIOCTL_PROF_COUNT_GET,

+    AR6000_XIOCTL_WMI_ABORT_SCAN,

+    AR6000_XIOCTL_AP_GET_STA_LIST,

+    AR6000_XIOCTL_AP_HIDDEN_SSID, /* 100 */

+    AR6000_XIOCTL_AP_SET_NUM_STA,

+    AR6000_XIOCTL_AP_SET_ACL_MAC,

+    AR6000_XIOCTL_AP_GET_ACL_LIST,

+    AR6000_XIOCTL_AP_COMMIT_CONFIG,

+    IEEE80211_IOCTL_GETWPAIE,

+    AR6000_XIOCTL_AP_CONN_INACT_TIME,

+    AR6000_XIOCTL_AP_PROT_SCAN_TIME,

+    AR6000_XIOCTL_AP_SET_COUNTRY,

+    AR6000_XIOCTL_AP_SET_DTIM,

+    AR6000_XIOCTL_WMI_TARGET_EVENT_REPORT, /* 110 */

+    AR6000_XIOCTL_SET_IP,

+    AR6000_XIOCTL_AP_SET_ACL_POLICY,

+    AR6000_XIOCTL_AP_CTRL_BSS_COMM,

+    AR6000_XIOCTL_DUMP_MODULE_DEBUG_INFO,

+    AR6000_XIOCTL_MODULE_DEBUG_SET_MASK,

+    AR6000_XIOCTL_MODULE_DEBUG_GET_MASK,

+    AR6000_XIOCTL_DUMP_RCV_AGGR_STATS,

+    AR6000_XIOCTL_SET_HT_CAP,

+    AR6000_XIOCTL_SET_HT_OP,

+    AR6000_XIOCTL_AP_GET_STAT, /* 120 */

+    AR6000_XIOCTL_SET_TX_SELECT_RATES,

+    AR6000_XIOCTL_SETUP_AGGR,

+    AR6000_XIOCTL_ALLOW_AGGR,

+    AR6000_XIOCTL_AP_GET_HIDDEN_SSID,

+    AR6000_XIOCTL_AP_GET_COUNTRY,

+    AR6000_XIOCTL_AP_GET_WMODE,

+    AR6000_XIOCTL_AP_GET_DTIM,

+    AR6000_XIOCTL_AP_GET_BINTVL,

+    AR6000_XIOCTL_AP_GET_RTS,

+    AR6000_XIOCTL_DELE_AGGR, /* 130 */

+    AR6000_XIOCTL_FETCH_TARGET_REGS,

+    AR6000_XIOCTL_HCI_CMD,

+    AR6000_XIOCTL_ACL_DATA,

+    AR6000_XIOCTL_WLAN_CONN_PRECEDENCE,

+    AR6000_XIOCTL_AP_SET_11BG_RATESET,

+    AR6000_XIOCTL_WMI_SET_AP_PS,

+    AR6000_XIOCTL_WMI_MCAST_FILTER,

+    AR6000_XIOCTL_WMI_SET_BTCOEX_FE_ANT,

+    AR6000_XIOCTL_WMI_SET_BTCOEX_COLOCATED_BT_DEV,

+    AR6000_XIOCTL_WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG, /* 140 */

+    AR6000_XIOCTL_WMI_SET_BTCOEX_SCO_CONFIG,

+    AR6000_XIOCTL_WMI_SET_BTCOEX_A2DP_CONFIG,

+    AR6000_XIOCTL_WMI_SET_BTCOEX_ACLCOEX_CONFIG,

+    AR6000_XIOCTL_WMI_SET_BTCOEX_DEBUG,

+    AR6000_XIOCTL_WMI_SET_BT_OPERATING_STATUS,

+    AR6000_XIOCTL_WMI_GET_BTCOEX_CONFIG,

+    AR6000_XIOCTL_WMI_GET_BTCOEX_STATS,

+    AR6000_XIOCTL_WMI_SET_QOS_SUPP,

+    AR6000_XIOCTL_AP_SET_DFS,

+    AR6000_XIOCTL_WMI_P2P_DISCOVER, /* 150 */

+    AR6000_XIOCTL_WMI_P2P_STOP_FIND,

+    AR6000_XIOCTL_WMI_P2P_CANCEL,

+    AR6000_XIOCTL_WMI_P2P_LISTEN,

+    AR6000_XIOCTL_WMI_P2P_GO_NEG,

+    AR6000_XIOCTL_WMI_P2P_AUTH_GO_NEG,

+    AR6000_XIOCTL_WMI_P2P_REJECT,

+    AR6000_XIOCTL_WMI_P2P_CONFIG,

+    AR6000_XIOCTL_WMI_WPS_CONFIG,

+    AR6000_XIOCTL_WMI_P2P_FINDNODE,

+    AR6000_XIOCTL_WMI_P2P_GRP_INIT, /* 160 */

+    AR6000_XIOCTL_WMI_P2P_GRP_FORMATION_DONE,

+    AR6000_XIOCTL_WMI_P2P_INVITE,

+    AR6000_XIOCTL_WMI_P2P_PROV_DISC,

+    AR6000_XIOCTL_WMI_P2P_SET,

+    AR6000_XIOCTL_WMI_P2P_PEER,

+    AR6000_XIOCTL_WMI_P2P_FLUSH,

+    AR6000_XIOCTL_WMI_GET_GO_PARAMS,

+    AR6000_XIOCTL_P2P_AUTH_INVITE,

+    AR6000_XIOCTL_WMI_P2P_GET_IF_ADDR,

+    AR6000_XIOCTL_WMI_P2P_GET_DEV_ADDR, /* 170 */

+    AR6000_XIOCTL_WMI_P2P_SDPD_TX_CMD,

+    AR6000_XIOTCL_WMI_P2P_SD_CANCEL_REQUEST,

+    AR6000_XIOCTL_SET_BT_HW_POWER_STATE,

+    AR6000_XIOCTL_GET_BT_HW_POWER_STATE,

+    AR6000_XIOCTL_GET_WLAN_SLEEP_STATE,

+    AR6000_XIOCTL_WMI_SET_TX_SGI_PARAM,

+    AR6000_XIOCTL_WMI_ENABLE_WAC_PARAM,

+    AR6000_XIOCTL_WAC_SCAN_REPLY,

+    AR6000_XIOCTL_WMI_WAC_CTRL_REQ,

+    AR6000_XIOCTL_WMI_SET_WPA_OFFLOAD_STATE, /* 180 */

+    AR6000_XIOCTL_WMI_SET_PASSPHRASE,

+    AR6000_XIOCTL_BMI_NVRAM_PROCESS,

+    AR6000_XIOCTL_WMI_SET_DIVERSITY_PARAM,

+    AR6000_XIOCTL_WMI_FORCE_ASSERT,

+    AR6000_XIOCTL_WMI_ENABLE_PKTLOG,

+    AR6000_XIOCTL_WMI_DISABLE_PKTLOG,

+    AR6000_XIOCTL_WMI_GET_PKTLOG,

+    AR6000_XIOCTL_AP_ACS_DISABLE_HI_CHANNELS,

+    AR6000_XIOCTL_TCMD_CMDS,

+    AR6000_XIOCTL_WMI_SET_EXCESS_TX_RETRY_THRES, /* 190 */

+    AR6000_XIOCTL_AP_GET_NUM_STA,

+    AR6000_XIOCTL_SUSPEND_DRIVER,

+    AR6000_XIOCTL_RESUME_DRIVER,

+    AR6000_XIOCTL_GET_SUBMODE,

+    AR6000_XIOCTL_WMI_AP_SET_APSD,

+    AR6000_XIOCTL_TCMD_SETREG, 

+    AR6000_XIOCTL_GET_HT_CAP,

+    AR6000_XIOCTL_WMI_GET_P2P_IE, /* 198 */

+    AR6000_XIOCTL_WMI_P2P_GET_OWN_INFO,

+} XTND_IOCLTS; 

+

+

+

+///*                         ====BMI Extended Ioctls====                        */

+//

+//#define AR6000_XIOCTL_BMI_DONE                                  1

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_DONE)

+// * uses: BMI_DONE

+// */

+//

+//#define AR6000_XIOCTL_BMI_READ_MEMORY                           2

+///*

+// * arguments:

+// *   union {

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_BMI_READ_MEMORY)

+// *       UINT32 address

+// *       UINT32 length

+// *     }

+// *     char results[length]

+// *   }

+// * uses: BMI_READ_MEMORY

+// */

+//

+//#define AR6000_XIOCTL_BMI_WRITE_MEMORY                          3

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_WRITE_MEMORY)

+// *   UINT32 address

+// *   UINT32 length

+// *   char data[length]

+// * uses: BMI_WRITE_MEMORY

+// */

+//

+//#define AR6000_XIOCTL_BMI_EXECUTE                               4

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_EXECUTE)

+// *   UINT32 TargetAddress

+// *   UINT32 parameter

+// * uses: BMI_EXECUTE

+// */

+//

+//#define AR6000_XIOCTL_BMI_SET_APP_START                         5

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_SET_APP_START)

+// *   UINT32 TargetAddress

+// * uses: BMI_SET_APP_START

+// */

+//

+//#define AR6000_XIOCTL_BMI_READ_SOC_REGISTER                     6

+///*

+// * arguments:

+// *   union {

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_BMI_READ_SOC_REGISTER)

+// *       UINT32 TargetAddress, 32-bit aligned

+// *     }

+// *     UINT32 result

+// *   }

+// * uses: BMI_READ_SOC_REGISTER

+// */

+//

+//#define AR6000_XIOCTL_BMI_WRITE_SOC_REGISTER                    7

+///*

+// * arguments:

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_BMI_WRITE_SOC_REGISTER)

+// *       UINT32 TargetAddress, 32-bit aligned

+// *       UINT32 newValue

+// *     }

+// * uses: BMI_WRITE_SOC_REGISTER

+// */

+//

+//#define AR6000_XIOCTL_BMI_TEST                                  8

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_TEST)

+// *   UINT32 address

+// *   UINT32 length

+// *   UINT32 count

+// */

+//

+//

+//

+///* Historical Host-side DataSet support */

+//#define AR6000_XIOCTL_UNUSED9                                   9

+//#define AR6000_XIOCTL_UNUSED10                                  10

+//#define AR6000_XIOCTL_UNUSED11                                  11

+//

+///*                      ====Misc Extended Ioctls====                          */

+//

+//#define AR6000_XIOCTL_FORCE_TARGET_RESET                        12

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_FORCE_TARGET_RESET)

+// */

+//

+//

+//#ifdef HTC_RAW_INTERFACE

+///* HTC Raw Interface Ioctls */

+//#define AR6000_XIOCTL_HTC_RAW_OPEN                              13

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_HTC_RAW_OPEN)

+// */

+//

+//#define AR6000_XIOCTL_HTC_RAW_CLOSE                             14

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_HTC_RAW_CLOSE)

+// */

+//

+//#define AR6000_XIOCTL_HTC_RAW_READ                              15

+///*

+// * arguments:

+// *   union {

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_HTC_RAW_READ)

+// *       UINT32 mailboxID

+// *       UINT32 length

+// *     }

+// *     results[length]

+// *   }

+// */

+//

+//#define AR6000_XIOCTL_HTC_RAW_WRITE                             16

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_HTC_RAW_WRITE)

+// *   UINT32 mailboxID

+// *   UINT32 length

+// *   char buffer[length]

+// */

+//#endif /* HTC_RAW_INTERFACE */

+//

+//#define AR6000_XIOCTL_CHECK_TARGET_READY                        17

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_CHECK_TARGET_READY)

+// */

+//

+//

+//

+///*                ====GPIO (General Purpose I/O) Extended Ioctls====          */

+//

+//#define AR6000_XIOCTL_GPIO_OUTPUT_SET                           18

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_GPIO_OUTPUT_SET)

+// *   ar6000_gpio_output_set_cmd_s (see below)

+// * uses: WMIX_GPIO_OUTPUT_SET_CMDID

+// */

+//

+//#define AR6000_XIOCTL_GPIO_INPUT_GET                            19

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_GPIO_INPUT_GET)

+// * uses: WMIX_GPIO_INPUT_GET_CMDID

+// */

+//

+//#define AR6000_XIOCTL_GPIO_REGISTER_SET                         20

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_GPIO_REGISTER_SET)

+// *   ar6000_gpio_register_cmd_s (see below)

+// * uses: WMIX_GPIO_REGISTER_SET_CMDID

+// */

+//

+//#define AR6000_XIOCTL_GPIO_REGISTER_GET                         21

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_GPIO_REGISTER_GET)

+// *   ar6000_gpio_register_cmd_s (see below)

+// * uses: WMIX_GPIO_REGISTER_GET_CMDID

+// */

+//

+//#define AR6000_XIOCTL_GPIO_INTR_ACK                             22

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_GPIO_INTR_ACK)

+// *   ar6000_cpio_intr_ack_cmd_s (see below)

+// * uses: WMIX_GPIO_INTR_ACK_CMDID

+// */

+//

+//#define AR6000_XIOCTL_GPIO_INTR_WAIT                            23

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_GPIO_INTR_WAIT)

+// */

+//

+//

+//

+///*                    ====more wireless commands====                          */

+//

+//#define AR6000_XIOCTL_SET_ADHOC_BSSID                           24

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_SET_ADHOC_BSSID)

+// *   WMI_SET_ADHOC_BSSID_CMD setAdHocBssidCmd (see include/wmi.h)

+// */

+//

+//#define AR6000_XIOCTL_SET_OPT_MODE                              25

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_SET_OPT_MODE)

+// *   WMI_SET_OPT_MODE_CMD setOptModeCmd (see include/wmi.h)

+// * uses: WMI_SET_OPT_MODE_CMDID

+// */

+//

+//#define AR6000_XIOCTL_OPT_SEND_FRAME                            26

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_OPT_SEND_FRAME)

+// *   WMI_OPT_TX_FRAME_CMD optTxFrameCmd (see include/wmi.h)

+// * uses: WMI_OPT_TX_FRAME_CMDID

+// */

+//

+//#define AR6000_XIOCTL_SET_BEACON_INTVAL                         27

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_SET_BEACON_INTVAL)

+// *   WMI_BEACON_INT_CMD beaconIntCmd (see include/wmi.h)

+// * uses: WMI_SET_BEACON_INT_CMDID

+// */

+//

+//

+//#define IEEE80211_IOCTL_SETAUTHALG                              28

+//

+//

+//#define AR6000_XIOCTL_SET_VOICE_PKT_SIZE                        29

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_SET_VOICE_PKT_SIZE)

+// *   WMI_SET_VOICE_PKT_SIZE_CMD setVoicePktSizeCmd (see include/wmi.h)

+// * uses: WMI_SET_VOICE_PKT_SIZE_CMDID

+// */

+//

+//

+//#define AR6000_XIOCTL_SET_MAX_SP                                30

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_SET_MAX_SP)

+// *   WMI_SET_MAX_SP_LEN_CMD maxSPLen(see include/wmi.h)

+// * uses: WMI_SET_MAX_SP_LEN_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_GET_ROAM_TBL                          31

+//

+//#define AR6000_XIOCTL_WMI_SET_ROAM_CTRL                         32

+//

+//#define AR6000_XIOCTRL_WMI_SET_POWERSAVE_TIMERS                 33

+//

+//

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTRL_WMI_SET_POWERSAVE_TIMERS)

+// *   WMI_SET_POWERSAVE_TIMERS_CMD powerSaveTimers(see include/wmi.h)

+// *   WMI_SET_POWERSAVE_TIMERS_CMDID

+// */

+//

+//#define AR6000_XIOCTRL_WMI_GET_POWER_MODE                        34

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTRL_WMI_GET_POWER_MODE)

+// */

+//

+//#define AR6000_XIOCTRL_WMI_SET_WLAN_STATE                       35

+

+typedef enum {

+    WLAN_DISABLED,

+    WLAN_ENABLED

+} AR6000_WLAN_STATE;

+

+///*

+// * arguments:

+// * enable/disable

+// */

+//

+//#define AR6000_XIOCTL_WMI_GET_ROAM_DATA                         36

+//

+//#define AR6000_XIOCTL_WMI_SETRETRYLIMITS                37

+///*

+// * arguments:

+// *   WMI_SET_RETRY_LIMITS_CMD ibssSetRetryLimitsCmd

+// * uses: WMI_SET_RETRY_LIMITS_CMDID

+// */

+//

+//#ifdef CONFIG_HOST_TCMD_SUPPORT

+///*       ====extended commands for radio test ====                          */

+//

+//#define AR6000_XIOCTL_TCMD_CONT_TX                      38

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_TCMD_CONT_TX)

+// *   WMI_TCMD_CONT_TX_CMD contTxCmd (see include/wmi.h)

+// * uses: WMI_TCMD_CONT_TX_CMDID

+// */

+//

+//#define AR6000_XIOCTL_TCMD_CONT_RX                      39

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_TCMD_CONT_RX)

+// *   WMI_TCMD_CONT_RX_CMD rxCmd (see include/wmi.h)

+// * uses: WMI_TCMD_CONT_RX_CMDID

+// */

+//

+//#define AR6000_XIOCTL_TCMD_PM                           40

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_TCMD_PM)

+// *   WMI_TCMD_PM_CMD pmCmd (see include/wmi.h)

+// * uses: WMI_TCMD_PM_CMDID

+// */

+//

+//#endif /* CONFIG_HOST_TCMD_SUPPORT */

+//

+//#define AR6000_XIOCTL_WMI_STARTSCAN                     41

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_WMI_STARTSCAN)

+// *   UINT8  scanType

+// *   UINT8  scanConnected

+// *   A_BOOL forceFgScan

+// * uses: WMI_START_SCAN_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_SETFIXRATES                   42

+//

+//#define AR6000_XIOCTL_WMI_GETFIXRATES                   43

+//

+//

+//#define AR6000_XIOCTL_WMI_SET_RSSITHRESHOLD             44

+///*

+// * arguments:

+// *   WMI_RSSI_THRESHOLD_PARAMS_CMD thresholdParams (see include/wmi.h)

+// * uses: WMI_RSSI_THRESHOLD_PARAMS_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_CLR_RSSISNR                   45

+///*

+// * arguments:

+// *   WMI_CLR_RSSISNR_CMD thresholdParams (see include/wmi.h)

+// * uses: WMI_CLR_RSSISNR_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_LQTHRESHOLD               46

+///*

+// * arguments:

+// *   WMI_LQ_THRESHOLD_PARAMS_CMD thresholdParams (see include/wmi.h)

+// * uses: WMI_LQ_THRESHOLD_PARAMS_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_RTS                        47

+///*

+// * arguments:

+// *   WMI_SET_RTS_MODE_CMD (see include/wmi.h)

+// * uses: WMI_SET_RTS_MODE_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_LPREAMBLE                 48

+//

+//#define AR6000_XIOCTL_WMI_SET_AUTHMODE                  49

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_WMI_SET_AUTHMODE)

+// *   UINT8  mode

+// * uses: WMI_SET_RECONNECT_AUTH_MODE_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_REASSOCMODE               50

+//

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_WMI_SET_WMM)

+// *   UINT8  mode

+// * uses: WMI_SET_WMM_CMDID

+// */

+//#define AR6000_XIOCTL_WMI_SET_WMM                       51

+//

+///*

+// * arguments:

+// * UINT32 cmd (AR6000_XIOCTL_WMI_SET_HB_CHALLENGE_RESP_PARAMS)

+// * UINT32 frequency

+// * UINT8  threshold

+// */

+//#define AR6000_XIOCTL_WMI_SET_HB_CHALLENGE_RESP_PARAMS  52

+//

+///*

+// * arguments:

+// * UINT32 cmd (AR6000_XIOCTL_WMI_GET_HB_CHALLENGE_RESP)

+// * UINT32 cookie

+// */

+//#define AR6000_XIOCTL_WMI_GET_HB_CHALLENGE_RESP         53

+//

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_WMI_GET_RD)

+// *   UINT32 regDomain

+// */

+//#define AR6000_XIOCTL_WMI_GET_RD                        54

+//

+//#define AR6000_XIOCTL_DIAG_READ                         55

+//

+//#define AR6000_XIOCTL_DIAG_WRITE                        56

+//

+///*

+// * arguments cmd (AR6000_XIOCTL_SET_TXOP)

+// * WMI_TXOP_CFG  txopEnable

+// */

+//#define AR6000_XIOCTL_WMI_SET_TXOP                      57

+//

+//#ifdef USER_KEYS

+///*

+// * arguments:

+// * UINT32 cmd (AR6000_XIOCTL_USER_SETKEYS)

+// * UINT32 keyOpCtrl

+// * uses AR6000_USER_SETKEYS_INFO

+// */

+//#define AR6000_XIOCTL_USER_SETKEYS                      58

+//#endif /* USER_KEYS */

+//

+//#define AR6000_XIOCTL_WMI_SET_KEEPALIVE                 59

+///*

+// * arguments:

+// *   UINT8 cmd (AR6000_XIOCTL_WMI_SET_KEEPALIVE)

+// *   UINT8 keepaliveInterval

+// * uses: WMI_SET_KEEPALIVE_CMDID

+// */

+//

+//#define AR6000_XIOCTL_WMI_GET_KEEPALIVE                 60

+///*

+// * arguments:

+// *   UINT8 cmd (AR6000_XIOCTL_WMI_GET_KEEPALIVE)

+// *   UINT8 keepaliveInterval

+// *   A_BOOL configured

+// * uses: WMI_GET_KEEPALIVE_CMDID

+// */

+//

+///*               ====ROM Patching Extended Ioctls====                       */

+//

+//#define AR6000_XIOCTL_BMI_ROMPATCH_INSTALL              61

+///*

+// * arguments:

+// *     union {

+// *       struct {

+// *         UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_INSTALL)

+// *         UINT32 ROM Address

+// *         UINT32 RAM Address

+// *         UINT32 number of bytes

+// *         UINT32 activate? (0 or 1)

+// *       }

+// *       A_UINT32 resulting rompatch ID

+// *     }

+// * uses: BMI_ROMPATCH_INSTALL

+// */

+//

+//#define AR6000_XIOCTL_BMI_ROMPATCH_UNINSTALL            62

+///*

+// * arguments:

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_UNINSTALL)

+// *       UINT32 rompatch ID

+// *     }

+// * uses: BMI_ROMPATCH_UNINSTALL

+// */

+//

+//#define AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE             63

+///*

+// * arguments:

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE)

+// *       UINT32 rompatch count

+// *       UINT32 rompatch IDs[rompatch count]

+// *     }

+// * uses: BMI_ROMPATCH_ACTIVATE

+// */

+//

+//#define AR6000_XIOCTL_BMI_ROMPATCH_DEACTIVATE           64

+///*

+// * arguments:

+// *     struct {

+// *       UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_DEACTIVATE)

+// *       UINT32 rompatch count

+// *       UINT32 rompatch IDs[rompatch count]

+// *     }

+// * uses: BMI_ROMPATCH_DEACTIVATE

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_APPIE             65

+///*

+// * arguments:

+// *      struct {

+// *          UINT32 cmd (AR6000_XIOCTL_WMI_SET_APPIE)

+// *          UINT32  app_frmtype;

+// *          UINT32  app_buflen;

+// *          UINT8   app_buf[];

+// *      }

+// */

+//#define AR6000_XIOCTL_WMI_SET_MGMT_FRM_RX_FILTER    66

+///*

+// * arguments:

+// *      A_UINT32 filter_type;

+// */

+//

+//#define AR6000_XIOCTL_DBGLOG_CFG_MODULE             67

+//

+//#define AR6000_XIOCTL_DBGLOG_GET_DEBUG_LOGS         68

+//

+//#define AR6000_XIOCTL_WMI_SET_WSC_STATUS            70

+///*

+// * arguments:

+// *      A_UINT32 wsc_status;

+// *            (WSC_REG_INACTIVE or WSC_REG_ACTIVE)

+// */

+//

+///*

+// * arguments:

+// *      struct {

+// *          A_UINT8 streamType;

+// *          A_UINT8 status;

+// *      }

+// * uses: WMI_SET_BT_STATUS_CMDID

+// */

+//#define AR6000_XIOCTL_WMI_SET_BT_STATUS             71

+//

+///*

+// * arguments:

+// *      struct {

+// *           A_UINT8 paramType;

+// *           union {

+// *               A_UINT8 noSCOPkts;

+// *               BT_PARAMS_A2DP a2dpParams;

+// *               BT_COEX_REGS regs;

+// *           };

+// *      }

+// * uses: WMI_SET_BT_PARAM_CMDID

+// */

+//#define AR6000_XIOCTL_WMI_SET_BT_PARAMS             72

+//

+//#define AR6000_XIOCTL_WMI_SET_HOST_SLEEP_MODE       73

+//#define AR6000_XIOCTL_WMI_SET_WOW_MODE              74

+//#define AR6000_XIOCTL_WMI_GET_WOW_LIST              75

+//#define AR6000_XIOCTL_WMI_ADD_WOW_PATTERN           76

+//#define AR6000_XIOCTL_WMI_DEL_WOW_PATTERN           77

+//

+//

+//

+//#define AR6000_XIOCTL_TARGET_INFO                   78

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_TARGET_INFO)

+// *   A_UINT32 TargetVersion (returned)

+// *   A_UINT32 TargetType    (returned)

+// * (See also bmi_msg.h target_ver and target_type)

+// */

+//

+//#define AR6000_XIOCTL_DUMP_HTC_CREDIT_STATE         79

+///*

+// * arguments:

+// *      none

+// */

+//

+//#define AR6000_XIOCTL_TRAFFIC_ACTIVITY_CHANGE       80

+///*

+// * This ioctl is used to emulate traffic activity

+// * timeouts.  Activity/inactivity will trigger the driver

+// * to re-balance credits.

+// *

+// * arguments:

+// *      ar6000_traffic_activity_change

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_CONNECT_CTRL_FLAGS    81

+///*

+// * This ioctl is used to set the connect control flags

+// *

+// * arguments:

+// *      A_UINT32 connectCtrlFlags

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_AKMP_PARAMS              82

+///*

+// * This IOCTL sets any Authentication,Key Management and Protection

+// * related parameters. This is used along with the information set in

+// * Connect Command.

+// * Currently this enables Multiple PMKIDs to an AP.

+// *

+// * arguments:

+// *      struct {

+// *          A_UINT32    akmpInfo;

+// *      }

+// * uses: WMI_SET_AKMP_PARAMS_CMD

+// */

+//

+//#define AR6000_XIOCTL_WMI_GET_PMKID_LIST            83

+//

+//#define AR6000_XIOCTL_WMI_SET_PMKID_LIST            84

+///*

+// * This IOCTL is used to set a list of PMKIDs. This list of

+// * PMKIDs is used in the [Re]AssocReq Frame. This list is used

+// * only if the MultiPMKID option is enabled via the

+// * AR6000_XIOCTL_WMI_SET_AKMP_PARAMS  IOCTL.

+// *

+// * arguments:

+// *      struct {

+// *          A_UINT32    numPMKID;

+// *          WMI_PMKID   pmkidList[WMI_MAX_PMKID_CACHE];

+// *      }

+// * uses: WMI_SET_PMKIDLIST_CMD

+// */

+//

+//#define AR6000_XIOCTL_WMI_SET_PARAMS                85

+//#define AR6000_XIOCTL_WMI_SET_MCAST_FILTER     86

+//#define AR6000_XIOCTL_WMI_DEL_MCAST_FILTER     87

+//

+//

+///* Historical DSETPATCH support for INI patches */

+//#define AR6000_XIOCTL_UNUSED90                      90

+//

+//

+///* Support LZ-compressed firmware download */

+//#define AR6000_XIOCTL_BMI_LZ_STREAM_START           91

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_LZ_STREAM_START)

+// *   UINT32 address

+// * uses: BMI_LZ_STREAM_START

+// */

+//

+//#define AR6000_XIOCTL_BMI_LZ_DATA                   92

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_LZ_DATA)

+// *   UINT32 length

+// *   char data[length]

+// * uses: BMI_LZ_DATA

+// */

+//

+//#define AR6000_XIOCTL_PROF_CFG                      93

+///*

+// * arguments:

+// *   A_UINT32 period

+// *   A_UINT32 nbins

+// */

+//

+//#define AR6000_XIOCTL_PROF_ADDR_SET                 94

+///*

+// * arguments:

+// *   A_UINT32 Target address

+// */

+//

+//#define AR6000_XIOCTL_PROF_START                    95

+//

+//#define AR6000_XIOCTL_PROF_STOP                     96

+//

+//#define AR6000_XIOCTL_PROF_COUNT_GET                97

+//

+//#define AR6000_XIOCTL_WMI_ABORT_SCAN                98

+//

+///*

+// * AP mode

+// */

+//#define AR6000_XIOCTL_AP_GET_STA_LIST               99

+//

+//#define AR6000_XIOCTL_AP_HIDDEN_SSID                100

+//

+//#define AR6000_XIOCTL_AP_SET_NUM_STA                101

+//

+//#define AR6000_XIOCTL_AP_SET_ACL_MAC                102

+//

+//#define AR6000_XIOCTL_AP_GET_ACL_LIST               103

+//

+//#define AR6000_XIOCTL_AP_COMMIT_CONFIG              104

+//

+//#define IEEE80211_IOCTL_GETWPAIE                    105

+//

+//#define AR6000_XIOCTL_AP_CONN_INACT_TIME            106

+//

+//#define AR6000_XIOCTL_AP_PROT_SCAN_TIME             107

+//

+//#define AR6000_XIOCTL_AP_SET_COUNTRY                108

+//

+//#define AR6000_XIOCTL_AP_SET_DTIM                   109

+//

+//

+//

+//

+//#define AR6000_XIOCTL_WMI_TARGET_EVENT_REPORT       110

+//

+//#define AR6000_XIOCTL_SET_IP                        111

+//

+//#define AR6000_XIOCTL_AP_SET_ACL_POLICY             112

+//

+//#define AR6000_XIOCTL_AP_CTRL_BSS_COMM              113

+//

+//#define AR6000_XIOCTL_DUMP_MODULE_DEBUG_INFO        114

+//

+//#define AR6000_XIOCTL_MODULE_DEBUG_SET_MASK         115

+//

+//#define AR6000_XIOCTL_MODULE_DEBUG_GET_MASK         116

+//

+//#define AR6000_XIOCTL_DUMP_RCV_AGGR_STATS           117

+//

+//#define AR6000_XIOCTL_SET_HT_CAP                    118

+//

+//#define AR6000_XIOCTL_SET_HT_OP                     119

+//

+//#define AR6000_XIOCTL_AP_GET_STAT                   120

+//

+//#define AR6000_XIOCTL_SET_TX_SELECT_RATES           121

+//

+//#define AR6000_XIOCTL_SETUP_AGGR                    122

+//

+//#define AR6000_XIOCTL_ALLOW_AGGR                    123

+//

+//#define AR6000_XIOCTL_AP_GET_HIDDEN_SSID            124

+//

+//#define AR6000_XIOCTL_AP_GET_COUNTRY                125

+//

+//#define AR6000_XIOCTL_AP_GET_WMODE                  126

+//

+//#define AR6000_XIOCTL_AP_GET_DTIM                   127

+//

+//#define AR6000_XIOCTL_AP_GET_BINTVL                 128

+//

+//#define AR6000_XIOCTL_AP_GET_RTS                    129

+//

+//#define AR6000_XIOCTL_DELE_AGGR                     130

+//

+//#define AR6000_XIOCTL_FETCH_TARGET_REGS             131

+//

+//#define AR6000_XIOCTL_HCI_CMD                       132

+//

+//#define AR6000_XIOCTL_ACL_DATA                      133

+//

+//#define AR6000_XIOCTL_WLAN_CONN_PRECEDENCE          134

+//

+//#define AR6000_XIOCTL_AP_SET_11BG_RATESET           135

+//

+//#define AR6000_XIOCTL_WMI_SET_AP_PS                 136

+//

+//#define AR6000_XIOCTL_WMI_MCAST_FILTER              137

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_FE_ANT                 138

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_COLOCATED_BT_DEV           139

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG  140

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_SCO_CONFIG             141

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_A2DP_CONFIG                142

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_ACLCOEX_CONFIG         143

+//

+//#define AR6000_XIOCTL_WMI_SET_BTCOEX_DEBUG                      144

+//

+//#define AR6000_XIOCTL_WMI_SET_BT_OPERATING_STATUS               145

+//

+//#define AR6000_XIOCTL_WMI_GET_BTCOEX_CONFIG                 146

+//

+//#define AR6000_XIOCTL_WMI_GET_BTCOEX_STATS                      147

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_WMI_SET_QOS_SUPP)

+// *   UINT8  mode

+// * uses: WMI_SET_QOS_SUPP_CMDID

+// */

+//#define AR6000_XIOCTL_WMI_SET_QOS_SUPP                  148 

+//

+//#define AR6000_XIOCTL_AP_SET_DFS                        149

+//

+//#ifdef P2P

+//#define AR6000_XIOCTL_WMI_P2P_DISCOVER            150

+//#define AR6000_XIOCTL_WMI_P2P_LISTEN              151

+//#define AR6000_XIOCTL_WMI_P2P_GO_NEG              152

+//#define AR6000_XIOCTL_WMI_P2P_CONFIG              153

+//#define AR6000_XIOCTL_WMI_WPS_CONFIG              154

+//#define AR6000_XIOCTL_WMI_P2P_FINDNODE            155

+//#endif

+//#define AR6000_XIOCTL_SET_BT_HW_POWER_STATE             156 

+//#define AR6000_XIOCTL_GET_BT_HW_POWER_STATE             157 

+//#define AR6000_XIOCTL_GET_WLAN_SLEEP_STATE              158

+//#define AR6000_XIOCTL_WMI_SET_TX_SGI_PARAM              159

+///*

+// * arguments:

+// *   WMI_AP_PS_CMD apPsCmd

+// * uses: WMI_AP_PS_CMDID

+// */

+//

+//

+//// WAC

+//#define AR6000_XIOCTL_WMI_ENABLE_WAC_PARAM              160

+//

+//#define AR6000_XIOCTL_WAC_SCAN_REPLY                    161

+//

+//#define AR6000_XIOCTL_WMI_WAC_CTRL_REQ                  162

+//

+//#define AR6000_XIOCTL_WMI_SET_WPA_OFFLOAD_STATE         163

+//

+//#define AR6000_XIOCTL_WMI_SET_PASSPHRASE                164

+//

+//#define AR6000_XIOCTL_BMI_NVRAM_PROCESS                 165

+//

+//#define AR6000_XIOCTL_AP_ACS_DISABLE_HI_CHANNELS        166

+//

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_BMI_NVRAM_PROCESS)

+// *   UINT8  name[BMI_NVRAM_SEG_NAME_SZ]

+// * uses: BMI_NVRAM_PROCESS

+// */

+//

+//

+//#ifdef CONFIG_HOST_TCMD_SUPPORT

+///*       ====additional extended commands for radio test ====                          */

+//

+//#define AR6000_XIOCTL_TCMD_CMDS                          167

+///*

+// * arguments:

+// *   UINT32 cmd (AR6000_XIOCTL_TCMD_CMDS)

+// *   WMI_TCMD_CMDS_CMD cmdsCmd (see include/wmi.h)

+// * uses: WMI_TCMD_CMDS_CMDID

+// */

+//

+//#endif //ifdef CONFIG_HOST_TCMD_SUPPORT

+//

+//#define AR6000_XIOCTL_WMI_SET_DIVERSITY_PARAM           168

+//

+//#define AR6000_XIOCTL_WMI_FORCE_ASSERT                  169

+//

+//#define AR6000_XIOCTL_WMI_SET_EXCESS_TX_RETRY_THRES     170

+//

+//#define AR6000_XIOCTL_AP_GET_NUM_STA                    171

+//

+//#define AR6000_XIOCTL_SUSPEND_DRIVER                    172

+//

+//#define AR6000_XIOCTL_RESUME_DRIVER                     173

+

+/* used by AR6000_IOCTL_WMI_GETREV */

+struct ar6000_version {

+    A_UINT32        host_ver;

+    A_UINT32        target_ver;

+    A_UINT32        wlan_ver;

+    A_UINT32        abi_ver;

+    A_UINT32        targetconf_ver;

+};

+

+/* used by AR6000_IOCTL_WMI_GET_QOS_QUEUE */

+struct ar6000_queuereq {

+    A_UINT8         trafficClass;

+    A_UINT16        activeTsids;

+};

+

+/* used by AR6000_IOCTL_WMI_GET_TARGET_STATS */

+typedef struct targetStats_t {

+    A_UINT64    tx_packets;

+    A_UINT64    tx_bytes;

+    A_UINT64    tx_unicast_pkts;

+    A_UINT64    tx_unicast_bytes;

+    A_UINT64    tx_multicast_pkts;

+    A_UINT64    tx_multicast_bytes;

+    A_UINT64    tx_broadcast_pkts;

+    A_UINT64    tx_broadcast_bytes;

+    A_UINT64    tx_rts_success_cnt;

+    A_UINT64    tx_packet_per_ac[4];

+

+    A_UINT64    tx_errors;

+    A_UINT64    tx_failed_cnt;

+    A_UINT64    tx_retry_cnt;

+    A_UINT64    tx_mult_retry_cnt;

+    A_UINT64    tx_rts_fail_cnt;

+

+    A_UINT64    rx_packets;

+    A_UINT64    rx_bytes;

+    A_UINT64    rx_unicast_pkts;

+    A_UINT64    rx_unicast_bytes;

+    A_UINT64    rx_multicast_pkts;

+    A_UINT64    rx_multicast_bytes;

+    A_UINT64    rx_broadcast_pkts;

+    A_UINT64    rx_broadcast_bytes;

+    A_UINT64    rx_fragment_pkt;

+

+    A_UINT64    rx_errors;

+    A_UINT64    rx_crcerr;

+    A_UINT64    rx_key_cache_miss;

+    A_UINT64    rx_decrypt_err;

+    A_UINT64    rx_duplicate_frames;

+

+    A_UINT64    tkip_local_mic_failure;

+    A_UINT64    tkip_counter_measures_invoked;

+    A_UINT64    tkip_replays;

+    A_UINT64    tkip_format_errors;

+    A_UINT64    ccmp_format_errors;

+    A_UINT64    ccmp_replays;

+

+    A_UINT64    power_save_failure_cnt;

+

+    A_UINT64    cs_bmiss_cnt;

+    A_UINT64    cs_lowRssi_cnt;

+    A_UINT64    cs_connect_cnt;

+    A_UINT64    cs_disconnect_cnt;

+

+    A_INT32     tx_unicast_rate;

+    A_INT32     rx_unicast_rate;

+

+    A_UINT32    lq_val;

+

+    A_UINT32    wow_num_pkts_dropped;

+    A_UINT16    wow_num_events_discarded;

+

+    A_INT16     noise_floor_calibation;

+    A_INT16     cs_rssi;

+    A_INT16     cs_aveBeacon_rssi;

+    A_UINT8     cs_aveBeacon_snr;

+    A_UINT8     cs_lastRoam_msec;

+    A_UINT8     cs_snr;

+

+    A_UINT8     wow_num_host_pkt_wakeups;

+    A_UINT8     wow_num_host_event_wakeups;

+

+    A_UINT32   arp_received;

+    A_UINT32   arp_matched;

+    A_UINT32   arp_replied;

+}TARGET_STATS;

+

+typedef struct targetStats_cmd_t {

+    TARGET_STATS targetStats;

+    int clearStats;

+} TARGET_STATS_CMD;

+

+/* used by AR6000_XIOCTL_USER_SETKEYS */

+

+/*

+ * Setting this bit to 1 doesnot initialize the RSC on the firmware

+ */

+#define AR6000_XIOCTL_USER_SETKEYS_RSC_CTRL    1

+#define AR6000_USER_SETKEYS_RSC_UNCHANGED     0x00000002

+

+typedef struct {

+    A_UINT32  keyOpCtrl;  /* Bit Map of Key Mgmt Ctrl Flags */

+} AR6000_USER_SETKEYS_INFO;

+

+

+/* used by AR6000_XIOCTL_GPIO_OUTPUT_SET */

+struct ar6000_gpio_output_set_cmd_s {

+    A_UINT32 set_mask;

+    A_UINT32 clear_mask;

+    A_UINT32 enable_mask;

+    A_UINT32 disable_mask;

+};

+

+/*

+ * used by AR6000_XIOCTL_GPIO_REGISTER_GET and AR6000_XIOCTL_GPIO_REGISTER_SET

+ */

+struct ar6000_gpio_register_cmd_s {

+    A_UINT32 gpioreg_id;

+    A_UINT32 value;

+};

+

+/* used by AR6000_XIOCTL_GPIO_INTR_ACK */

+struct ar6000_gpio_intr_ack_cmd_s {

+    A_UINT32 ack_mask;

+};

+

+/* used by AR6000_XIOCTL_GPIO_INTR_WAIT */

+struct ar6000_gpio_intr_wait_cmd_s {

+    A_UINT32 intr_mask;

+    A_UINT32 input_values;

+};

+

+/* used by the AR6000_XIOCTL_DBGLOG_CFG_MODULE */

+typedef struct ar6000_dbglog_module_config_s {

+    A_UINT32 valid;

+    A_UINT16 mmask;

+    A_UINT16 tsr;

+    A_BOOL   rep;

+    A_UINT16 size;

+} DBGLOG_MODULE_CONFIG;

+

+typedef struct user_rssi_thold_t {

+    A_INT16     tag;

+    A_INT16     rssi;

+} USER_RSSI_THOLD;

+

+typedef struct user_rssi_params_t {

+    A_UINT8            weight;

+    A_UINT32           pollTime;

+    USER_RSSI_THOLD    tholds[12];

+} USER_RSSI_PARAMS;

+

+typedef struct ar6000_get_btcoex_config_cmd_t{

+    A_UINT32 btProfileType;

+    A_UINT32 linkId;

+ }AR6000_GET_BTCOEX_CONFIG_CMD;

+

+typedef struct ar6000_btcoex_config_t {

+    AR6000_GET_BTCOEX_CONFIG_CMD  configCmd;

+    A_UINT32 * configEvent;

+} AR6000_BTCOEX_CONFIG;

+

+typedef struct ar6000_btcoex_stats_t {

+    A_UINT32 * statsEvent;

+ }AR6000_BTCOEX_STATS;

+/*

+ * Host driver may have some config parameters. Typically, these

+ * config params are one time config parameters. These could

+ * correspond to any of the underlying modules. Host driver exposes

+ * an api for the underlying modules to get this config.

+ */

+#define AR6000_DRIVER_CFG_BASE                  0x8000

+

+/* Should driver perform wlan node caching? */

+#define AR6000_DRIVER_CFG_GET_WLANNODECACHING   0x8001

+/*Should we log raw WMI msgs */

+#define AR6000_DRIVER_CFG_LOG_RAW_WMI_MSGS      0x8002

+

+/* used by AR6000_XIOCTL_DIAG_READ & AR6000_XIOCTL_DIAG_WRITE */

+struct ar6000_diag_window_cmd_s {

+    unsigned int addr;

+    unsigned int value;

+};

+

+

+struct ar6000_traffic_activity_change {

+    A_UINT32    StreamID;   /* stream ID to indicate activity change */

+    A_UINT32    Active;     /* active (1) or inactive (0) */

+};

+

+/* Used with AR6000_XIOCTL_PROF_COUNT_GET */

+struct prof_count_s {

+    A_UINT32    addr;       /* bin start address */

+    A_UINT32    count;      /* hit count */

+};

+

+

+/* used by AR6000_XIOCTL_MODULE_DEBUG_SET_MASK */

+/*         AR6000_XIOCTL_MODULE_DEBUG_GET_MASK */

+/*         AR6000_XIOCTL_DUMP_MODULE_DEBUG_INFO */

+struct drv_debug_module_s {

+    A_CHAR      modulename[128];   /* name of module */

+    A_UINT32    mask;              /* new mask to set .. or .. current mask */

+};

+

+/* used by AR6000_XIOCTL_P2P_AUTH_INVITE */

+#define ATH_MAC_LEN 6

+typedef PREPACK struct {

+    A_UINT32 auth;

+    A_UINT8 peer_addr[ATH_MAC_LEN];

+}POSTPACK P2P_AUTH_INVITE_CMD;

+

+/* All HCI related rx events are sent up to the host app

+ * via a wmi event id. It can contain ACL data or HCI event, 

+ * based on which it will be de-multiplexed.

+ */

+typedef enum {

+    PAL_HCI_EVENT = 0,

+    PAL_HCI_RX_DATA,

+} WMI_PAL_EVENT_INFO;

+

+

+#ifdef __cplusplus

+}

+#endif

+#endif

diff --git a/ath6kl-wmiconfig/include/athtypes_linux.h b/ath6kl-wmiconfig/include/athtypes_linux.h
new file mode 100755
index 0000000..b51b053
--- /dev/null
+++ b/ath6kl-wmiconfig/include/athtypes_linux.h
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+//------------------------------------------------------------------------------

+//

+// This file contains the definitions of the basic atheros data types.

+// It is used to map the data types in atheros files to a platform specific

+// type.

+//

+// Author(s): ="Atheros"

+//------------------------------------------------------------------------------

+

+#ifndef _ATHTYPES_LINUX_H_

+#define _ATHTYPES_LINUX_H_

+

+#ifdef __KERNEL__

+#include <linux/types.h>

+#else

+#include <sys/types.h>

+#endif

+

+typedef int8_t      A_INT8;

+typedef int16_t     A_INT16;

+typedef int32_t     A_INT32;

+typedef int64_t     A_INT64;

+

+typedef u_int8_t     A_UINT8;

+typedef u_int16_t    A_UINT16;

+typedef u_int32_t    A_UINT32;

+typedef u_int64_t    A_UINT64;

+

+typedef int             A_BOOL;

+typedef char            A_CHAR;

+typedef unsigned char   A_UCHAR;

+typedef unsigned long   A_ATH_TIMER;

+

+#endif /* _ATHTYPES_LINUX_H_ */

+

diff --git a/ath6kl-wmiconfig/include/config_linux.h b/ath6kl-wmiconfig/include/config_linux.h
new file mode 100755
index 0000000..35a5904
--- /dev/null
+++ b/ath6kl-wmiconfig/include/config_linux.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef _CONFIG_LINUX_H_

+#define _CONFIG_LINUX_H_

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#include <linux/version.h>

+

+/*

+ * Host-side GPIO support is optional.

+ * If run-time access to GPIO pins is not required, then

+ * this should be changed to #undef.

+ */

+#define CONFIG_HOST_GPIO_SUPPORT

+

+/*

+ * Host side Test Command support

+ * Note: when HCI SDIO is enabled, a low stack IRQ or statck overflow is

+ *       hit on FC10. So with HCI SDIO, minimize the stack allocation by 

+ *       mutually exclude TCMD_SUPPORT, which allocates large buffers 

+ *       in AR_TCMD_RESP in AR_SOFTC_T

+ *

+ */

+#ifndef HCI_TRANSPORT_SDIO

+#define CONFIG_HOST_TCMD_SUPPORT

+#endif

+

+/* Host-side support for Target-side profiling */

+#undef CONFIG_TARGET_PROFILE_SUPPORT

+/*DIX OFFLOAD SUPPORT*/

+/*#define DIX_RX_OFFLOAD*/

+/*#define DIX_TX_OFFLOAD*/

+

+/* IP/TCP checksum offload */

+/* Checksum offload is currently not supported for 64 bit platforms */

+#ifndef __LP64__

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)

+#define CONFIG_CHECKSUM_OFFLOAD

+#endif

+#endif /* __LP64__ */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif

+

diff --git a/ath6kl-wmiconfig/include/dbglog.h b/ath6kl-wmiconfig/include/dbglog.h
new file mode 100755
index 0000000..61924dd
--- /dev/null
+++ b/ath6kl-wmiconfig/include/dbglog.h
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef _DBGLOG_H_

+#define _DBGLOG_H_

+

+#ifndef ATH_TARGET

+//#include "athstartpack.h"

+#endif

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#define DBGLOG_TIMESTAMP_OFFSET          0

+#define DBGLOG_TIMESTAMP_MASK            0x0000FFFF /* Bit 0-15. Contains bit

+                                                       8-23 of the LF0 timer */

+#define DBGLOG_DBGID_OFFSET              16

+#define DBGLOG_DBGID_MASK                0x03FF0000 /* Bit 16-25 */

+#define DBGLOG_DBGID_NUM_MAX             256 /* Upper limit is width of mask */

+

+#define DBGLOG_MODULEID_OFFSET           26

+#define DBGLOG_MODULEID_MASK             0x3C000000 /* Bit 26-29 */

+#define DBGLOG_MODULEID_NUM_MAX          16 /* Upper limit is width of mask */

+

+/*

+ * Please ensure that the definition of any new module intrduced is captured

+ * between the DBGLOG_MODULEID_START and DBGLOG_MODULEID_END defines. The 

+ * structure is required for the parser to correctly pick up the values for

+ * different modules.

+ */

+#define DBGLOG_MODULEID_START

+#define DBGLOG_MODULEID_INF                   0

+#define DBGLOG_MODULEID_WMI                   1

+#define DBGLOG_MODULEID_MISC                  2

+#define DBGLOG_MODULEID_PM                    3

+#define DBGLOG_MODULEID_TXRX_MGMTBUF          4

+#define DBGLOG_MODULEID_TXRX_TXBUF            5

+#define DBGLOG_MODULEID_TXRX_RXBUF            6

+#define DBGLOG_MODULEID_WOW                   7

+#define DBGLOG_MODULEID_WHAL                  8

+#define DBGLOG_MODULEID_DC                    9

+#define DBGLOG_MODULEID_CO                    10

+#define DBGLOG_MODULEID_RO                    11

+#define DBGLOG_MODULEID_CM                    12

+#define DBGLOG_MODULEID_MGMT                  13

+#define DBGLOG_MODULEID_TMR                   14

+#define DBGLOG_MODULEID_BTCOEX                15

+#define DBGLOG_MODULEID_END

+

+#define DBGLOG_NUM_ARGS_OFFSET             30

+#define DBGLOG_NUM_ARGS_MASK               0xC0000000 /* Bit 30-31 */

+#define DBGLOG_NUM_ARGS_MAX                2 /* Upper limit is width of mask */

+

+#define DBGLOG_MODULE_LOG_ENABLE_OFFSET    0

+#define DBGLOG_MODULE_LOG_ENABLE_MASK      0x0000FFFF

+

+#define DBGLOG_REPORTING_ENABLED_OFFSET    16

+#define DBGLOG_REPORTING_ENABLED_MASK      0x00010000

+

+#define DBGLOG_TIMESTAMP_RESOLUTION_OFFSET 17

+#define DBGLOG_TIMESTAMP_RESOLUTION_MASK   0x000E0000

+

+#define DBGLOG_REPORT_SIZE_OFFSET          20

+#define DBGLOG_REPORT_SIZE_MASK            0x3FF00000

+

+#define DBGLOG_LOG_BUFFER_SIZE             1500

+#define DBGLOG_DBGID_DEFINITION_LEN_MAX    90

+

+PREPACK struct dbglog_buf_s {

+    struct dbglog_buf_s *next;

+    A_UINT8             *buffer;

+    A_UINT32             bufsize;

+    A_UINT32             length;

+    A_UINT32             count;

+    A_UINT32             free;

+} POSTPACK;

+

+PREPACK struct dbglog_hdr_s {

+    struct dbglog_buf_s *dbuf;

+    A_UINT32             dropped;

+} POSTPACK;

+

+PREPACK struct dbglog_config_s {

+    A_UINT32                    cfgvalid; /* Mask with valid config bits */

+    union {

+        /* TODO: Take care of endianness */

+        struct {

+            A_UINT32            mmask:16; /* Mask of modules with logging on */

+            A_UINT32            rep:1; /* Reporting enabled or not */

+            A_UINT32            tsr:3; /* Time stamp resolution. Def: 1 ms */

+            A_UINT32            size:10; /* Report size in number of messages */

+            A_UINT32            reserved:2;

+        } dbglog_config;

+

+        A_UINT32                value;

+    } u;

+} POSTPACK;

+

+#define cfgmmask                   u.dbglog_config.mmask

+#define cfgrep                     u.dbglog_config.rep

+#define cfgtsr                     u.dbglog_config.tsr

+#define cfgsize                    u.dbglog_config.size

+#define cfgvalue                   u.value

+

+#ifdef __cplusplus

+}

+#endif

+

+#ifndef ATH_TARGET

+//#include "athendpack.h"

+#endif

+

+#endif /* _DBGLOG_H_ */

diff --git a/ath6kl-wmiconfig/include/dbglog_id.h b/ath6kl-wmiconfig/include/dbglog_id.h
new file mode 100755
index 0000000..8ef7b5f
--- /dev/null
+++ b/ath6kl-wmiconfig/include/dbglog_id.h
@@ -0,0 +1,576 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef _DBGLOG_ID_H_

+#define _DBGLOG_ID_H_

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/* 

+ * The nomenclature for the debug identifiers is MODULE_DESCRIPTION.

+ * Please ensure that the definition of any new debugid introduced is captured

+ * between the <MODULE>_DBGID_DEFINITION_START and 

+ * <MODULE>_DBGID_DEFINITION_END defines. The structure is required for the 

+ * parser to correctly pick up the values for different debug identifiers.

+ */

+

+/* INF debug identifier definitions */

+#define INF_DBGID_DEFINITION_START

+#define INF_ASSERTION_FAILED                          1

+#define INF_TARGET_ID                                 2

+#define INF_DBGID_DEFINITION_END

+

+/* WMI debug identifier definitions */

+#define WMI_DBGID_DEFINITION_START

+#define WMI_CMD_RX_XTND_PKT_TOO_SHORT                 1

+#define WMI_EXTENDED_CMD_NOT_HANDLED                  2

+#define WMI_CMD_RX_PKT_TOO_SHORT                      3

+#define WMI_CALLING_WMI_EXTENSION_FN                  4

+#define WMI_CMD_NOT_HANDLED                           5

+#define WMI_IN_SYNC                                   6

+#define WMI_TARGET_WMI_SYNC_CMD                       7

+#define WMI_SET_SNR_THRESHOLD_PARAMS                  8

+#define WMI_SET_RSSI_THRESHOLD_PARAMS                 9

+#define WMI_SET_LQ_TRESHOLD_PARAMS                   10

+#define WMI_TARGET_CREATE_PSTREAM_CMD                11

+#define WMI_WI_DTM_INUSE                             12

+#define WMI_TARGET_DELETE_PSTREAM_CMD                13

+#define WMI_TARGET_IMPLICIT_DELETE_PSTREAM_CMD       14

+#define WMI_TARGET_GET_BIT_RATE_CMD                  15

+#define WMI_GET_RATE_MASK_CMD_FIX_RATE_MASK_IS       16

+#define WMI_TARGET_GET_AVAILABLE_CHANNELS_CMD        17

+#define WMI_TARGET_GET_TX_PWR_CMD                    18

+#define WMI_FREE_EVBUF_WMIBUF                        19

+#define WMI_FREE_EVBUF_DATABUF                       20

+#define WMI_FREE_EVBUF_BADFLAG                       21

+#define WMI_HTC_RX_ERROR_DATA_PACKET                 22

+#define WMI_HTC_RX_SYNC_PAUSING_FOR_MBOX             23

+#define WMI_INCORRECT_WMI_DATA_HDR_DROPPING_PKT      24

+#define WMI_SENDING_READY_EVENT                      25

+#define WMI_SETPOWER_MDOE_TO_MAXPERF                 26

+#define WMI_SETPOWER_MDOE_TO_REC                     27

+#define WMI_BSSINFO_EVENT_FROM                       28

+#define WMI_TARGET_GET_STATS_CMD                     29

+#define WMI_SENDING_SCAN_COMPLETE_EVENT              30

+#define WMI_SENDING_RSSI_INDB_THRESHOLD_EVENT        31

+#define WMI_SENDING_RSSI_INDBM_THRESHOLD_EVENT       32

+#define WMI_SENDING_LINK_QUALITY_THRESHOLD_EVENT     33

+#define WMI_SENDING_ERROR_REPORT_EVENT               34

+#define WMI_SENDING_CAC_EVENT                        35

+#define WMI_TARGET_GET_ROAM_TABLE_CMD                36

+#define WMI_TARGET_GET_ROAM_DATA_CMD                 37

+#define WMI_SENDING_GPIO_INTR_EVENT                  38

+#define WMI_SENDING_GPIO_ACK_EVENT                   39

+#define WMI_SENDING_GPIO_DATA_EVENT                  40

+#define WMI_CMD_RX                                   41

+#define WMI_CMD_RX_XTND                              42

+#define WMI_EVENT_SEND                               43

+#define WMI_EVENT_SEND_XTND                          44

+#define WMI_CMD_PARAMS_DUMP_START                    45

+#define WMI_CMD_PARAMS_DUMP_END                      46

+#define WMI_CMD_PARAMS                               47

+#define WMI_DBGID_DEFINITION_END

+

+/* MISC debug identifier definitions */

+#define MISC_DBGID_DEFINITION_START

+#define MISC_WLAN_SCHEDULER_EVENT_REGISTER_ERROR     1

+#define TLPM_INIT                                    2

+#define TLPM_FILTER_POWER_STATE                      3

+#define TLPM_NOTIFY_NOT_IDLE                         4

+#define TLPM_TIMEOUT_IDLE_HANDLER                    5

+#define TLPM_TIMEOUT_WAKEUP_HANDLER                  6

+#define TLPM_WAKEUP_SIGNAL_HANDLER                   7

+#define TLPM_UNEXPECTED_GPIO_INTR_ERROR              8

+#define TLPM_BREAK_ON_NOT_RECEIVED_ERROR             9

+#define TLPM_BREAK_OFF_NOT_RECIVED_ERROR             10

+#define TLPM_ACK_GPIO_INTR                           11

+#define TLPM_ON                                      12

+#define TLPM_OFF                                     13

+#define TLPM_WAKEUP_FROM_HOST                        14

+#define TLPM_WAKEUP_FROM_BT                          15 

+#define TLPM_TX_BREAK_RECIVED                        16

+#define TLPM_IDLE_TIMER_NOT_RUNNING                  17

+#define	WAC_ENABLE                                   18

+#define WAC_SCAN_DONE                                19

+#define WAC_REPORT_BSS                               20

+#define WAC_START_WPS                                21

+#define WAC_SCAN_REPLY                               22

+#define WAC_UPDATE_BSS                               23

+#define WAC_PIN_STATUS                               24

+#define WAC_PIN_STATUS_REJECT                        25

+#define WAC_RSSI_BELOW_THRESHOLD                     26

+#define WAC_CTRL_REQ_CMD                             27

+#define WAC_CTRL_REQ_REPLY                           28

+#define DV_SET_ANTENNA                               29

+#define MISC_DBGID_DEFINITION_END

+    

+/* TXRX debug identifier definitions */

+#define TXRX_TXBUF_DBGID_DEFINITION_START

+#define TXRX_TXBUF_ALLOCATE_BUF                      1

+#define TXRX_TXBUF_QUEUE_BUF_TO_MBOX                 2

+#define TXRX_TXBUF_QUEUE_BUF_TO_TXQ                  3

+#define TXRX_TXBUF_TXQ_DEPTH                         4   

+#define TXRX_TXBUF_IBSS_QUEUE_TO_SFQ                 5

+#define TXRX_TXBUF_IBSS_QUEUE_TO_TXQ_FRM_SFQ         6

+#define TXRX_TXBUF_INITIALIZE_TIMER                  7

+#define TXRX_TXBUF_ARM_TIMER                         8

+#define TXRX_TXBUF_DISARM_TIMER                      9

+#define TXRX_TXBUF_UNINITIALIZE_TIMER                10

+#define TXRX_TXBUF_DBGID_DEFINITION_END

+ 

+#define TXRX_RXBUF_DBGID_DEFINITION_START    

+#define TXRX_RXBUF_ALLOCATE_BUF                      1

+#define TXRX_RXBUF_QUEUE_TO_HOST                     2

+#define TXRX_RXBUF_QUEUE_TO_WLAN                     3

+#define TXRX_RXBUF_ZERO_LEN_BUF                      4

+#define TXRX_RXBUF_QUEUE_TO_HOST_LASTBUF_IN_RXCHAIN  5

+#define TXRX_RXBUF_LASTBUF_IN_RXCHAIN_ZEROBUF        6

+#define TXRX_RXBUF_QUEUE_EMPTY_QUEUE_TO_WLAN         7

+#define TXRX_RXBUF_SEND_TO_RECV_MGMT                 8

+#define TXRX_RXBUF_SEND_TO_IEEE_LAYER                9

+#define TXRX_RXBUF_REQUEUE_ERROR                     10

+#define TXRX_RXBUF_DBGID_DEFINITION_END

+

+#define TXRX_MGMTBUF_DBGID_DEFINITION_START 

+#define TXRX_MGMTBUF_ALLOCATE_BUF                    1

+#define TXRX_MGMTBUF_ALLOCATE_SM_BUF                 2    

+#define TXRX_MGMTBUF_ALLOCATE_RMBUF                  3

+#define TXRX_MGMTBUF_GET_BUF                         4

+#define TXRX_MGMTBUF_GET_SM_BUF                      5

+#define TXRX_MGMTBUF_QUEUE_BUF_TO_TXQ                6

+#define TXRX_MGMTBUF_REAPED_BUF                      7

+#define TXRX_MGMTBUF_REAPED_SM_BUF                   8

+#define TXRX_MGMTBUF_WAIT_FOR_TXQ_DRAIN              9

+#define TXRX_MGMTBUF_WAIT_FOR_TXQ_SFQ_DRAIN          10

+#define TXRX_MGMTBUF_ENQUEUE_INTO_DATA_SFQ           11

+#define TXRX_MGMTBUF_DEQUEUE_FROM_DATA_SFQ           12

+#define TXRX_MGMTBUF_PAUSE_DATA_TXQ                  13

+#define TXRX_MGMTBUF_RESUME_DATA_TXQ                 14

+#define TXRX_MGMTBUF_WAIT_FORTXQ_DRAIN_TIMEOUT       15

+#define TXRX_MGMTBUF_DRAINQ                          16

+#define TXRX_MGMTBUF_INDICATE_Q_DRAINED              17

+#define TXRX_MGMTBUF_ENQUEUE_INTO_HW_SFQ             18

+#define TXRX_MGMTBUF_DEQUEUE_FROM_HW_SFQ             19

+#define TXRX_MGMTBUF_PAUSE_HW_TXQ                    20

+#define TXRX_MGMTBUF_RESUME_HW_TXQ                   21

+#define TXRX_MGMTBUF_TEAR_DOWN_BA                    22

+#define TXRX_MGMTBUF_PROCESS_ADDBA_REQ               23

+#define TXRX_MGMTBUF_PROCESS_DELBA                   24

+#define TXRX_MGMTBUF_PERFORM_BA                      25

+#define TXRX_MGMTBUF_WLAN_RESET_ON_ERROR             26 

+#define TXRX_MGMTBUF_DBGID_DEFINITION_END

+

+/* PM (Power Module) debug identifier definitions */

+#define PM_DBGID_DEFINITION_START

+#define PM_INIT                                      1

+#define PM_ENABLE                                    2

+#define PM_SET_STATE                                 3

+#define PM_SET_POWERMODE                             4

+#define PM_CONN_NOTIFY                               5

+#define PM_REF_COUNT_NEGATIVE                        6

+#define PM_INFRA_STA_APSD_ENABLE                     7

+#define PM_INFRA_STA_UPDATE_APSD_STATE               8

+#define PM_CHAN_OP_REQ                               9

+#define PM_SET_MY_BEACON_POLICY                      10

+#define PM_SET_ALL_BEACON_POLICY                     11

+#define PM_INFRA_STA_SET_PM_PARAMS1                  12

+#define PM_INFRA_STA_SET_PM_PARAMS2                  13

+#define PM_ADHOC_SET_PM_CAPS_FAIL                    14

+#define PM_ADHOC_UNKNOWN_IBSS_ATTRIB_ID              15

+#define PM_ADHOC_SET_PM_PARAMS                       16

+#define PM_ADHOC_STATE1                              18

+#define PM_ADHOC_STATE2                              19

+#define PM_ADHOC_CONN_MAP                            20 

+#define PM_FAKE_SLEEP                                21

+#define PM_AP_STATE1                                 22

+#define PM_AP_SET_PM_PARAMS                          23

+#define PM_P2P_STATE1                                24

+#define PM_DBGID_DEFINITION_END

+

+/* Wake on Wireless debug identifier definitions */

+#define WOW_DBGID_DEFINITION_START

+#define WOW_INIT                                        1

+#define WOW_GET_CONFIG_DSET                             2   

+#define WOW_NO_CONFIG_DSET                              3

+#define WOW_INVALID_CONFIG_DSET                         4

+#define WOW_USE_DEFAULT_CONFIG                          5

+#define WOW_SETUP_GPIO                                  6

+#define WOW_INIT_DONE                                   7

+#define WOW_SET_GPIO_PIN                                8

+#define WOW_CLEAR_GPIO_PIN                              9

+#define WOW_SET_WOW_MODE_CMD                            10

+#define WOW_SET_HOST_MODE_CMD                           11  

+#define WOW_ADD_WOW_PATTERN_CMD                         12    

+#define WOW_NEW_WOW_PATTERN_AT_INDEX                    13    

+#define WOW_DEL_WOW_PATTERN_CMD                         14    

+#define WOW_LIST_CONTAINS_PATTERNS                      15    

+#define WOW_GET_WOW_LIST_CMD                            16 

+#define WOW_INVALID_FILTER_ID                           17

+#define WOW_INVALID_FILTER_LISTID                       18

+#define WOW_NO_VALID_FILTER_AT_ID                       19

+#define WOW_NO_VALID_LIST_AT_ID                         20

+#define WOW_NUM_PATTERNS_EXCEEDED                       21

+#define WOW_NUM_LISTS_EXCEEDED                          22

+#define WOW_GET_WOW_STATS                               23

+#define WOW_CLEAR_WOW_STATS                             24

+#define WOW_WAKEUP_HOST                                 25

+#define WOW_EVENT_WAKEUP_HOST                           26

+#define WOW_EVENT_DISCARD                               27

+#define WOW_PATTERN_MATCH                               28

+#define WOW_PATTERN_NOT_MATCH                           29

+#define WOW_PATTERN_NOT_MATCH_OFFSET                    30

+#define WOW_DISABLED_HOST_ASLEEP                        31

+#define WOW_ENABLED_HOST_ASLEEP_NO_PATTERNS             32

+#define WOW_ENABLED_HOST_ASLEEP_NO_MATCH_FOUND          33

+#define WOW_DBGID_DEFINITION_END

+

+/* WHAL debug identifier definitions */

+#define WHAL_DBGID_DEFINITION_START

+#define WHAL_ERROR_ANI_CONTROL                      1

+#define WHAL_ERROR_CHIP_TEST1                       2

+#define WHAL_ERROR_CHIP_TEST2                       3

+#define WHAL_ERROR_EEPROM_CHECKSUM                  4

+#define WHAL_ERROR_EEPROM_MACADDR                   5

+#define WHAL_ERROR_INTERRUPT_HIU                    6

+#define WHAL_ERROR_KEYCACHE_RESET                   7

+#define WHAL_ERROR_KEYCACHE_SET                     8 

+#define WHAL_ERROR_KEYCACHE_TYPE                    9

+#define WHAL_ERROR_KEYCACHE_TKIPENTRY              10

+#define WHAL_ERROR_KEYCACHE_WEPLENGTH              11

+#define WHAL_ERROR_PHY_INVALID_CHANNEL             12

+#define WHAL_ERROR_POWER_AWAKE                     13

+#define WHAL_ERROR_POWER_SET                       14

+#define WHAL_ERROR_RECV_STOPDMA                    15

+#define WHAL_ERROR_RECV_STOPPCU                    16

+#define WHAL_ERROR_RESET_CHANNF1                   17

+#define WHAL_ERROR_RESET_CHANNF2                   18

+#define WHAL_ERROR_RESET_PM                        19

+#define WHAL_ERROR_RESET_OFFSETCAL                 20

+#define WHAL_ERROR_RESET_RFGRANT                   21

+#define WHAL_ERROR_RESET_RXFRAME                   22

+#define WHAL_ERROR_RESET_STOPDMA                   23

+#define WHAL_ERROR_RESET_RECOVER                   24

+#define WHAL_ERROR_XMIT_COMPUTE                    25

+#define WHAL_ERROR_XMIT_NOQUEUE                    26

+#define WHAL_ERROR_XMIT_ACTIVEQUEUE                27

+#define WHAL_ERROR_XMIT_BADTYPE                    28

+#define WHAL_ERROR_XMIT_STOPDMA                    29

+#define WHAL_ERROR_INTERRUPT_BB_PANIC              30 

+#define WHAL_ERROR_RESET_TXIQCAL                   31 

+#define WHAL_ERROR_PAPRD_MAXGAIN_ABOVE_WINDOW      32 

+#define WHAL_DBGID_DEFINITION_END

+

+/* DC debug identifier definitions */

+#define DC_DBGID_DEFINITION_START

+#define DC_SCAN_CHAN_START                          1

+#define DC_SCAN_CHAN_FINISH                         2

+#define DC_BEACON_RECEIVE7                          3

+#define DC_SSID_PROBE_CB                            4

+#define DC_SEND_NEXT_SSID_PROBE                     5

+#define DC_START_SEARCH                             6

+#define DC_CANCEL_SEARCH_CB                         7

+#define DC_STOP_SEARCH                              8

+#define DC_END_SEARCH                               9

+#define DC_MIN_CHDWELL_TIMEOUT                     10

+#define DC_START_SEARCH_CANCELED                   11

+#define DC_SET_POWER_MODE                          12

+#define DC_INIT                                    13

+#define DC_SEARCH_OPPORTUNITY                      14

+#define DC_RECEIVED_ANY_BEACON                     15

+#define DC_RECEIVED_MY_BEACON                      16

+#define DC_PROFILE_IS_ADHOC_BUT_BSS_IS_INFRA       17

+#define DC_PS_ENABLED_BUT_ATHEROS_IE_ABSENT        18

+#define DC_BSS_ADHOC_CHANNEL_NOT_ALLOWED           19

+#define DC_SET_BEACON_UPDATE                       20

+#define DC_BEACON_UPDATE_COMPLETE                  21

+#define DC_END_SEARCH_BEACON_UPDATE_COMP_CB        22

+#define DC_BSSINFO_EVENT_DROPPED                   23

+#define DC_IEEEPS_ENABLED_BUT_ATIM_ABSENT          24 

+#define DC_DBGID_DEFINITION_END

+

+/* CO debug identifier definitions */

+#define CO_DBGID_DEFINITION_START

+#define CO_INIT                                     1

+#define CO_ACQUIRE_LOCK                             2

+#define CO_START_OP1                                3

+#define CO_START_OP2                                4

+#define CO_DRAIN_TX_COMPLETE_CB                     5

+#define CO_CHANGE_CHANNEL_CB                        6

+#define CO_RETURN_TO_HOME_CHANNEL                   7

+#define CO_FINISH_OP_TIMEOUT                        8

+#define CO_OP_END                                   9

+#define CO_CANCEL_OP                               10

+#define CO_CHANGE_CHANNEL                          11

+#define CO_RELEASE_LOCK                            12

+#define CO_CHANGE_STATE                            13

+#define CO_DBGID_DEFINITION_END

+

+/* RO debug identifier definitions */

+#define RO_DBGID_DEFINITION_START

+#define RO_REFRESH_ROAM_TABLE                       1

+#define RO_UPDATE_ROAM_CANDIDATE                    2

+#define RO_UPDATE_ROAM_CANDIDATE_CB                 3

+#define RO_UPDATE_ROAM_CANDIDATE_FINISH             4

+#define RO_REFRESH_ROAM_TABLE_DONE                  5

+#define RO_PERIODIC_SEARCH_CB                       6

+#define RO_PERIODIC_SEARCH_TIMEOUT                  7

+#define RO_INIT                                     8

+#define RO_BMISS_STATE1                             9

+#define RO_BMISS_STATE2                            10

+#define RO_SET_PERIODIC_SEARCH_ENABLE              11

+#define RO_SET_PERIODIC_SEARCH_DISABLE             12

+#define RO_ENABLE_SQ_THRESHOLD                     13

+#define RO_DISABLE_SQ_THRESHOLD                    14

+#define RO_ADD_BSS_TO_ROAM_TABLE                   15

+#define RO_SET_PERIODIC_SEARCH_MODE                16

+#define RO_CONFIGURE_SQ_THRESHOLD1                 17

+#define RO_CONFIGURE_SQ_THRESHOLD2                 18

+#define RO_CONFIGURE_SQ_PARAMS                     19

+#define RO_LOW_SIGNAL_QUALITY_EVENT                20

+#define RO_HIGH_SIGNAL_QUALITY_EVENT               21

+#define RO_REMOVE_BSS_FROM_ROAM_TABLE              22

+#define RO_UPDATE_CONNECTION_STATE_METRIC          23

+#define RO_LOWRSSI_SCAN_PARAMS                     24

+#define RO_LOWRSSI_SCAN_START                      25

+#define RO_LOWRSSI_SCAN_END                        26

+#define RO_LOWRSSI_SCAN_CANCEL                     27

+#define RO_LOWRSSI_ROAM_CANCEL                     28

+#define RO_REFRESH_ROAM_CANDIDATE                  29

+#define RO_DBGID_DEFINITION_END

+

+/* CM debug identifier definitions */

+#define CM_DBGID_DEFINITION_START

+#define CM_INITIATE_HANDOFF                         1

+#define CM_INITIATE_HANDOFF_CB                      2

+#define CM_CONNECT_EVENT                            3

+#define CM_DISCONNECT_EVENT                         4

+#define CM_INIT                                     5

+#define CM_HANDOFF_SOURCE                           6

+#define CM_SET_HANDOFF_TRIGGERS                     7

+#define CM_CONNECT_REQUEST                          8

+#define CM_CONNECT_REQUEST_CB                       9

+#define CM_CONTINUE_SCAN_CB                         10 

+#define CM_DBGID_DEFINITION_END

+

+

+/* mgmt debug identifier definitions */

+#define MGMT_DBGID_DEFINITION_START

+#define KEYMGMT_CONNECTION_INIT                     1

+#define KEYMGMT_CONNECTION_COMPLETE                 2

+#define KEYMGMT_CONNECTION_CLOSE                    3

+#define KEYMGMT_ADD_KEY                             4

+#define MLME_NEW_STATE                              5

+#define MLME_CONN_INIT                              6

+#define MLME_CONN_COMPLETE                          7

+#define MLME_CONN_CLOSE                             8 

+#define MLME_WLAN_OPMODE                            9 

+#define MLME_WLAN_SLOTTIME                          10 

+#define MGMT_DBGID_DEFINITION_END

+

+/* TMR debug identifier definitions */

+#define TMR_DBGID_DEFINITION_START

+#define TMR_HANG_DETECTED                           1

+#define TMR_WDT_TRIGGERED                           2

+#define TMR_WDT_RESET                               3

+#define TMR_HANDLER_ENTRY                           4

+#define TMR_HANDLER_EXIT                            5

+#define TMR_SAVED_START                             6

+#define TMR_SAVED_END                               7

+#define TMR_DBGID_DEFINITION_END

+

+/* BTCOEX debug identifier definitions */

+#define BTCOEX_DBGID_DEFINITION_START

+#define BTCOEX_STATUS_CMD                           1

+#define BTCOEX_PARAMS_CMD                           2

+#define BTCOEX_ANT_CONFIG                           3

+#define BTCOEX_COLOCATED_BT_DEVICE                  4

+#define BTCOEX_CLOSE_RANGE_SCO_ON                   5

+#define BTCOEX_CLOSE_RANGE_SCO_OFF                  6

+#define BTCOEX_CLOSE_RANGE_A2DP_ON                  7

+#define BTCOEX_CLOSE_RANGE_A2DP_OFF                 8

+#define BTCOEX_A2DP_PROTECT_ON                      9

+#define BTCOEX_A2DP_PROTECT_OFF                     10

+#define BTCOEX_SCO_PROTECT_ON                       11

+#define BTCOEX_SCO_PROTECT_OFF                      12

+#define BTCOEX_CLOSE_RANGE_DETECTOR_START           13

+#define BTCOEX_CLOSE_RANGE_DETECTOR_STOP            14

+#define BTCOEX_CLOSE_RANGE_TOGGLE                   15

+#define BTCOEX_CLOSE_RANGE_TOGGLE_RSSI_LRCNT        16

+#define BTCOEX_CLOSE_RANGE_RSSI_THRESH              17

+#define BTCOEX_CLOSE_RANGE_LOW_RATE_THRESH          18

+#define BTCOEX_PTA_PRI_INTR_HANDLER  		        19

+#define BTCOEX_PSPOLL_QUEUED						20

+#define BTCOEX_PSPOLL_COMPLETE						21

+#define BTCOEX_DBG_PM_AWAKE							22

+#define BTCOEX_DBG_PM_SLEEP							23

+#define BTCOEX_DBG_SCO_COEX_ON						24

+#define BTCOEX_SCO_DATARECEIVE						25

+#define BTCOEX_INTR_INIT							26

+#define BTCOEX_PTA_PRI_DIFF							27

+#define BTCOEX_TIM_NOTIFICATION						28

+#define BTCOEX_SCO_WAKEUP_ON_DATA					29

+#define BTCOEX_SCO_SLEEP							30

+#define BTCOEX_SET_WEIGHTS							31

+#define BTCOEX_SCO_DATARECEIVE_LATENCY_VAL			32

+#define BTCOEX_SCO_MEASURE_TIME_DIFF				33

+#define BTCOEX_SET_EOL_VAL							34

+#define BTCOEX_OPT_DETECT_HANDLER					35

+#define BTCOEX_SCO_TOGGLE_STATE						36

+#define BTCOEX_SCO_STOMP							37

+#define BTCOEX_NULL_COMP_CALLBACK					38

+#define BTCOEX_RX_INCOMING							39

+#define BTCOEX_RX_INCOMING_CTL						40

+#define BTCOEX_RX_INCOMING_MGMT						41

+#define BTCOEX_RX_INCOMING_DATA						42

+#define BTCOEX_RTS_RECEPTION						43

+#define BTCOEX_FRAME_PRI_LOW_RATE_THRES				44

+#define BTCOEX_PM_FAKE_SLEEP						45

+#define BTCOEX_ACL_COEX_STATUS						46

+#define BTCOEX_ACL_COEX_DETECTION					47

+#define BTCOEX_A2DP_COEX_STATUS						48

+#define BTCOEX_SCO_STATUS							49

+#define BTCOEX_WAKEUP_ON_DATA						50

+#define BTCOEX_DATARECEIVE							51

+#define BTCOEX_GET_MAX_AGGR_SIZE					53

+#define BTCOEX_MAX_AGGR_AVAIL_TIME					54

+#define BTCOEX_DBG_WBTIMER_INTR						55

+#define BTCOEX_DBG_SCO_SYNC                         57

+#define BTCOEX_UPLINK_QUEUED_RATE  					59

+#define BTCOEX_DBG_UPLINK_ENABLE_EOL				60

+#define BTCOEX_UPLINK_FRAME_DURATION				61

+#define BTCOEX_UPLINK_SET_EOL						62

+#define BTCOEX_DBG_EOL_EXPIRED						63

+#define BTCOEX_DBG_DATA_COMPLETE					64

+#define BTCOEX_UPLINK_QUEUED_TIMESTAMP				65

+#define BTCOEX_DBG_DATA_COMPLETE_TIME				66

+#define BTCOEX_DBG_A2DP_ROLE_IS_SLAVE               67

+#define BTCOEX_DBG_A2DP_ROLE_IS_MASTER              68

+#define BTCOEX_DBG_UPLINK_SEQ_NUM					69

+#define BTCOEX_UPLINK_AGGR_SEQ						70

+#define BTCOEX_DBG_TX_COMP_SEQ_NO					71

+#define BTCOEX_DBG_MAX_AGGR_PAUSE_STATE				72

+#define BTCOEX_DBG_ACL_TRAFFIC                      73

+#define BTCOEX_CURR_AGGR_PROP						74

+#define BTCOEX_DBG_SCO_GET_PER_TIME_DIFF 			75

+#define BTCOEX_PSPOLL_PROCESS						76

+#define BTCOEX_RETURN_FROM_MAC						77

+#define BTCOEX_FREED_REQUEUED_CNT					78

+#define BTCOEX_DBG_TOGGLE_LOW_RATES					79

+#define BTCOEX_MAC_GOES_TO_SLEEP    				80

+#define BTCOEX_DBG_A2DP_NO_SYNC                     81

+#define BTCOEX_RETURN_FROM_MAC_HOLD_Q_INFO			82

+#define BTCOEX_RETURN_FROM_MAC_AC					83

+#define BTCOEX_DBG_DTIM_RECV                        84

+#define BTCOEX_IS_PRE_UPDATE						86

+#define BTCOEX_ENQUEUED_BIT_MAP						87

+#define BTCOEX_TX_COMPLETE_FIRST_DESC_STATS			88

+#define BTCOEX_UPLINK_DESC							89

+#define BTCOEX_SCO_GET_PER_FIRST_FRM_TIMESTAMP		90

+#define BTCOEX_DBG_RECV_ACK							94

+#define BTCOEX_DBG_ADDBA_INDICATION                 95

+#define BTCOEX_TX_COMPLETE_EOL_FAILED				96

+#define BTCOEX_DBG_A2DP_USAGE_COMPLETE  			97

+#define BTCOEX_DBG_A2DP_STOMP_FOR_BCN_HANDLER		98

+#define BTCOEX_DBG_A2DP_SYNC_INTR                   99

+#define BTCOEX_DBG_A2DP_STOMP_FOR_BCN_RECEPTION	   100

+#define BTCOEX_FORM_AGGR_CURR_AGGR				   101

+#define BTCOEX_DBG_TOGGLE_A2DP_BURST_CNT           102

+#define BTCOEX_DBG_BT_TRAFFIC   				   103

+#define BTCOEX_DBG_STOMP_BT_TRAFFIC 			   104

+#define BTCOEX_RECV_NULL                           105

+#define BTCOEX_DBG_A2DP_MASTER_BT_END			   106

+#define BTCOEX_DBG_A2DP_BT_START				   107

+#define BTCOEX_DBG_A2DP_SLAVE_BT_END			   108

+#define BTCOEX_DBG_A2DP_STOMP_BT				   109

+#define BTCOEX_DBG_GO_TO_SLEEP					   110

+#define BTCOEX_DBG_A2DP_PKT						   111

+#define BTCOEX_DBG_A2DP_PSPOLL_DATA_RECV		   112

+#define BTCOEX_DBG_A2DP_NULL					   113

+#define BTCOEX_DBG_UPLINK_DATA					   114

+#define BTCOEX_DBG_A2DP_STOMP_LOW_PRIO_NULL		   115

+#define BTCOEX_DBG_ADD_BA_RESP_TIMEOUT			   116

+#define BTCOEX_DBG_TXQ_STATE					   117

+#define BTCOEX_DBG_ALLOW_SCAN					   118

+#define BTCOEX_DBG_SCAN_REQUEST					   119

+#define BTCOEX_A2DP_SLEEP						   127

+#define BTCOEX_DBG_DATA_ACTIV_TIMEOUT			   128

+#define BTCOEX_DBG_SWITCH_TO_PSPOLL_ON_MODE		   129

+#define BTCOEX_DBG_SWITCH_TO_PSPOLL_OFF_MODE 	   130

+#define BTCOEX_DATARECEIVE_AGGR					   131

+#define BTCOEX_DBG_DATA_RECV_SLEEPING_PENDING	   132

+#define BTCOEX_DBG_DATARESP_TIMEOUT				   133

+#define BTCOEX_BDG_BMISS						   134

+#define BTCOEX_DBG_DATA_RECV_WAKEUP_TIM			   135

+#define BTCOEX_DBG_SECOND_BMISS					   136

+#define BTCOEX_DBG_SET_WLAN_STATE				   138

+#define BTCOEX_BDG_FIRST_BMISS					   139

+#define BTCOEX_DBG_A2DP_CHAN_OP					   140

+#define BTCOEX_DBG_A2DP_INTR					   141

+#define BTCOEX_DBG_BT_INQUIRY					   142

+#define BTCOEX_DBG_BT_INQUIRY_DATA_FETCH		   143

+#define BTCOEX_DBG_POST_INQUIRY_FINISH			   144

+#define BTCOEX_DBG_SCO_OPT_MODE_TIMER_HANDLER	   145

+#define BTCOEX_DBG_NULL_FRAME_SLEEP				   146

+#define BTCOEX_DBG_NULL_FRAME_AWAKE				   147

+#define BTCOEX_DBG_SET_AGGR_SIZE				   152

+#define BTCOEX_DBG_TEAR_BA_TIMEOUT				   153

+#define BTCOEX_DBG_MGMT_FRAME_SEQ_NO			   154

+#define BTCOEX_DBG_SCO_STOMP_HIGH_PRI			   155

+#define BTCOEX_DBG_COLOCATED_BT_DEV				   156

+#define BTCOEX_DBG_FE_ANT_TYPE				       157

+#define BTCOEX_DBG_BT_INQUIRY_CMD				   158

+#define BTCOEX_DBG_SCO_CONFIG					   159

+#define BTCOEX_DBG_SCO_PSPOLL_CONFIG			   160

+#define BTCOEX_DBG_SCO_OPTMODE_CONFIG		       161

+#define BTCOEX_DBG_A2DP_CONFIG				       162

+#define BTCOEX_DBG_A2DP_PSPOLL_CONFIG		       163

+#define BTCOEX_DBG_A2DP_OPTMODE_CONFIG		       164

+#define BTCOEX_DBG_ACLCOEX_CONFIG			       165

+#define BTCOEX_DBG_ACLCOEX_PSPOLL_CONFIG		   166

+#define BTCOEX_DBG_ACLCOEX_OPTMODE_CONFIG	       167

+#define BTCOEX_DBG_DEBUG_CMD					   168

+#define BTCOEX_DBG_SET_BT_OPERATING_STATUS		   169

+#define BTCOEX_DBG_GET_CONFIG					   170

+#define BTCOEX_DBG_GET_STATS					   171

+#define BTCOEX_DBG_BT_OPERATING_STATUS			   172

+#define BTCOEX_DBG_PERFORM_RECONNECT               173

+#define BTCOEX_DBG_ACL_WLAN_MED                    175

+#define BTCOEX_DBG_ACL_BT_MED                      176

+#define BTCOEX_DBG_WLAN_CONNECT                    177

+#define BTCOEX_DBG_A2DP_DUAL_START                 178

+#define BTCOEX_DBG_PMAWAKE_NOTIFY                  179

+#define BTCOEX_DBG_BEACON_SCAN_ENABLE              180

+#define BTCOEX_DBG_BEACON_SCAN_DISABLE             181

+#define BTCOEX_DBG_RX_NOTIFY                       182

+#define BTCOEX_SCO_GET_PER_SECOND_FRM_TIMESTAMP    183

+#define BTCOEX_DBG_TXQ_DETAILS                     184

+#define BTCOEX_DBG_SCO_STOMP_LOW_PRI               185

+#define BTCOEX_DBG_A2DP_FORCE_SCAN                 186

+#define BTCOEX_DBG_DTIM_STOMP_COMP                 187

+#define BTCOEX_ACL_PRESENCE_TIMER                  188

+#define BTCOEX_DBG_QUEUE_SELF_CTS                  189

+#define BTCOEX_DBG_SELF_CTS_COMP                   190

+#define BTCOEX_DBG_APMODE_WAIT_FOR_CTS_COMP_FAILED 191

+#define BTCOEX_DBG_APMODE_A2DP_MED_TO_BT           192

+#define BTCOEX_DBG_APMODE_SET_BTSTATE              193

+#define BTCOEX_DBG_APMODE_A2DP_STATUS              194

+#define BTCOEX_DBG_APMODE_SCO_CTS_HANDLER          195

+#define BTCOEX_DBG_APMODE_SCO_STATUS               196

+#define BTCOEX_DBG_APMODE_TXQ_DRAINED              197

+#define BTCOEX_DBG_APMODE_SCO_ARM_TIMER            198

+#define BTCOEX_DBG_APMODE_SWITCH_MED_TO_WLAN       199

+#define BTCOEX_APMODE_BCN_TX_HANDLER               200

+#define BTCOEX_APMODE_BCN_TX                       201

+#define BTCOEX_APMODE_SCO_RTS_HANDLER              202

+#define BTCOEX_DBGID_DEFINITION_END

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* _DBGLOG_ID_H_ */

diff --git a/ath6kl-wmiconfig/include/ieee80211.h b/ath6kl-wmiconfig/include/ieee80211.h
new file mode 100755
index 0000000..4824ee0
--- /dev/null
+++ b/ath6kl-wmiconfig/include/ieee80211.h
@@ -0,0 +1,384 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+#ifndef _NET80211_IEEE80211_H_

+#define _NET80211_IEEE80211_H_

+

+//#include "athstartpack.h"

+

+/*

+ * 802.11 protocol definitions.

+ */

+#define IEEE80211_WEP_KEYLEN        5   /* 40bit */

+#define IEEE80211_WEP_IVLEN         3   /* 24bit */

+#define IEEE80211_WEP_KIDLEN        1   /* 1 octet */

+#define IEEE80211_WEP_CRCLEN        4   /* CRC-32 */

+#define IEEE80211_WEP_NKID          4   /* number of key ids */

+

+/*

+ * 802.11i defines an extended IV for use with non-WEP ciphers.

+ * When the EXTIV bit is set in the key id byte an additional

+ * 4 bytes immediately follow the IV for TKIP.  For CCMP the

+ * EXTIV bit is likewise set but the 8 bytes represent the

+ * CCMP header rather than IV+extended-IV.

+ */

+#define IEEE80211_WEP_EXTIV         0x20

+#define IEEE80211_WEP_EXTIVLEN      4   /* extended IV length */

+#define IEEE80211_WEP_MICLEN        8   /* trailing MIC */

+

+#define IEEE80211_CRC_LEN           4

+

+#ifdef WAPI_ENABLE

+#define IEEE80211_WAPI_EXTIVLEN      10   /* extended IV length */

+#endif /* WAPI ENABLE */

+

+

+#define IEEE80211_ADDR_LEN  6       /* size of 802.11 address */

+/* is 802.11 address multicast/broadcast? */

+#define IEEE80211_IS_MULTICAST(_a)  (*(_a) & 0x01)

+#define IEEE80211_IS_BROADCAST(_a)  (*(_a) == 0xFF)

+#define WEP_HEADER (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN)

+#define WEP_TRAILER IEEE80211_WEP_CRCLEN

+#define CCMP_HEADER (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + \

+                    IEEE80211_WEP_EXTIVLEN)

+#define CCMP_TRAILER IEEE80211_WEP_MICLEN

+#define TKIP_HEADER (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + \

+                    IEEE80211_WEP_EXTIVLEN)

+#define TKIP_TRAILER IEEE80211_WEP_CRCLEN

+#define TKIP_MICLEN  IEEE80211_WEP_MICLEN

+

+

+#define IEEE80211_ADDR_EQ(addr1, addr2)     \

+    (A_MEMCMP(addr1, addr2, IEEE80211_ADDR_LEN) == 0)

+

+#define IEEE80211_ADDR_COPY(dst,src)    A_MEMCPY(dst,src,IEEE80211_ADDR_LEN)

+

+#define IEEE80211_KEYBUF_SIZE 16

+#define IEEE80211_MICBUF_SIZE (8+8)  /* space for both tx and rx */

+

+/*

+ * NB: these values are ordered carefully; there are lots of

+ * of implications in any reordering.  In particular beware

+ * that 4 is not used to avoid conflicting with IEEE80211_F_PRIVACY.

+ */

+#define IEEE80211_CIPHER_WEP            0

+#define IEEE80211_CIPHER_TKIP           1

+#define IEEE80211_CIPHER_AES_OCB        2

+#define IEEE80211_CIPHER_AES_CCM        3

+#define IEEE80211_CIPHER_CKIP           5

+#define IEEE80211_CIPHER_CCKM_KRK       6

+#define IEEE80211_CIPHER_NONE           7       /* pseudo value */

+

+#define IEEE80211_CIPHER_MAX            (IEEE80211_CIPHER_NONE+1)

+

+#define IEEE80211_IS_VALID_WEP_CIPHER_LEN(len) \

+        (((len) == 5) || ((len) == 13) || ((len) == 16))

+

+

+

+/*

+ * generic definitions for IEEE 802.11 frames

+ */

+PREPACK struct ieee80211_frame {

+    A_UINT8    i_fc[2];

+    A_UINT8    i_dur[2];

+    A_UINT8    i_addr1[IEEE80211_ADDR_LEN];

+    A_UINT8    i_addr2[IEEE80211_ADDR_LEN];

+    A_UINT8    i_addr3[IEEE80211_ADDR_LEN];

+    A_UINT8    i_seq[2];

+    /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */

+    /* see below */

+} POSTPACK;

+

+PREPACK struct ieee80211_qosframe {

+    A_UINT8 i_fc[2];

+    A_UINT8 i_dur[2];

+    A_UINT8 i_addr1[IEEE80211_ADDR_LEN];

+    A_UINT8 i_addr2[IEEE80211_ADDR_LEN];

+    A_UINT8 i_addr3[IEEE80211_ADDR_LEN];

+    A_UINT8 i_seq[2];

+    A_UINT8 i_qos[2];

+} POSTPACK;

+

+#define IEEE80211_FC0_VERSION_MASK          0x03

+#define IEEE80211_FC0_VERSION_SHIFT         0

+#define IEEE80211_FC0_VERSION_0             0x00

+#define IEEE80211_FC0_TYPE_MASK             0x0c

+#define IEEE80211_FC0_TYPE_SHIFT            2

+#define IEEE80211_FC0_TYPE_MGT              0x00

+#define IEEE80211_FC0_TYPE_CTL              0x04

+#define IEEE80211_FC0_TYPE_DATA             0x08

+

+#define IEEE80211_FC0_SUBTYPE_MASK          0xf0

+#define IEEE80211_FC0_SUBTYPE_SHIFT         4

+/* for TYPE_MGT */

+#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ     0x00

+#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP    0x10

+#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ   0x20

+#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP  0x30

+#define IEEE80211_FC0_SUBTYPE_PROBE_REQ     0x40

+#define IEEE80211_FC0_SUBTYPE_PROBE_RESP    0x50

+#define IEEE80211_FC0_SUBTYPE_BEACON        0x80

+#define IEEE80211_FC0_SUBTYPE_ATIM          0x90

+#define IEEE80211_FC0_SUBTYPE_DISASSOC      0xa0

+#define IEEE80211_FC0_SUBTYPE_AUTH          0xb0

+#define IEEE80211_FC0_SUBTYPE_DEAUTH        0xc0

+/* for TYPE_CTL */

+#define IEEE80211_FC0_SUBTYPE_PS_POLL       0xa0

+#define IEEE80211_FC0_SUBTYPE_RTS           0xb0

+#define IEEE80211_FC0_SUBTYPE_CTS           0xc0

+#define IEEE80211_FC0_SUBTYPE_ACK           0xd0

+#define IEEE80211_FC0_SUBTYPE_CF_END        0xe0

+#define IEEE80211_FC0_SUBTYPE_CF_END_ACK    0xf0

+/* for TYPE_DATA (bit combination) */

+#define IEEE80211_FC0_SUBTYPE_DATA          0x00

+#define IEEE80211_FC0_SUBTYPE_CF_ACK        0x10

+#define IEEE80211_FC0_SUBTYPE_CF_POLL       0x20

+#define IEEE80211_FC0_SUBTYPE_CF_ACPL       0x30

+#define IEEE80211_FC0_SUBTYPE_NODATA        0x40

+#define IEEE80211_FC0_SUBTYPE_CFACK         0x50

+#define IEEE80211_FC0_SUBTYPE_CFPOLL        0x60

+#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70

+#define IEEE80211_FC0_SUBTYPE_QOS           0x80

+#define IEEE80211_FC0_SUBTYPE_QOS_NULL      0xc0

+

+#define IEEE80211_FC1_DIR_MASK              0x03

+#define IEEE80211_FC1_DIR_NODS              0x00    /* STA->STA */

+#define IEEE80211_FC1_DIR_TODS              0x01    /* STA->AP  */

+#define IEEE80211_FC1_DIR_FROMDS            0x02    /* AP ->STA */

+#define IEEE80211_FC1_DIR_DSTODS            0x03    /* AP ->AP  */

+

+#define IEEE80211_FC1_MORE_FRAG             0x04

+#define IEEE80211_FC1_RETRY                 0x08

+#define IEEE80211_FC1_PWR_MGT               0x10

+#define IEEE80211_FC1_MORE_DATA             0x20

+#define IEEE80211_FC1_WEP                   0x40

+#define IEEE80211_FC1_ORDER                 0x80

+

+#define IEEE80211_SEQ_FRAG_MASK             0x000f

+#define IEEE80211_SEQ_FRAG_SHIFT            0

+#define IEEE80211_SEQ_SEQ_MASK              0xfff0

+#define IEEE80211_SEQ_SEQ_SHIFT             4

+

+#define IEEE80211_NWID_LEN                  32

+

+/*

+ * 802.11 rate set.

+ */

+#define IEEE80211_RATE_SIZE     8       /* 802.11 standard */

+#define IEEE80211_RATE_MAXSIZE  15      /* max rates we'll handle */

+

+#define WMM_NUM_AC                  4   /* 4 AC categories */

+

+#define WMM_PARAM_ACI_M         0x60    /* Mask for ACI field */

+#define WMM_PARAM_ACI_S         5   /* Shift for ACI field */

+#define WMM_PARAM_ACM_M         0x10    /* Mask for ACM bit */

+#define WMM_PARAM_ACM_S         4       /* Shift for ACM bit */

+#define WMM_PARAM_AIFSN_M       0x0f    /* Mask for aifsn field */

+#define WMM_PARAM_LOGCWMIN_M    0x0f    /* Mask for CwMin field (in log) */

+#define WMM_PARAM_LOGCWMAX_M    0xf0    /* Mask for CwMax field (in log) */

+#define WMM_PARAM_LOGCWMAX_S    4   /* Shift for CwMax field */

+

+#define WMM_AC_TO_TID(_ac) (       \

+    ((_ac) == WMM_AC_VO) ? 6 : \

+    ((_ac) == WMM_AC_VI) ? 5 : \

+    ((_ac) == WMM_AC_BK) ? 1 : \

+    0)

+

+#define TID_TO_WMM_AC(_tid) (      \

+    ((_tid) < 1) ? WMM_AC_BE : \

+    ((_tid) < 3) ? WMM_AC_BK : \

+    ((_tid) < 6) ? WMM_AC_VI : \

+    WMM_AC_VO)

+/*

+ * Management information element payloads.

+ */

+

+enum {

+    IEEE80211_ELEMID_SSID       = 0,

+    IEEE80211_ELEMID_RATES      = 1,

+    IEEE80211_ELEMID_FHPARMS    = 2,

+    IEEE80211_ELEMID_DSPARMS    = 3,

+    IEEE80211_ELEMID_CFPARMS    = 4,

+    IEEE80211_ELEMID_TIM        = 5,

+    IEEE80211_ELEMID_IBSSPARMS  = 6,

+    IEEE80211_ELEMID_COUNTRY    = 7,

+    IEEE80211_ELEMID_CHALLENGE  = 16,

+    /* 17-31 reserved for challenge text extension */

+    IEEE80211_ELEMID_PWRCNSTR   = 32,

+    IEEE80211_ELEMID_PWRCAP     = 33,

+    IEEE80211_ELEMID_TPCREQ     = 34,

+    IEEE80211_ELEMID_TPCREP     = 35,

+    IEEE80211_ELEMID_SUPPCHAN   = 36,

+    IEEE80211_ELEMID_CHANSWITCH = 37,

+    IEEE80211_ELEMID_MEASREQ    = 38,

+    IEEE80211_ELEMID_MEASREP    = 39,

+    IEEE80211_ELEMID_QUIET      = 40,

+    IEEE80211_ELEMID_IBSSDFS    = 41,

+    IEEE80211_ELEMID_ERP        = 42,

+    IEEE80211_ELEMID_HTCAP_ANA  = 45,   /* Address ANA, and non-ANA story, for interop. CL#171733 */

+    IEEE80211_ELEMID_RSN        = 48,

+    IEEE80211_ELEMID_XRATES     = 50,

+    IEEE80211_ELEMID_HTINFO_ANA = 61,

+#ifdef WAPI_ENABLE

+    IEEE80211_ELEMID_WAPI       = 68,

+#endif

+    IEEE80211_ELEMID_TPC        = 150,

+    IEEE80211_ELEMID_CCKM       = 156,

+    IEEE80211_ELEMID_VENDOR     = 221,  /* vendor private */

+};

+

+#define ATH_OUI             0x7f0300        /* Atheros OUI */

+#define ATH_OUI_TYPE        0x01

+#define ATH_OUI_SUBTYPE     0x01

+#define ATH_OUI_VERSION     0x00

+

+#define WPA_OUI             0xf25000

+#define WPA_OUI_TYPE        0x01

+#define WPA_VERSION         1          /* current supported version */

+

+#define WPA_CSE_NULL        0x00

+#define WPA_CSE_WEP40       0x01

+#define WPA_CSE_TKIP        0x02

+#define WPA_CSE_CCMP        0x04

+#define WPA_CSE_WEP104      0x05

+

+#define WPA_ASE_NONE        0x00

+#define WPA_ASE_8021X_UNSPEC    0x01

+#define WPA_ASE_8021X_PSK   0x02

+

+#define RSN_OUI         0xac0f00

+#define RSN_VERSION     1       /* current supported version */

+

+#define RSN_CSE_NULL        0x00

+#define RSN_CSE_WEP40       0x01

+#define RSN_CSE_TKIP        0x02

+#define RSN_CSE_WRAP        0x03

+#define RSN_CSE_CCMP        0x04

+#define RSN_CSE_WEP104      0x05

+

+#define RSN_ASE_NONE            0x00

+#define RSN_ASE_8021X_UNSPEC    0x01

+#define RSN_ASE_8021X_PSK       0x02

+

+#define RSN_CAP_PREAUTH         0x01

+

+#define WMM_OUI                 0xf25000

+#define WMM_OUI_TYPE            0x02

+#define WMM_INFO_OUI_SUBTYPE    0x00

+#define WMM_PARAM_OUI_SUBTYPE   0x01

+#define WMM_VERSION             1

+

+/* WMM stream classes */

+#define WMM_NUM_AC  4

+#define WMM_AC_BE   0       /* best effort */

+#define WMM_AC_BK   1       /* background */

+#define WMM_AC_VI   2       /* video */

+#define WMM_AC_VO   3       /* voice */

+

+/* TSPEC related */

+#define ACTION_CATEGORY_CODE_TSPEC                 17

+#define ACTION_CODE_TSPEC_ADDTS                    0

+#define ACTION_CODE_TSPEC_ADDTS_RESP               1

+#define ACTION_CODE_TSPEC_DELTS                    2

+

+typedef enum {

+    TSPEC_STATUS_CODE_ADMISSION_ACCEPTED = 0,

+    TSPEC_STATUS_CODE_ADDTS_INVALID_PARAMS = 0x1,

+    TSPEC_STATUS_CODE_ADDTS_REQUEST_REFUSED = 0x3,

+    TSPEC_STATUS_CODE_UNSPECIFIED_QOS_RELATED_FAILURE = 0xC8,

+    TSPEC_STATUS_CODE_REQUESTED_REFUSED_POLICY_CONFIGURATION = 0xC9,

+    TSPEC_STATUS_CODE_INSUFFCIENT_BANDWIDTH = 0xCA,

+    TSPEC_STATUS_CODE_INVALID_PARAMS = 0xCB,

+    TSPEC_STATUS_CODE_DELTS_SENT    = 0x30,

+    TSPEC_STATUS_CODE_DELTS_RECV    = 0x31,

+} TSPEC_STATUS_CODE;

+

+#define TSPEC_TSID_MASK             0xF

+#define TSPEC_TSID_S                1

+

+/*

+ * WMM/802.11e Tspec Element

+ */

+typedef PREPACK struct wmm_tspec_ie_t {

+    A_UINT8     elementId;

+    A_UINT8     len;

+    A_UINT8     oui[3];

+    A_UINT8     ouiType;

+    A_UINT8     ouiSubType;

+    A_UINT8     version;

+    A_UINT16    tsInfo_info;

+    A_UINT8     tsInfo_reserved;

+    A_UINT16    nominalMSDU;

+    A_UINT16    maxMSDU;

+    A_UINT32    minServiceInt;

+    A_UINT32    maxServiceInt;

+    A_UINT32    inactivityInt;

+    A_UINT32    suspensionInt;

+    A_UINT32    serviceStartTime;

+    A_UINT32    minDataRate;

+    A_UINT32    meanDataRate;

+    A_UINT32    peakDataRate;

+    A_UINT32    maxBurstSize;

+    A_UINT32    delayBound;

+    A_UINT32    minPhyRate;

+    A_UINT16    sba;

+    A_UINT16    mediumTime;

+} POSTPACK WMM_TSPEC_IE;

+

+

+/*

+ * BEACON management packets

+ *

+ *  octet timestamp[8]

+ *  octet beacon interval[2]

+ *  octet capability information[2]

+ *  information element

+ *      octet elemid

+ *      octet length

+ *      octet information[length]

+ */

+

+#define IEEE80211_BEACON_INTERVAL(beacon) \

+    ((beacon)[8] | ((beacon)[9] << 8))

+#define IEEE80211_BEACON_CAPABILITY(beacon) \

+    ((beacon)[10] | ((beacon)[11] << 8))

+

+#define IEEE80211_CAPINFO_ESS               0x0001

+#define IEEE80211_CAPINFO_IBSS              0x0002

+#define IEEE80211_CAPINFO_CF_POLLABLE       0x0004

+#define IEEE80211_CAPINFO_CF_POLLREQ        0x0008

+#define IEEE80211_CAPINFO_PRIVACY           0x0010

+#define IEEE80211_CAPINFO_SHORT_PREAMBLE    0x0020

+#define IEEE80211_CAPINFO_PBCC              0x0040

+#define IEEE80211_CAPINFO_CHNL_AGILITY      0x0080

+/* bits 8-9 are reserved */

+#define IEEE80211_CAPINFO_SHORT_SLOTTIME    0x0400

+#define IEEE80211_CAPINFO_APSD              0x0800

+/* bit 12 is reserved */

+#define IEEE80211_CAPINFO_DSSSOFDM          0x2000

+/* bits 14-15 are reserved */

+

+/*

+ * Authentication Modes

+ */

+

+enum ieee80211_authmode {

+    IEEE80211_AUTH_NONE     = 0,

+    IEEE80211_AUTH_OPEN     = 1,

+    IEEE80211_AUTH_SHARED   = 2,

+    IEEE80211_AUTH_8021X    = 3,

+    IEEE80211_AUTH_AUTO     = 4,   /* auto-select/accept */

+    /* NB: these are used only for ioctls */

+    IEEE80211_AUTH_WPA      = 5,  /* WPA/RSN  w/ 802.1x */

+    IEEE80211_AUTH_WPA_PSK  = 6,  /* WPA/RSN  w/ PSK */

+    IEEE80211_AUTH_WPA_CCKM = 7,  /* WPA/RSN IE  w/ CCKM */

+};

+

+#define IEEE80211_PS_MAX_QUEUE    50 /*Maximum no of buffers that can be queues for PS*/

+

+//#include "athendpack.h"

+

+#endif /* _NET80211_IEEE80211_H_ */

diff --git a/ath6kl-wmiconfig/include/ieee80211_ioctl.h b/ath6kl-wmiconfig/include/ieee80211_ioctl.h
new file mode 100755
index 0000000..c0ff150
--- /dev/null
+++ b/ath6kl-wmiconfig/include/ieee80211_ioctl.h
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef _IEEE80211_IOCTL_H_

+#define _IEEE80211_IOCTL_H_

+

+#include <linux/version.h>

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/*

+ * Extracted from the MADWIFI net80211/ieee80211_ioctl.h

+ */

+

+/*

+ * WPA/RSN get/set key request.  Specify the key/cipher

+ * type and whether the key is to be used for sending and/or

+ * receiving.  The key index should be set only when working

+ * with global keys (use IEEE80211_KEYIX_NONE for ``no index'').

+ * Otherwise a unicast/pairwise key is specified by the bssid

+ * (on a station) or mac address (on an ap).  They key length

+ * must include any MIC key data; otherwise it should be no

+ more than IEEE80211_KEYBUF_SIZE.

+ */

+struct ieee80211req_key {

+    u_int8_t    ik_type;    /* key/cipher type */

+    u_int8_t    ik_pad;

+    u_int16_t   ik_keyix;   /* key index */

+    u_int8_t    ik_keylen;  /* key length in bytes */

+    u_int8_t    ik_flags;

+#define IEEE80211_KEY_XMIT  0x01

+#define IEEE80211_KEY_RECV  0x02

+#define IEEE80211_KEY_DEFAULT   0x80    /* default xmit key */

+    u_int8_t    ik_macaddr[IEEE80211_ADDR_LEN];

+    u_int64_t   ik_keyrsc;  /* key receive sequence counter */

+    u_int64_t   ik_keytsc;  /* key transmit sequence counter */

+    u_int8_t    ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];

+};

+/*

+ * Delete a key either by index or address.  Set the index

+ * to IEEE80211_KEYIX_NONE when deleting a unicast key.

+ */

+struct ieee80211req_del_key {

+    u_int8_t    idk_keyix;  /* key index */

+    u_int8_t    idk_macaddr[IEEE80211_ADDR_LEN];

+};

+/*

+ * MLME state manipulation request.  IEEE80211_MLME_ASSOC

+ * only makes sense when operating as a station.  The other

+ * requests can be used when operating as a station or an

+ * ap (to effect a station).

+ */

+struct ieee80211req_mlme {

+    u_int8_t    im_op;      /* operation to perform */

+#define IEEE80211_MLME_ASSOC        1   /* associate station */

+#define IEEE80211_MLME_DISASSOC     2   /* disassociate station */

+#define IEEE80211_MLME_DEAUTH       3   /* deauthenticate station */

+#define IEEE80211_MLME_AUTHORIZE    4   /* authorize station */

+#define IEEE80211_MLME_UNAUTHORIZE  5   /* unauthorize station */

+    u_int16_t   im_reason;  /* 802.11 reason code */

+    u_int8_t    im_macaddr[IEEE80211_ADDR_LEN];

+};

+

+struct ieee80211req_addpmkid {

+    u_int8_t    pi_bssid[IEEE80211_ADDR_LEN];

+    u_int8_t    pi_enable;

+    u_int8_t    pi_pmkid[16];

+};

+

+#define AUTH_ALG_OPEN_SYSTEM    0x01

+#define AUTH_ALG_SHARED_KEY 0x02

+#define AUTH_ALG_LEAP       0x04

+

+struct ieee80211req_authalg {

+   u_int8_t auth_alg;

+};  

+

+/* 

+ * Request to add an IE to a Management Frame

+ */

+enum{

+    IEEE80211_APPIE_FRAME_BEACON     = 0,

+    IEEE80211_APPIE_FRAME_PROBE_REQ  = 1,

+    IEEE80211_APPIE_FRAME_PROBE_RESP = 2,

+    IEEE80211_APPIE_FRAME_ASSOC_REQ  = 3,

+    IEEE80211_APPIE_FRAME_ASSOC_RESP = 4,

+    IEEE80211_APPIE_NUM_OF_FRAME     = 5

+};

+

+/*

+ * The Maximum length of the IE that can be added to a Management frame

+ */

+#define IEEE80211_APPIE_FRAME_MAX_LEN  200

+

+struct ieee80211req_getset_appiebuf {

+    u_int32_t app_frmtype; /* management frame type for which buffer is added */

+    u_int32_t app_buflen;  /*application supplied buffer length */

+    u_int8_t  app_buf[];

+};

+

+/* 

+ * The following definitions are used by an application to set filter

+ * for receiving management frames 

+ */

+enum {

+     IEEE80211_FILTER_TYPE_BEACON      =   0x1,

+     IEEE80211_FILTER_TYPE_PROBE_REQ   =   0x2,

+     IEEE80211_FILTER_TYPE_PROBE_RESP  =   0x4,

+     IEEE80211_FILTER_TYPE_ASSOC_REQ   =   0x8,

+     IEEE80211_FILTER_TYPE_ASSOC_RESP  =   0x10,

+     IEEE80211_FILTER_TYPE_AUTH        =   0x20,

+     IEEE80211_FILTER_TYPE_DEAUTH      =   0x40,

+     IEEE80211_FILTER_TYPE_DISASSOC    =   0x80,

+     IEEE80211_FILTER_TYPE_ALL         =   0xFF  /* used to check the valid filter bits */

+};

+

+struct ieee80211req_set_filter {

+      u_int32_t app_filterype; /* management frame filter type */

+};

+

+enum {

+    IEEE80211_PARAM_AUTHMODE = 3,   /* Authentication Mode */

+    IEEE80211_PARAM_MCASTCIPHER = 5,

+    IEEE80211_PARAM_MCASTKEYLEN = 6,    /* multicast key length */

+    IEEE80211_PARAM_UCASTCIPHER = 8,

+    IEEE80211_PARAM_UCASTKEYLEN = 9,    /* unicast key length */

+    IEEE80211_PARAM_WPA     = 10,   /* WPA mode (0,1,2) */

+    IEEE80211_PARAM_ROAMING     = 12,   /* roaming mode */

+    IEEE80211_PARAM_PRIVACY     = 13,   /* privacy invoked */

+    IEEE80211_PARAM_COUNTERMEASURES = 14,   /* WPA/TKIP countermeasures */

+    IEEE80211_PARAM_DROPUNENCRYPTED = 15,   /* discard unencrypted frames */

+    IEEE80211_PARAM_WAPI = 16,   /* WAPI policy from wapid */        

+};

+

+/*

+ * Values for IEEE80211_PARAM_WPA

+ */

+#define WPA_MODE_WPA1   1

+#define WPA_MODE_WPA2   2

+#define WPA_MODE_AUTO   3

+#define WPA_MODE_NONE   4

+

+struct ieee80211req_wpaie {

+    u_int8_t    wpa_macaddr[IEEE80211_ADDR_LEN];

+    u_int8_t    wpa_ie[IEEE80211_MAX_IE];

+    u_int8_t    rsn_ie[IEEE80211_MAX_IE];

+};

+

+#ifndef IW_ENCODE_ALG_PMK

+#define IW_ENCODE_ALG_PMK       4

+#endif

+#ifndef IW_ENCODE_ALG_KRK

+#define IW_ENCODE_ALG_KRK       6

+#endif

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* _IEEE80211_IOCTL_H_ */

diff --git a/ath6kl-wmiconfig/include/osapi_linux.h b/ath6kl-wmiconfig/include/osapi_linux.h
new file mode 100755
index 0000000..feb84d0
--- /dev/null
+++ b/ath6kl-wmiconfig/include/osapi_linux.h
@@ -0,0 +1,377 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+//------------------------------------------------------------------------------

+// This file contains the definitions of the basic atheros data types.

+// It is used to map the data types in atheros files to a platform specific

+// type.

+//

+// Author(s): ="Atheros"

+//------------------------------------------------------------------------------

+

+#ifndef _OSAPI_LINUX_H_

+#define _OSAPI_LINUX_H_

+

+#ifdef __KERNEL__

+

+#include <linux/version.h>

+#include <linux/types.h>

+#include <linux/kernel.h>

+#include <linux/string.h>

+#include <linux/skbuff.h>

+#include <linux/netdevice.h>

+#include <linux/device.h>

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24)

+#include <linux/ethtool.h>

+#endif

+/*************************************/

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)

+#include <linux/jiffies.h>

+#endif

+#include <linux/timer.h>

+#include <linux/delay.h>

+#include <linux/wait.h>

+#ifdef KERNEL_2_4

+#include <asm/arch/irq.h>

+#include <asm/irq.h>

+#endif

+

+#include <linux/cache.h>

+

+#ifdef __GNUC__

+#define __ATTRIB_PACK           __attribute__ ((packed))

+#define __ATTRIB_PRINTF         __attribute__ ((format (printf, 1, 2)))

+#define __ATTRIB_NORETURN       __attribute__ ((noreturn))

+#ifndef INLINE

+#define INLINE                  __inline__

+#endif

+#else /* Not GCC */

+#define __ATTRIB_PACK

+#define __ATTRIB_PRINTF

+#define __ATTRIB_NORETURN

+#ifndef INLINE

+#define INLINE                  __inline

+#endif

+#endif /* End __GNUC__ */

+

+#define PREPACK

+#define POSTPACK                __ATTRIB_PACK

+

+/*

+ * Endianes macros

+ */

+#define A_BE2CPU8(x)       ntohb(x)

+#define A_BE2CPU16(x)      ntohs(x)

+#define A_BE2CPU32(x)      ntohl(x)

+

+#define A_LE2CPU8(x)       (x)

+#define A_LE2CPU16(x)      (x)

+#define A_LE2CPU32(x)      (x)

+

+#define A_CPU2BE8(x)       htonb(x)

+#define A_CPU2BE16(x)      htons(x)

+#define A_CPU2BE32(x)      htonl(x)

+

+#define A_MEMCPY(dst, src, len)         memcpy((A_UINT8 *)(dst), (src), (len))

+#define A_MEMZERO(addr, len)            memset(addr, 0, len)

+#define A_MEMCMP(addr1, addr2, len)     memcmp((addr1), (addr2), (len))

+

+#ifdef AR6K_ALLOC_DEBUG

+#define a_meminfo_add(p, s)  __a_meminfo_add(p, s, __func__, __LINE)

+void __a_meminfo_add(void *ptr, size_t msize, const char *func, int lineno);

+void  a_meminfo_del(void *ptr);

+void* a_mem_alloc(size_t msize, int type, const char *func, int lineno);

+void a_mem_free(void *ptr);

+void a_meminfo_report(int clear);

+A_BOOL a_meminfo_find(void *ptr);

+#define A_MALLOC(size)                  a_mem_alloc((size), GFP_KERNEL, __func__, __LINE__)

+#define A_MALLOC_NOWAIT(size)           a_mem_alloc((size), GFP_ATOMIC, __func__, __LINE__)

+#define A_FREE(addr)                    a_mem_free(addr)

+#define A_NETIF_RX(skb)                 do { a_meminfo_del(skb);  netif_rx(skb); } while (0)

+#define A_NETIF_RX_NI(skb)              do { a_meminfo_del(skb);  netif_rx_ni(skb); } while (0)

+#else

+#define a_meminfo_report(_c)

+#define A_MALLOC(size)                  kmalloc((size), GFP_KERNEL)

+#define A_MALLOC_NOWAIT(size)           kmalloc((size), GFP_ATOMIC)

+#define A_FREE(addr)                    kfree(addr)

+#define A_NETIF_RX(skb)                 netif_rx(skb)

+#define A_NETIF_RX_NI(skb)              netif_rx_ni(skb)

+#endif

+

+#if defined(ANDROID_ENV) && defined(CONFIG_ANDROID_LOGGER)

+extern unsigned int enablelogcat;

+extern int android_logger_lv(void* module, int mask);

+enum logidx { LOG_MAIN_IDX = 0 };

+extern int logger_write(const enum logidx idx, 

+                const unsigned char prio,

+                const char __kernel * const tag,

+                const char __kernel * const fmt,

+                ...);

+#define A_ANDROID_PRINTF(mask, module, tags, args...) do {  \

+    if (enablelogcat) \

+        logger_write(LOG_MAIN_IDX, android_logger_lv(module, mask), tags, args); \

+    else \

+        printk(KERN_ALERT args); \

+} while (0)

+#ifdef DEBUG

+#define A_LOGGER_MODULE_NAME(x) #x

+#define A_LOGGER(mask, mod, args...) \

+    A_ANDROID_PRINTF(mask, &GET_ATH_MODULE_DEBUG_VAR_NAME(mod), "ar6k_" A_LOGGER_MODULE_NAME(mod), args);

+#endif 

+#define A_PRINTF(args...) A_ANDROID_PRINTF(ATH_DEBUG_INFO, NULL, "ar6k_driver", args)

+#else

+#define A_LOGGER(mask, mod, args...)    printk(KERN_ALERT args)

+#define A_PRINTF(args...)               printk(KERN_ALERT args)

+#endif /* ANDROID */

+#define A_PRINTF_LOG(args...)           printk(args)

+#define A_SPRINTF(buf, args...)			sprintf (buf, args)

+

+/* Mutual Exclusion */

+typedef spinlock_t                      A_MUTEX_T;

+#define A_MUTEX_INIT(mutex)             spin_lock_init(mutex)

+#define A_MUTEX_LOCK(mutex)             spin_lock_bh(mutex)

+#define A_MUTEX_UNLOCK(mutex)           spin_unlock_bh(mutex)

+#define A_IS_MUTEX_VALID(mutex)         TRUE  /* okay to return true, since A_MUTEX_DELETE does nothing */

+#define A_MUTEX_DELETE(mutex)           /* spin locks are not kernel resources so nothing to free.. */

+

+/* Get current time in ms adding a constant offset (in ms) */

+#define A_GET_MS(offset)    \

+	(((jiffies / HZ) * 1000) + (offset))

+

+/*

+ * Timer Functions

+ */

+#define A_MDELAY(msecs)                 mdelay(msecs)

+typedef struct timer_list               A_TIMER;

+

+#define A_INIT_TIMER(pTimer, pFunction, pArg) do {              \

+    init_timer(pTimer);                                         \

+    (pTimer)->function = (pFunction);                           \

+    (pTimer)->data   = (unsigned long)(pArg);                   \

+} while (0)

+

+/*

+ * Start a Timer that elapses after 'periodMSec' milli-seconds

+ * Support is provided for a one-shot timer. The 'repeatFlag' is

+ * ignored.

+ */

+#define A_TIMEOUT_MS(pTimer, periodMSec, repeatFlag) do {                   \

+    if (repeatFlag) {                                                       \

+        printk("\n" __FILE__ ":%d: Timer Repeat requested\n",__LINE__);     \

+        panic("Timer Repeat");                                              \

+    }                                                                       \

+    mod_timer((pTimer), jiffies + HZ * (periodMSec) / 1000);                \

+} while (0)

+

+/*

+ * Cancel the Timer. 

+ */

+#define A_UNTIMEOUT(pTimer) do {                                \

+    del_timer((pTimer));                                        \

+} while (0)

+

+#define A_DELETE_TIMER(pTimer) do {                             \

+} while (0)

+

+define A_WAKE_UP(head)                 wake_up(head)

+

+#ifdef DEBUG

+extern unsigned int panic_on_assert;

+#define A_ASSERT(expr)  \

+    if (!(expr)) {   \

+        printk(KERN_ALERT"Debug Assert Caught, File %s, Line: %d, Test:%s \n",__FILE__, __LINE__,#expr); \

+        if (panic_on_assert) panic(#expr);                                                               \

+    }

+#else

+#define A_ASSERT(expr)

+#endif /* DEBUG */

+

+#ifdef ANDROID_ENV

+struct firmware;

+int android_request_firmware(const struct firmware **firmware_p, const char *filename,

+                     struct device *device);

+void android_release_firmware(const struct firmware *firmware);

+#define A_REQUEST_FIRMWARE(_ppf, _pfile, _dev) android_request_firmware(_ppf, _pfile, _dev)

+#define A_RELEASE_FIRMWARE(_pf) android_release_firmware(_pf)

+#else

+#define A_REQUEST_FIRMWARE(_ppf, _pfile, _dev) request_firmware(_ppf, _pfile, _dev)

+#define A_RELEASE_FIRMWARE(_pf) release_firmware(_pf)

+#endif 

+

+/*

+ * Initialization of the network buffer subsystem

+ */

+#define A_NETBUF_INIT()

+

+/*

+ * Network buffer queue support

+ */

+typedef struct sk_buff_head A_NETBUF_QUEUE_T;

+

+#define A_NETBUF_QUEUE_INIT(q)  \

+    a_netbuf_queue_init(q)

+

+#define A_NETBUF_ENQUEUE(q, pkt) \

+    a_netbuf_enqueue((q), (pkt))

+#define A_NETBUF_PREQUEUE(q, pkt) \

+    a_netbuf_prequeue((q), (pkt))

+#define A_NETBUF_DEQUEUE(q) \

+    (a_netbuf_dequeue(q))

+#define A_NETBUF_QUEUE_SIZE(q)  \

+    a_netbuf_queue_size(q)

+#define A_NETBUF_QUEUE_EMPTY(q) \

+    a_netbuf_queue_empty(q)

+

+/*

+ * Network buffer support

+ */

+#ifdef AR6K_ALLOC_DEBUG

+#define A_NETBUF_ALLOC(size) \

+    a_netbuf_alloc(size, __func__, __LINE__)

+#define A_NETBUF_ALLOC_RAW(size) \

+    a_netbuf_alloc_raw(size, __func__, __LINE__)

+#define A_NETBUF_CHECK(bufPtr) \

+    a_netbuf_check(bufPtr, __func__, __LINE__)

+#else

+#define A_NETBUF_ALLOC(size) \

+    a_netbuf_alloc(size)

+#define A_NETBUF_ALLOC_RAW(size) \

+    a_netbuf_alloc_raw(size)

+#endif /* AR6K_ALLOC_DEBUG */

+#define A_NETBUF_FREE(bufPtr) \

+    a_netbuf_free(bufPtr)

+#define A_NETBUF_DATA(bufPtr) \

+    a_netbuf_to_data(bufPtr)

+#define A_NETBUF_LEN(bufPtr) \

+    a_netbuf_to_len(bufPtr)

+#define A_NETBUF_PUSH(bufPtr, len) \

+    a_netbuf_push(bufPtr, len)

+#define A_NETBUF_PUT(bufPtr, len) \

+    a_netbuf_put(bufPtr, len)

+#define A_NETBUF_TRIM(bufPtr,len) \

+    a_netbuf_trim(bufPtr, len)

+#define A_NETBUF_PULL(bufPtr, len) \

+    a_netbuf_pull(bufPtr, len)

+#define A_NETBUF_HEADROOM(bufPtr)\

+    a_netbuf_headroom(bufPtr)

+#define A_NETBUF_SETLEN(bufPtr,len) \

+    a_netbuf_setlen(bufPtr, len)

+

+/* Add data to end of a buffer  */

+#define A_NETBUF_PUT_DATA(bufPtr, srcPtr,  len) \

+    a_netbuf_put_data(bufPtr, srcPtr, len) 

+

+/* Add data to start of the  buffer */

+#define A_NETBUF_PUSH_DATA(bufPtr, srcPtr,  len) \

+    a_netbuf_push_data(bufPtr, srcPtr, len) 

+

+/* Remove data at start of the buffer */

+#define A_NETBUF_PULL_DATA(bufPtr, dstPtr, len) \

+    a_netbuf_pull_data(bufPtr, dstPtr, len) 

+

+/* Remove data from the end of the buffer */

+#define A_NETBUF_TRIM_DATA(bufPtr, dstPtr, len) \

+    a_netbuf_trim_data(bufPtr, dstPtr, len) 

+

+/* View data as "size" contiguous bytes of type "t" */

+#define A_NETBUF_VIEW_DATA(bufPtr, t, size) \

+    (t )( ((struct skbuf *)(bufPtr))->data)

+

+/* return the beginning of the headroom for the buffer */

+#define A_NETBUF_HEAD(bufPtr) \

+        ((((struct sk_buff *)(bufPtr))->head))

+    

+/*

+ * OS specific network buffer access routines

+ */

+#ifdef AR6K_ALLOC_DEBUG

+void *a_netbuf_alloc(int size, const char *func, int lineno);

+void *a_netbuf_alloc_raw(int size, const char *func, int lineno);

+void a_netbuf_check(void *bufPtr, const char *func, int lineno); 

+#else

+void *a_netbuf_alloc(int size);

+void *a_netbuf_alloc_raw(int size);

+#endif

+void a_netbuf_free(void *bufPtr);

+void *a_netbuf_to_data(void *bufPtr);

+A_UINT32 a_netbuf_to_len(void *bufPtr);

+A_STATUS a_netbuf_push(void *bufPtr, A_INT32 len);

+A_STATUS a_netbuf_push_data(void *bufPtr, char *srcPtr, A_INT32 len);

+A_STATUS a_netbuf_put(void *bufPtr, A_INT32 len);

+A_STATUS a_netbuf_put_data(void *bufPtr, char *srcPtr, A_INT32 len);

+A_STATUS a_netbuf_pull(void *bufPtr, A_INT32 len);

+A_STATUS a_netbuf_pull_data(void *bufPtr, char *dstPtr, A_INT32 len);

+A_STATUS a_netbuf_trim(void *bufPtr, A_INT32 len);

+A_STATUS a_netbuf_trim_data(void *bufPtr, char *dstPtr, A_INT32 len);

+A_STATUS a_netbuf_setlen(void *bufPtr, A_INT32 len);

+A_INT32 a_netbuf_headroom(void *bufPtr);

+void a_netbuf_enqueue(A_NETBUF_QUEUE_T *q, void *pkt);

+void a_netbuf_prequeue(A_NETBUF_QUEUE_T *q, void *pkt);

+void *a_netbuf_dequeue(A_NETBUF_QUEUE_T *q);

+int a_netbuf_queue_size(A_NETBUF_QUEUE_T *q);

+int a_netbuf_queue_empty(A_NETBUF_QUEUE_T *q);

+int a_netbuf_queue_empty(A_NETBUF_QUEUE_T *q);

+void a_netbuf_queue_init(A_NETBUF_QUEUE_T *q);

+

+/*

+ * Kernel v.s User space functions

+ */

+A_UINT32 a_copy_to_user(void *to, const void *from, A_UINT32 n);

+A_UINT32 a_copy_from_user(void *to, const void *from, A_UINT32 n);

+

+/* In linux, WLAN Rx and Tx run in different contexts, so no need to check

+ * for any commands/data queued for WLAN */

+#define A_CHECK_DRV_TX()   

+             

+#define A_GET_CACHE_LINE_BYTES()    L1_CACHE_BYTES

+

+#define A_CACHE_LINE_PAD            128

+

+static inline void *A_ALIGN_TO_CACHE_LINE(void *ptr) {   

+    return (void *)L1_CACHE_ALIGN((unsigned long)ptr);

+}

+   

+#else /* __KERNEL__ */

+

+#ifdef __GNUC__

+#define __ATTRIB_PACK           __attribute__ ((packed))

+#define __ATTRIB_PRINTF         __attribute__ ((format (printf, 1, 2)))

+#define __ATTRIB_NORETURN       __attribute__ ((noreturn))

+#ifndef INLINE

+#define INLINE                  __inline__

+#endif

+#else /* Not GCC */

+#define __ATTRIB_PACK

+#define __ATTRIB_PRINTF

+#define __ATTRIB_NORETURN

+#ifndef INLINE

+#define INLINE                  __inline

+#endif

+#endif /* End __GNUC__ */

+

+#define PREPACK

+#define POSTPACK                __ATTRIB_PACK

+

+#define A_MEMCPY(dst, src, len)         memcpy((dst), (src), (len))

+#define A_MEMZERO(addr, len)            memset((addr), 0, (len))

+#define A_MEMCMP(addr1, addr2, len)     memcmp((addr1), (addr2), (len))

+#define A_MALLOC(size)                  malloc(size)

+#define A_FREE(addr)                    free(addr)

+

+#ifdef ANDROID

+#ifndef err

+#include <errno.h>

+#define err(_s, args...) do { \

+    fprintf(stderr, "%s: line %d ", __FILE__, __LINE__); \

+    fprintf(stderr, args); fprintf(stderr, ": %d\n", errno); \

+    exit(_s); } while (0)

+#endif

+#else

+#include <err.h>

+#endif

+

+#endif /* __KERNEL__ */

+

+#endif /* _OSAPI_LINUX_H_ */

diff --git a/ath6kl-wmiconfig/include/pkt_log.h b/ath6kl-wmiconfig/include/pkt_log.h
new file mode 100755
index 0000000..a542a91
--- /dev/null
+++ b/ath6kl-wmiconfig/include/pkt_log.h
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef __PKT_LOG_H__

+#define __PKT_LOG_H__

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+

+/* Pkt log info */

+typedef PREPACK struct pkt_log_t {

+    struct info_t {

+        A_UINT16    st;

+        A_UINT16    end;

+        A_UINT16    cur;

+    }info[4096];

+    A_UINT16    last_idx;

+}POSTPACK PACKET_LOG;

+

+

+#ifdef __cplusplus

+}

+#endif

+#endif  /* __PKT_LOG_H__ */

diff --git a/ath6kl-wmiconfig/include/testcmd.h b/ath6kl-wmiconfig/include/testcmd.h
new file mode 100755
index 0000000..20f58c9
--- /dev/null
+++ b/ath6kl-wmiconfig/include/testcmd.h
@@ -0,0 +1,263 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+

+#ifndef  TESTCMD_H_

+#define  TESTCMD_H_

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#ifdef AR6002_REV2

+#define TCMD_MAX_RATES 12

+#else

+#define TCMD_MAX_RATES 28

+#endif

+

+#define WMI_CMD_ID_SIZE   4

+#define WMI_CMDS_SIZE_MAX 2048

+#define TC_CMDS_GAP       16

+// should add up to the same size as buf[WMI_CMDS_SIZE_MAX]

+//#define TC_CMDS_SIZE_MAX  (WMI_CMDS_SIZE_MAX - sizeof(TC_CMDS_HDR) - WMI_CMD_ID_SIZE - TC_CMDS_GAP)  

+#define TC_CMDS_SIZE_MAX  256

+

+typedef enum {

+    ZEROES_PATTERN = 0,

+    ONES_PATTERN,

+    REPEATING_10,

+    PN7_PATTERN,

+    PN9_PATTERN,

+    PN15_PATTERN

+}TX_DATA_PATTERN;

+

+/* Continous tx

+   mode : TCMD_CONT_TX_OFF - Disabling continous tx

+          TCMD_CONT_TX_SINE - Enable continuous unmodulated tx

+          TCMD_CONT_TX_FRAME- Enable continuous modulated tx

+   freq : Channel freq in Mhz. (e.g 2412 for channel 1 in 11 g)

+dataRate: 0 - 1 Mbps

+          1 - 2 Mbps

+          2 - 5.5 Mbps

+          3 - 11 Mbps

+          4 - 6 Mbps

+          5 - 9 Mbps

+          6 - 12 Mbps

+          7 - 18 Mbps

+          8 - 24 Mbps

+          9 - 36 Mbps

+         10 - 28 Mbps

+         11 - 54 Mbps

+  txPwr: twice the Tx power in dBm, actual dBm values of [5 -11] for unmod Tx,

+      [5-14] for mod Tx

+antenna:  1 - one antenna

+          2 - two antenna

+Note : Enable/disable continuous tx test cmd works only when target is awake.

+*/

+

+typedef enum {

+    TCMD_CONT_TX_OFF = 0,

+    TCMD_CONT_TX_SINE,

+    TCMD_CONT_TX_FRAME,

+    TCMD_CONT_TX_TX99,

+    TCMD_CONT_TX_TX100

+} TCMD_CONT_TX_MODE;

+

+typedef enum {

+    TCMD_WLAN_MODE_NOHT = 0,

+    TCMD_WLAN_MODE_HT20 = 1,

+    TCMD_WLAN_MODE_HT40PLUS = 2,

+    TCMD_WLAN_MODE_HT40MINUS = 3,

+    TCMD_WLAN_MODE_CCK = 4,

+

+    TCMD_WLAN_MODE_MAX,

+    TCMD_WLAN_MODE_INVALID = TCMD_WLAN_MODE_MAX,

+

+} TCMD_WLAN_MODE;

+

+typedef enum {

+    TPC_TX_PWR = 0,

+    TPC_FORCED_GAIN,

+    TPC_TGT_PWR

+} TPC_TYPE;

+

+typedef PREPACK struct {

+    A_UINT32                testCmdId;

+    A_UINT32                mode;

+    A_UINT32                freq;

+    A_UINT32                dataRate;

+    A_INT32                 txPwr;

+    A_UINT32                antenna;

+    A_UINT32                enANI;

+    A_UINT32                scramblerOff;

+    A_UINT32                aifsn;

+    A_UINT16                pktSz;

+    A_UINT16                txPattern;

+    A_UINT32                shortGuard;

+    A_UINT32                numPackets;

+    A_UINT32                wlanMode;

+    A_UINT32                tpcm;

+} POSTPACK TCMD_CONT_TX;

+

+#define TCMD_TXPATTERN_ZERONE                 0x1

+#define TCMD_TXPATTERN_ZERONE_DIS_SCRAMBLE    0x2

+

+/* Continuous Rx

+ act: TCMD_CONT_RX_PROMIS - promiscuous mode (accept all incoming frames)

+      TCMD_CONT_RX_FILTER - filter mode (accept only frames with dest

+                                             address equal specified

+                                             mac address (set via act =3)

+      TCMD_CONT_RX_REPORT  off mode  (disable cont rx mode and get the

+                                          report from the last cont

+                                          Rx test)

+

+     TCMD_CONT_RX_SETMAC - set MacAddr mode (sets the MAC address for the

+                                                 target. This Overrides

+                                                 the default MAC address.)

+

+*/

+typedef enum {

+    TCMD_CONT_RX_PROMIS =0,

+    TCMD_CONT_RX_FILTER,

+    TCMD_CONT_RX_REPORT,

+    TCMD_CONT_RX_SETMAC,

+    TCMD_CONT_RX_SET_ANT_SWITCH_TABLE,

+ 

+    TC_CMD_RESP,

+} TCMD_CONT_RX_ACT;

+

+typedef PREPACK struct {

+    A_UINT32        testCmdId;

+    A_UINT32        act;

+    A_UINT32        enANI;

+    PREPACK union {

+        struct PREPACK TCMD_CONT_RX_PARA {

+            A_UINT32    freq;

+            A_UINT32    antenna;

+            A_UINT32    wlanMode;

+        } POSTPACK para;

+        struct PREPACK TCMD_CONT_RX_REPORT {

+            A_UINT32    totalPkt;

+            A_INT32     rssiInDBm;

+            A_UINT32    crcErrPkt;

+            A_UINT32    secErrPkt;

+            A_UINT16    rateCnt[TCMD_MAX_RATES];

+            A_UINT16    rateCntShortGuard[TCMD_MAX_RATES];

+        } POSTPACK report;

+        struct PREPACK TCMD_CONT_RX_MAC {

+            A_UCHAR     addr[ATH_MAC_LEN];			

+            A_UCHAR     btaddr[ATH_MAC_LEN];     

+            A_UINT16    regDmn[2];			

+            A_UINT32    otpWriteFlag;    			

+        } POSTPACK mac;

+        struct PREPACK TCMD_CONT_RX_ANT_SWITCH_TABLE {

+            A_UINT32                antswitch1;

+            A_UINT32                antswitch2;

+        }POSTPACK antswitchtable;

+    } POSTPACK u;

+} POSTPACK TCMD_CONT_RX;

+

+/* Force sleep/wake  test cmd

+ mode: TCMD_PM_WAKEUP - Wakeup the target

+       TCMD_PM_SLEEP - Force the target to sleep.

+ */

+typedef enum {

+    TCMD_PM_WAKEUP = 1, /* be consistent with target */

+    TCMD_PM_SLEEP,

+    TCMD_PM_DEEPSLEEP

+} TCMD_PM_MODE;

+

+typedef PREPACK struct {

+    A_UINT32  testCmdId;

+    A_UINT32  mode;

+} POSTPACK TCMD_PM;

+

+typedef enum {

+    TC_CMDS_VERSION_RESERVED=0,

+    TC_CMDS_VERSION_MDK,

+    TC_CMDS_VERSION_TS,

+    TC_CMDS_VERSION_LAST,

+} TC_CMDS_VERSION;

+

+typedef enum {

+    TC_CMDS_TS =0,

+    TC_CMDS_CAL,

+    TC_CMDS_TPCCAL = TC_CMDS_CAL,

+    TC_CMDS_TPCCAL_WITH_OTPWRITE,

+    TC_CMDS_OTPDUMP,

+    TC_CMDS_OTPSTREAMWRITE,    

+    TC_CMDS_EFUSEDUMP,    

+    TC_CMDS_EFUSEWRITE,    

+    TC_CMDS_READTHERMAL,

+} TC_CMDS_ACT;

+

+typedef PREPACK struct {

+    A_UINT32   testCmdId;

+    A_UINT32   act;

+    PREPACK union {

+        A_UINT32  enANI;    // to be identical to CONT_RX struct

+        struct PREPACK {

+            A_UINT16   length;

+            A_UINT8    version;

+            A_UINT8    bufLen;

+        } POSTPACK parm;

+    } POSTPACK u;

+} POSTPACK TC_CMDS_HDR;

+

+typedef PREPACK struct {

+    TC_CMDS_HDR  hdr;

+    A_UINT8      buf[TC_CMDS_SIZE_MAX];

+} POSTPACK TC_CMDS;

+

+typedef PREPACK struct {

+    A_UINT32    testCmdId;

+    A_UINT32    regAddr;

+    A_UINT32    val;

+    A_UINT16    flag;

+} POSTPACK TCMD_SET_REG;

+

+typedef enum {

+    TCMD_CONT_TX_ID,

+    TCMD_CONT_RX_ID,

+    TCMD_PM_ID,

+    TC_CMDS_ID,

+    TCMD_SET_REG_ID,

+	

+	/*For synergy purpose we added the following tcmd id but these

+	tcmd's will not go to the firmware instead we will write values 

+	to the NV area */

+	

+	TCMD_NIC_MAC = 100, 

+	TCMD_CAL_FILE_INDEX = 101,

+} TCMD_ID;

+

+typedef PREPACK struct 

+{

+    A_UINT32  testCmdId;

+    A_UINT8   mac_address[ATH_MAC_LEN];

+} POSTPACK TCMD_NIC_MAC_S;

+

+typedef PREPACK struct 

+{

+       A_UINT32  testCmdId;

+       A_UINT32   cal_file_index;

+} POSTPACK TCMD_CAL_FILE_INDEX_S;

+

+typedef PREPACK union {

+          TCMD_CONT_TX         contTx;

+          TCMD_CONT_RX         contRx;

+          TCMD_PM              pm;

+          // New test cmds from ART/MDK ...

+          TC_CMDS              tcCmds;          

+          TCMD_SET_REG setReg;

+} POSTPACK TEST_CMD;

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* TESTCMD_H_ */

+

+

diff --git a/ath6kl-wmiconfig/include/wmi.h b/ath6kl-wmiconfig/include/wmi.h
new file mode 100755
index 0000000..8655a85
--- /dev/null
+++ b/ath6kl-wmiconfig/include/wmi.h
@@ -0,0 +1,4838 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+
+/*
+ * This file contains the definitions of the WMI protocol specified in the
+ * Wireless Module Interface (WMI).  It includes definitions of all the
+ * commands and events. Commands are messages from the host to the WM.
+ * Events and Replies are messages from the WM to the host.
+ *
+ * Ownership of correctness in regards to commands
+ * belongs to the host driver and the WMI is not required to validate
+ * parameters for value, proper range, or any other checking.
+ *
+ */
+
+#ifndef _WMI_H_
+#define _WMI_H_
+
+#ifndef ATH_TARGET
+//#include "athstartpack.h"
+#endif
+
+//#include "wmix.h"
+//#include "wlan_defs.h"
+//#include "dfs_common.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HTC_PROTOCOL_VERSION    0x0002
+#define HTC_PROTOCOL_REVISION   0x0000
+
+#define WMI_PROTOCOL_VERSION    0x0002
+#define WMI_PROTOCOL_REVISION   0x0000
+
+#define ATH_MAC_LEN             6               /* length of mac in bytes */
+#define WMI_CMD_MAX_LEN         100
+#define WMI_CONTROL_MSG_MAX_LEN     256
+#define WMI_OPT_CONTROL_MSG_MAX_LEN 1536
+#define IS_ETHERTYPE(_typeOrLen)        ((_typeOrLen) >= 0x0600)
+#define RFC1042OUI      {0x00, 0x00, 0x00}
+
+#define IP_ETHERTYPE 0x0800
+
+#define WMI_IMPLICIT_PSTREAM 0xFF
+#define WMI_MAX_THINSTREAM 15
+
+#ifdef AR6002_REV2
+#define IBSS_MAX_NUM_STA          4
+#else
+#define IBSS_MAX_NUM_STA          8
+#endif
+
+#define WMI_MODE_MAX              8
+#define WMI_MAX_RATE_MASK         2
+#define WMI_NETWORK_TYPE(networkType) ((networkType) & 0x000F)
+#define WMI_CONNECTED_PHYMODE(networkType) (((networkType) & 0x0F00) >> 8)
+
+/* Max rates we'll handle */
+#define WMI_RATE_MAXSIZE       15
+/*
+ * These constants are used with A_WLAN_BAND_SET.
+ */
+#define A_BAND_24GHZ           0
+#define A_BAND_5GHZ            1
+#define A_NUM_BANDS            2
+
+PREPACK struct host_app_area_s {
+    A_UINT32 wmi_protocol_ver;
+} POSTPACK;
+
+/*
+ * Data Path
+ */
+typedef PREPACK struct {
+    A_UINT8     dstMac[ATH_MAC_LEN];
+    A_UINT8     srcMac[ATH_MAC_LEN];
+    A_UINT16    typeOrLen;
+} POSTPACK ATH_MAC_HDR;
+
+typedef PREPACK struct {
+    A_UINT8     dsap;
+    A_UINT8     ssap;
+    A_UINT8     cntl;
+    A_UINT8     orgCode[3];
+    A_UINT16    etherType;
+} POSTPACK ATH_LLC_SNAP_HDR;
+
+typedef enum {
+    DATA_MSGTYPE = 0x0,
+    CNTL_MSGTYPE,
+    SYNC_MSGTYPE,
+    OPT_MSGTYPE,
+} WMI_MSG_TYPE;
+
+
+/*
+ * Macros for operating on WMI_DATA_HDR (info) field
+ */
+
+#define WMI_DATA_HDR_MSG_TYPE_MASK  0x03
+#define WMI_DATA_HDR_MSG_TYPE_SHIFT 0
+#define WMI_DATA_HDR_UP_MASK        0x07
+#define WMI_DATA_HDR_UP_SHIFT       2
+/* In AP mode, the same bit (b5) is used to indicate Power save state in
+ * the Rx dir and More data bit state in the tx direction.
+ */
+#define WMI_DATA_HDR_PS_MASK        0x1
+#define WMI_DATA_HDR_PS_SHIFT       5
+
+#define WMI_DATA_HDR_MORE_MASK      0x1
+#define WMI_DATA_HDR_MORE_SHIFT     5
+
+typedef enum {
+    WMI_DATA_HDR_DATA_TYPE_802_3 = 0,
+    WMI_DATA_HDR_DATA_TYPE_802_11,
+    WMI_DATA_HDR_DATA_TYPE_ACL,
+} WMI_DATA_HDR_DATA_TYPE;
+
+/* Bitmap of data header flags */
+typedef enum {
+    WMI_DATA_HDR_FLAGS_MORE = 0x1,
+    WMI_DATA_HDR_FLAGS_EOSP = 0x2,
+} WMI_DATA_HDR_FLAGS;
+
+#define WMI_DATA_HDR_DATA_TYPE_MASK     0x3
+#define WMI_DATA_HDR_DATA_TYPE_SHIFT    6
+
+#define WMI_DATA_HDR_GET_RSSI(h) ((h)->rssi)
+
+#define WMI_DATA_HDR_SET_MORE_BIT(h) ((h)->info |= (WMI_DATA_HDR_MORE_MASK << WMI_DATA_HDR_MORE_SHIFT))
+#define WMI_DATA_HDR_HAS_MORE_BIT(h) ((h)->info & (WMI_DATA_HDR_MORE_MASK << WMI_DATA_HDR_MORE_SHIFT))
+
+#define WMI_DATA_HDR_IS_MSG_TYPE(h, t)  (((h)->info & (WMI_DATA_HDR_MSG_TYPE_MASK)) == (t))
+#define WMI_DATA_HDR_SET_MSG_TYPE(h, t) (h)->info = (((h)->info & ~(WMI_DATA_HDR_MSG_TYPE_MASK << WMI_DATA_HDR_MSG_TYPE_SHIFT)) | (t << WMI_DATA_HDR_MSG_TYPE_SHIFT))
+#define WMI_DATA_HDR_GET_UP(h)    (((h)->info >> WMI_DATA_HDR_UP_SHIFT) & WMI_DATA_HDR_UP_MASK)
+#define WMI_DATA_HDR_SET_UP(h, p) (h)->info = (((h)->info & ~(WMI_DATA_HDR_UP_MASK << WMI_DATA_HDR_UP_SHIFT)) | (p << WMI_DATA_HDR_UP_SHIFT))
+
+#define WMI_DATA_HDR_GET_DATA_TYPE(h)   (((h)->info >> WMI_DATA_HDR_DATA_TYPE_SHIFT) & WMI_DATA_HDR_DATA_TYPE_MASK)
+#define WMI_DATA_HDR_SET_DATA_TYPE(h, p) (h)->info = (((h)->info & ~(WMI_DATA_HDR_DATA_TYPE_MASK << WMI_DATA_HDR_DATA_TYPE_SHIFT)) | ((p) << WMI_DATA_HDR_DATA_TYPE_SHIFT))
+
+#define WMI_DATA_HDR_GET_DOT11(h)   (WMI_DATA_HDR_GET_DATA_TYPE((h)) == WMI_DATA_HDR_DATA_TYPE_802_11)
+#define WMI_DATA_HDR_SET_DOT11(h, p) WMI_DATA_HDR_SET_DATA_TYPE((h), (p))
+
+/* Macros for operating on WMI_DATA_HDR (info2) field */
+#define WMI_DATA_HDR_SEQNO_MASK     0xFFF
+#define WMI_DATA_HDR_SEQNO_SHIFT    0
+
+#define WMI_DATA_HDR_AMSDU_MASK     0x1
+#define WMI_DATA_HDR_AMSDU_SHIFT    12
+
+#define WMI_DATA_HDR_META_MASK      0x7
+#define WMI_DATA_HDR_META_SHIFT     13
+
+#define GET_SEQ_NO(_v)                  ((_v) & WMI_DATA_HDR_SEQNO_MASK)
+#define GET_ISMSDU(_v)                  ((_v) & WMI_DATA_HDR_AMSDU_MASK)
+
+#define WMI_DATA_HDR_GET_SEQNO(h)        GET_SEQ_NO((h)->info2 >> WMI_DATA_HDR_SEQNO_SHIFT)
+#define WMI_DATA_HDR_SET_SEQNO(h, _v)   ((h)->info2 = ((h)->info2 & ~(WMI_DATA_HDR_SEQNO_MASK << WMI_DATA_HDR_SEQNO_SHIFT)) | (GET_SEQ_NO(_v) << WMI_DATA_HDR_SEQNO_SHIFT))
+
+#define WMI_DATA_HDR_IS_AMSDU(h)        GET_ISMSDU((h)->info2 >> WMI_DATA_HDR_AMSDU_SHIFT)
+#define WMI_DATA_HDR_SET_AMSDU(h, _v)   ((h)->info2 = ((h)->info2 & ~(WMI_DATA_HDR_AMSDU_MASK << WMI_DATA_HDR_AMSDU_SHIFT)) | (GET_ISMSDU(_v) << WMI_DATA_HDR_AMSDU_SHIFT))
+
+#define WMI_DATA_HDR_GET_META(h)        (((h)->info2 >> WMI_DATA_HDR_META_SHIFT) & WMI_DATA_HDR_META_MASK)
+#define WMI_DATA_HDR_SET_META(h, _v)    ((h)->info2 = ((h)->info2 & ~(WMI_DATA_HDR_META_MASK << WMI_DATA_HDR_META_SHIFT)) | ((_v) << WMI_DATA_HDR_META_SHIFT))
+
+/* Macros for operating on WMI_DATA_HDR (info3) field */
+#define WMI_DATA_HDR_DEVID_MASK      0xF
+#define WMI_DATA_HDR_DEVID_SHIFT     0
+#define GET_DEVID(_v)                ((_v) & WMI_DATA_HDR_DEVID_MASK)
+
+#define WMI_DATA_HDR_GET_DEVID(h)        (((h)->info3 >> WMI_DATA_HDR_DEVID_SHIFT) & WMI_DATA_HDR_DEVID_MASK)
+#define WMI_DATA_HDR_SET_DEVID(h, _v)   ((h)->info3 = ((h)->info3 & ~(WMI_DATA_HDR_DEVID_MASK << WMI_DATA_HDR_DEVID_SHIFT)) | (GET_DEVID(_v) << WMI_DATA_HDR_DEVID_SHIFT))
+
+#define WMI_DATA_HDR_RXFILT_SHIFT   4
+#define WMI_DATA_HDR_RXFILT_MASK    (0x1 << WMI_DATA_HDR_RXFILT_SHIFT)
+
+#define WMI_DATA_HDR_IS_RXFILTERED(h)  ((h)->info3 & WMI_DATA_HDR_RXFILT_MASK)
+#define SET_WMI_DATA_HDR_RXFILTERED(h)  (h)->info3 |= WMI_DATA_HDR_RXFILT_MASK 
+
+#define WMI_DATA_HDR_TRIGGER_MASK      0x1
+#define WMI_DATA_HDR_TRIGGER_SHIFT     4
+#define WMI_DATA_HDR_SET_TRIGGER(h, _v)   ((h)->info3 = ((h)->info3 & ~(WMI_DATA_HDR_TRIGGER_MASK << WMI_DATA_HDR_TRIGGER_SHIFT)) | ((_v) << WMI_DATA_HDR_TRIGGER_SHIFT))
+#define WMI_DATA_HDR_IS_TRIGGER(h)       ((((h)->info3 >> WMI_DATA_HDR_TRIGGER_SHIFT) & WMI_DATA_HDR_TRIGGER_MASK) == WMI_DATA_HDR_TRIGGER_MASK)
+
+#define WMI_DATA_HDR_EOSP_MASK      WMI_DATA_HDR_TRIGGER_MASK
+#define WMI_DATA_HDR_EOSP_SHIFT     WMI_DATA_HDR_TRIGGER_SHIFT
+
+#define WMI_DATA_HDR_SET_EOSP_BIT(h) ((h)->info3 |= (WMI_DATA_HDR_EOSP_MASK << WMI_DATA_HDR_EOSP_SHIFT))
+#define WMI_DATA_HDR_HAS_EOSP_BIT(h) ((h)->info3 & (WMI_DATA_HDR_EOSP_MASK << WMI_DATA_HDR_EOSP_SHIFT))
+
+
+#define WMI_DATA_HDR_CCX_LINKTEST_MASK      0x1
+#define WMI_DATA_HDR_CCX_LINKTEST_SHIFT     5
+#define WMI_DATA_HDR_SET_CCX_LINKTEST_BIT(h) ((h)->info3 |= (WMI_DATA_HDR_CCX_LINKTEST_MASK << WMI_DATA_HDR_CCX_LINKTEST_SHIFT))
+#define WMI_DATA_HDR_HAS_CCX_LINKTEST_BIT(h) ((h)->info3 & (WMI_DATA_HDR_CCX_LINKTEST_MASK << WMI_DATA_HDR_CCX_LINKTEST_SHIFT))
+
+#define WMI_DATA_HDR_PAD_BEFORE_DATA_MASK               0xFF
+#define WMI_DATA_HDR_PAD_BEFORE_DATA_SHIFT              0x8
+#define GET_PAD_BEFORE_DATA_START(_v)                   ((_v) & WMI_DATA_HDR_PAD_BEFORE_DATA_MASK)
+
+#define WMI_DATA_HDR_GET_PAD_BEFORE_DATA_START(h)       (((h)->info3 >> WMI_DATA_HDR_PAD_BEFORE_DATA_SHIFT) & WMI_DATA_HDR_PAD_BEFORE_DATA_MASK)
+#define WMI_DATA_HDR_SET_PAD_BEFORE_DATA_START(h, _v)   ((h)->info3 = ((h)->info3 & ~(WMI_DATA_HDR_PAD_BEFORE_DATA_MASK << WMI_DATA_HDR_PAD_BEFORE_DATA_SHIFT)) | (GET_PAD_BEFORE_DATA_START(_v) << WMI_DATA_HDR_PAD_BEFORE_DATA_SHIFT))
+
+typedef PREPACK struct {
+    A_INT8      rssi;
+    A_UINT8     info;               /* usage of 'info' field(8-bit):
+                                     *  b1:b0       - WMI_MSG_TYPE
+                                     *  b4:b3:b2    - UP(tid)
+                                     *  b5          - Used in AP mode. More-data in tx dir, PS in rx.
+                                     *  b7:b6       -  Dot3 header(0),
+                                     *                 Dot11 Header(1),
+                                     *                 ACL data(2)
+                                     */
+
+    A_UINT16    info2;              /* usage of 'info2' field(16-bit):
+                                     * b11:b0       - seq_no
+                                     * b12          - A-MSDU?
+                                     * b15:b13      - META_DATA_VERSION 0 - 7
+                                     */
+    A_UINT16    info3;              /* b3:b2:b1:b0  - device id
+                                     * b4           - Used in AP mode. uAPSD trigger in rx, EOSP in tx
+                                     * b7:b5        - unused?
+                                     * b15:b8       - pad before data start(irrespective of meta version)
+                                     */
+} POSTPACK WMI_DATA_HDR;
+
+/*
+ *  TX META VERSION DEFINITIONS
+ */
+#define WMI_MAX_TX_META_SZ  (12)
+#define WMI_MAX_TX_META_VERSION (7)
+#define WMI_META_VERSION_1 (0x01)
+#define WMI_META_VERSION_2 (0X02)
+#define WMI_META_VERSION_3 (0x03)
+#define WMI_META_VERSION_4 (0x04)
+
+#define WMI_ACL_TO_DOT11_HEADROOM   36
+
+#if 0 /* removed to prevent compile errors for WM.. */
+typedef PREPACK struct {
+/* intentionally empty. Default version is no meta data. */
+} POSTPACK WMI_TX_META_V0;
+#endif
+
+typedef PREPACK struct {
+    A_UINT8     pktID;           /* The packet ID to identify the tx request */
+    A_UINT8     ratePolicyID;    /* The rate policy to be used for the tx of this frame */
+} POSTPACK WMI_TX_META_V1;
+
+
+#define WMI_CSUM_DIR_TX (0x1)
+#define TX_CSUM_CALC_FILL (0x1)
+typedef PREPACK struct {
+    A_UINT8    csumStart;       /*Offset from start of the Payload(SNAP header) for csum calculation to begin */
+    A_UINT8    csumDest;        /*Offset from start of Payload(SNAP header) where final csum goes*/
+    A_UINT8     csumFlags;    /*Flag for check sum engine to be offloaded to device*/
+} POSTPACK WMI_TX_META_V2;
+
+/* WMI_META_TX_FLAG... are used as TX qualifiers for frames containing WMI_TX_RATE_SCHEDULE in the
+ * meta data.  0 or more of these flags should be assigned to the flags member of the schedule. */
+#define WMI_META_TX_FLAG_ACK            0x01 // frame needs ACK response from receiver
+#define WMI_META_TX_FLAG_SET_RETRY_BIT  0x02 // device will set retry bit in MAC header for retried frames.
+#define WMI_META_TX_FLAG_SET_DURATION   0x04 // device will fill duration field in MAC header
+/* NOTE: If WMI_META_TX_FLAG_USE_PREFIX == 0 device will NOT use prefix frame.
+ *       If WMI_META_TX_FLAG_USE_PREFIX == 1 && WMI_META_TX_FLAG_PREFIX_RTS == 0 device will use CTS prefix.
+ *       If WMI_META_TX_FLAG_USE_PREFIX == 1 && WMI_META_TX_FLAG_PREFIX_RTS == 1 device will use RTS prefix.
+ */
+#define WMI_META_TX_FLAG_USE_PREFIX     0x08 // device will send either RTS or CTS frame prior to subject frame.
+#define WMI_META_TX_FLAG_PREFIX_RTS     0x10 // device will send RTS and wait for CTS prior to sending subject frame.
+#define WMI_META_TX_LOAD_TSF            0x20 // device will fill the TSF field during transmit procedure. <Beacons/probe responses>
+
+/* WMI_TX_RATE_SCHEDULE - Acts as a host-provided rate schedule to replace what would be normally determined
+ * by firmware.  This allows the host to specify what rates and attempts should be used to transmit the
+ * frame. */
+typedef PREPACK struct {
+#define WMI_TX_MAX_RATE_SERIES (4)
+    A_UINT8 rateSeries[WMI_TX_MAX_RATE_SERIES]; //rate index for each series. first invalid rate terminates series.
+    A_UINT8 trySeries[WMI_TX_MAX_RATE_SERIES]; //number of tries for each series.
+    A_UINT8 flags; // combination of WMI_META_TX_FLAG...
+    A_UINT8 accessCategory; // should be WMM_AC_BE for managment frames and multicast frames.
+    //A_UINT8 keyIndex;
+    //
+}POSTPACK WMI_TX_RATE_SCHEDULE;
+
+#ifdef TIME_BASED_DISCARD
+typedef PREPACK struct {
+    A_UINT32 txdiscardTime;
+    A_UINT8 discardDispostion;
+} POSTPACK WMI_TX_META_V4;
+#endif
+
+typedef PREPACK struct {
+    WMI_TX_RATE_SCHEDULE rateSched;
+    A_UINT8     pktID;           /* The packet ID to identify the tx request */
+} POSTPACK WMI_TX_META_V3;
+
+/*
+ *  RX META VERSION DEFINITIONS
+ */
+/* if RX meta data is present at all then the meta data field
+ *  will consume WMI_MAX_RX_META_SZ bytes of space between the
+ *  WMI_DATA_HDR and the payload. How much of the available
+ *  Meta data is actually used depends on which meta data
+ *  version is active. */
+#define WMI_MAX_RX_META_SZ  (12)
+#define WMI_MAX_RX_META_VERSION (7)
+
+#define WMI_RX_STATUS_OK            0 /* success */
+#define WMI_RX_STATUS_DECRYPT_ERR   1 /* decrypt error */
+#define WMI_RX_STATUS_MIC_ERR       2 /* tkip MIC error */
+#define WMI_RX_STATUS_ERR           3 /* undefined error */
+
+#define WMI_RX_FLAGS_AGGR           0x0001 /* part of AGGR */
+#define WMI_RX_FlAGS_STBC           0x0002 /* used STBC */
+#define WMI_RX_FLAGS_SGI            0x0004 /* used SGI */
+#define WMI_RX_FLAGS_HT             0x0008 /* is HT packet */
+/* the flags field is also used to store the CRYPTO_TYPE of the frame
+ * that value is shifted by WMI_RX_FLAGS_CRYPTO_SHIFT */
+#define WMI_RX_FLAGS_CRYPTO_SHIFT   4
+#define WMI_RX_FLAGS_CRYPTO_MASK    0x1f
+#define WMI_RX_META_GET_CRYPTO(flags) (((flags) >> WMI_RX_FLAGS_CRYPTO_SHIFT) & WMI_RX_FLAGS_CRYPTO_MASK)
+
+#if 0 /* removed to prevent compile errors for WM.. */
+typedef PREPACK struct {
+/* intentionally empty. Default version is no meta data. */
+} POSTPACK WMI_RX_META_VERSION_0;
+#endif
+
+typedef PREPACK struct {
+    A_UINT8     status; /* one of WMI_RX_STATUS_... */
+    A_UINT8     rix;    /* rate index mapped to rate at which this packet was received. */
+    A_UINT8     rssi;   /* rssi of packet */
+    A_UINT8     channel;/* rf channel during packet reception */
+    A_UINT16    flags;  /* a combination of WMI_RX_FLAGS_... */
+} POSTPACK WMI_RX_META_V1;
+
+#define RX_CSUM_VALID_FLAG (0x1)
+typedef PREPACK struct {
+    A_UINT16    csum;
+    A_UINT8     csumFlags;/* bit 0 set -partial csum valid
+                             bit 1 set -test mode */
+} POSTPACK WMI_RX_META_V2;
+
+#ifdef TIME_BASED_DISCARD
+typedef PREPACK struct {
+	A_UINT8  	discardDispostion;
+	A_UINT32	txdiscardTime;
+} POSTPACK WMI_RX_META_V4;
+#endif
+
+
+#define WMI_GET_DEVICE_ID(info1) ((info1) & 0xF)
+/* Macros for operating on WMI_CMD_HDR (info1) field */
+#define WMI_CMD_HDR_DEVID_MASK      0xF
+#define WMI_CMD_HDR_DEVID_SHIFT     0
+#define GET_CMD_DEVID(_v)           ((_v) & WMI_CMD_HDR_DEVID_MASK)
+
+#define WMI_CMD_HDR_GET_DEVID(h)        (((h)->info1 >> WMI_CMD_HDR_DEVID_SHIFT) & WMI_CMD_HDR_DEVID_MASK)
+#define WMI_CMD_HDR_SET_DEVID(h, _v)   ((h)->info1 = ((h)->info1 & ~(WMI_CMD_HDR_DEVID_MASK << WMI_CMD_HDR_DEVID_SHIFT)) | (GET_CMD_DEVID(_v) << WMI_CMD_HDR_DEVID_SHIFT))
+
+/*
+ * Control Path
+ */
+typedef PREPACK struct {
+    A_UINT16    commandId;
+/*
+ * info1 - 16 bits
+ * b03:b00 - id
+ * b15:b04 - unused
+ */
+    A_UINT16    info1;
+
+    A_UINT16    reserved;      /* For alignment */
+} POSTPACK WMI_CMD_HDR;        /* used for commands and events */
+
+/*
+ * List of Commnands
+ */
+typedef enum {
+    WMI_CONNECT_CMDID           = 0x0001,
+    WMI_RECONNECT_CMDID,
+    WMI_DISCONNECT_CMDID,
+    WMI_SYNCHRONIZE_CMDID,
+    WMI_CREATE_PSTREAM_CMDID,
+    WMI_DELETE_PSTREAM_CMDID,
+    /* WMI_START_SCAN_CMDID is to be deprecated; WMI_BEGIN_SCAN is to
+     * be used instead. The new command supports P2P mgmt operations
+     * using station interface.
+     */
+    WMI_START_SCAN_CMDID,
+    WMI_SET_SCAN_PARAMS_CMDID,
+    WMI_SET_BSS_FILTER_CMDID,
+    WMI_SET_PROBED_SSID_CMDID,               /* 10 */
+    WMI_SET_LISTEN_INT_CMDID,
+    WMI_SET_BMISS_TIME_CMDID,
+    WMI_SET_DISC_TIMEOUT_CMDID,
+    WMI_GET_CHANNEL_LIST_CMDID,
+    WMI_SET_BEACON_INT_CMDID,
+    WMI_GET_STATISTICS_CMDID,
+    WMI_SET_CHANNEL_PARAMS_CMDID,
+    WMI_SET_POWER_MODE_CMDID,
+    WMI_SET_IBSS_PM_CAPS_CMDID,
+    WMI_SET_POWER_PARAMS_CMDID,              /* 20 */
+    WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID,
+    WMI_ADD_CIPHER_KEY_CMDID,
+    WMI_DELETE_CIPHER_KEY_CMDID,
+    WMI_ADD_KRK_CMDID,
+    WMI_DELETE_KRK_CMDID,
+    WMI_SET_PMKID_CMDID,
+    WMI_SET_TX_PWR_CMDID,
+    WMI_GET_TX_PWR_CMDID,
+    WMI_SET_ASSOC_INFO_CMDID,
+    WMI_ADD_BAD_AP_CMDID,                    /* 30 */
+    WMI_DELETE_BAD_AP_CMDID,
+    WMI_SET_TKIP_COUNTERMEASURES_CMDID,
+    WMI_RSSI_THRESHOLD_PARAMS_CMDID,
+    WMI_TARGET_ERROR_REPORT_BITMASK_CMDID,
+    WMI_SET_ACCESS_PARAMS_CMDID,
+    WMI_SET_RETRY_LIMITS_CMDID,
+    WMI_SET_OPT_MODE_CMDID,
+    WMI_OPT_TX_FRAME_CMDID,
+    WMI_SET_VOICE_PKT_SIZE_CMDID,
+    WMI_SET_MAX_SP_LEN_CMDID,                /* 40 */
+    WMI_SET_ROAM_CTRL_CMDID,
+    WMI_GET_ROAM_TBL_CMDID,
+    WMI_GET_ROAM_DATA_CMDID,
+    WMI_ENABLE_RM_CMDID,
+    WMI_SET_MAX_OFFHOME_DURATION_CMDID,
+    WMI_EXTENSION_CMDID,                        /* Non-wireless extensions */
+    WMI_SNR_THRESHOLD_PARAMS_CMDID,
+    WMI_LQ_THRESHOLD_PARAMS_CMDID,
+    WMI_SET_LPREAMBLE_CMDID,
+    WMI_SET_RTS_CMDID,                       /* 50 */
+    WMI_CLR_RSSI_SNR_CMDID,
+    WMI_SET_FIXRATES_CMDID,
+    WMI_GET_FIXRATES_CMDID,
+    WMI_SET_AUTH_MODE_CMDID,
+    WMI_SET_REASSOC_MODE_CMDID,
+    WMI_SET_WMM_CMDID,
+    WMI_SET_WMM_TXOP_CMDID,
+    WMI_TEST_CMDID,
+    /* COEX AR6002 only*/
+    WMI_SET_BT_STATUS_CMDID,
+    WMI_SET_BT_PARAMS_CMDID,                /* 60 */
+
+    WMI_SET_KEEPALIVE_CMDID,
+    WMI_GET_KEEPALIVE_CMDID,
+    WMI_SET_APPIE_CMDID,
+    WMI_GET_APPIE_CMDID,
+    WMI_SET_WSC_STATUS_CMDID,
+
+    /* Wake on Wireless */
+    WMI_SET_HOST_SLEEP_MODE_CMDID,
+    WMI_SET_WOW_MODE_CMDID,
+    WMI_GET_WOW_LIST_CMDID,
+    WMI_ADD_WOW_PATTERN_CMDID,
+    WMI_DEL_WOW_PATTERN_CMDID,               /* 70 */
+
+    WMI_SET_FRAMERATES_CMDID,
+    WMI_SET_AP_PS_CMDID,
+    WMI_SET_QOS_SUPP_CMDID,
+    /* WMI_THIN_RESERVED_... mark the start and end
+     * values for WMI_THIN_RESERVED command IDs. These
+     * command IDs can be found in wmi_thin.h */
+    WMI_THIN_RESERVED_START = 0x8000,
+    WMI_THIN_RESERVED_END = 0x8fff,
+    /*
+     * Developer commands starts at 0xF000
+     */
+    WMI_SET_BITRATE_CMDID = 0xF000,
+    WMI_GET_BITRATE_CMDID,
+    WMI_SET_WHALPARAM_CMDID,
+
+
+    /*Should add the new command to the tail for compatible with
+     * etna.
+     */
+    WMI_SET_MAC_ADDRESS_CMDID,
+    WMI_SET_AKMP_PARAMS_CMDID,
+    WMI_SET_PMKID_LIST_CMDID,
+    WMI_GET_PMKID_LIST_CMDID,
+    WMI_ABORT_SCAN_CMDID,
+    WMI_SET_TARGET_EVENT_REPORT_CMDID,
+
+    // Unused
+    WMI_UNUSED1,
+    WMI_UNUSED2,
+
+    /*
+     * AP mode commands
+     */
+    WMI_AP_HIDDEN_SSID_CMDID,   /* F00B */
+    WMI_AP_SET_NUM_STA_CMDID,
+    WMI_AP_ACL_POLICY_CMDID,
+    WMI_AP_ACL_MAC_LIST_CMDID,
+    WMI_AP_CONFIG_COMMIT_CMDID,
+    WMI_AP_SET_MLME_CMDID,    /* F010 */
+    WMI_AP_SET_PVB_CMDID,
+    WMI_AP_CONN_INACT_CMDID,
+    WMI_AP_PROT_SCAN_TIME_CMDID,
+    WMI_AP_SET_COUNTRY_CMDID,
+    WMI_AP_SET_DTIM_CMDID,
+    WMI_AP_MODE_STAT_CMDID,
+
+    WMI_SET_IP_CMDID,    /* F017 */
+    WMI_SET_PARAMS_CMDID,
+    WMI_SET_MCAST_FILTER_CMDID,
+    WMI_DEL_MCAST_FILTER_CMDID,
+
+    WMI_ALLOW_AGGR_CMDID,    /* F01B */
+    WMI_ADDBA_REQ_CMDID,
+    WMI_DELBA_REQ_CMDID,
+    WMI_SET_HT_CAP_CMDID,
+    WMI_SET_HT_OP_CMDID,
+    WMI_SET_TX_SELECT_RATES_CMDID,
+    WMI_SET_TX_SGI_PARAM_CMDID,
+    WMI_SET_RATE_POLICY_CMDID,
+
+    WMI_HCI_CMD_CMDID,    /* F023 */
+    WMI_RX_FRAME_FORMAT_CMDID,
+    WMI_SET_THIN_MODE_CMDID,
+    WMI_SET_BT_WLAN_CONN_PRECEDENCE_CMDID,
+
+    WMI_AP_SET_11BG_RATESET_CMDID,     /* F027 */
+    WMI_SET_PMK_CMDID,
+    WMI_MCAST_FILTER_CMDID,
+    /* COEX CMDID AR6003*/
+    WMI_SET_BTCOEX_FE_ANT_CMDID, /* F02A */
+    WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID,
+    WMI_SET_BTCOEX_SCO_CONFIG_CMDID,
+    WMI_SET_BTCOEX_A2DP_CONFIG_CMDID,
+    WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMDID,
+    WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMDID,
+    WMI_SET_BTCOEX_DEBUG_CMDID,
+    WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID,
+    WMI_GET_BTCOEX_STATS_CMDID,
+    WMI_GET_BTCOEX_CONFIG_CMDID,
+#if !defined(AR6002_REV61) || !defined(ATH_TARGET) /* WAR for EV 89272 */
+    WMI_DFS_RESERVED,                 /* F034 */
+#endif
+    WMI_SET_DFS_MINRSSITHRESH_CMDID,
+    WMI_SET_DFS_MAXPULSEDUR_CMDID,
+    WMI_DFS_RADAR_DETECTED_CMDID,
+
+    /* P2P CMDS */
+    WMI_P2P_SET_CONFIG_CMDID,    /* F037 */
+    WMI_WPS_SET_CONFIG_CMDID,
+    WMI_SET_REQ_DEV_ATTR_CMDID,
+    WMI_P2P_FIND_CMDID,
+    WMI_P2P_STOP_FIND_CMDID,
+    WMI_P2P_GO_NEG_START_CMDID,
+    WMI_P2P_LISTEN_CMDID,
+
+
+    WMI_CONFIG_TX_MAC_RULES_CMDID,    /* F044 */
+    WMI_SET_PROMISCUOUS_MODE_CMDID,
+    WMI_RX_FRAME_FILTER_CMDID,
+    WMI_SET_CHANNEL_CMDID,
+
+    /* WAC commands */
+    WMI_ENABLE_WAC_CMDID,
+    WMI_WAC_SCAN_REPLY_CMDID,
+    WMI_WAC_CTRL_REQ_CMDID,
+
+    WMI_SET_DIV_PARAMS_CMDID,
+    WMI_GET_PMK_CMDID,
+    WMI_SET_PASSPHRASE_CMDID,
+    WMI_SEND_ASSOC_RES_CMDID,
+    WMI_SET_ASSOC_REQ_RELAY_CMDID,
+
+    /* ACS command, consists of sub-commands */
+    WMI_ACS_CTRL_CMDID,
+    WMI_SET_EXCESS_TX_RETRY_THRES_CMDID,
+    WMI_SET_TBD_TIME_CMDID, /*added for wmiconfig command for TBD */
+
+    /* Pktlog cmds */
+    WMI_PKTLOG_ENABLE_CMDID,
+    WMI_PKTLOG_DISABLE_CMDID,
+
+    /* More P2P Cmds */
+    WMI_P2P_GO_NEG_REQ_RSP_CMDID,
+    WMI_P2P_GRP_INIT_CMDID,
+    WMI_P2P_GRP_FORMATION_DONE_CMDID,
+    WMI_P2P_INVITE_CMDID,
+    WMI_P2P_INVITE_REQ_RSP_CMDID,
+    WMI_P2P_PROV_DISC_REQ_CMDID,
+    WMI_P2P_SET_CMDID,
+
+    WMI_GET_RFKILL_MODE_CMDID,
+    WMI_SET_RFKILL_MODE_CMDID,
+    WMI_AP_SET_APSD_CMDID,
+    WMI_AP_APSD_BUFFERED_TRAFFIC_CMDID,
+
+    WMI_P2P_SDPD_TX_CMDID, /* F05C */
+    WMI_P2P_STOP_SDPD_CMDID,
+    WMI_P2P_CANCEL_CMDID,
+    /* Ultra low power store / recall commands */
+    WMI_STORERECALL_CONFIGURE_CMDID,
+    WMI_STORERECALL_RECALL_CMDID,
+    WMI_STORERECALL_HOST_READY_CMDID,
+    WMI_FORCE_TARGET_ASSERT_CMDID,
+    
+    WMI_SET_PROBED_SSID_EX_CMDID,
+    WMI_SET_NETWORK_LIST_OFFLOAD_CMDID,
+    WMI_SET_ARP_NS_OFFLOAD_CMDID,
+    WMI_ADD_WOW_EXT_PATTERN_CMDID,
+    WMI_GTK_OFFLOAD_OP_CMDID,
+  
+    WMI_REMAIN_ON_CHNL_CMDID,
+    WMI_CANCEL_REMAIN_ON_CHNL_CMDID,
+    /* WMI_SEND_ACTION_CMDID is to be deprecated; WMI_SEND_MGMT_CMDID 
+     * is to be used instead. The new command supports P2P mgmt
+     * operations using station interface
+     */
+    WMI_SEND_ACTION_CMDID,
+    WMI_PROBE_REQ_REPORT_CMDID,
+    WMI_DISABLE_11B_RATES_CMDID,
+    WMI_SEND_PROBE_RESPONSE_CMDID,
+    WMI_GET_P2P_INFO_CMDID,
+    WMI_AP_JOIN_BSS_CMDID,
+
+    WMI_SMPS_ENABLE_CMDID,
+    WMI_SMPS_CONFIG_CMDID,
+    WMI_SET_RATECTRL_PARM_CMDID,
+    /*  LPL specific commands*/
+    WMI_LPL_FORCE_ENABLE_CMDID,
+    WMI_LPL_SET_POLICY_CMDID,
+    WMI_LPL_GET_POLICY_CMDID,
+    WMI_LPL_GET_HWSTATE_CMDID,
+    WMI_LPL_SET_PARAMS_CMDID,
+    WMI_LPL_GET_PARAMS_CMDID,
+
+    WMI_SET_BUNDLE_PARAM_CMDID, 
+
+    /*GreenTx specific commands*/
+    
+    WMI_GREENTX_PARAMS_CMDID,
+
+    WMI_RTT_MEASREQ_CMDID,
+    WMI_RTT_CAPREQ_CMDID,
+    WMI_RTT_STATUSREQ_CMDID,
+
+    /* WPS Commands */
+    WMI_WPS_START_CMDID,
+    WMI_GET_WPS_STATUS_CMDID,
+
+    /* More P2P commands */
+    WMI_SET_NOA_CMDID,
+    WMI_GET_NOA_CMDID,
+    WMI_SET_OPPPS_CMDID,
+    WMI_GET_OPPPS_CMDID,
+    WMI_ADD_PORT_CMDID,
+    WMI_DEL_PORT_CMDID,
+
+    /* 802.11w cmd */
+    WMI_SET_RSN_CAP_CMDID,
+    WMI_GET_RSN_CAP_CMDID,
+    WMI_SET_IGTK_CMDID,
+
+    WMI_RX_FILTER_COALESCE_FILTER_OP_CMDID,
+    WMI_RX_FILTER_SET_FRAME_TEST_LIST_CMDID,
+
+    /* Commands added to support P2P mgmt operations on top of station
+     * interface. WMI_SEND_ACTION_CMDID and WMI_START_SCAN_CMDID to be
+     * deprecated.
+     */
+    WMI_SEND_MGMT_CMDID,
+    WMI_BEGIN_SCAN_CMDID,
+    /* End of commands added to support P2P mgmt operations on station
+     * interface
+     */
+     WMI_SET_BLACK_LIST,
+     WMI_SET_MCASTRATE_CMDID,
+
+     WMI_STA_BMISS_ENHANCE_CMDID,
+
+     WMI_SET_REGDOMAIN_CMDID,
+
+     WMI_SET_RSSI_FILTER_CMDID,
+     WMI_SET_KEEPALIVE_CMDID_EXT,
+
+    WMI_VOICE_DETECTION_ENABLE_CMDID,
+
+    WMI_SET_TXE_NOTIFY_CMDID,
+
+    WMI_SET_RECOVERY_TEST_PARAMETER_CMDID,
+
+    WMI_ENABLE_SCHED_SCAN,
+
+WMI_DISABLE_BCAST_IN_PM_CMDID = 0xf200,
+
+} WMI_COMMAND_ID;
+
+/*
+ * Frame Types
+ */
+typedef enum {
+    WMI_FRAME_BEACON        =   0,
+    WMI_FRAME_PROBE_REQ,
+    WMI_FRAME_PROBE_RESP,
+    WMI_FRAME_ASSOC_REQ,
+    WMI_FRAME_ASSOC_RESP,
+    WMI_NUM_MGMT_FRAME
+} WMI_MGMT_FRAME_TYPE;
+
+/*
+ * Connect Command
+ */
+typedef enum {
+    INFRA_NETWORK       = 0x01,
+    ADHOC_NETWORK       = 0x02,
+    ADHOC_CREATOR       = 0x04,
+    AP_NETWORK          = 0x10,
+    NETWORK_CONNECTED_USING_WPS = 0x20,
+} NETWORK_TYPE;
+
+typedef enum {
+    SUBTYPE_NONE,
+    SUBTYPE_BT,
+    SUBTYPE_P2PDEV,
+    SUBTYPE_P2PCLIENT,
+    SUBTYPE_P2PGO,
+} NETWORK_SUBTYPE;
+
+typedef enum {
+    OPEN_AUTH           = 0x01,
+    SHARED_AUTH         = 0x02,
+    LEAP_AUTH           = 0x04,  /* different from IEEE_AUTH_MODE definitions */
+} DOT11_AUTH_MODE;
+
+typedef enum {
+    WMI_NONE_AUTH           = 0x01,
+    WMI_WPA_AUTH            = 0x02,
+    WMI_WPA2_AUTH           = 0x04,
+    WMI_WPA_PSK_AUTH        = 0x08,
+    WMI_WPA2_PSK_AUTH       = 0x10,
+    WMI_WPA_AUTH_CCKM       = 0x20,
+    WMI_WPA2_AUTH_CCKM      = 0x40,
+} AUTH_MODE;
+
+typedef enum {
+    NONE_CRYPT          = 0x01,
+    WEP_CRYPT           = 0x02,
+    TKIP_CRYPT          = 0x04,
+    AES_CRYPT           = 0x08,
+#ifdef WAPI_ENABLE
+    WAPI_CRYPT          = 0x10,
+#endif /*WAPI_ENABLE*/
+} CRYPTO_TYPE;
+
+#define WMI_MIN_CRYPTO_TYPE NONE_CRYPT
+#define WMI_MAX_CRYPTO_TYPE (AES_CRYPT + 1)
+
+#ifdef WAPI_ENABLE
+#undef WMI_MAX_CRYPTO_TYPE
+#define WMI_MAX_CRYPTO_TYPE (WAPI_CRYPT + 1)
+#endif /* WAPI_ENABLE */
+
+#ifdef WAPI_ENABLE
+#define IW_ENCODE_ALG_SM4       0x20
+/*
+ * Defined this to be some very high bit because it is less likely to be
+ * clobbered by future changes to the kernel's wireless.h file
+*/
+#define IW_AUTH_CIPHER_SMS4     0x40000000
+#endif
+
+#define WMI_MIN_KEY_INDEX   0
+#define WMI_MAX_KEY_INDEX   3
+
+#ifdef IEEE80211W
+#undef WMI_MAX_KEY_INDEX
+#define WMI_MAX_KEY_INDEX   5
+#endif
+
+#ifdef WAPI_ENABLE
+#undef WMI_MAX_KEY_INDEX
+#define WMI_MAX_KEY_INDEX   7 /* wapi grpKey 0-3, prwKey 4-7 */
+#endif /* WAPI_ENABLE */
+
+#define WMI_MAX_KEY_LEN     32
+
+#define WMI_MAX_SSID_LEN    32
+
+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,
+    CONNECT_CSA_FOLLOW_BSS              = 0x0020,
+    CONNECT_DO_WPA_OFFLOAD              = 0x0040,
+    CONNECT_DO_NOT_DEAUTH               = 0x0080,
+    CONNECT_WPS_FLAG                    = 0x0100,
+    /* AP configuration flags */
+    AP_NO_DISASSOC_UPON_DEAUTH          = 0x10000,
+    AP_HOSTPAL_SUPPORT                  = 0x20000
+} WMI_CONNECT_CTRL_FLAGS_BITS;
+
+#define DEFAULT_CONNECT_CTRL_FLAGS    (CONNECT_CSA_FOLLOW_BSS)
+
+typedef PREPACK struct {
+    A_UINT8     networkType;
+    A_UINT8     dot11AuthMode;
+    A_UINT8     authMode;
+    A_UINT8     pairwiseCryptoType;
+    A_UINT8     pairwiseCryptoLen;
+    A_UINT8     groupCryptoType;
+    A_UINT8     groupCryptoLen;
+    A_UINT8     ssidLength;
+    A_UCHAR     ssid[WMI_MAX_SSID_LEN];
+    A_UINT16    channel;
+    A_UINT8     bssid[ATH_MAC_LEN];
+    A_UINT32    ctrl_flags;
+    A_UINT8     networkSubtype;
+} POSTPACK WMI_CONNECT_CMD;
+
+
+typedef PREPACK struct {
+    A_UINT32 divIdleTime;
+    A_UINT8   antRssiThresh;
+    A_UINT8   divEnable;
+    A_UINT16 active_treshold_rate;
+} POSTPACK WMI_DIV_PARAMS_CMD;
+
+/*
+ * WMI_RECONNECT_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT16    channel;                    /* hint */
+    A_UINT8     bssid[ATH_MAC_LEN];         /* mandatory if set */
+} POSTPACK WMI_RECONNECT_CMD;
+
+/*
+ * WMI_SET_PMK_CMDID
+ */
+#define WMI_PMK_LEN     32
+typedef PREPACK struct {
+    A_UINT8 pmk[WMI_PMK_LEN];
+    A_UINT8 pmk_len;
+} POSTPACK WMI_SET_PMK_CMD, WMI_GET_PMK_REPLY;
+
+/*
+ * WMI_SET_PASSPHRASE_CMDID
+ */
+#define WMI_PASSPHRASE_LEN    64
+typedef PREPACK struct {
+    A_UCHAR ssid[WMI_MAX_SSID_LEN];
+    A_UINT8 passphrase[WMI_PASSPHRASE_LEN];
+    A_UINT8 ssid_len;
+    A_UINT8 passphrase_len;
+} POSTPACK WMI_SET_PASSPHRASE_CMD;
+
+/*
+ * WMI_SET_EXCESS_TX_RETRY_THRES_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT32 threshold;
+} POSTPACK WMI_SET_EXCESS_TX_RETRY_THRES_CMD;
+
+/*
+ * WMI_SET_MCASTRATE_CMD
+ */
+typedef PREPACK struct {
+    A_UINT16 bitrate; /* in units of 100 Kbps */
+    		      /* Valid values are 10, 20, 55, 110, 60, 90, 120, 180,
+		       * 240, 360, 480, 540 */
+} POSTPACK WMI_SET_MCASTRATE_CMD;
+
+
+/*
+ * WMI_ADD_CIPHER_KEY_CMDID
+ */
+typedef enum {
+    PAIRWISE_USAGE      = 0x00,
+    GROUP_USAGE         = 0x01,
+    TX_USAGE            = 0x02,     /* default Tx Key - Static WEP only */
+} KEY_USAGE;
+
+/*
+ * Bit Flag
+ * Bit 0 - Initialise TSC - default is Initialize
+ */
+#define KEY_OP_INIT_TSC       0x01
+#define KEY_OP_INIT_RSC       0x02
+#ifdef WAPI_ENABLE
+#define KEY_OP_INIT_WAPIPN    0x10
+#endif /* WAPI_ENABLE */
+
+#define KEY_OP_INIT_VAL     0x03     /* Default Initialise the TSC & RSC */
+#define KEY_OP_VALID_MASK   0x03
+
+typedef PREPACK struct {
+    A_UINT8     keyIndex;
+    A_UINT8     keyType;
+    A_UINT8     keyUsage;           /* KEY_USAGE */
+    A_UINT8     keyLength;
+    A_UINT8     keyRSC[8];          /* key replay sequence counter */
+    A_UINT8     key[WMI_MAX_KEY_LEN];
+    A_UINT8     key_op_ctrl;       /* Additional Key Control information */
+    A_UINT8    key_macaddr[ATH_MAC_LEN];
+} POSTPACK WMI_ADD_CIPHER_KEY_CMD;
+
+/*
+ * WMI_DELETE_CIPHER_KEY_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     keyIndex;
+} POSTPACK WMI_DELETE_CIPHER_KEY_CMD;
+
+
+/*
+ *for Linux, it need KRK, length is 16
+ *for Win7, it need CCKM ie, length is 26
+ */
+#define WMI_KRK_LEN     16
+#define WMI_CCKM_IE_LEN 26
+/*
+ * WMI_ADD_KRK_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     krk[WMI_CCKM_IE_LEN];
+} POSTPACK WMI_ADD_KRK_CMD;
+
+/*
+ * WMI_SET_TKIP_COUNTERMEASURES_CMDID
+ */
+typedef enum {
+    WMI_TKIP_CM_DISABLE = 0x0,
+    WMI_TKIP_CM_ENABLE  = 0x1,
+} WMI_TKIP_CM_CONTROL;
+
+typedef PREPACK struct {
+    A_UINT8  cm_en;                     /* WMI_TKIP_CM_CONTROL */
+} POSTPACK WMI_SET_TKIP_COUNTERMEASURES_CMD;
+
+/*
+ * WMI_SET_PMKID_CMDID
+ */
+
+#define WMI_PMKID_LEN 16
+
+typedef enum {
+   PMKID_DISABLE = 0,
+   PMKID_ENABLE  = 1,
+} PMKID_ENABLE_FLG;
+
+typedef PREPACK struct {
+    A_UINT8     bssid[ATH_MAC_LEN];
+    A_UINT8     enable;                 /* PMKID_ENABLE_FLG */
+    A_UINT8     pmkid[WMI_PMKID_LEN];
+} POSTPACK WMI_SET_PMKID_CMD;
+
+/*
+ * WMI_START_SCAN_CMD
+ */
+typedef enum {
+    WMI_LONG_SCAN  = 0,
+    WMI_SHORT_SCAN = 1,
+} WMI_SCAN_TYPE;
+
+typedef PREPACK struct {
+    A_UINT8 nrates;
+    A_UINT8 rates[WMI_RATE_MAXSIZE];
+} POSTPACK WMI_SUPPORTED_RATES;
+
+typedef PREPACK struct {
+    A_BOOL   forceFgScan;
+    A_BOOL   isLegacy;        /* For Legacy Cisco AP compatibility */
+    A_UINT32 homeDwellTime;   /* Maximum duration in the home channel(milliseconds) */
+    A_UINT32 forceScanInterval;    /* Time interval between scans (milliseconds)*/
+    A_BOOL  no_cck;             /* Flag to force no CCK rates to be used for 
+                                   probe request frames */
+    A_UINT8  scanType;           /* WMI_SCAN_TYPE */
+    WMI_SUPPORTED_RATES supp_rates[A_NUM_BANDS]; /* Supported rates to 
+                                                    advertise in probe request 
+                                                    frames */
+    A_UINT8  numChannels;            /* how many channels follow */
+    A_UINT16 channelList[1];         /* channels in Mhz */
+} POSTPACK WMI_BEGIN_SCAN_CMD;
+
+/* WMI_START_SCAN_CMD is to be deprecated; WMI_BEGIN_SCAN_CMD is 
+ * to be used instead. The new command supports P2P mgmt operations using
+ * station interface
+ */
+typedef PREPACK struct {
+    A_BOOL   forceFgScan;
+    A_BOOL   isLegacy;        /* For Legacy Cisco AP compatibility */
+    A_UINT32 homeDwellTime;   /* Maximum duration in the home channel(milliseconds) */
+    A_UINT32 forceScanInterval;    /* Time interval between scans (milliseconds)*/
+    A_UINT8  scanType;           /* WMI_SCAN_TYPE */
+    A_UINT8  numChannels;            /* how many channels follow */
+    A_UINT16 channelList[1];         /* channels in Mhz */
+} POSTPACK WMI_START_SCAN_CMD;
+
+
+/*
+ * WMI_SET_SCAN_PARAMS_CMDID
+ */
+#define WMI_SHORTSCANRATIO_DEFAULT      3
+/*
+ *  Warning: ScanCtrlFlag value of 0xFF is used to disable all flags in WMI_SCAN_PARAMS_CMD
+ *  Do not add any more flags to WMI_SCAN_CTRL_FLAG_BITS
+ */
+typedef enum {
+    CONNECT_SCAN_CTRL_FLAGS = 0x01,    /* set if can scan in the Connect cmd */
+    SCAN_CONNECTED_CTRL_FLAGS = 0x02,  /* set if scan for the SSID it is */
+                                       /* already connected to */
+    ACTIVE_SCAN_CTRL_FLAGS = 0x04,     /* set if enable active scan */
+    ROAM_SCAN_CTRL_FLAGS = 0x08,       /* set if enable roam scan when bmiss and lowrssi */
+    REPORT_BSSINFO_CTRL_FLAGS = 0x10,   /* set if follows customer BSSINFO reporting rule */
+    ENABLE_AUTO_CTRL_FLAGS = 0x20,      /* if disabled, target doesn't
+                                          scan after a disconnect event  */
+    ENABLE_SCAN_ABORT_EVENT = 0x40      /* Scan complete event with canceled status will be generated when a scan is prempted before it gets completed */
+} WMI_SCAN_CTRL_FLAGS_BITS;
+
+#define CAN_SCAN_IN_CONNECT(flags)      (flags & CONNECT_SCAN_CTRL_FLAGS)
+#define CAN_SCAN_CONNECTED(flags)       (flags & SCAN_CONNECTED_CTRL_FLAGS)
+#define ENABLE_ACTIVE_SCAN(flags)       (flags & ACTIVE_SCAN_CTRL_FLAGS)
+#define ENABLE_ROAM_SCAN(flags)         (flags & ROAM_SCAN_CTRL_FLAGS)
+#define CONFIG_REPORT_BSSINFO(flags)     (flags & REPORT_BSSINFO_CTRL_FLAGS)
+#define IS_AUTO_SCAN_ENABLED(flags)      (flags & ENABLE_AUTO_CTRL_FLAGS)
+#define SCAN_ABORT_EVENT_ENABLED(flags) (flags & ENABLE_SCAN_ABORT_EVENT)
+
+#define DEFAULT_SCAN_CTRL_FLAGS         (CONNECT_SCAN_CTRL_FLAGS| SCAN_CONNECTED_CTRL_FLAGS| ACTIVE_SCAN_CTRL_FLAGS| ROAM_SCAN_CTRL_FLAGS | ENABLE_AUTO_CTRL_FLAGS)
+
+
+typedef PREPACK struct {
+    A_UINT16    fg_start_period;        /* seconds */
+    A_UINT16    fg_end_period;          /* seconds */
+    A_UINT16    bg_period;              /* seconds */
+    A_UINT16    maxact_chdwell_time;    /* msec */
+    A_UINT16    pas_chdwell_time;       /* msec */
+    A_UINT8     shortScanRatio;         /* how many shorts scan for one long */
+    A_UINT8     scanCtrlFlags;
+    A_UINT16    minact_chdwell_time;    /* msec */
+    A_UINT16    maxact_scan_per_ssid;   /* max active scans per ssid */
+    A_UINT32    max_dfsch_act_time;  /* msecs */
+} POSTPACK WMI_SCAN_PARAMS_CMD;
+
+typedef PREPACK struct {
+    A_UINT16   chan_index;
+    A_INT8    bang_radar;
+} POSTPACK WMI_RADAR_DETECTED_CMD;
+
+/*
+ * WMI_SET_BSS_FILTER_CMDID
+ */
+typedef enum {
+    NONE_BSS_FILTER = 0x0,              /* no beacons forwarded */
+    ALL_BSS_FILTER,                     /* all beacons forwarded */
+    PROFILE_FILTER,                     /* only beacons matching profile */
+    ALL_BUT_PROFILE_FILTER,             /* all but beacons matching profile */
+    CURRENT_BSS_FILTER,                 /* only beacons matching current BSS */
+    ALL_BUT_BSS_FILTER,                 /* all but beacons matching BSS */
+    PROBED_SSID_FILTER,                 /* beacons matching probed ssid */
+    LAST_BSS_FILTER,                    /* marker only */
+} WMI_BSS_FILTER;
+
+typedef PREPACK struct {
+    A_UINT8    bssFilter;                      /* see WMI_BSS_FILTER */
+    A_UINT8    reserved1;                      /* For alignment */
+    A_UINT16   reserved2;                      /* For alignment */
+    A_UINT32   ieMask;
+} POSTPACK WMI_BSS_FILTER_CMD;
+
+/*
+ * WMI_SET_PROBED_SSID_CMDID
+ */
+#define MAX_PROBED_SSID_INDEX   15
+
+typedef enum {
+    DISABLE_SSID_FLAG  = 0,                  /* disables entry */
+    SPECIFIC_SSID_FLAG = 0x01,               /* probes specified ssid */
+    ANY_SSID_FLAG      = 0x02,               /* probes for any ssid */
+    PASSIVE_LISTEN_SSID_FLAG = 0x04,               /* Just Listen on the Channel without Probing for any SSIDs But we wanted to use the Probed SSID List*/ 							   /* for Profile Matching */
+} WMI_SSID_FLAG;
+
+typedef PREPACK struct {
+    A_UINT8     entryIndex;                     /* 0 to MAX_PROBED_SSID_INDEX */
+    A_UINT8     flag;                           /* WMI_SSID_FLG */
+    A_UINT8     ssidLength;
+    A_UINT8     ssid[32];
+    A_UINT8     authentication;
+    A_UINT8     encryption;
+    A_UINT8     channelHint;
+    A_BOOL      bmatchcompleteprofile;         /* If this Flag is True, we do a complete profile match of SSID, AUTH, Encryption */
+} POSTPACK WMI_PROBED_SSID_CMD;
+
+/*
+ * WMI_SET_LISTEN_INT_CMDID
+ * The Listen interval is between 15 and 3000 TUs
+ */
+#define MIN_LISTEN_INTERVAL 15
+#define MAX_LISTEN_INTERVAL 5000
+#define MIN_LISTEN_BEACONS 1
+#define MAX_LISTEN_BEACONS 50
+
+typedef PREPACK struct {
+    A_UINT16     listenInterval;
+    A_UINT16     numBeacons;
+} POSTPACK WMI_LISTEN_INT_CMD;
+
+/*
+ * WMI_SET_BEACON_INT_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT16     beaconInterval;
+} POSTPACK WMI_BEACON_INT_CMD;
+
+/*
+ * WMI_SET_BMISS_TIME_CMDID
+ * valid values are between 1000 and 5000 TUs
+ */
+
+#define MIN_BMISS_TIME     1000
+#define MAX_BMISS_TIME     5000
+#define MIN_BMISS_BEACONS  1
+#define MAX_BMISS_BEACONS  50
+
+typedef PREPACK struct {
+    A_UINT16     bmissTime;
+    A_UINT16     numBeacons;
+} POSTPACK WMI_BMISS_TIME_CMD;
+
+/*
+ * WMI_SET_POWER_MODE_CMDID
+ */
+typedef enum {
+    REC_POWER = 0x01,
+    MAX_PERF_POWER,
+} WMI_POWER_MODE;
+
+typedef PREPACK struct {
+    A_UINT8     powerMode;      /* WMI_POWER_MODE */
+} POSTPACK WMI_POWER_MODE_CMD;
+
+typedef PREPACK struct {
+    A_INT8 status;      /* WMI_SET_PARAMS_REPLY */
+} POSTPACK WMI_SET_PARAMS_REPLY;
+
+typedef PREPACK struct {
+    A_UINT32 opcode;
+    A_UINT32 length;
+    A_CHAR buffer[1];      /* WMI_SET_PARAMS */
+} POSTPACK WMI_SET_PARAMS_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 multicast_mac[ATH_MAC_LEN];      /* WMI_SET_MCAST_FILTER */
+} POSTPACK WMI_SET_MCAST_FILTER_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 enable;      /* WMI_MCAST_FILTER */
+} POSTPACK WMI_MCAST_FILTER_CMD;
+
+/*
+ * WMI_SET_POWER_PARAMS_CMDID
+ */
+typedef enum {
+    IGNORE_DTIM = 0x01,
+    NORMAL_DTIM = 0x02,
+    STICK_DTIM  = 0x03,
+    AUTO_DTIM   = 0x04,
+} WMI_DTIM_POLICY;
+
+/* Policy to determnine whether TX should wakeup WLAN if sleeping */
+typedef enum {
+    TX_WAKEUP_UPON_SLEEP = 1,
+    TX_DONT_WAKEUP_UPON_SLEEP = 2
+} WMI_TX_WAKEUP_POLICY_UPON_SLEEP;
+
+/*
+ * Policy to determnine whether power save failure event should be sent to
+ * host during scanning
+ */
+typedef enum {
+    SEND_POWER_SAVE_FAIL_EVENT_ALWAYS = 1,
+    IGNORE_POWER_SAVE_FAIL_EVENT_DURING_SCAN = 2,
+} POWER_SAVE_FAIL_EVENT_POLICY;
+
+typedef PREPACK struct {
+    A_UINT16    idle_period;             /* msec */
+    A_UINT16    pspoll_number;
+    A_UINT16    dtim_policy;
+    A_UINT16    tx_wakeup_policy;
+    A_UINT16    num_tx_to_wakeup;
+    A_UINT16    ps_fail_event_policy;
+} POSTPACK WMI_POWER_PARAMS_CMD;
+
+/* Adhoc power save types */
+typedef enum {
+    ADHOC_PS_DISABLE=1,
+    ADHOC_PS_ATH=2,
+    ADHOC_PS_IEEE=3,
+    ADHOC_PS_OTHER=4,
+} WMI_ADHOC_PS_TYPE;
+
+typedef PREPACK struct {
+    A_UINT8    power_saving;
+    A_UINT8    ttl; /* number of beacon periods */
+    A_UINT16   atim_windows;          /* msec */
+    A_UINT16   timeout_value;         /* msec */
+} POSTPACK WMI_IBSS_PM_CAPS_CMD;
+
+/* AP power save types */
+typedef enum {
+    AP_PS_DISABLE=1,
+    AP_PS_ATH=2,
+} WMI_AP_PS_TYPE;
+
+typedef PREPACK struct {
+    A_UINT32   idle_time;   /* in msec */
+    A_UINT32   ps_period;   /* in usec */
+    A_UINT8    sleep_period; /* in ps periods */
+    A_UINT8    psType;
+} POSTPACK WMI_AP_PS_CMD;
+
+/*
+ * WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID
+ */
+typedef enum {
+    IGNORE_TIM_ALL_QUEUES_APSD = 0,
+    PROCESS_TIM_ALL_QUEUES_APSD = 1,
+    IGNORE_TIM_SIMULATED_APSD = 2,
+    PROCESS_TIM_SIMULATED_APSD = 3,
+} APSD_TIM_POLICY;
+
+typedef PREPACK struct {
+    A_UINT16    psPollTimeout;          /* msec */
+    A_UINT16    triggerTimeout;         /* msec */
+    A_UINT32    apsdTimPolicy;      /* TIM behavior with  ques APSD enabled. Default is IGNORE_TIM_ALL_QUEUES_APSD */
+    A_UINT32    simulatedAPSDTimPolicy;      /* TIM behavior with  simulated APSD enabled. Default is PROCESS_TIM_SIMULATED_APSD */
+} POSTPACK WMI_POWERSAVE_TIMERS_POLICY_CMD;
+
+/*
+ * WMI_SET_VOICE_PKT_SIZE_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT16    voicePktSize;
+} POSTPACK WMI_SET_VOICE_PKT_SIZE_CMD;
+
+/*
+ * WMI_SET_MAX_SP_LEN_CMDID
+ */
+typedef enum {
+    DELIVER_ALL_PKT = 0x0,
+    DELIVER_2_PKT = 0x1,
+    DELIVER_4_PKT = 0x2,
+    DELIVER_6_PKT = 0x3,
+} APSD_SP_LEN_TYPE;
+
+typedef PREPACK struct {
+    A_UINT8    maxSPLen;
+} POSTPACK WMI_SET_MAX_SP_LEN_CMD;
+
+/*
+ * WMI_SET_DISC_TIMEOUT_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     disconnectTimeout;          /* seconds */
+} POSTPACK WMI_DISC_TIMEOUT_CMD;
+
+typedef enum {
+    UPLINK_TRAFFIC = 0,
+    DNLINK_TRAFFIC = 1,
+    BIDIR_TRAFFIC = 2,
+} DIR_TYPE;
+
+typedef enum {
+    DISABLE_FOR_THIS_AC = 0,
+    ENABLE_FOR_THIS_AC  = 1,
+    ENABLE_FOR_ALL_AC   = 2,
+} VOICEPS_CAP_TYPE;
+
+typedef enum {
+    TRAFFIC_TYPE_APERIODIC = 0,
+    TRAFFIC_TYPE_PERIODIC = 1,
+}TRAFFIC_TYPE;
+
+/*
+ * WMI_SYNCHRONIZE_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8 dataSyncMap;
+} POSTPACK WMI_SYNC_CMD;
+
+/*
+ * WMI_CREATE_PSTREAM_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT32        minServiceInt;           /* in milli-sec */
+    A_UINT32        maxServiceInt;           /* in milli-sec */
+    A_UINT32        inactivityInt;           /* in milli-sec */
+    A_UINT32        suspensionInt;           /* in milli-sec */
+    A_UINT32        serviceStartTime;
+    A_UINT32        minDataRate;             /* in bps */
+    A_UINT32        meanDataRate;            /* in bps */
+    A_UINT32        peakDataRate;            /* in bps */
+    A_UINT32        maxBurstSize;
+    A_UINT32        delayBound;
+    A_UINT32        minPhyRate;              /* in bps */
+    A_UINT32        sba;
+    A_UINT32        mediumTime;
+    A_UINT16        nominalMSDU;             /* in octects */
+    A_UINT16        maxMSDU;                 /* in octects */
+    A_UINT8         trafficClass;
+    A_UINT8         trafficDirection;        /* DIR_TYPE */
+    A_UINT8         rxQueueNum;
+    A_UINT8         trafficType;             /* TRAFFIC_TYPE */
+    A_UINT8         voicePSCapability;       /* VOICEPS_CAP_TYPE */
+    A_UINT8         tsid;
+    A_UINT8         userPriority;            /* 802.1D user priority */
+    A_UINT8         nominalPHY;              /* nominal phy rate */
+} POSTPACK WMI_CREATE_PSTREAM_CMD;
+
+/*
+ * WMI_DELETE_PSTREAM_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     txQueueNumber;
+    A_UINT8     rxQueueNumber;
+    A_UINT8     trafficDirection;
+    A_UINT8     trafficClass;
+    A_UINT8     tsid;
+} POSTPACK WMI_DELETE_PSTREAM_CMD;
+
+/*
+ * WMI_SET_CHANNEL_PARAMS_CMDID
+ */
+typedef enum {
+    WMI_11A_MODE  = 0x1,
+    WMI_11G_MODE  = 0x2,
+    WMI_11AG_MODE = 0x3,
+    WMI_11B_MODE  = 0x4,
+    WMI_11GONLY_MODE = 0x5,
+} WMI_PHY_MODE;
+
+#define WMI_MAX_CHANNELS        32
+
+typedef PREPACK struct {
+    A_UINT8     reserved1;
+    A_UINT8     scanParam;              /* set if enable scan */
+    A_UINT8     phyMode;                /* see WMI_PHY_MODE */
+    A_UINT8     numChannels;            /* how many channels follow */
+    A_UINT16    channelList[1];         /* channels in Mhz */
+} POSTPACK WMI_CHANNEL_PARAMS_CMD;
+
+
+/*
+ *  WMI_RSSI_THRESHOLD_PARAMS_CMDID
+ *  Setting the polltime to 0 would disable polling.
+ *  Threshold values are in the ascending order, and should agree to:
+ *  (lowThreshold_lowerVal < lowThreshold_upperVal < highThreshold_lowerVal
+ *      < highThreshold_upperVal)
+ */
+
+typedef PREPACK struct WMI_RSSI_THRESHOLD_PARAMS{
+    A_UINT32    pollTime;               /* Polling time as a factor of LI */
+    A_INT16     thresholdAbove1_Val;          /* lowest of upper */
+    A_INT16     thresholdAbove2_Val;
+    A_INT16     thresholdAbove3_Val;
+    A_INT16     thresholdAbove4_Val;
+    A_INT16     thresholdAbove5_Val;
+    A_INT16     thresholdAbove6_Val;          /* highest of upper */
+    A_INT16     thresholdBelow1_Val;         /* lowest of bellow */
+    A_INT16     thresholdBelow2_Val;
+    A_INT16     thresholdBelow3_Val;
+    A_INT16     thresholdBelow4_Val;
+    A_INT16     thresholdBelow5_Val;
+    A_INT16     thresholdBelow6_Val;         /* highest of bellow */
+    A_UINT8     weight;                  /* "alpha" */
+    A_UINT8     reserved[3];
+} POSTPACK  WMI_RSSI_THRESHOLD_PARAMS_CMD;
+
+/*
+ *  WMI_SNR_THRESHOLD_PARAMS_CMDID
+ *  Setting the polltime to 0 would disable polling.
+ */
+
+typedef PREPACK struct WMI_SNR_THRESHOLD_PARAMS{
+    A_UINT32    pollTime;               /* Polling time as a factor of LI */
+    A_UINT8     weight;                  /* "alpha" */
+    A_UINT8     thresholdAbove1_Val;      /* lowest of uppper*/
+    A_UINT8     thresholdAbove2_Val;
+    A_UINT8     thresholdAbove3_Val;
+    A_UINT8     thresholdAbove4_Val;      /* highest of upper */
+    A_UINT8     thresholdBelow1_Val;     /* lowest of bellow */
+    A_UINT8     thresholdBelow2_Val;
+    A_UINT8     thresholdBelow3_Val;
+    A_UINT8     thresholdBelow4_Val;     /* highest of bellow */
+    A_UINT8     reserved[3];
+} POSTPACK WMI_SNR_THRESHOLD_PARAMS_CMD;
+
+/*
+ *  WMI_LQ_THRESHOLD_PARAMS_CMDID
+ */
+typedef PREPACK struct WMI_LQ_THRESHOLD_PARAMS {
+    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;
+    A_UINT8     reserved[3];
+} POSTPACK  WMI_LQ_THRESHOLD_PARAMS_CMD;
+
+typedef enum {
+    WMI_LPREAMBLE_DISABLED = 0,
+    WMI_LPREAMBLE_ENABLED
+} WMI_LPREAMBLE_STATUS;
+
+typedef enum {
+    WMI_IGNORE_BARKER_IN_ERP = 0,
+    WMI_DONOT_IGNORE_BARKER_IN_ERP
+} WMI_PREAMBLE_POLICY;
+
+typedef PREPACK struct {
+    A_UINT8     status;
+    A_UINT8     preamblePolicy;
+}POSTPACK WMI_SET_LPREAMBLE_CMD;
+
+typedef PREPACK struct {
+    A_UINT16    threshold;
+}POSTPACK WMI_SET_RTS_CMD;
+
+/*
+ *  WMI_TARGET_ERROR_REPORT_BITMASK_CMDID
+ *  Sets the error reporting event bitmask in target. Target clears it
+ *  upon an error. Subsequent errors are counted, but not reported
+ *  via event, unless the bitmask is set again.
+ */
+typedef PREPACK struct {
+    A_UINT32    bitmask;
+} POSTPACK  WMI_TARGET_ERROR_REPORT_BITMASK;
+
+/*
+ * WMI_SET_TX_PWR_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     dbM;                  /* in dbM units */
+} POSTPACK WMI_SET_TX_PWR_CMD, WMI_TX_PWR_REPLY;
+
+/*
+ * WMI_SET_ASSOC_INFO_CMDID
+ *
+ * A maximum of 2 private IEs can be sent in the [Re]Assoc request.
+ * A 3rd one, the CCX version IE can also be set from the host.
+ */
+
+/*
+ * Bit 7: 1 CCX cckm ie upload to host, 0 default, don't upload
+ * Bit 6: 1 ccx radio measurement upload to host, 0 default, don't upload
+ * Bit 3~5: reserved
+ * Bit 0~2: ccx version
+ */
+
+#define WMI_CCX_VERSION_MASK            0x7
+#define WMI_CCX_CCKMIE_UPLOAD_MASK      (0x1 << 7)
+#define WMI_CCX_RM_UPLOAD_MASK   (0x1 << 6)
+
+#define WMI_MAX_ASSOC_INFO_TYPE    2
+#define WMI_CCX_VER_IE             2 /* ieType to set CCX Version IE */
+
+#define WMI_MAX_ASSOC_INFO_LEN     240
+
+typedef PREPACK struct {
+    A_UINT8     ieType;
+    A_UINT8     bufferSize;
+    A_UINT8     assocInfo[1];       /* up to WMI_MAX_ASSOC_INFO_LEN */
+} POSTPACK WMI_SET_ASSOC_INFO_CMD;
+
+
+/*
+ * WMI_GET_TX_PWR_CMDID does not take any parameters
+ */
+
+/*
+ * WMI_ADD_BAD_AP_CMDID
+ */
+#define WMI_MAX_BAD_AP_INDEX      1
+
+typedef PREPACK struct {
+    A_UINT8     badApIndex;         /* 0 to WMI_MAX_BAD_AP_INDEX */
+    A_UINT8     bssid[ATH_MAC_LEN];
+} POSTPACK WMI_ADD_BAD_AP_CMD;
+
+/*
+ * WMI_DELETE_BAD_AP_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     badApIndex;         /* 0 to WMI_MAX_BAD_AP_INDEX */
+} POSTPACK WMI_DELETE_BAD_AP_CMD;
+
+/*
+ * WMI_SET_ACCESS_PARAMS_CMDID
+ */
+#define WMI_DEFAULT_TXOP_ACPARAM    0       /* implies one MSDU */
+#define WMI_DEFAULT_ECWMIN_ACPARAM  4       /* corresponds to CWmin of 15 */
+#define WMI_DEFAULT_ECWMAX_ACPARAM  10      /* corresponds to CWmax of 1023 */
+#define WMI_MAX_CW_ACPARAM          15      /* maximum eCWmin or eCWmax */
+#define WMI_DEFAULT_AIFSN_ACPARAM   2
+#define WMI_MAX_AIFSN_ACPARAM       15
+typedef PREPACK struct {
+    A_UINT16 txop;                      /* in units of 32 usec */
+    A_UINT8  eCWmin;
+    A_UINT8  eCWmax;
+    A_UINT8  aifsn;
+    A_UINT8  ac;
+} POSTPACK WMI_SET_ACCESS_PARAMS_CMD;
+
+
+/*
+ * WMI_SET_RETRY_LIMITS_CMDID
+ *
+ * This command is used to customize the number of retries the
+ * wlan device will perform on a given frame.
+ */
+#define WMI_MIN_RETRIES 2
+#define WMI_MAX_RETRIES 13
+typedef enum {
+    MGMT_FRAMETYPE    = 0,
+    CONTROL_FRAMETYPE = 1,
+    DATA_FRAMETYPE    = 2
+} WMI_FRAMETYPE;
+
+typedef PREPACK struct {
+    A_UINT8 frameType;                      /* WMI_FRAMETYPE */
+    A_UINT8 trafficClass;                   /* applies only to DATA_FRAMETYPE */
+    A_UINT8 maxRetries;
+    A_UINT8 enableNotify;
+} POSTPACK WMI_SET_RETRY_LIMITS_CMD;
+
+/*
+ * WMI_SET_ROAM_CTRL_CMDID
+ *
+ * This command is used to influence the Roaming behaviour
+ * Set the host biases of the BSSs before setting the roam mode as bias
+ * based.
+ */
+
+/*
+ * Different types of Roam Control
+ */
+
+typedef enum {
+        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, /* Set lowrssi Scan parameters */
+} WMI_ROAM_CTRL_TYPE;
+
+#define WMI_MIN_ROAM_CTRL_TYPE WMI_FORCE_ROAM
+#define WMI_MAX_ROAM_CTRL_TYPE WMI_SET_LOWRSSI_SCAN_PARAMS
+
+/*
+ * ROAM MODES
+ */
+
+typedef enum {
+        WMI_DEFAULT_ROAM_MODE   = 1,  /* RSSI based ROAM */
+        WMI_HOST_BIAS_ROAM_MODE = 2, /* HOST BIAS based ROAM */
+        WMI_LOCK_BSS_MODE  = 3  /* Lock to the Current BSS - no Roam */
+} WMI_ROAM_MODE;
+
+/*
+ * BSS HOST BIAS INFO
+ */
+
+typedef PREPACK struct {
+        A_UINT8 bssid[ATH_MAC_LEN];
+        A_INT8  bias;
+} POSTPACK WMI_BSS_BIAS;
+
+typedef PREPACK struct {
+        A_UINT8 numBss;
+        WMI_BSS_BIAS bssBias[1];
+} POSTPACK WMI_BSS_BIAS_INFO;
+
+typedef PREPACK struct WMI_LOWRSSI_SCAN_PARAMS {
+        A_UINT16 lowrssi_scan_period;
+        A_INT16  lowrssi_scan_threshold;
+        A_INT16  lowrssi_roam_threshold;
+        A_UINT8  roam_rssi_floor;
+        A_UINT8  reserved[1];              /* For alignment */
+} POSTPACK WMI_LOWRSSI_SCAN_PARAMS;
+
+typedef PREPACK struct {
+    PREPACK union {
+        A_UINT8 bssid[ATH_MAC_LEN]; /* WMI_FORCE_ROAM */
+        A_UINT8 roamMode;           /* WMI_SET_ROAM_MODE  */
+        WMI_BSS_BIAS_INFO bssBiasInfo; /* WMI_SET_HOST_BIAS */
+        WMI_LOWRSSI_SCAN_PARAMS lrScanParams;
+    } POSTPACK info;
+    A_UINT8   roamCtrlType ;
+} POSTPACK WMI_SET_ROAM_CTRL_CMD;
+
+/*
+ * WMI_SET_BT_WLAN_CONN_PRECEDENCE_CMDID
+ */
+typedef enum {
+    BT_WLAN_CONN_PRECDENCE_WLAN=0,  /* Default */
+    BT_WLAN_CONN_PRECDENCE_PAL,
+} BT_WLAN_CONN_PRECEDENCE;
+
+typedef PREPACK struct {
+    A_UINT8 precedence;
+} POSTPACK WMI_SET_BT_WLAN_CONN_PRECEDENCE;
+
+/*
+ * WMI_ENABLE_RM_CMDID
+ */
+typedef PREPACK struct {
+        A_BOOL enable_radio_measurements;
+} POSTPACK WMI_ENABLE_RM_CMD;
+
+/*
+ * WMI_SET_MAX_OFFHOME_DURATION_CMDID
+ */
+typedef PREPACK struct {
+        A_UINT8 max_offhome_duration;
+} POSTPACK WMI_SET_MAX_OFFHOME_DURATION_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 frequency;
+    A_UINT8  threshold;
+} POSTPACK WMI_SET_HB_CHALLENGE_RESP_PARAMS_CMD;
+
+typedef enum {
+    WMI_PKTLOG_CMD_DISABLE,
+    WMI_PKTLOG_CMD_SETSIZE,
+} WMI_PKTLOG_CMD;
+
+#define PKTLOG_MAX_BYTES 4096
+
+typedef PREPACK struct {
+    A_UINT32 nbytes;
+    A_UINT8 buffer[PKTLOG_MAX_BYTES];
+} POSTPACK WMI_GET_PKTLOG_CMD;
+
+/* LPL commands */
+typedef PREPACK struct  {
+    A_UINT8 lplPolicy; /*0 - force off, 1 force on, 2 dynamic*/
+    A_UINT8 noBlockerDetect; /*don't do blocker detection if lpl policy is set
+                               to dynamic*/
+    A_UINT8 noRfbDetect; /*don't do rate fall back  detection if lpl policy is set
+                               to dynamic*/
+    A_UINT8 rsvd;
+} POSTPACK  WMI_LPL_FORCE_ENABLE_CMD;
+
+/*command structure for all policy related commands*/
+typedef PREPACK struct  {  
+    A_UINT64    index;
+    A_BOOL      value;
+} POSTPACK  WMI_LPL_POLICY_CMD;
+
+typedef PREPACK struct {
+    A_UINT32    rfbPeriod;
+    A_UINT32    rfbObsDuration;
+    A_UINT32    blockerBeaconRssi;
+    A_UINT8     chanOff;
+    A_UINT32    rfbDiffThold;
+    A_UINT32    bRssiThold;
+    A_UINT32    maxBlockerRssi;
+} POSTPACK WMI_LPL_PARAMS_CMD;
+
+typedef enum {
+    WMI_PKTLOG_OPTION_LOG_TCP_HEADERS = 0x1,
+    WMI_PKTLOG_OPTION_TRIGGER_THRUPUT = 0x2,
+    WMI_PKTLOG_OPTION_TRIGGER_SACK    = 0x4,
+    WMI_PKTLOG_OPTION_TRIGGER_PER     = 0x8
+} WMI_PKTLOG_OPTION;
+
+typedef enum {
+    WMI_PKTLOG_EVENT_RX  = 0x1,
+    WMI_PKTLOG_EVENT_TX  = 0x2,
+    WMI_PKTLOG_EVENT_RCF = 0x4, /* Rate Control Find */
+    WMI_PKTLOG_EVENT_RCU = 0x8, /* Rate Control Update */
+} WMI_PKTLOG_EVENT;
+
+typedef PREPACK struct {
+    WMI_PKTLOG_EVENT evlist;
+    WMI_PKTLOG_OPTION option;
+    A_UINT32 trigger_thresh;
+    A_UINT32 trigger_interval;
+    A_UINT32 trigger_tail_count;
+    A_UINT32 buffer_size;
+} POSTPACK WMI_ENABLE_PKTLOG_CMD;
+
+typedef enum {
+    WMI_SMPS_OPTION_MODE          = 0x1,
+    WMI_SMPS_OPTION_AUTO          = 0x2,
+    WMI_SMPS_OPTION_DATATHRESH    = 0x4,
+    WMI_SMPS_OPTION_RSSITHRESH    = 0x8,
+} WMI_SMPS_OPTION;
+
+typedef enum {
+    WMI_SMPS_MODE_STATIC    = 0x1,
+    WMI_SMPS_MODE_DYNAMIC   = 0x2,
+} WMI_SMPS_MODE;
+
+typedef PREPACK struct {
+    A_UINT8 flags;      /* To indicate which options have changed */
+    A_UINT8 rssiThresh;
+    A_UINT8 dataThresh;
+    A_UINT8 mode;       /* static/dynamic */
+    A_UINT8 automatic;
+} POSTPACK WMI_CONFIG_SMPS_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 enable;      /* Enable/disable */
+} POSTPACK WMI_ENABLE_SMPS_CMD;
+
+
+typedef enum {
+    WMI_CCX_RM_STATUS_UNKNOWN = 0,
+    WMI_CCX_RM_REPORT_SENT,
+    WMI_CCX_RM_REFUSE_REPORT_SENT,
+    WMI_CCX_RM_STATUS_MAX
+} WMI_CCX_RM_STATUS_TYPE;
+
+/*---------------------- BTCOEX RELATED -------------------------------------*/
+/*----------------------COMMON to AR6002 and AR6003 -------------------------*/
+typedef enum {
+    BT_STREAM_UNDEF = 0,
+    BT_STREAM_SCO,             /* SCO stream */
+    BT_STREAM_A2DP,            /* A2DP stream */
+    BT_STREAM_SCAN,            /* BT Discovery or Page */
+    BT_STREAM_ESCO,
+    BT_STREAM_MAX
+} BT_STREAM_TYPE;
+
+typedef enum {
+    BT_PARAM_SCO_PSPOLL_LATENCY_ONE_FOURTH =1,
+    BT_PARAM_SCO_PSPOLL_LATENCY_HALF,
+    BT_PARAM_SCO_PSPOLL_LATENCY_THREE_FOURTH,
+} BT_PARAMS_SCO_PSPOLL_LATENCY;
+
+typedef enum {
+    BT_PARAMS_SCO_STOMP_SCO_NEVER =1,
+    BT_PARAMS_SCO_STOMP_SCO_ALWAYS,
+    BT_PARAMS_SCO_STOMP_SCO_IN_LOWRSSI,
+} BT_PARAMS_SCO_STOMP_RULES;
+
+typedef enum {
+    BT_STATUS_UNDEF = 0,
+    BT_STATUS_ON,
+    BT_STATUS_OFF,
+    BT_STATUS_MAX
+} BT_STREAM_STATUS;
+
+typedef PREPACK struct {
+    A_UINT8 streamType;
+    A_UINT8 status;
+} POSTPACK WMI_SET_BT_STATUS_CMD;
+
+typedef enum {
+    BT_ANT_TYPE_UNDEF=0,
+    BT_ANT_TYPE_DUAL,
+    BT_ANT_TYPE_SPLITTER,
+    BT_ANT_TYPE_SWITCH,
+    BT_ANT_TYPE_HIGH_ISO_DUAL
+} BT_ANT_FRONTEND_CONFIG;
+
+typedef enum {
+    BT_COLOCATED_DEV_BTS4020=0,
+    BT_COLCATED_DEV_CSR ,
+    BT_COLOCATED_DEV_VALKYRIE
+} BT_COLOCATED_DEV_TYPE;
+
+/*********************** Applicable to AR6002 ONLY ******************************/
+
+typedef enum {
+    BT_PARAM_SCO = 1,         /* SCO stream parameters */
+    BT_PARAM_A2DP ,
+    BT_PARAM_ANTENNA_CONFIG,
+    BT_PARAM_COLOCATED_BT_DEVICE,
+    BT_PARAM_ACLCOEX,
+    BT_PARAM_11A_SEPARATE_ANT,
+    BT_PARAM_MAX
+} BT_PARAM_TYPE;
+
+
+#define BT_SCO_ALLOW_CLOSE_RANGE_OPT    (1 << 0)
+#define BT_SCO_FORCE_AWAKE_OPT          (1 << 1)
+#define BT_SCO_SET_RSSI_OVERRIDE(flags)        ((flags) |= (1 << 2))
+#define BT_SCO_GET_RSSI_OVERRIDE(flags)        (((flags) >> 2) & 0x1)
+#define BT_SCO_SET_RTS_OVERRIDE(flags)   ((flags) |= (1 << 3))
+#define BT_SCO_GET_RTS_OVERRIDE(flags)   (((flags) >> 3) & 0x1)
+#define BT_SCO_GET_MIN_LOW_RATE_CNT(flags)     (((flags) >> 8) & 0xFF)
+#define BT_SCO_GET_MAX_LOW_RATE_CNT(flags)     (((flags) >> 16) & 0xFF)
+#define BT_SCO_SET_MIN_LOW_RATE_CNT(flags,val) (flags) |= (((val) & 0xFF) << 8)
+#define BT_SCO_SET_MAX_LOW_RATE_CNT(flags,val) (flags) |= (((val) & 0xFF) << 16)
+
+typedef PREPACK struct {
+    A_UINT32 numScoCyclesForceTrigger;  /* Number SCO cycles after which
+                                           force a pspoll. default = 10 */
+    A_UINT32 dataResponseTimeout;       /* Timeout Waiting for Downlink pkt
+                                           in response for ps-poll,
+                                           default = 10 msecs */
+    A_UINT32  stompScoRules;
+    A_UINT32 scoOptFlags;               /* SCO Options Flags :
+                                            bits:     meaning:
+                                             0        Allow Close Range Optimization
+                                             1        Force awake during close range
+                                             2        If set use host supplied RSSI for OPT
+                                             3        If set use host supplied RTS COUNT for OPT
+                                             4..7     Unused
+                                             8..15    Low Data Rate Min Cnt
+                                             16..23   Low Data Rate Max Cnt
+                                        */
+
+    A_UINT8 stompDutyCyleVal;           /* Sco cycles to limit ps-poll queuing
+                                           if stomped */
+    A_UINT8 stompDutyCyleMaxVal;        /*firm ware increases stomp duty cycle
+                                          gradually uptill this value on need basis*/
+    A_UINT8 psPollLatencyFraction;      /* Fraction of idle
+                                           period, within which
+                                           additional ps-polls
+                                           can be queued */
+    A_UINT8 noSCOSlots;                 /* Number of SCO Tx/Rx slots.
+                                           HVx, EV3, 2EV3 = 2 */
+    A_UINT8 noIdleSlots;                /* Number of Bluetooth idle slots between
+                                           consecutive SCO Tx/Rx slots
+                                           HVx, EV3 = 4
+                                           2EV3 = 10 */
+    A_UINT8 scoOptOffRssi;/*RSSI value below which we go to ps poll*/
+    A_UINT8 scoOptOnRssi; /*RSSI value above which we reenter opt mode*/
+    A_UINT8 scoOptRtsCount;
+} POSTPACK BT_PARAMS_SCO;
+
+#define BT_A2DP_ALLOW_CLOSE_RANGE_OPT  (1 << 0)
+#define BT_A2DP_FORCE_AWAKE_OPT        (1 << 1)
+#define BT_A2DP_SET_RSSI_OVERRIDE(flags)        ((flags) |= (1 << 2))
+#define BT_A2DP_GET_RSSI_OVERRIDE(flags)        (((flags) >> 2) & 0x1)
+#define BT_A2DP_SET_RTS_OVERRIDE(flags)   ((flags) |= (1 << 3))
+#define BT_A2DP_GET_RTS_OVERRIDE(flags)   (((flags) >> 3) & 0x1)
+#define BT_A2DP_GET_MIN_LOW_RATE_CNT(flags)     (((flags) >> 8) & 0xFF)
+#define BT_A2DP_GET_MAX_LOW_RATE_CNT(flags)     (((flags) >> 16) & 0xFF)
+#define BT_A2DP_SET_MIN_LOW_RATE_CNT(flags,val) (flags) |= (((val) & 0xFF) << 8)
+#define BT_A2DP_SET_MAX_LOW_RATE_CNT(flags,val) (flags) |= (((val) & 0xFF) << 16)
+
+typedef PREPACK struct {
+    A_UINT32 a2dpWlanUsageLimit; /* MAX time firmware uses the medium for
+                                    wlan, after it identifies the idle time
+                                    default (30 msecs) */
+    A_UINT32 a2dpBurstCntMin;   /* Minimum number of bluetooth data frames
+                                   to replenish Wlan Usage  limit (default 3) */
+    A_UINT32 a2dpDataRespTimeout;
+    A_UINT32 a2dpOptFlags;      /* A2DP Option flags:
+                                       bits:    meaning:
+                                        0       Allow Close Range Optimization
+                                        1       Force awake during close range
+                                        2        If set use host supplied RSSI for OPT
+                                        3        If set use host supplied RTS COUNT for OPT
+                                        4..7    Unused
+                                        8..15   Low Data Rate Min Cnt
+                                        16..23  Low Data Rate Max Cnt
+                                 */
+    A_UINT8 isCoLocatedBtRoleMaster;
+    A_UINT8 a2dpOptOffRssi;/*RSSI value below which we go to ps poll*/
+    A_UINT8 a2dpOptOnRssi; /*RSSI value above which we reenter opt mode*/
+    A_UINT8 a2dpOptRtsCount;
+}POSTPACK BT_PARAMS_A2DP;
+
+/* During BT ftp/ BT OPP or any another data based acl profile on bluetooth
+   (non a2dp).*/
+typedef PREPACK struct {
+    A_UINT32 aclWlanMediumUsageTime;  /* Wlan usage time during Acl (non-a2dp)
+                                       coexistence (default 30 msecs) */
+    A_UINT32 aclBtMediumUsageTime;   /* Bt usage time during acl coexistence
+                                       (default 30 msecs)*/
+    A_UINT32 aclDataRespTimeout;
+    A_UINT32 aclDetectTimeout;      /* ACL coexistence enabled if we get
+                                       10 Pkts in X msec(default 100 msecs) */
+    A_UINT32 aclmaxPktCnt;          /* No of ACL pkts to receive before
+                                         enabling ACL coex */
+
+}POSTPACK BT_PARAMS_ACLCOEX;
+
+typedef PREPACK struct {
+    PREPACK union {
+        BT_PARAMS_SCO scoParams;
+        BT_PARAMS_A2DP a2dpParams;
+        BT_PARAMS_ACLCOEX  aclCoexParams;
+        A_UINT8 antType;         /* 0 -Disabled (default)
+                                     1 - BT_ANT_TYPE_DUAL
+                                     2 - BT_ANT_TYPE_SPLITTER
+                                     3 - BT_ANT_TYPE_SWITCH */
+        A_UINT8 coLocatedBtDev;  /* 0 - BT_COLOCATED_DEV_BTS4020 (default)
+                                     1 - BT_COLCATED_DEV_CSR
+                                     2 - BT_COLOCATED_DEV_VALKYRIe
+                                   */
+    } POSTPACK info;
+    A_UINT8 paramType ;
+} POSTPACK WMI_SET_BT_PARAMS_CMD;
+
+/************************ END AR6002 BTCOEX *******************************/
+/*-----------------------AR6003 BTCOEX -----------------------------------*/
+
+/*  ---------------WMI_SET_BTCOEX_FE_ANT_CMDID --------------------------*/
+/* Indicates front end antenna configuration. This command needs to be issued
+ * right after initialization and after WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID.
+ * AR6003 enables coexistence and antenna switching based on the configuration.
+ */
+typedef enum {
+    WMI_BTCOEX_NOT_ENABLED = 0,
+    WMI_BTCOEX_FE_ANT_SINGLE =1,
+    WMI_BTCOEX_FE_ANT_DUAL=2,
+    WMI_BTCOEX_FE_ANT_DUAL_HIGH_ISO=3,
+    WMI_BTCOEX_FE_ANT_DUAL_SH_BT_LOW_ISO = 4,
+    WMI_BTCOEX_FE_ANT_DUAL_SH_BT_HIGH_ISO = 5,
+    WMI_BTCOEX_FE_ANT_TYPE_MAX
+}WMI_BTCOEX_FE_ANT_TYPE;
+
+typedef PREPACK struct {
+    A_UINT8 btcoexFeAntType; /* 1 - WMI_BTCOEX_FE_ANT_SINGLE for single antenna front end
+                                2 - WMI_BTCOEX_FE_ANT_DUAL for dual antenna front end
+                                    (for isolations less 35dB, for higher isolation there
+                                    is not need to pass this command).
+                                    (not implemented)
+                              */
+}POSTPACK WMI_SET_BTCOEX_FE_ANT_CMD;
+
+/* -------------WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID ----------------*/
+/* Indicate the bluetooth chip to the firmware. Firmware can have different algorithm based
+ * bluetooth chip type.Based on bluetooth device, different coexistence protocol would be used.
+ */
+typedef PREPACK struct {
+    A_UINT8 btcoexCoLocatedBTdev; /*1 - Qcom BT (3 -wire PTA)
+                                    2 - CSR BT  (3 wire PTA)
+                                    3 - Atheros 3001 BT (3 wire PTA)
+                                    4 - STE bluetooth (4-wire ePTA)
+                                    5 - Atheros 3002 BT (4-wire MCI)
+                                    defaults= 3 (Atheros 3001 BT )
+                                    */
+}POSTPACK WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMD;
+
+/* -------------WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMDID ------------*/
+/* Configuration parameters during bluetooth inquiry and page. Page configuration
+ * is applicable only on interfaces which can distinguish page (applicable only for ePTA -
+ * STE bluetooth).
+ * Bluetooth inquiry start and end is indicated via WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID.
+ * During this the station will be  power-save mode.
+ */
+typedef PREPACK struct {
+    A_UINT32 btInquiryDataFetchFrequency;/* The frequency of querying the AP for data
+                                            (via pspoll) is configured by this parameter.
+                                            "default = 10 ms" */
+
+    A_UINT32 protectBmissDurPostBtInquiry;/* The firmware will continue to be in inquiry state
+                                             for configured duration, after inquiry completion
+                                             . This is to ensure other bluetooth transactions
+                                             (RDP, SDP profiles, link key exchange ...etc)
+                                             goes through smoothly without wifi stomping.
+                                             default = 10 secs*/
+
+    A_UINT32 maxpageStomp;                 /*Applicable only for STE-BT interface. Currently not
+                                             used */
+    A_UINT32 btInquiryPageFlag;           /* Not used */
+}POSTPACK WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMD;
+
+/*---------------------WMI_SET_BTCOEX_SCO_CONFIG_CMDID ---------------*/
+/* Configure  SCO parameters. These parameters would be used whenever firmware is indicated
+ * of (e)SCO profile on bluetooth ( via WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID).
+ * Configration of BTCOEX_SCO_CONFIG data structure are common configuration and applies
+ * ps-poll mode and opt mode.
+ * Ps-poll Mode - Station is in power-save and retrieves downlink data between sco gaps.
+ * Opt Mode - station is in awake state and access point can send data to station any time.
+ * BTCOEX_PSPOLLMODE_SCO_CONFIG - Configuration applied only during ps-poll mode.
+ * BTCOEX_OPTMODE_SCO_CONFIG - Configuration applied only during opt mode.
+ */
+#define WMI_SCO_CONFIG_FLAG_ALLOW_OPTIMIZATION   (1 << 0)
+#define WMI_SCO_CONFIG_FLAG_IS_EDR_CAPABLE       (1 << 1)
+#define WMI_SCO_CONFIG_FLAG_IS_BT_MASTER         (1 << 2)
+#define WMI_SCO_CONFIG_FLAG_FW_DETECT_OF_PER     (1 << 3)
+typedef PREPACK struct {
+    A_UINT32 scoSlots;                  /* Number of SCO Tx/Rx slots.
+                                           HVx, EV3, 2EV3 = 2 */
+    A_UINT32 scoIdleSlots;              /* Number of Bluetooth idle slots between
+                                           consecutive SCO Tx/Rx slots
+                                           HVx, EV3 = 4
+                                           2EV3 = 10
+                                         */
+    A_UINT32 scoFlags;                 /* SCO Options Flags :
+                                          bits:    meaning:
+                                          0   Allow Close Range Optimization
+                                          1   Is EDR capable or Not
+                                          2   IS Co-located Bt role Master
+                                          3   Firmware determines the periodicity of SCO.
+                                         */
+
+    A_UINT32 linkId;                      /* applicable to STE-BT - not used */
+}POSTPACK BTCOEX_SCO_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32  scoCyclesForceTrigger;    /* Number SCO cycles after which
+                                            force a pspoll. default = 10 */
+    A_UINT32 scoDataResponseTimeout;     /* Timeout Waiting for Downlink pkt
+                                            in response for ps-poll,
+                                            default = 20 msecs */
+
+    A_UINT32 scoStompDutyCyleVal;        /* not implemented */
+
+    A_UINT32 scoStompDutyCyleMaxVal;     /*Not implemented */
+
+    A_UINT32 scoPsPollLatencyFraction;   /* Fraction of idle
+                                            period, within which
+                                            additional ps-polls can be queued
+                                            1 - 1/4 of idle duration
+                                            2 - 1/2 of idle duration
+                                            3 - 3/4 of idle duration
+                                            default =2 (1/2)
+                                           */
+}POSTPACK BTCOEX_PSPOLLMODE_SCO_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32 scoStompCntIn100ms;/*max number of SCO stomp in 100ms allowed in
+                                   opt mode. If exceeds the configured value,
+                                   switch to ps-poll mode
+                                  default = 3 */
+
+    A_UINT32 scoContStompMax;   /* max number of continous stomp allowed in opt mode.
+                                   if excedded switch to pspoll mode
+                                    default = 3 */
+
+    A_UINT32 scoMinlowRateMbps; /* Low rate threshold */
+
+    A_UINT32 scoLowRateCnt;     /* number of low rate pkts (< scoMinlowRateMbps) allowed in 100 ms.
+                                   If exceeded switch/stay to ps-poll mode, lower stay in opt mode.
+                                   default = 36
+                                 */
+
+    A_UINT32 scoHighPktRatio;   /*(Total Rx pkts in 100 ms + 1)/
+                                  ((Total tx pkts in 100 ms - No of high rate pkts in 100 ms) + 1) in 100 ms,
+                                  if exceeded switch/stay in opt mode and if lower switch/stay in  pspoll mode.
+                                  default = 5 (80% of high rates)
+                                 */
+
+    A_UINT32 scoMaxAggrSize;    /* Max number of Rx subframes allowed in this mode. (Firmware re-negogiates
+                                   max number of aggregates if it was negogiated to higher value
+                                   default = 1
+                                   Recommended value Basic rate headsets = 1, EDR (2-EV3)  =4.
+                                 */
+}POSTPACK BTCOEX_OPTMODE_SCO_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32 scanInterval;
+    A_UINT32 maxScanStompCnt;
+}POSTPACK BTCOEX_WLANSCAN_SCO_CONFIG;
+
+typedef PREPACK struct {
+    BTCOEX_SCO_CONFIG scoConfig;
+    BTCOEX_PSPOLLMODE_SCO_CONFIG scoPspollConfig;
+    BTCOEX_OPTMODE_SCO_CONFIG scoOptModeConfig;
+    BTCOEX_WLANSCAN_SCO_CONFIG scoWlanScanConfig;
+}POSTPACK WMI_SET_BTCOEX_SCO_CONFIG_CMD;
+
+/* ------------------WMI_SET_BTCOEX_A2DP_CONFIG_CMDID -------------------*/
+/* Configure A2DP profile parameters. These parameters would be used whenver firmware is indicated
+ * of A2DP profile on bluetooth ( via WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID).
+ * Configuration of BTCOEX_A2DP_CONFIG data structure are common configuration and applies to
+ * ps-poll mode and opt mode.
+ * Ps-poll Mode - Station is in power-save and retrieves downlink data between a2dp data bursts.
+ * Opt Mode - station is in power save during a2dp bursts and awake in the gaps.
+ * BTCOEX_PSPOLLMODE_A2DP_CONFIG - Configuration applied only during ps-poll mode.
+ * BTCOEX_OPTMODE_A2DP_CONFIG - Configuration applied only during opt mode.
+ */
+
+#define WMI_A2DP_CONFIG_FLAG_ALLOW_OPTIMIZATION    (1 << 0)
+#define WMI_A2DP_CONFIG_FLAG_IS_EDR_CAPABLE        (1 << 1)
+#define WMI_A2DP_CONFIG_FLAG_IS_BT_ROLE_MASTER     (1 << 2)
+#define WMI_A2DP_CONFIG_FLAG_IS_A2DP_HIGH_PRI      (1 << 3)
+#define WMI_A2DP_CONFIG_FLAG_FIND_BT_ROLE          (1 << 4)
+
+typedef PREPACK struct {
+    A_UINT32 a2dpFlags;      /* A2DP Option flags:
+                                bits:    meaning:
+                                0       Allow Close Range Optimization
+                                1       IS EDR capable
+                                2       IS Co-located Bt role Master
+                                3       a2dp traffic is high priority
+                                4       Fw detect the role of bluetooth.
+                             */
+    A_UINT32 linkId;         /* Applicable only to STE-BT - not used */
+
+}POSTPACK BTCOEX_A2DP_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32 a2dpWlanMaxDur; /* MAX time firmware uses the medium for
+                                wlan, after it identifies the idle time
+                                default (30 msecs) */
+
+    A_UINT32 a2dpMinBurstCnt;   /* Minimum number of bluetooth data frames
+                                to replenish Wlan Usage  limit (default 3) */
+
+    A_UINT32 a2dpDataRespTimeout; /* Max duration firmware waits for downlink
+                                     by stomping on  bluetooth
+                                     after ps-poll is acknowledged.
+                                     default = 20 ms
+                                   */
+}POSTPACK BTCOEX_PSPOLLMODE_A2DP_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32 a2dpMinlowRateMbps;  /* Low rate threshold */
+
+    A_UINT32 a2dpLowRateCnt;    /* number of low rate pkts (< a2dpMinlowRateMbps) allowed in 100 ms.
+                                   If exceeded switch/stay to ps-poll mode, lower stay in opt mode.
+                                   default = 36
+                                 */
+
+    A_UINT32 a2dpHighPktRatio;   /*(Total Rx pkts in 100 ms + 1)/
+                                  ((Total tx pkts in 100 ms - No of high rate pkts in 100 ms) + 1) in 100 ms,
+                                  if exceeded switch/stay in opt mode and if lower switch/stay in  pspoll mode.
+                                  default = 5 (80% of high rates)
+                                 */
+
+    A_UINT32 a2dpMaxAggrSize;    /* Max number of Rx subframes allowed in this mode. (Firmware re-negogiates
+                                   max number of aggregates if it was negogiated to higher value
+                                   default = 1
+                                  Recommended value Basic rate headsets = 1, EDR (2-EV3)  =8.
+                                 */
+    A_UINT32 a2dpPktStompCnt;    /*number of a2dp pkts that can be stomped per burst.
+                                   default = 6*/
+
+}POSTPACK BTCOEX_OPTMODE_A2DP_CONFIG;
+
+typedef PREPACK struct {
+    BTCOEX_A2DP_CONFIG a2dpConfig;
+    BTCOEX_PSPOLLMODE_A2DP_CONFIG a2dppspollConfig;
+    BTCOEX_OPTMODE_A2DP_CONFIG a2dpOptConfig;
+}POSTPACK WMI_SET_BTCOEX_A2DP_CONFIG_CMD;
+
+/*------------ WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMDID---------------------*/
+/* Configure non-A2dp ACL profile parameters.The starts of ACL profile can either be
+ * indicated via WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID orenabled via firmware detection
+ *  which is configured via "aclCoexFlags".
+ * Configration of BTCOEX_ACLCOEX_CONFIG data structure are common configuration and applies
+ * ps-poll mode and opt mode.
+ * Ps-poll Mode - Station is in power-save and retrieves downlink data during wlan medium.
+ * Opt Mode - station is in power save during bluetooth medium time and awake during wlan duration.
+ *             (Not implemented yet)
+ *
+ * BTCOEX_PSPOLLMODE_ACLCOEX_CONFIG - Configuration applied only during ps-poll mode.
+ * BTCOEX_OPTMODE_ACLCOEX_CONFIG - Configuration applied only during opt mode.
+ */
+
+#define WMI_ACLCOEX_FLAGS_ALLOW_OPTIMIZATION   (1 << 0)
+#define WMI_ACLCOEX_FLAGS_DISABLE_FW_DETECTION (1 << 1)
+
+typedef PREPACK struct {
+    A_UINT32 aclWlanMediumDur;      /* Wlan usage time during Acl (non-a2dp)
+                                        coexistence (default 30 msecs)
+                                    */
+
+    A_UINT32 aclBtMediumDur;       /* Bt usage time during acl coexistence
+                                         (default 30 msecs)
+                                   */
+
+    A_UINT32 aclDetectTimeout;     /* BT activity observation time limit.
+                                      In this time duration, number of bt pkts are counted.
+                                      If the Cnt reaches "aclPktCntLowerLimit" value
+                                      for "aclIterToEnableCoex" iteration continuously,
+                                      firmware gets into ACL coexistence mode.
+                                      Similarly, if bt traffic count during ACL coexistence
+                                      has not reached "aclPktCntLowerLimit" continuously
+                                      for "aclIterToEnableCoex", then ACL coexistence is
+                                      disabled.
+                                      -default 100 msecs
+                                    */
+
+     A_UINT32 aclPktCntLowerLimit;   /* Acl Pkt Cnt to be received in duration of
+                                        "aclDetectTimeout" for
+                                        "aclIterForEnDis" times to enabling ACL coex.
+                                        Similar logic is used to disable acl coexistence.
+                                        (If "aclPktCntLowerLimit"  cnt of acl pkts
+                                         are not seen by the for "aclIterForEnDis"
+                                         then acl coexistence is disabled).
+                                        default = 10
+                                   */
+
+     A_UINT32 aclIterForEnDis;      /* number of Iteration of "aclPktCntLowerLimit" for Enabling and
+                                       Disabling Acl Coexistence.
+                                       default = 3
+                                     */
+
+     A_UINT32 aclPktCntUpperLimit; /* This is upperBound limit, if there is more than
+                                      "aclPktCntUpperLimit" seen in "aclDetectTimeout",
+                                      ACL coexistence is enabled right away.
+                                      - default 15*/
+
+    A_UINT32 aclCoexFlags;          /* A2DP Option flags:
+                                      bits:    meaning:
+                                      0       Allow Close Range Optimization
+                                      1       disable Firmware detection
+                                      (Currently supported configuration is aclCoexFlags =0)
+                                    */
+
+    A_UINT32 linkId;                /* Applicable only for STE-BT - not used */
+
+}POSTPACK BTCOEX_ACLCOEX_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32 aclDataRespTimeout;   /* Max duration firmware waits for downlink
+                                      by stomping on  bluetooth
+                                      after ps-poll is acknowledged.
+                                     default = 20 ms */
+
+}POSTPACK BTCOEX_PSPOLLMODE_ACLCOEX_CONFIG;
+
+
+/* Not implemented yet*/
+typedef PREPACK struct {
+    A_UINT32 aclCoexMinlowRateMbps;
+    A_UINT32 aclCoexLowRateCnt;
+    A_UINT32 aclCoexHighPktRatio;
+    A_UINT32 aclCoexMaxAggrSize;
+    A_UINT32 aclPktStompCnt;
+}POSTPACK BTCOEX_OPTMODE_ACLCOEX_CONFIG;
+
+typedef PREPACK struct {
+    BTCOEX_ACLCOEX_CONFIG aclCoexConfig;
+    BTCOEX_PSPOLLMODE_ACLCOEX_CONFIG aclCoexPspollConfig;
+    BTCOEX_OPTMODE_ACLCOEX_CONFIG aclCoexOptConfig;
+}POSTPACK WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMD;
+
+/* -----------WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID ------------------*/
+typedef enum {
+    WMI_BTCOEX_BT_PROFILE_SCO =1,
+    WMI_BTCOEX_BT_PROFILE_A2DP,
+    WMI_BTCOEX_BT_PROFILE_INQUIRY_PAGE,
+    WMI_BTCOEX_BT_PROFILE_ACLCOEX,
+}WMI_BTCOEX_BT_PROFILE;
+
+typedef PREPACK struct {
+    A_UINT32 btProfileType;
+    A_UINT32 btOperatingStatus;
+    A_UINT32 btLinkId;
+}WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMD;
+
+/*--------------------- WMI_SET_BTCOEX_DEBUG_CMDID ---------------------*/
+/* Used for firmware development and debugging */
+typedef PREPACK struct {
+    A_UINT32 btcoexDbgParam1;
+    A_UINT32 btcoexDbgParam2;
+    A_UINT32 btcoexDbgParam3;
+    A_UINT32 btcoexDbgParam4;
+    A_UINT32 btcoexDbgParam5;
+}WMI_SET_BTCOEX_DEBUG_CMD;
+
+/*---------------------WMI_GET_BTCOEX_CONFIG_CMDID --------------------- */
+/* Command to firmware to get configuration parameters of the bt profile
+ * reported via WMI_BTCOEX_CONFIG_EVENTID */
+typedef PREPACK struct {
+    A_UINT32 btProfileType; /* 1 - SCO
+                               2 - A2DP
+                               3 - INQUIRY_PAGE
+                               4 - ACLCOEX
+                            */
+    A_UINT32 linkId;    /* not used */
+}WMI_GET_BTCOEX_CONFIG_CMD;
+
+/*------------------WMI_REPORT_BTCOEX_CONFIG_EVENTID------------------- */
+/* Event from firmware to host, sent in response to WMI_GET_BTCOEX_CONFIG_CMDID
+ * */
+typedef PREPACK struct {
+    A_UINT32 btProfileType;
+    A_UINT32 linkId; /* not used */
+    PREPACK union {
+        WMI_SET_BTCOEX_SCO_CONFIG_CMD scoConfigCmd;
+        WMI_SET_BTCOEX_A2DP_CONFIG_CMD a2dpConfigCmd;
+        WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMD aclcoexConfig;
+        WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMD btinquiryPageConfigCmd;
+    } POSTPACK info;
+} POSTPACK WMI_BTCOEX_CONFIG_EVENT;
+
+/*------------- WMI_REPORT_BTCOEX_BTCOEX_STATS_EVENTID--------------------*/
+/* Used for firmware development and debugging*/
+typedef PREPACK struct {
+    A_UINT32 highRatePktCnt;
+    A_UINT32 firstBmissCnt;
+    A_UINT32 psPollFailureCnt;
+    A_UINT32 nullFrameFailureCnt;
+    A_UINT32 optModeTransitionCnt;
+}BTCOEX_GENERAL_STATS;
+
+typedef PREPACK struct {
+    A_UINT32    scoStompCntAvg;
+    A_UINT32    scoStompIn100ms;
+    A_UINT32    scoMaxContStomp;
+    A_UINT32    scoAvgNoRetries;
+    A_UINT32    scoMaxNoRetriesIn100ms;
+}BTCOEX_SCO_STATS;
+
+typedef PREPACK struct {
+    A_UINT32    a2dpBurstCnt;
+    A_UINT32    a2dpMaxBurstCnt;
+    A_UINT32    a2dpAvgIdletimeIn100ms;
+    A_UINT32    a2dpAvgStompCnt;
+}BTCOEX_A2DP_STATS;
+
+typedef PREPACK struct {
+    A_UINT32    aclPktCntInBtTime;
+    A_UINT32    aclStompCntInWlanTime;
+    A_UINT32    aclPktCntIn100ms;
+}BTCOEX_ACLCOEX_STATS;
+
+typedef PREPACK struct {
+    BTCOEX_GENERAL_STATS coexStats;
+    BTCOEX_SCO_STATS scoStats;
+    BTCOEX_A2DP_STATS a2dpStats;
+    BTCOEX_ACLCOEX_STATS aclCoexStats;
+}WMI_BTCOEX_STATS_EVENT;
+
+
+/*--------------------------END OF BTCOEX -------------------------------------*/
+
+/* WAC commands
+ */
+
+
+typedef PREPACK struct {
+    A_UINT32    period;
+    A_UINT32    threshold;
+    A_INT32     rssi;
+    A_BOOL      enable;
+    A_CHAR      wps_pin[8];
+}WMI_WAC_ENABLE_CMD;
+
+typedef enum {
+    WAC_MORE_SCAN = -1,
+    WAC_SEND_PROBE_IDX = 0,
+}WAC_SUBCMD;
+
+typedef PREPACK struct {
+    WAC_SUBCMD  cmdid;
+}WMI_WAC_SCAN_REPLY_CMD;
+
+typedef PREPACK struct {
+    A_UINT8     req;
+    A_UINT8     cmd;
+    A_UINT8     frame;
+    A_UINT8     ie[64];
+    A_INT32     status;
+}WMI_WAC_CTRL_REQ_CMD;
+
+/* END OF WAC */
+
+typedef PREPACK struct {
+    A_UINT32 sleepState;
+}WMI_REPORT_SLEEP_STATE_EVENT;
+
+typedef enum {
+    WMI_REPORT_SLEEP_STATUS_IS_DEEP_SLEEP =0,
+    WMI_REPORT_SLEEP_STATUS_IS_AWAKE
+} WMI_REPORT_SLEEP_STATUS;
+typedef enum {
+    DISCONN_EVT_IN_RECONN = 0,  /* default */
+    NO_DISCONN_EVT_IN_RECONN
+} TARGET_EVENT_REPORT_CONFIG;
+
+typedef PREPACK struct {
+    A_UINT32 evtConfig;
+} POSTPACK WMI_SET_TARGET_EVENT_REPORT_CMD;
+
+
+typedef PREPACK struct {
+    A_UINT16    cmd_buf_sz;     /* HCI cmd buffer size */
+    A_UINT8     buf[1];         /* Absolute HCI cmd */
+} POSTPACK WMI_HCI_CMD;
+
+/*
+ * Command Replies
+ */
+
+/*
+ * WMI_GET_CHANNEL_LIST_CMDID reply
+ */
+typedef PREPACK struct {
+    A_UINT8     reserved1;
+    A_UINT8     numChannels;            /* number of channels in reply */
+    A_UINT16    channelList[1];         /* channel in Mhz */
+} POSTPACK WMI_CHANNEL_LIST_REPLY;
+
+typedef enum {
+    A_SUCCEEDED = A_OK,
+    A_FAILED_DELETE_STREAM_DOESNOT_EXIST=250,
+    A_SUCCEEDED_MODIFY_STREAM=251,
+    A_FAILED_INVALID_STREAM = 252,
+    A_FAILED_MAX_THINSTREAMS = 253,
+    A_FAILED_CREATE_REMOVE_PSTREAM_FIRST = 254,
+} PSTREAM_REPLY_STATUS;
+
+typedef PREPACK struct {
+    A_UINT8     status;                 /* PSTREAM_REPLY_STATUS */
+    A_UINT8     txQueueNumber;
+    A_UINT8     rxQueueNumber;
+    A_UINT8     trafficClass;
+    A_UINT8     trafficDirection;       /* DIR_TYPE */
+} POSTPACK WMI_CRE_PRIORITY_STREAM_REPLY;
+
+typedef PREPACK struct {
+    A_UINT8     status;                 /* PSTREAM_REPLY_STATUS */
+    A_UINT8     txQueueNumber;
+    A_UINT8     rxQueueNumber;
+    A_UINT8     trafficDirection;       /* DIR_TYPE */
+    A_UINT8     trafficClass;
+} POSTPACK WMI_DEL_PRIORITY_STREAM_REPLY;
+
+#ifdef TIME_BASED_DISCARD
+/*
+ * WMI_SET_TBD_TIME_CMDID
+ */
+typedef PREPACK struct{
+	A_UINT32 discardDispostion:1;
+  	A_UINT32 txdiscardTime:31;
+} POSTPACK WMI_SET_TBD_TIME;
+extern WMI_SET_TBD_TIME *txDiscard ;
+#endif
+/*
+ * List of Events (target to host)
+ */
+typedef enum {
+    WMI_READY_EVENTID           = 0x1001,
+    WMI_CONNECT_EVENTID,
+    WMI_DISCONNECT_EVENTID,
+    WMI_BSSINFO_EVENTID,
+    WMI_CMDERROR_EVENTID,
+    WMI_REGDOMAIN_EVENTID,
+    WMI_PSTREAM_TIMEOUT_EVENTID,
+    WMI_NEIGHBOR_REPORT_EVENTID,
+    WMI_TKIP_MICERR_EVENTID,
+    WMI_SCAN_COMPLETE_EVENTID,           /* 0x100a */
+    WMI_REPORT_STATISTICS_EVENTID,
+    WMI_RSSI_THRESHOLD_EVENTID,
+    WMI_ERROR_REPORT_EVENTID,
+    WMI_OPT_RX_FRAME_EVENTID,
+    WMI_REPORT_ROAM_TBL_EVENTID,
+    WMI_EXTENSION_EVENTID,
+    WMI_CAC_EVENTID,
+    WMI_SNR_THRESHOLD_EVENTID,
+    WMI_LQ_THRESHOLD_EVENTID,
+    WMI_TX_RETRY_ERR_EVENTID,            /* 0x1014 */
+    WMI_REPORT_ROAM_DATA_EVENTID,
+    WMI_TEST_EVENTID,
+    WMI_APLIST_EVENTID,
+    WMI_GET_WOW_LIST_EVENTID,
+    WMI_GET_PMKID_LIST_EVENTID,
+    WMI_CHANNEL_CHANGE_EVENTID,
+    WMI_PEER_NODE_EVENTID,
+    WMI_PSPOLL_EVENTID,
+    WMI_DTIMEXPIRY_EVENTID,
+    WMI_WLAN_VERSION_EVENTID,
+    WMI_SET_PARAMS_REPLY_EVENTID,
+    WMI_ADDBA_REQ_EVENTID,              /*0x1020 */
+    WMI_ADDBA_RESP_EVENTID,
+    WMI_DELBA_REQ_EVENTID,
+    WMI_TX_COMPLETE_EVENTID,
+    WMI_HCI_EVENT_EVENTID,
+    WMI_ACL_DATA_EVENTID,
+    WMI_REPORT_SLEEP_STATE_EVENTID,
+    WMI_WAPI_REKEY_EVENTID,
+    WMI_REPORT_BTCOEX_STATS_EVENTID,
+    WMI_REPORT_BTCOEX_CONFIG_EVENTID,
+    WMI_GET_PMK_EVENTID,
+
+    /* DFS Events */
+    WMI_DFS_HOST_ATTACH_EVENTID,    /* 102B */
+    WMI_DFS_HOST_INIT_EVENTID,
+    WMI_DFS_RESET_DELAYLINES_EVENTID,
+    WMI_DFS_RESET_RADARQ_EVENTID,
+    WMI_DFS_RESET_AR_EVENTID,
+    WMI_DFS_RESET_ARQ_EVENTID,
+    WMI_DFS_SET_DUR_MULTIPLIER_EVENTID,
+    WMI_DFS_SET_BANGRADAR_EVENTID,
+    WMI_DFS_SET_DEBUGLEVEL_EVENTID,
+    WMI_DFS_PHYERR_EVENTID,
+    /* CCX Evants */
+    WMI_CCX_RM_STATUS_EVENTID,    /* 1035 */
+
+    /* P2P Events */
+    WMI_P2P_GO_NEG_RESULT_EVENTID,    /* 1036 */
+
+    WMI_WAC_SCAN_DONE_EVENTID,
+    WMI_WAC_REPORT_BSS_EVENTID,
+    WMI_WAC_START_WPS_EVENTID,
+    WMI_WAC_CTRL_REQ_REPLY_EVENTID,
+    WMI_REPORT_WMM_PARAMS_EVENTID,
+    WMI_WAC_REJECT_WPS_EVENTID,
+
+    /* More P2P Events */
+    WMI_P2P_GO_NEG_REQ_EVENTID,
+    WMI_P2P_INVITE_REQ_EVENTID,
+    WMI_P2P_INVITE_RCVD_RESULT_EVENTID,
+    WMI_P2P_INVITE_SENT_RESULT_EVENTID,
+    WMI_P2P_PROV_DISC_RESP_EVENTID,
+    WMI_P2P_PROV_DISC_REQ_EVENTID,
+
+    /*RFKILL Events*/
+    WMI_RFKILL_STATE_CHANGE_EVENTID,
+    WMI_RFKILL_GET_MODE_CMD_EVENTID,
+
+    WMI_P2P_START_SDPD_EVENTID,
+    WMI_P2P_SDPD_RX_EVENTID,
+
+    /* Special event used to notify host that AR6003
+     * has processed sleep command (needed to prevent
+     * a late incoming credit report from crashing
+     * the system)
+     */
+    WMI_SET_HOST_SLEEP_MODE_CMD_PROCESSED_EVENTID,
+
+    WMI_THIN_RESERVED_START_EVENTID = 0x8000,
+    /* Events in this range are reserved for thinmode
+     * See wmi_thin.h for actual definitions */
+    WMI_THIN_RESERVED_END_EVENTID = 0x8fff,
+
+    WMI_SET_CHANNEL_EVENTID,
+    WMI_ASSOC_REQ_EVENTID,
+
+    /* generic ACS event */
+    WMI_ACS_EVENTID,
+    WMI_STORERECALL_STORE_EVENTID,
+    WMI_WOW_EXT_WAKE_EVENTID,
+    WMI_GTK_OFFLOAD_STATUS_EVENTID,
+    WMI_NETWORK_LIST_OFFLOAD_EVENTID,
+    WMI_REMAIN_ON_CHNL_EVENTID,
+    WMI_CANCEL_REMAIN_ON_CHNL_EVENTID,
+    WMI_TX_STATUS_EVENTID,
+    WMI_RX_PROBE_REQ_EVENTID,
+    WMI_P2P_CAPABILITIES_EVENTID,
+    WMI_RX_ACTION_EVENTID,
+    WMI_P2P_INFO_EVENTID,
+    /*WMI Location API Commands*/
+#ifdef WLAN_LOCATION_SUPPORT   
+    WMI_RTT_MEASRESP_EVENTID,
+    WMI_RTT_CAPRESP_EVENTID,
+    WMI_RTT_STATUSRESP_EVENTID,
+#endif
+    /* WPS Events */ 
+    WMI_WPS_GET_STATUS_EVENTID,
+    WMI_WPS_PROFILE_EVENTID,  
+
+    /* more P2P events */
+    WMI_NOA_INFO_EVENTID,
+    WMI_OPPPS_INFO_EVENTID,
+    WMI_PORT_STATUS_EVENTID,
+
+    /* 802.11w */
+    WMI_GET_RSN_CAP_EVENTID,
+} WMI_EVENT_ID;
+
+typedef enum {
+    WMI_11A_CAPABILITY   = 1,
+    WMI_11G_CAPABILITY   = 2,
+    WMI_11AG_CAPABILITY  = 3,
+    WMI_11NA_CAPABILITY  = 4,
+    WMI_11NG_CAPABILITY  = 5,
+    WMI_11NAG_CAPABILITY = 6,
+    // END CAPABILITY
+    WMI_11N_CAPABILITY_OFFSET = (WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY),
+} WMI_PHY_CAPABILITY;
+
+typedef PREPACK struct {
+    A_UINT8     macaddr[ATH_MAC_LEN];
+    A_UINT8     phyCapability;              /* WMI_PHY_CAPABILITY */
+} POSTPACK WMI_READY_EVENT_1;
+
+typedef PREPACK struct {
+    A_UINT32    sw_version;
+    A_UINT32    abi_version;
+    A_UINT8     macaddr[ATH_MAC_LEN];
+    A_UINT8     phyCapability;              /* WMI_PHY_CAPABILITY */
+} POSTPACK WMI_READY_EVENT_2;
+
+#if defined(ATH_TARGET)
+#ifdef AR6002_REV2
+#define WMI_READY_EVENT WMI_READY_EVENT_1  /* AR6002_REV2 target code */
+#else
+#define WMI_READY_EVENT WMI_READY_EVENT_2  /* AR6001, AR6002_REV4, AR6002_REV6 */
+#endif
+#else
+#define WMI_READY_EVENT WMI_READY_EVENT_2 /* host code */
+#endif
+
+
+/*
+ * Connect Event
+ *
+ * In STA mode networkType comes along with connected phy mode
+ * To get networkType, WMI_NETWORK_TYPE (networkType)
+ * To get connected phymode, WMI_CONNECTED_PHYMODE(networkType)
+ * will give the phymode value.
+ */
+typedef PREPACK struct {
+    PREPACK union {
+        struct {
+            A_UINT16    channel;
+            A_UINT8     bssid[ATH_MAC_LEN];
+            A_UINT16    listenInterval;
+            A_UINT16    beaconInterval;
+#if defined(EXTENDED_TX_COMPLETE)
+            A_UINT16    networkType;
+            A_UINT8     aid;
+            A_UINT8     unused;
+#else
+            A_UINT32    networkType;
+#endif /* EXTENDED_TX_COMPLETE */
+        } infra_ibss_bss;
+        struct {
+            A_UINT8     phymode;
+            A_UINT8     aid;
+            A_UINT8     mac_addr[ATH_MAC_LEN];
+            A_UINT8     auth;
+            A_UINT8     keymgmt;
+            A_UINT16    cipher;
+            A_UINT8     apsd_info;
+            A_UINT8     unused[3];
+        } ap_sta;
+        struct {
+            A_UINT16    channel;
+            A_UINT8     bssid[ATH_MAC_LEN];
+            A_UINT8     unused[8];
+        } ap_bss;
+    } POSTPACK u;
+    A_UINT8     beaconIeLen;
+    A_UINT8     assocReqLen;
+    A_UINT8     assocRespLen;
+    A_UINT8     assocInfo[1];
+} POSTPACK WMI_CONNECT_EVENT;
+
+
+typedef struct {
+    A_UINT8   status;
+    A_UINT8   rspType;
+} WMI_ASSOCREQ_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8   host_accept;
+    A_UINT8   host_reasonCode;
+    A_UINT8   target_status;
+    A_UINT8   sta_mac_addr[ATH_MAC_LEN];
+    A_UINT8   rspType;
+} POSTPACK WMI_SEND_ASSOCRES_CMD;
+
+typedef struct {
+    A_UINT8   enable;
+} WMI_SET_ASSOCREQ_RELAY;
+
+/*
+ * Disconnect Event
+ */
+typedef enum {
+    NO_NETWORK_AVAIL   = 0x01,
+    LOST_LINK          = 0x02,     /* bmiss */
+    DISCONNECT_CMD     = 0x03,
+    BSS_DISCONNECTED   = 0x04,
+    AUTH_FAILED        = 0x05,
+    ASSOC_FAILED       = 0x06,
+    NO_RESOURCES_AVAIL = 0x07,
+    CSERV_DISCONNECT   = 0x08,
+    INVALID_PROFILE    = 0x0a,
+    DOT11H_CHANNEL_SWITCH = 0x0b,
+    PROFILE_MISMATCH   = 0x0c,
+    CONNECTION_EVICTED = 0x0d,
+    IBSS_MERGE         = 0x0e,
+    EXCESS_TX_RETRY    = 0x0f,     /* TX frames failed after excessive retries */
+    SEC_HS_TO_RECV_M1  = 0x10,     /* Security 4-way handshake timed out waiting for M1 */
+    SEC_HS_TO_RECV_M3  = 0x11,     /* Security 4-way handshake timed out waiting for M3 */
+    TKIP_COUNTERMEASURES = 0x12,
+    MLME_TIMEOUT       = 0x13,
+    CCX_TARGET_ROAMING_INDICATION = 0xfd,  /* hack for CCX AP-Assisted roaming*/
+    CCKM_ROAMING_INDICATION = 0xfe,  /* hack for CCKM fast roaming */
+} WMI_DISCONNECT_REASON;
+
+typedef PREPACK struct {
+    A_UINT16    protocolReasonStatus;  /* reason code, see 802.11 spec. */
+    A_UINT8     bssid[ATH_MAC_LEN];    /* set if known */
+    A_UINT8     disconnectReason ;      /* see WMI_DISCONNECT_REASON */
+    A_UINT8     assocRespLen;
+    A_UINT8     assocInfo[1];
+} POSTPACK WMI_DISCONNECT_EVENT;
+
+/*
+ * BSS Info Event.
+ * Mechanism used to inform host of the presence and characteristic of
+ * wireless networks present.  Consists of bss info header followed by
+ * the beacon or probe-response frame body.  The 802.11 header is not included.
+ */
+typedef enum {
+    BEACON_FTYPE = 0x1,
+    PROBERESP_FTYPE,
+    ACTION_MGMT_FTYPE,
+    PROBEREQ_FTYPE,
+} WMI_BI_FTYPE;
+
+enum {
+    BSS_ELEMID_CHANSWITCH = 0x01,
+    BSS_ELEMID_ATHEROS = 0x02,
+};
+
+typedef PREPACK struct {
+    A_UINT16    channel;
+    A_UINT8     frameType;          /* see WMI_BI_FTYPE */
+    A_UINT8     snr;
+    A_INT16     rssi;
+    A_UINT8     bssid[ATH_MAC_LEN];
+    A_UINT32    ieMask;
+} POSTPACK WMI_BSS_INFO_HDR;
+
+/*
+ * BSS INFO HDR version 2.0
+ * With 6 bytes HTC header and 6 bytes of WMI header
+ * WMI_BSS_INFO_HDR cannot be accomodated in the removed 802.11 management
+ * header space.
+ * - Reduce the ieMask to 2 bytes as only two bit flags are used
+ * - Remove rssi and compute it on the host. rssi = snr - 95
+ */
+typedef PREPACK struct {
+    A_UINT16    channel;
+    A_UINT8     frameType;          /* see WMI_BI_FTYPE */
+    A_UINT8     snr;
+    A_UINT8     bssid[ATH_MAC_LEN];
+    A_UINT16    ieMask;
+} POSTPACK WMI_BSS_INFO_HDR2;
+
+typedef PREPACK struct {
+    A_UINT8    bssid[ATH_MAC_LEN];
+    A_UINT8    pin[8];
+} POSTPACK WMI_WPS_PIN_INFO;
+
+typedef PREPACK struct {
+    PREPACK union {
+        A_UINT8 ie[17];
+        A_INT32 wac_status;
+    } POSTPACK info;
+} POSTPACK WMI_GET_WAC_INFO;
+
+#define IEEE80211_NWID_LEN                  32
+typedef PREPACK struct {
+    A_UINT8 bssid[ATH_MAC_LEN];
+    A_UINT8 ssid[IEEE80211_NWID_LEN];
+    A_UINT8 ssid_len;
+    A_UINT8 channel;
+    A_UINT8 snr;
+    A_UINT8 id;
+    A_UINT8 device_type;
+    A_UINT8 antenna_type;
+    A_INT8  threshold_offset1;  /* offset for AP Tx power */
+    A_INT8  threshold_offset2;  /* offset for antenna gain */
+} POSTPACK WMI_WAC_BSS_INFO_REPORT;
+
+/*
+ * Command Error Event
+ */
+typedef enum {
+    INVALID_PARAM  = 0x01,
+    ILLEGAL_STATE  = 0x02,
+    INTERNAL_ERROR = 0x03,
+    DFS_CHANNEL    = 0x05,
+} WMI_ERROR_CODE;
+
+typedef PREPACK struct {
+    A_UINT16    commandId;
+    A_UINT8     errorCode;
+} POSTPACK WMI_CMD_ERROR_EVENT;
+
+/*
+ * New Regulatory Domain Event
+ */
+typedef PREPACK struct {
+    A_UINT32    regDomain;
+} POSTPACK WMI_REG_DOMAIN_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8     txQueueNumber;
+    A_UINT8     rxQueueNumber;
+    A_UINT8     trafficDirection;
+    A_UINT8     trafficClass;
+} POSTPACK WMI_PSTREAM_TIMEOUT_EVENT;
+
+/*
+ * The WMI_NEIGHBOR_REPORT Event is generated by the target to inform
+ * the host of BSS's it has found that matches the current profile.
+ * It can be used by the host to cache PMKs and/to initiate pre-authentication
+ * if the BSS supports it.  The first bssid is always the current associated
+ * BSS.
+ * The bssid and bssFlags information repeats according to the number
+ * or APs reported.
+ */
+typedef enum {
+    WMI_DEFAULT_BSS_FLAGS   = 0x00,
+    WMI_PREAUTH_CAPABLE_BSS = 0x01,
+    WMI_PMKID_VALID_BSS     = 0x02,
+} WMI_BSS_FLAGS;
+
+typedef PREPACK struct {
+    A_UINT8     bssid[ATH_MAC_LEN];
+    A_UINT8     bssFlags;            /* see WMI_BSS_FLAGS */
+} POSTPACK WMI_NEIGHBOR_INFO;
+
+typedef PREPACK struct {
+    A_INT8      numberOfAps;
+    WMI_NEIGHBOR_INFO neighbor[1];
+} POSTPACK WMI_NEIGHBOR_REPORT_EVENT;
+
+/*
+ * TKIP MIC Error Event
+ */
+typedef PREPACK struct {
+    A_UINT8 keyid;
+    A_UINT8 ismcast;
+} POSTPACK WMI_TKIP_MICERR_EVENT;
+
+/*
+ * WMI_SCAN_COMPLETE_EVENTID - no parameters (old), staus parameter (new)
+ */
+typedef PREPACK struct {
+    A_INT32 status;
+} POSTPACK WMI_SCAN_COMPLETE_EVENT;
+
+typedef PREPACK struct {
+    A_INT32 rm_type;
+    A_INT32 status;
+} POSTPACK WMI_CCX_RM_STATUS_EVENT;
+
+#define MAX_OPT_DATA_LEN 1400
+
+/*
+ * WMI_SET_ADHOC_BSSID_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     bssid[ATH_MAC_LEN];
+} POSTPACK WMI_SET_ADHOC_BSSID_CMD;
+
+/*
+ * Special frame receive Event.
+ * Mechanism used to inform host of the receiption of the special frames.
+ * Consists of special frame info header followed by special frame body.
+ * The 802.11 header is not included.
+ */
+typedef PREPACK struct {
+    A_UINT16    channel;
+    A_UINT8     frameType;          /* see WMI_OPT_FTYPE */
+    A_INT8      snr;
+    A_UINT8     srcAddr[ATH_MAC_LEN];
+    A_UINT8     bssid[ATH_MAC_LEN];
+} POSTPACK WMI_OPT_RX_INFO_HDR;
+
+/*
+ * Reporting statistics.
+ */
+typedef PREPACK struct {
+    A_UINT32   tx_packets;
+    A_UINT32   tx_bytes;
+    A_UINT32   tx_unicast_pkts;
+    A_UINT32   tx_unicast_bytes;
+    A_UINT32   tx_multicast_pkts;
+    A_UINT32   tx_multicast_bytes;
+    A_UINT32   tx_broadcast_pkts;
+    A_UINT32   tx_broadcast_bytes;
+    A_UINT32   tx_rts_success_cnt;
+    A_UINT32   tx_packet_per_ac[4];
+    A_UINT32   tx_errors_per_ac[4];
+
+    A_UINT32   tx_errors;
+    A_UINT32   tx_failed_cnt;
+    A_UINT32   tx_retry_cnt;
+    A_UINT32   tx_mult_retry_cnt;
+    A_UINT32   tx_rts_fail_cnt;
+    A_INT32    tx_unicast_rate;
+}POSTPACK tx_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32   rx_packets;
+    A_UINT32   rx_bytes;
+    A_UINT32   rx_unicast_pkts;
+    A_UINT32   rx_unicast_bytes;
+    A_UINT32   rx_multicast_pkts;
+    A_UINT32   rx_multicast_bytes;
+    A_UINT32   rx_broadcast_pkts;
+    A_UINT32   rx_broadcast_bytes;
+    A_UINT32   rx_fragment_pkt;
+
+    A_UINT32   rx_errors;
+    A_UINT32   rx_crcerr;
+    A_UINT32   rx_key_cache_miss;
+    A_UINT32   rx_decrypt_err;
+    A_UINT32   rx_duplicate_frames;
+    A_INT32    rx_unicast_rate;
+}POSTPACK rx_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32   tkip_local_mic_failure;
+    A_UINT32   tkip_counter_measures_invoked;
+    A_UINT32   tkip_replays;
+    A_UINT32   tkip_format_errors;
+    A_UINT32   ccmp_format_errors;
+    A_UINT32   ccmp_replays;
+}POSTPACK tkip_ccmp_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32   power_save_failure_cnt;
+    A_UINT16   stop_tx_failure_cnt;
+    A_UINT16   atim_tx_failure_cnt;
+    A_UINT16   atim_rx_failure_cnt;
+    A_UINT16   bcn_rx_failure_cnt;
+}POSTPACK pm_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32    cs_bmiss_cnt;
+    A_UINT32    cs_lowRssi_cnt;
+    A_UINT16    cs_connect_cnt;
+    A_UINT16    cs_disconnect_cnt;
+    A_INT16     cs_aveBeacon_rssi;
+    A_UINT16    cs_roam_count;
+    A_INT16     cs_rssi;
+    A_UINT8     cs_snr;
+    A_UINT8     cs_aveBeacon_snr;
+    A_UINT8     cs_lastRoam_msec;
+} POSTPACK cserv_stats_t;
+
+typedef PREPACK struct {
+    tx_stats_t          tx_stats;
+    rx_stats_t          rx_stats;
+    tkip_ccmp_stats_t   tkipCcmpStats;
+}POSTPACK wlan_net_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32    arp_received;
+    A_UINT32    arp_matched;
+    A_UINT32    arp_replied;
+} POSTPACK arp_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32    wow_num_pkts_dropped;
+    A_UINT16    wow_num_events_discarded;
+    A_UINT8     wow_num_host_pkt_wakeups;
+    A_UINT8     wow_num_host_event_wakeups;
+} POSTPACK wlan_wow_stats_t;
+
+typedef PREPACK struct {
+    A_UINT32            lqVal;
+    A_INT32             noise_floor_calibation;
+    pm_stats_t          pmStats;
+    wlan_net_stats_t    txrxStats;
+    wlan_wow_stats_t    wowStats;
+    arp_stats_t         arpStats;
+    cserv_stats_t       cservStats;
+} POSTPACK WMI_TARGET_STATS;
+
+/*
+ * WMI_RSSI_THRESHOLD_EVENTID.
+ * Indicate the RSSI events to host. Events are indicated when we breach a
+ * thresold value.
+ */
+typedef enum{
+    WMI_RSSI_THRESHOLD1_ABOVE = 0,
+    WMI_RSSI_THRESHOLD2_ABOVE,
+    WMI_RSSI_THRESHOLD3_ABOVE,
+    WMI_RSSI_THRESHOLD4_ABOVE,
+    WMI_RSSI_THRESHOLD5_ABOVE,
+    WMI_RSSI_THRESHOLD6_ABOVE,
+    WMI_RSSI_THRESHOLD1_BELOW,
+    WMI_RSSI_THRESHOLD2_BELOW,
+    WMI_RSSI_THRESHOLD3_BELOW,
+    WMI_RSSI_THRESHOLD4_BELOW,
+    WMI_RSSI_THRESHOLD5_BELOW,
+    WMI_RSSI_THRESHOLD6_BELOW
+}WMI_RSSI_THRESHOLD_VAL;
+
+typedef PREPACK struct {
+    A_INT16 rssi;
+    A_UINT8 range;
+}POSTPACK WMI_RSSI_THRESHOLD_EVENT;
+
+/*
+ *  WMI_ERROR_REPORT_EVENTID
+ */
+typedef enum{
+    WMI_TARGET_PM_ERR_FAIL      = 0x00000001,
+    WMI_TARGET_KEY_NOT_FOUND    = 0x00000002,
+    WMI_TARGET_DECRYPTION_ERR   = 0x00000004,
+    WMI_TARGET_BMISS            = 0x00000008,
+    WMI_PSDISABLE_NODE_JOIN     = 0x00000010,
+    WMI_TARGET_COM_ERR          = 0x00000020,
+    WMI_TARGET_FATAL_ERR        = 0x00000040,
+    WMI_TARGET_BCN_FOUND        = 0x00000080
+} WMI_TARGET_ERROR_VAL;
+
+typedef PREPACK struct {
+    A_UINT32 errorVal;
+}POSTPACK  WMI_TARGET_ERROR_REPORT_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8 retrys;
+}POSTPACK  WMI_TX_RETRY_ERR_EVENT;
+
+typedef enum{
+    WMI_SNR_THRESHOLD1_ABOVE = 1,
+    WMI_SNR_THRESHOLD1_BELOW,
+    WMI_SNR_THRESHOLD2_ABOVE,
+    WMI_SNR_THRESHOLD2_BELOW,
+    WMI_SNR_THRESHOLD3_ABOVE,
+    WMI_SNR_THRESHOLD3_BELOW,
+    WMI_SNR_THRESHOLD4_ABOVE,
+    WMI_SNR_THRESHOLD4_BELOW
+} WMI_SNR_THRESHOLD_VAL;
+
+typedef PREPACK struct {
+    A_UINT8 range;  /* WMI_SNR_THRESHOLD_VAL */
+    A_UINT8 snr;
+}POSTPACK  WMI_SNR_THRESHOLD_EVENT;
+
+typedef enum{
+    WMI_LQ_THRESHOLD1_ABOVE = 1,
+    WMI_LQ_THRESHOLD1_BELOW,
+    WMI_LQ_THRESHOLD2_ABOVE,
+    WMI_LQ_THRESHOLD2_BELOW,
+    WMI_LQ_THRESHOLD3_ABOVE,
+    WMI_LQ_THRESHOLD3_BELOW,
+    WMI_LQ_THRESHOLD4_ABOVE,
+    WMI_LQ_THRESHOLD4_BELOW
+} WMI_LQ_THRESHOLD_VAL;
+
+typedef PREPACK struct {
+    A_INT32 lq;
+    A_UINT8 range;  /* WMI_LQ_THRESHOLD_VAL */
+}POSTPACK  WMI_LQ_THRESHOLD_EVENT;
+/*
+ * WMI_REPORT_ROAM_TBL_EVENTID
+ */
+#define MAX_ROAM_TBL_CAND   5
+
+typedef PREPACK struct {
+    A_INT32 roam_util;
+    A_UINT8 bssid[ATH_MAC_LEN];
+    A_INT8  rssi;
+    A_INT8  rssidt;
+    A_INT8  last_rssi;
+    A_INT8  util;
+    A_INT8  bias;
+    A_UINT8 reserved; /* For alignment */
+} POSTPACK WMI_BSS_ROAM_INFO;
+
+
+typedef PREPACK struct {
+    A_UINT16  roamMode;
+    A_UINT16  numEntries;
+    WMI_BSS_ROAM_INFO bssRoamInfo[1];
+} POSTPACK WMI_TARGET_ROAM_TBL;
+
+/*
+ * WMI_HCI_EVENT_EVENTID
+ */
+typedef PREPACK struct {
+    A_UINT16    evt_buf_sz;     /* HCI event buffer size */
+    A_UINT8     buf[1];         /* HCI  event */
+} POSTPACK WMI_HCI_EVENT;
+
+/*
+ *  WMI_CAC_EVENTID
+ */
+typedef enum {
+    CAC_INDICATION_ADMISSION = 0x00,
+    CAC_INDICATION_ADMISSION_RESP = 0x01,
+    CAC_INDICATION_DELETE = 0x02,
+    CAC_INDICATION_NO_RESP = 0x03,
+}CAC_INDICATION;
+
+#define WMM_TSPEC_IE_LEN   63
+
+typedef PREPACK struct {
+    A_UINT8 ac;
+    A_UINT8 cac_indication;
+    A_UINT8 statusCode;
+    A_UINT8 tspecSuggestion[WMM_TSPEC_IE_LEN];
+}POSTPACK  WMI_CAC_EVENT;
+
+/*
+ * WMI_APLIST_EVENTID
+ */
+
+typedef enum {
+    APLIST_VER1 = 1,
+} APLIST_VER;
+
+typedef PREPACK struct {
+    A_UINT8     bssid[ATH_MAC_LEN];
+    A_UINT16    channel;
+} POSTPACK  WMI_AP_INFO_V1;
+
+typedef PREPACK union {
+    WMI_AP_INFO_V1  apInfoV1;
+} POSTPACK WMI_AP_INFO;
+
+typedef PREPACK struct {
+    A_UINT8     apListVer;
+    A_UINT8     numAP;
+    WMI_AP_INFO apList[1];
+} POSTPACK WMI_APLIST_EVENT;
+
+/*
+ * developer commands
+ */
+
+/*
+ * WMI_SET_BITRATE_CMDID
+ *
+ * Get bit rate cmd uses same definition as set bit rate cmd
+ *
+ */
+typedef enum {
+    RATE_AUTO   = -1,
+     AR6003_RATE_1Mb       = 0,
+     AR6003_RATE_2Mb       = 1,
+     AR6003_RATE_5_5Mb     = 2,
+     AR6003_RATE_11Mb      = 3,
+     AR6003_RATE_6Mb       = 4,
+     AR6003_RATE_9Mb       = 5,
+     AR6003_RATE_12Mb      = 6,
+     AR6003_RATE_18Mb      = 7,
+     AR6003_RATE_24Mb      = 8,
+     AR6003_RATE_36Mb      = 9,
+     AR6003_RATE_48Mb      = 10,
+     AR6003_RATE_54Mb      = 11,
+     AR6003_RATE_MCS_0_20  = 12,
+     AR6003_RATE_MCS_1_20  = 13,
+     AR6003_RATE_MCS_2_20  = 14,
+     AR6003_RATE_MCS_3_20  = 15,
+     AR6003_RATE_MCS_4_20  = 16,
+     AR6003_RATE_MCS_5_20  = 17,
+     AR6003_RATE_MCS_6_20  = 18,
+     AR6003_RATE_MCS_7_20  = 19,
+     AR6003_RATE_MCS_0_40  = 20,
+     AR6003_RATE_MCS_1_40  = 21,
+     AR6003_RATE_MCS_2_40  = 22,
+     AR6003_RATE_MCS_3_40  = 23,
+     AR6003_RATE_MCS_4_40  = 24,
+     AR6003_RATE_MCS_5_40  = 25,
+     AR6003_RATE_MCS_6_40  = 26,
+     AR6003_RATE_MCS_7_40  = 27,
+     AR6003_RATE_MAX,
+
+     AR6004_RATE_1Mb       = 0,
+     AR6004_RATE_2Mb       = 1,
+     AR6004_RATE_5_5Mb     = 2,
+     AR6004_RATE_11Mb      = 3,
+     AR6004_RATE_6Mb       = 4,
+     AR6004_RATE_9Mb       = 5,
+     AR6004_RATE_12Mb      = 6,
+     AR6004_RATE_18Mb      = 7,
+     AR6004_RATE_24Mb      = 8,
+     AR6004_RATE_36Mb      = 9,
+     AR6004_RATE_48Mb      = 10,
+     AR6004_RATE_54Mb      = 11,
+     AR6004_RATE_MCS_0_20  = 12,
+     AR6004_RATE_MCS_1_20  = 13,
+     AR6004_RATE_MCS_2_20  = 14,
+     AR6004_RATE_MCS_3_20  = 15,
+     AR6004_RATE_MCS_4_20  = 16,
+     AR6004_RATE_MCS_5_20  = 17,
+     AR6004_RATE_MCS_6_20  = 18,
+     AR6004_RATE_MCS_7_20  = 19,
+     AR6004_RATE_MCS_8_20  = 20,
+     AR6004_RATE_MCS_9_20  = 21,
+     AR6004_RATE_MCS_10_20 = 22,
+     AR6004_RATE_MCS_11_20 = 23,
+     AR6004_RATE_MCS_12_20 = 24,
+     AR6004_RATE_MCS_13_20 = 25,
+     AR6004_RATE_MCS_14_20 = 26,
+     AR6004_RATE_MCS_15_20 = 27,
+     AR6004_RATE_MCS_0_40  = 28,
+     AR6004_RATE_MCS_1_40  = 29,
+     AR6004_RATE_MCS_2_40  = 30,
+     AR6004_RATE_MCS_3_40  = 31,
+     AR6004_RATE_MCS_4_40  = 32,
+     AR6004_RATE_MCS_5_40  = 33,
+     AR6004_RATE_MCS_6_40  = 34,
+     AR6004_RATE_MCS_7_40  = 35,
+     AR6004_RATE_MCS_8_40  = 36,
+     AR6004_RATE_MCS_9_40  = 37,
+     AR6004_RATE_MCS_10_40 = 38,
+     AR6004_RATE_MCS_11_40 = 39,
+     AR6004_RATE_MCS_12_40 = 40,
+     AR6004_RATE_MCS_13_40 = 41,
+     AR6004_RATE_MCS_14_40 = 42,
+     AR6004_RATE_MCS_15_40 = 43,
+     AR6004_RATE_MAX,
+} WMI_BIT_RATE;
+
+typedef PREPACK struct {
+    A_INT8      rateIndex;          /* see WMI_BIT_RATE */
+    A_INT8      mgmtRateIndex;
+    A_INT8      ctlRateIndex;
+} POSTPACK WMI_BIT_RATE_CMD;
+
+
+typedef PREPACK struct {
+    A_INT8      rateIndex;          /* see WMI_BIT_RATE */
+} POSTPACK  WMI_BIT_RATE_REPLY;
+
+
+/*
+ * WMI_SET_FIXRATES_CMDID
+ *
+ * Get fix rates cmd uses same definition as set fix rates cmd
+ * Fix rate mask is now 64 bit, which is split across two words.
+ * Refer WMI_BIT_RATE for bit position for each rate.
+ */
+#define FIX_RATE_1Mb            ((A_UINT32)0x1)
+#define FIX_RATE_2Mb            ((A_UINT32)0x2)
+#define FIX_RATE_5_5Mb          ((A_UINT32)0x4)
+#define FIX_RATE_11Mb           ((A_UINT32)0x8)
+#define FIX_RATE_6Mb            ((A_UINT32)0x10)
+#define FIX_RATE_9Mb            ((A_UINT32)0x20)
+#define FIX_RATE_12Mb           ((A_UINT32)0x40)
+#define FIX_RATE_18Mb           ((A_UINT32)0x80)
+#define FIX_RATE_24Mb           ((A_UINT32)0x100)
+#define FIX_RATE_36Mb           ((A_UINT32)0x200)
+#define FIX_RATE_48Mb           ((A_UINT32)0x400)
+#define FIX_RATE_54Mb           ((A_UINT32)0x800)
+
+typedef PREPACK struct {
+    A_UINT32      fixRateMask[WMI_MAX_RATE_MASK];          /* see WMI_BIT_RATE */
+} POSTPACK WMI_FIX_RATES_CMD, WMI_FIX_RATES_REPLY;
+
+typedef PREPACK struct {
+    A_UINT8      bEnableMask;
+    A_UINT8      frameType;              /* type and subtype */
+    A_UINT8      reserved[2];            /* for alignment    */
+    A_UINT32     frameRateMask[WMI_MAX_RATE_MASK];          /* see WMI_BIT_RATE */
+} POSTPACK WMI_FRAME_RATES_CMD, WMI_FRAME_RATES_REPLY;
+
+/*
+ * WMI_SET_RECONNECT_AUTH_MODE_CMDID
+ *
+ * Set authentication mode
+ */
+typedef enum {
+    RECONN_DO_AUTH = 0x00,
+    RECONN_NOT_AUTH = 0x01
+} WMI_AUTH_MODE;
+
+typedef PREPACK struct {
+    A_UINT8 mode;
+} POSTPACK WMI_SET_AUTH_MODE_CMD;
+
+/*
+ * WMI_SET_REASSOC_MODE_CMDID
+ *
+ * Set authentication mode
+ */
+typedef enum {
+    REASSOC_DO_DISASSOC = 0x00,
+    REASSOC_DONOT_DISASSOC = 0x01
+} WMI_REASSOC_MODE;
+
+typedef PREPACK struct {
+    A_UINT8 mode;
+}POSTPACK WMI_SET_REASSOC_MODE_CMD;
+
+typedef enum {
+    ROAM_DATA_TIME = 1,            /* Get The Roam Time Data */
+} ROAM_DATA_TYPE;
+
+typedef PREPACK struct {
+    A_UINT32        disassoc_time;
+    A_UINT32        no_txrx_time;
+    A_UINT32        assoc_time;
+    A_UINT32        allow_txrx_time;
+    A_UINT8         disassoc_bssid[ATH_MAC_LEN];
+    A_INT8          disassoc_bss_rssi;
+    A_UINT8         assoc_bssid[ATH_MAC_LEN];
+    A_INT8          assoc_bss_rssi;
+} POSTPACK WMI_TARGET_ROAM_TIME;
+
+typedef PREPACK struct {
+    PREPACK union {
+        WMI_TARGET_ROAM_TIME roamTime;
+    } POSTPACK u;
+    A_UINT8 roamDataType ;
+} POSTPACK WMI_TARGET_ROAM_DATA;
+
+typedef enum {
+    WMI_WMM_DISABLED = 0,
+    WMI_WMM_ENABLED
+} WMI_WMM_STATUS;
+
+typedef PREPACK struct {
+    A_UINT8    status;
+}POSTPACK WMI_SET_WMM_CMD;
+
+typedef PREPACK struct {
+    A_UINT8    status;
+}POSTPACK WMI_SET_QOS_SUPP_CMD;
+
+typedef enum {
+    WMI_TXOP_DISABLED = 0,
+    WMI_TXOP_ENABLED
+} WMI_TXOP_CFG;
+
+typedef PREPACK struct {
+    A_UINT8    txopEnable;
+}POSTPACK WMI_SET_WMM_TXOP_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 keepaliveInterval;
+} POSTPACK WMI_SET_KEEPALIVE_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 keepaliveInterval;
+    A_UINT8 keepaliveMode;
+    A_UINT8 reserved[2];
+    A_UINT32 keepalive_arp_srcip;
+    A_UINT32 keepalive_arp_tgtip;
+    A_UINT8 peer_mac_address[6];
+} POSTPACK WMI_SET_KEEPALIVE_CMD_EXT;
+
+
+typedef PREPACK struct {
+    A_BOOL configured;
+    A_UINT8 keepaliveInterval;
+} POSTPACK WMI_GET_KEEPALIVE_CMD;
+
+/*
+ * Add Application specified IE to a management frame
+ */
+#define WMI_MAX_IE_LEN  255
+
+typedef PREPACK struct {
+    A_UINT8 mgmtFrmType;  /* one of WMI_MGMT_FRAME_TYPE */
+    A_UINT8 ieLen;    /* Length  of the IE that should be added to the MGMT frame */
+    A_UINT8 ieInfo[1];
+} POSTPACK WMI_SET_APPIE_CMD;
+
+/*
+ * Notify the WSC registration status to the target
+ */
+#define WSC_REG_ACTIVE     1
+#define WSC_REG_INACTIVE   0
+/* Generic Hal Interface for setting hal paramters. */
+/* Add new Set HAL Param cmdIds here for newer params */
+typedef enum {
+   WHAL_SETCABTO_CMDID = 1,
+}WHAL_CMDID;
+
+typedef PREPACK struct {
+    A_UINT8 cabTimeOut;
+} POSTPACK WHAL_SETCABTO_PARAM;
+
+typedef PREPACK struct {
+    A_UINT8  whalCmdId;
+    A_UINT8 data[1];
+} POSTPACK WHAL_PARAMCMD;
+
+
+#define WOW_MAX_FILTER_LISTS 1 /*4*/
+#define WOW_MAX_FILTERS_PER_LIST 4
+#define WOW_PATTERN_SIZE 64
+#define WOW_MASK_SIZE 64
+
+#define MAC_MAX_FILTERS_PER_LIST 7
+
+typedef PREPACK struct {
+    A_UINT8 wow_valid_filter;
+    A_UINT8 wow_filter_id;
+    A_UINT8 wow_filter_size;
+    A_UINT8 wow_filter_offset;
+    A_UINT8 wow_filter_mask[WOW_MASK_SIZE];
+    A_UINT8 wow_filter_pattern[WOW_PATTERN_SIZE];
+} POSTPACK WOW_FILTER;
+
+
+typedef PREPACK struct {
+    A_UINT8 wow_valid_list;
+    A_UINT8 wow_list_id;
+    A_UINT8 wow_num_filters;
+    A_UINT8 wow_total_list_size;
+    WOW_FILTER list[WOW_MAX_FILTERS_PER_LIST];
+} POSTPACK WOW_FILTER_LIST;
+
+typedef PREPACK struct {
+    A_UINT8 valid_filter;
+    A_UINT8 mac_addr[ATH_MAC_LEN];
+} POSTPACK MAC_FILTER;
+
+
+typedef PREPACK struct {
+    A_UINT8 total_list_size;
+    A_UINT8 enable;
+    MAC_FILTER list[MAC_MAX_FILTERS_PER_LIST];
+} POSTPACK MAC_FILTER_LIST;
+
+#define MAX_IP_ADDRS  2
+typedef PREPACK struct {
+    A_UINT32 ips[MAX_IP_ADDRS];  /* IP in Network Byte Order */
+} POSTPACK WMI_SET_IP_CMD;
+
+typedef PREPACK struct {
+    A_BOOL awake;
+    A_BOOL asleep;
+} POSTPACK WMI_SET_HOST_SLEEP_MODE_CMD;
+
+typedef A_UINT32 WMI_WOW_FILTER;
+
+    /* bit positions for filter options */
+#define  WOW_FILTER_UNUSED          0
+#define  WOW_FILTER_SSID            1   /* wake up on probed SSID (legacy definition) */
+    /* the following filter options are available if the WOW extensions are installed in the target
+     * otherwise the feature setting has no effect  */
+
+#define WOW_FILTER_OPTION_MASK(option)  (1 << (option))
+#define WOW_FILTER_OPTION_MAGIC_PACKET  WOW_FILTER_OPTION_MASK(2)
+#define WOW_FILTER_OPTION_EAP_REQ       WOW_FILTER_OPTION_MASK(3)
+#define WOW_FILTER_OPTION_PATTERNS      WOW_FILTER_OPTION_MASK(4)
+#define WOW_FILTER_OPTION_OFFLOAD_ARP   WOW_FILTER_OPTION_MASK(5)
+#define WOW_FILTER_OPTION_OFFLOAD_NS    WOW_FILTER_OPTION_MASK(6)
+#define WOW_FILTER_OPTION_OFFLOAD_GTK   WOW_FILTER_OPTION_MASK(7)
+#define WOW_FILTER_OPTION_8021X_4WAYHS  WOW_FILTER_OPTION_MASK(8)
+#define WOW_FILTER_OPTION_NLO_DISCVRY   WOW_FILTER_OPTION_MASK(9)
+#define WOW_FILTER_OPTION_NWK_DISASSOC  WOW_FILTER_OPTION_MASK(10)
+#define WOW_FILTER_OPTION_GTK_ERROR     WOW_FILTER_OPTION_MASK(11)
+
+#define WOW_FILTER_OPTION_TEST_MODE     WOW_FILTER_OPTION_MASK(15)
+
+
+typedef PREPACK struct {
+    A_BOOL enable_wow;
+    WMI_WOW_FILTER filter;
+    A_UINT16 hostReqDelay;
+} POSTPACK WMI_SET_WOW_MODE_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 filter_list_id;
+} POSTPACK WMI_GET_WOW_LIST_CMD;
+
+/*
+ * WMI_GET_WOW_LIST_CMD reply
+ */
+typedef PREPACK struct {
+    A_UINT8     num_filters;     /* number of patterns in reply */
+    A_UINT8     this_filter_num; /*  this is filter # x of total num_filters */
+    A_UINT8     wow_mode;
+    A_UINT8     host_mode;
+    WOW_FILTER  wow_filters[1];
+} POSTPACK WMI_GET_WOW_LIST_REPLY;
+
+typedef PREPACK struct {
+    A_UINT8 filter_list_id;
+    A_UINT8 filter_size;
+    A_UINT8 filter_offset;
+    A_UINT8 filter[1];
+} POSTPACK WMI_ADD_WOW_PATTERN_CMD;
+
+typedef PREPACK struct {
+    A_UINT16 filter_list_id;
+    A_UINT16 filter_id;
+} POSTPACK WMI_DEL_WOW_PATTERN_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 macaddr[ATH_MAC_LEN];
+} POSTPACK WMI_SET_MAC_ADDRESS_CMD;
+
+/* WMI_SET_TXE_NOTIFY_CMDID */
+typedef PREPACK struct {
+        A_UINT32 rate;
+        A_UINT32 pkts;
+        A_UINT32 intvl;
+} POSTPACK WMI_SET_TXE_NOTIFY_CMD;
+
+
+/*
+ * WMI_SET_AKMP_PARAMS_CMD
+ */
+
+#define WMI_AKMP_MULTI_PMKID_EN   0x000001
+
+typedef PREPACK struct {
+    A_UINT32    akmpInfo;
+} POSTPACK WMI_SET_AKMP_PARAMS_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 pmkid[WMI_PMKID_LEN];
+} POSTPACK WMI_PMKID;
+
+/*
+ * WMI_SET_PMKID_LIST_CMD
+ */
+#define WMI_MAX_PMKID_CACHE   8
+
+typedef PREPACK struct {
+    A_UINT32    numPMKID;
+    WMI_PMKID   pmkidList[WMI_MAX_PMKID_CACHE];
+} POSTPACK WMI_SET_PMKID_LIST_CMD;
+
+/*
+ * WMI_GET_PMKID_LIST_CMD  Reply
+ * Following the Number of PMKIDs is the list of PMKIDs
+ */
+typedef PREPACK struct {
+    A_UINT32    numPMKID;
+    A_UINT8     bssidList[ATH_MAC_LEN][1];
+    WMI_PMKID   pmkidList[1];
+} POSTPACK WMI_PMKID_LIST_REPLY;
+
+typedef PREPACK struct {
+    A_UINT16 oldChannel;
+    A_UINT32 newChannel;
+} POSTPACK WMI_CHANNEL_CHANGE_EVENT;
+
+typedef PREPACK struct {
+    A_UINT32 version;
+} POSTPACK WMI_WLAN_VERSION_EVENT;
+
+
+/* WMI_ADDBA_REQ_EVENTID */
+typedef PREPACK struct {
+    A_UINT8     tid;
+    A_UINT8     win_sz;
+    A_UINT16    st_seq_no;
+    A_UINT8     status;         /* f/w response for ADDBA Req; OK(0) or failure(!=0) */
+} POSTPACK WMI_ADDBA_REQ_EVENT;
+
+/* WMI_ADDBA_RESP_EVENTID */
+typedef PREPACK struct {
+    A_UINT8     tid;
+    A_UINT8     status;         /* OK(0), failure (!=0) */
+    A_UINT16    amsdu_sz;       /* Three values: Not supported(0), 3839, 8k */
+} POSTPACK WMI_ADDBA_RESP_EVENT;
+
+/* WMI_DELBA_EVENTID
+ * f/w received a DELBA for peer and processed it.
+ * Host is notified of this
+ */
+typedef PREPACK struct {
+    A_UINT8     tid;
+    A_UINT8     is_peer_initiator;
+    A_UINT16    reason_code;
+} POSTPACK WMI_DELBA_EVENT;
+
+
+#ifdef WAPI_ENABLE
+#define WAPI_REKEY_UCAST    1
+#define WAPI_REKEY_MCAST    2
+typedef PREPACK struct {
+    A_UINT8     type;
+    A_UINT8     macAddr[ATH_MAC_LEN];
+} POSTPACK WMI_WAPIREKEY_EVENT;
+#endif
+
+
+/* WMI_ALLOW_AGGR_CMDID
+ * Configures tid's to allow ADDBA negotiations
+ * on each tid, in each direction
+ */
+typedef PREPACK struct {
+    A_UINT16    tx_allow_aggr;  /* 16-bit mask to allow uplink ADDBA negotiation - bit position indicates tid*/
+    A_UINT16    rx_allow_aggr;  /* 16-bit mask to allow donwlink ADDBA negotiation - bit position indicates tid*/
+} POSTPACK WMI_ALLOW_AGGR_CMD;
+
+/* WMI_ADDBA_REQ_CMDID
+ * f/w starts performing ADDBA negotiations with peer
+ * on the given tid
+ */
+typedef PREPACK struct {
+    A_UINT8     tid;
+} POSTPACK WMI_ADDBA_REQ_CMD;
+
+/* WMI_DELBA_REQ_CMDID
+ * f/w would teardown BA with peer.
+ * is_send_initiator indicates if it's or tx or rx side
+ */
+typedef PREPACK struct {
+    A_UINT8     tid;
+    A_UINT8     is_sender_initiator;
+
+} POSTPACK WMI_DELBA_REQ_CMD;
+
+#define PEER_NODE_JOIN_EVENT 0x00
+#define PEER_NODE_LEAVE_EVENT 0x01
+#define PEER_FIRST_NODE_JOIN_EVENT 0x10
+#define PEER_LAST_NODE_LEAVE_EVENT 0x11
+typedef PREPACK struct {
+    A_UINT8 eventCode;
+    A_UINT8 peerMacAddr[ATH_MAC_LEN];
+} POSTPACK WMI_PEER_NODE_EVENT;
+
+#define IEEE80211_FRAME_TYPE_MGT          0x00
+#define IEEE80211_FRAME_TYPE_CTL          0x04
+
+typedef PREPACK struct {
+    A_UINT32    rules; /* combination of WMI_WRT_... values */
+} POSTPACK WMI_CONFIG_TX_MAC_RULES_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 enable;     /* 1 == device operates in promiscuous mode , 0 == normal mode <default> */
+} POSTPACK WMI_SET_PROMISCUOUS_MODE_CMD;
+
+
+/*RFKILL Related Data Structures*/
+typedef enum {
+    RADIO_STATE_OFF     = 0x1,
+    RADIO_STATE_ON      = 0x2,
+    RADIO_STATE_INVALID = 0xFF
+}RFKILL_RADIO_STATE;
+
+typedef PREPACK struct {
+    A_UINT8  GPIOPinNumber;
+    A_UINT8  IntrType;
+    A_UINT8  RadioState;
+} POSTPACK WMI_RFKILL_MODE_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 FastScanInterval;
+    A_UINT32 FastScanDuration;
+    A_UINT32 SlowScanInterval;
+    A_UINT8  ScanType; //ActiveUseSSID=0, ActiveUseWildCard=1, PassiveScan=2
+    A_UINT8  bStartNetworkListOffload; //TRUE - Use the Probed SSID
+}POSTPACK WMI_NETWORK_LIST_OFFLOAD_CMD;
+
+typedef PREPACK struct {
+   A_UINT8   bProfileMatch;
+   A_UINT8   Index;
+   A_UINT32  nFastScansRemaining;
+}POSTPACK WMI_NETWORK_LIST_OFFLOAD_INFO;
+
+typedef PREPACK struct _WMI_IPV6_ADDR {
+    A_UINT8    address[16];    /* IPV6 in Network Byte Order */
+} POSTPACK WMI_IPV6_ADDR;
+
+#define WMI_MAX_NS_OFFLOADS           2
+#define WMI_MAX_ARP_OFFLOADS          2
+
+#define WMI_ARPOFF_FLAGS_VALID              (1 << 0)    /* the tuple entry is valid */
+#define WMI_ARPOFF_FLAGS_MAC_VALID          (1 << 1)    /* the target mac address is valid */
+#define WMI_ARPOFF_FLAGS_REMOTE_IP_VALID    (1 << 2)    /* remote IP field is valid */
+
+typedef PREPACK struct {
+    A_UINT8           flags;                   /* flags */
+    A_UINT8           target_ipaddr[4];        /* IPV4 addresses of the local node*/
+    A_UINT8           remote_ipaddr[4];        /* source address of the remote node requesting the ARP (qualifier) */
+    A_UINT8           target_mac[ATH_MAC_LEN]; /* mac address for this tuple, if not valid, the local MAC is used */
+} POSTPACK WMI_ARP_OFFLOAD_TUPLE;
+
+#define WMI_NSOFF_FLAGS_VALID           (1 << 0)    /* the tuple entry is valid */
+#define WMI_NSOFF_FLAGS_MAC_VALID       (1 << 1)    /* the target mac address is valid */
+#define WMI_NSOFF_FLAGS_REMOTE_IP_VALID (1 << 2)    /* remote IP field is valid */
+
+#define WMI_NSOFF_MAX_TARGET_IPS    2
+
+typedef PREPACK struct {
+    A_UINT8           flags;                     /* flags */
+    WMI_IPV6_ADDR     target_ipaddr[WMI_NSOFF_MAX_TARGET_IPS]; /* IPV6 target addresses of the local node  */
+    WMI_IPV6_ADDR     solicitation_ipaddr;       /* multi-cast source IP addresses for receiving solicitations */
+    WMI_IPV6_ADDR     remote_ipaddr;             /* address of remote node requesting the solicitation (qualifier) */
+    A_UINT8           target_mac[ATH_MAC_LEN];   /* mac address for this tuple, if not valid, the local MAC is used */
+} POSTPACK WMI_NS_OFFLOAD_TUPLE;
+
+typedef PREPACK struct {
+    A_UINT32                flags;
+    WMI_NS_OFFLOAD_TUPLE    ns_tuples[WMI_MAX_NS_OFFLOADS];
+    WMI_ARP_OFFLOAD_TUPLE   arp_tuples[WMI_MAX_ARP_OFFLOADS];
+} POSTPACK WMI_SET_ARP_NS_OFFLOAD_CMD;
+
+typedef PREPACK struct {
+    A_UINT8  filter_list_id;
+    A_UINT8  filter_id;
+    A_UINT16 filter_size;
+    A_UINT8  filter_offset;
+    A_UINT8  filter[1];
+} POSTPACK WMI_ADD_WOW_EXT_PATTERN_CMD;
+
+    /* WOW extension for larger filter patterns, note these settings are only
+     * valid if the WOW extension is installed in the target
+     * When using the WOW extensions, the use of WMI_GET_WOW_LIST_REPLY will return an empty
+     * WOW_FILTER structure.  In WOW extended mode, the host is expected to track what filters
+     * are installed in the target. */
+#define WOW_EXT_DEF_FILTER_LISTS        1
+#define WOW_EXT_DEF_FILTERS_PER_LIST    16
+#define WOW_EXT_DEF_PATTERN_SIZE        136     /* typical pattern size (128 byte DIX + SNAPLLC) */
+#define WOW_EXT_FILTER_ID_CLEAR_ALL     0xFFFF  /* use this ID in WMI_DEL_WOW_PATTERN, to clear all patterns */
+
+#define WOW_EXT_MAX_PATTERN_LEN_SIZE    2040  /* absolute max limit on pattern */
+
+    /* compute mask size based on pattern size */
+#define WOW_EXT_COMPUTE_MASK_SIZE(msize,psize) \
+{                                              \
+    *(msize) = ((A_UINT32)psize)/8;            \
+    if (((A_UINT32)psize) % 8) {(*(msize))++;} \
+}
+
+    /* variable length event providing wake event information. Wake events can be
+     * the result of wake-packets, network events or other miscellaneous wake causes.
+     *
+     * NOTE: a WMI data header flag is not sufficient to use as WMI also forwards
+     * A-MSDU aggregates. The wake event indicates which frame caused the wake which could
+     * be embedded in an A-MSDU frame */
+typedef enum {
+    WOW_EXT_WAKE_TYPE_UNDEF = 0,
+    WOW_EXT_WAKE_TYPE_MAGIC  = 1,    /* magic, value = N/A, wake_data = copy of wake packet */
+    WOW_EXT_WAKE_TYPE_PATTERN = 2,   /* bitmap pattern, value = filter index, wake_data = copy of wake packet */
+    WOW_EXT_WAKE_TYPE_EAPREQ = 3,    /* eap request value = N/A, wake_data = copy of wake packet */
+    WOW_EXT_WAKE_TYPE_4WAYHS,        /* 802.1X 4-wake handshake request caused wakeup, wake_data - copy of packet */
+    WOW_EXT_WAKE_TYPE_NETWORK_NLO,            /* network list offload match */
+    WOW_EXT_WAKE_TYPE_NETWORK_DISASSOC,       /* network association loss */
+    WOW_EXT_WAKE_TYPE_NETWORK_GTK_OFFL_ERROR, /* if GTK refresh is enabled, a failure generates a wake event */
+    WOW_EXT_WAKE_TYPE_MAX
+} WOW_EXT_WAKE_TYPE;
+
+typedef PREPACK struct {
+    A_UINT16    flags;                /* flags, currently reserved */
+    A_UINT8     type;                 /* type of packet that caused the wake event */
+    A_UINT8     value;                /* optional value depending on type (see above) */
+    A_UINT16    packet_length;        /* if type is a wake packet, then this is the original length */
+    A_UINT16    wake_data_length;     /* copy length of wake packet data to follow */
+    A_UINT8     wake_data[1];         /* start of wake data*/
+} POSTPACK WMI_WOW_EXT_WAKE_EVENT;
+
+#define WMI_WOW_EXT_WAKE_MAX_DATA_LENGTH  128
+
+#define GTK_OFFLOAD_REPLAY_COUNTER_BYTES  8
+
+#define WMI_GTK_OFFLOAD_STATUS_FLAGS_RUNNING (1 << 0)  /* GTK offload is running*/
+
+
+#define GTK_OFFLOAD_KEK_BYTES       16
+#define GTK_OFFLOAD_KCK_BYTES       16
+#define GTK_REPLAY_COUNTER_BYTES    8
+
+typedef PREPACK struct {
+    A_UINT32    flags;          /* status flags */
+    A_UINT32    refresh_cnt;    /* number of successful GTK refresh exchanges since last SET operation */
+    A_UINT8     replay_counter[GTK_REPLAY_COUNTER_BYTES]; /* current replay counter */
+} POSTPACK  WMI_GTK_OFFLOAD_STATUS_EVENT;
+
+#define WMI_GTK_OFFLOAD_OPCODE_SET     1  /* set offload parameters, KEK,KCK and replay counter values are valid */
+#define WMI_GTK_OFFLOAD_OPCODE_CLEAR   2  /* clear offload parameters */
+#define WMI_GTK_OFFLOAD_OPCODE_STATUS  3  /* get status, generates WMI_GTK_OFFLOAD_STATUS_EVENT  */
+
+ /* structure to issue GTK offload opcode to set/clear or fetch status
+  * NOTE: offload is enabled when WOW options are enabled, see WOW_FILTER_OPTION_OFFLOAD_GTK */
+typedef PREPACK struct {
+    A_UINT32    flags;                          /* control flags */
+    A_UINT8     opcode;                         /* opcode */
+    A_UINT8     KEK[GTK_OFFLOAD_KEK_BYTES];     /* key encryption key */
+    A_UINT8     KCK[GTK_OFFLOAD_KCK_BYTES];     /* key confirmation key */
+    A_UINT8     replay_counter[GTK_REPLAY_COUNTER_BYTES];  /* replay counter for re-key */
+} POSTPACK  WMI_GTK_OFFLOAD_OP;
+
+
+#define WMI_RX_FILTER_DEFAULT_MAX_TESTS_PER_FILTER  5   
+#define WMI_RX_FILTER_DEFAULT_MAX_FILTERS           10
+
+   /* note the max pattern length was selected to balance size and usefulness.  Header
+     * filtering is sized to support IPV6 addresses (16 octets using 2 entries) 
+     * and MAC addresses (6 octets) */
+#define RX_FILTER_FRAME_TEST_MAX_PATTERN_LEN    8 
+
+typedef enum {
+    WMI_RX_FILTER_PACKET_TYPE_NOT_SPEC = 0,    /* not specified */
+    WMI_RX_FILTER_PACKET_TYPE_UNICAST = 1,
+    WMI_RX_FILTER_PACKET_TYPE_MULTICAST = 2,
+    WMI_RX_FILTER_PACKET_TYPE_BROADCAST = 3,
+    WMI_RX_FILTER_PACKET_TYPE_MAX      
+} WMI_RX_FILTER_PACKET_TYPE;
+
+#define RX_FILTER_FRAME_TEST_FLAGS_EQUALITY     (1 << 0) /* equality test, otherwise !=  */
+#define RX_FILTER_FRAME_TEST_FLAGS_MASK         (1 << 1) /* mask test */
+#define RX_FILTER_FRAME_TEST_FLAGS_TYPE_CHECK   (1 << 2) /* this entry is a packet type check place holder */
+
+/* testing a frame requires an offset, equality flag, an ANDing mask array and a check bytes array.
+ * This provides the flexibity to test a frame for a desired result using the following combinations:
+ * 
+ *    frame[offset] AND mask[] == check[]
+ *    frame[offset] AND mask[] != check[]
+ *    frame[offset] == check[] 
+ *    frame[offset] != check[] 
+ * 
+ */
+typedef PREPACK struct {
+    A_UINT8     flags;     /* frame test flags */
+    union {
+        A_UINT8  offset;   /* relative offset from this layer's header */
+        A_UINT8  type;     /* if flags indicate a type-check, this value is WMI_RX_FILTER_PACKET_TYPE */
+    } option;              /* additional test options depending on flags setting */
+    A_UINT8     length;    /* number of bytes to test */
+    A_UINT8     rsvd0;     /* reserved for target use */
+    A_UINT8     mask[RX_FILTER_FRAME_TEST_MAX_PATTERN_LEN];   /* AND mask to apply to each frame byte */
+    A_UINT8     check[RX_FILTER_FRAME_TEST_MAX_PATTERN_LEN];  /* check bytes */     
+} POSTPACK WMI_RX_FILTER_FRAME_TEST;
+
+typedef PREPACK struct {
+    A_UINT8                  index;             /* index for this entry */
+    A_UINT8                  reserved[3];       /* padding and future use */
+    WMI_RX_FILTER_FRAME_TEST frame_test;        /* frame test information for this entry */
+} POSTPACK WMI_RX_FILTER_SET_FRAME_TEST;
+
+    /* structure for WMI_RX_FILTER_SET_FRAME_TEST_LIST_CMDID */
+typedef PREPACK struct {
+    A_UINT8                       num_entries;            /* number of entries to follow */
+    A_UINT8                       reserved[3];            /* padding and future use */
+    WMI_RX_FILTER_SET_FRAME_TEST  frame_test_entries[1];  /* start of frame test entries */
+} POSTPACK WMI_RX_FILTER_SET_FRAME_TEST_LIST;
+
+typedef enum {
+    WMI_RX_FILTER_FRAME_HDR_TEST_MAC = 0,      /* testing MAC fields */
+    WMI_RX_FILTER_FRAME_HDR_TEST_SNAP = 1,     /* testing SNAP fields */
+    WMI_RX_FILTER_FRAME_HDR_TEST_ARP = 2,      /* testing ARP fields */
+    WMI_RX_FILTER_FRAME_HDR_TEST_GEN_ETHPROTO, /* testing a generic pattern in ether payload */
+    WMI_RX_FILTER_FRAME_HDR_TEST_IPV4,         /* testing IPV4 fields */
+    WMI_RX_FILTER_FRAME_HDR_TEST_IPV6,         /* testing IPV6 fields */
+    WMI_RX_FILTER_FRAME_HDR_TEST_GEN_IPPROTO,  /* testing a generic pattern in IP payload */
+    WMI_RX_FILTER_FRAME_HDR_TEST_UDP,          /* testing UDP fields */
+    WMI_RX_FILTER_FRAME_HDR_TEST_MAX        
+} WMI_RX_FILTER_FRAME_HDR_TEST_TYPE;
+
+#define MAKE_RX_FILTER_FRAME_HDR_MASK(b) (1 << (b))
+
+#define WMI_RX_FILT_FRAME_HDR_TEST_MAC  \
+        MAKE_RX_FILTER_FRAME_HDR_MASK(WMI_RX_FILTER_FRAME_HDR_TEST_MAC)
+#define WMI_RX_FILT_FRAME_HDR_TEST_SNAP  \
+        MAKE_RX_FILTER_FRAME_HDR_MASK(WMI_RX_FILTER_FRAME_HDR_TEST_SNAP)
+#define WMI_RX_FILT_FRAME_HDR_TEST_ARP  \
+        MAKE_RX_FILTER_FRAME_HDR_MASK(WMI_RX_FILTER_FRAME_HDR_TEST_ARP)
+#define WMI_RX_FILT_FRAME_HDR_TEST_IPV4 \
+        MAKE_RX_FILTER_FRAME_HDR_MASK(WMI_RX_FILTER_FRAME_HDR_TEST_IPV4)
+#define WMI_RX_FILT_FRAME_HDR_TEST_IPV6 \
+        MAKE_RX_FILTER_FRAME_HDR_MASK(WMI_RX_FILTER_FRAME_HDR_TEST_IPV6)
+#define WMI_RX_FILT_FRAME_HDR_TEST_UDP  \
+        MAKE_RX_FILTER_FRAME_HDR_MASK(WMI_RX_FILTER_FRAME_HDR_TEST_UDP)
+
+typedef PREPACK struct  {
+    A_UINT8  type;               /* header test type  (see WMI_RX_FILTER_FRAME_HDR_TEST_TYPE) */
+    A_UINT8  frame_test_index;   /* corresponding frame test */     
+    A_UINT8  reserved[2];        /* padding and future use */           
+} POSTPACK WMI_RX_FILTER_SET_HDR_TEST;
+
+typedef enum {
+    WMI_RX_COALESCE_FILTER_OP_UNDEF = 0,
+    WMI_RX_COALESCE_FILTER_OP_SET = 1,
+    WMI_RX_COALESCE_FILTER_OP_CLEAR = 2,  
+    WMI_RX_COALESCE_FILTER_OP_MAX,
+} WMI_RX_COALESCE_FILTER_OPCODE;
+
+typedef PREPACK struct  {
+    A_UINT8            op_code;              /* op code */
+    A_UINT8            index;                /* filter index  */
+    A_UINT8            reserved[2];          /* padding and future use */
+    union {
+            /* parameters for SET opcode */
+        struct {
+            A_UINT32   coalesc_delay_ms;     /* coalesc delay in milliseconds */      
+            A_UINT8    total_hdr_tests;      /* number of hdr test elements to follow */
+            A_UINT8    reserved[3];          /* padding and future use */
+        } set_filter_params;
+    } params;
+    union {
+            /* data for SET opcode */
+        WMI_RX_FILTER_SET_HDR_TEST  header_tests[1];      /* one or more entries */ 
+    } data;
+} POSTPACK WMI_RX_FILTER_COALESCE_FILTER_OP;
+
+     
+/*
+ * Transmit complete event data structure(s)
+ */
+
+
+typedef PREPACK struct {
+#define TX_COMPLETE_STATUS_SUCCESS 0
+#define TX_COMPLETE_STATUS_RETRIES 1
+#define TX_COMPLETE_STATUS_NOLINK  2
+#define TX_COMPLETE_STATUS_TIMEOUT 3
+#define TX_COMPLETE_STATUS_OTHER   4
+
+    A_UINT8 status; /* one of TX_COMPLETE_STATUS_... */
+    A_UINT8 pktID; /* packet ID to identify parent packet */
+    A_UINT8 rateIdx; /* rate index on successful transmission */
+    A_UINT8 ackFailures; /* number of ACK failures in tx attempt */
+#if 0 /* optional params currently ommitted. */
+    A_UINT32 queueDelay; // usec delay measured Tx Start time - host delivery time
+    A_UINT32 mediaDelay; // usec delay measured ACK rx time - host delivery time
+#endif
+} POSTPACK TX_COMPLETE_MSG_V1; /* version 1 of tx complete msg */
+
+#if defined(EXTENDED_TX_COMPLETE)
+typedef PREPACK struct {
+#define TX_COMPLETE_TYPE_UCAST 0
+#define TX_COMPLETE_TYPE_MGMT  1
+#define TX_COMPLETE_TYPE_MCAST 2
+#define TX_COMPLETE_TYPE_PAL   3
+    A_UINT8 status      : 4, /* one of TX_COMPLETE_STATUS_... */
+            dev_id      : 4;
+    A_UINT8 peer_id;
+    A_UINT8 tid         : 4,
+            pkt_type    : 4; /* 0:unicast data, 1:mgmt&ctrl, 2:multicast data, 3:pal */
+    A_UINT8 packet_id;
+} POSTPACK TX_COMPLETE_MSG_V2; /* version 1 of tx complete msg */
+#endif /* EXTENDED_TX_COMPLETE */
+
+typedef PREPACK struct {
+    A_UINT8 numMessages; /* number of tx comp msgs following this struct */
+    A_UINT8 msgLen; /* length in bytes for each individual msg following this struct */
+    A_UINT8 msgType; /* version of tx complete msg data following this struct */
+    A_UINT8 reserved; /* individual messages follow this header */
+} POSTPACK WMI_TX_COMPLETE_EVENT;
+
+#define WMI_TXCOMPLETE_VERSION_1 (0x01)
+#if defined(EXTENDED_TX_COMPLETE)
+#define WMI_TXCOMPLETE_VERSION_2 (0x02)
+#endif /* EXTENDED_TX_COMPLETE */
+
+
+/*
+ * ------- AP Mode definitions --------------
+ */
+
+/*
+ * !!! Warning !!!
+ * -Changing the following values needs compilation of both driver and firmware
+ */
+#ifdef AR6002_REV2
+#define AP_MAX_NUM_STA          4
+#else
+#define AP_MAX_NUM_STA          10
+#endif
+
+/*Maximum no. of virtual interface supported*/
+#ifdef AR6002_REV64
+#define NUM_DEV     4
+#define NUM_CONN    (AP_MAX_NUM_STA + NUM_DEV - 1) /* As P2P device port won't enter CONN state, so we omit 1 CONN buffer */
+#else
+#define NUM_DEV     3
+#define NUM_CONN    (AP_MAX_NUM_STA + NUM_DEV)
+#endif
+
+#define AP_ACL_SIZE             10
+#define IEEE80211_MAX_IE        256
+#define MCAST_AID               0xFF /* Spl. AID used to set DTIM flag in the beacons */
+#define DEF_AP_COUNTRY_CODE     "US "
+#define DEF_AP_WMODE_G          WMI_11G_MODE
+#define DEF_AP_WMODE_AG         WMI_11AG_MODE
+#define DEF_AP_DTIM             5
+#define DEF_BEACON_INTERVAL     100
+
+/* ACS scan policy */
+#define AP_ACS_NORMAL               0 /* 1, 6, 11 */
+#define AP_ACS_DISABLE_CH11         1 /* 1, 6 */
+#define AP_ACS_INCLUDE_CH13         2 /* 1, 5, 9, 13 */
+
+/* AP mode disconnect reasons */
+#define AP_DISCONNECT_STA_LEFT      101
+#define AP_DISCONNECT_FROM_HOST     102
+#define AP_DISCONNECT_COMM_TIMEOUT  103
+#define AP_DISCONNECT_MAX_STA       104
+#define AP_DISCONNECT_ACL           105
+#define AP_DISCONNECT_STA_ROAM      106
+#define AP_DISCONNECT_DFS_CHANNEL   107 
+/*
+ * Used with WMI_AP_HIDDEN_SSID_CMDID
+ */
+#define HIDDEN_SSID_FALSE   0
+#define HIDDEN_SSID_TRUE    1
+typedef PREPACK struct {
+    A_UINT8     hidden_ssid;
+} POSTPACK WMI_AP_HIDDEN_SSID_CMD;
+
+/*
+ * Used with WMI_AP_ACL_POLICY_CMDID
+ */
+#define AP_ACL_DISABLE          0x00
+#define AP_ACL_ALLOW_MAC        0x01
+#define AP_ACL_DENY_MAC         0x02
+#define AP_ACL_BLWL_MAC         0x03
+#define AP_ACL_RETAIN_LIST_MASK 0x80
+typedef PREPACK struct {
+    A_UINT8     policy;
+} POSTPACK WMI_AP_ACL_POLICY_CMD;
+
+/*
+ * Used with WMI_AP_ACL_MAC_LIST_CMDID
+ */
+#define ADD_MAC_ADDR    1
+#define DEL_MAC_ADDR    2
+
+#define ADD_WHITE_MAC_ADDR  0x01
+#define ADD_BLACK_MAC_ADDR  0x02
+#define RESET_WHITE_LIST	0x03
+#define RESET_BLACK_LIST	0x04
+#define RESET_BWLIST		0x10
+
+typedef PREPACK struct {
+    A_UINT8     action;
+    A_UINT8     index;
+    A_UINT8     mac[ATH_MAC_LEN];
+    A_UINT8     wildcard;
+} POSTPACK WMI_AP_ACL_MAC_CMD;
+
+typedef PREPACK struct {
+    A_UINT16    index;
+    A_UINT8     acl_mac[AP_ACL_SIZE][ATH_MAC_LEN];
+    A_UINT8     wildcard[AP_ACL_SIZE];
+    A_UINT8     policy;
+} POSTPACK WMI_AP_ACL;
+
+/*
+ * Used with WMI_AP_SET_NUM_STA_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8     num_sta;
+} POSTPACK WMI_AP_NUM_STA_CMD;
+
+/*
+ * Used with WMI_AP_SET_MLME_CMDID
+ */
+typedef PREPACK struct {
+    A_UINT8    mac[ATH_MAC_LEN];
+    A_UINT16   reason;              /* 802.11 reason code */
+    A_UINT8    cmd;                 /* operation to perform */
+/* MLME Commands */
+#define WMI_AP_MLME_ASSOC       1   /* associate station */
+#define WMI_AP_DISASSOC         2   /* disassociate station */
+#define WMI_AP_DEAUTH           3   /* deauthenticate station */
+#define WMI_AP_MLME_AUTHORIZE   4   /* authorize station */
+#define WMI_AP_MLME_UNAUTHORIZE 5   /* unauthorize station */
+} POSTPACK WMI_AP_SET_MLME_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 period;
+    A_UINT8 num_null_func;
+} POSTPACK WMI_AP_CONN_INACT_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 period_min;
+    A_UINT32 dwell_ms;
+} POSTPACK WMI_AP_PROT_SCAN_TIME_CMD;
+
+typedef struct {
+    A_BOOL flag;
+    A_UINT16 rsvd;
+    A_UINT16 aid;
+} WMI_AP_SET_PVB_CMD;
+
+#define WMI_DISABLE_REGULATORY_CODE "FF"
+
+typedef PREPACK struct {
+    A_UCHAR countryCode[3];
+} POSTPACK WMI_AP_SET_COUNTRY_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 dtim;
+} POSTPACK WMI_AP_SET_DTIM_CMD;
+
+typedef PREPACK struct {
+    A_UINT8  band; /* specifies which band to apply these values */
+    A_UINT8  enable; /* allows 11n to be disabled on a per band basis */
+    A_UINT8  chan_width_40M_supported;
+    A_UINT8  short_GI_20MHz;
+    A_UINT8  short_GI_40MHz;
+    A_UINT8  intolerance_40MHz;
+    A_UINT8  max_ampdu_len_exp;
+} POSTPACK WMI_SET_HT_CAP_CMD;
+
+typedef PREPACK struct {
+    A_UINT8   sta_chan_width;
+} POSTPACK WMI_SET_HT_OP_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 rateMasks[WMI_MODE_MAX*WMI_MAX_RATE_MASK];
+} POSTPACK WMI_SET_TX_SELECT_RATES_CMD;
+
+typedef PREPACK struct {
+    A_UINT32    sgiMask[WMI_MAX_RATE_MASK];
+    A_UINT8     sgiPERThreshold;
+} POSTPACK WMI_SET_TX_SGI_PARAM_CMD;
+/* Enable for MCS 7/MCS 15 */
+#define DEFAULT_SGI_MASK_L32 0x08080000
+#define DEFAULT_SGI_MASK_U32 0x00000808
+#define DEFAULT_SGI_PER 10
+
+typedef PREPACK struct {
+    A_UINT32 rateField[WMI_MAX_RATE_MASK]; /* 1 bit per rate corresponding to index */
+#define WMI_RATE_POLICY_ID_MAX 5
+    A_UINT8 id; /* valid values == 1->WMI_RATE_POLICY_ID_MAX */
+    A_UINT8 shortTrys;
+    A_UINT8 longTrys;
+    A_UINT8 reserved; /* padding */
+} POSTPACK WMI_SET_RATE_POLICY_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 metaVersion; /* version of meta data for rx packets <0 = default> (0-7 = valid) */
+    A_UINT8 dot11Hdr; /* 1 == leave .11 header intact , 0 == replace .11 header with .3 <default> */
+    A_UINT8 defragOnHost; /* 1 == defragmentation is performed by host, 0 == performed by target <default> */
+    A_UINT8 reserved[1]; /* alignment */
+} POSTPACK WMI_RX_FRAME_FORMAT_CMD;
+
+
+typedef PREPACK struct {
+    A_UINT8 enable;     /* 1 == device operates in thin mode , 0 == normal mode <default> */
+    A_UINT8 reserved[3];
+} POSTPACK WMI_SET_THIN_MODE_CMD;
+
+
+typedef PREPACK struct {
+    A_UINT16    channel; /* frequency in Mhz */
+    //A_UINT8 mode; // HT20 or HT40
+    //A_UINT8 secondary; // if mode == HT40 secondary channel above | below
+} POSTPACK WMI_SET_CHANNEL_CMD;
+
+
+typedef enum {
+    WMI_SET_CHANNEL_RES_SUCCESS = 0, // device has joined the network
+    WMI_SET_CHANNEL_RES_FAIL, // device failed for unspecified reason
+}WMI_SET_CHANNEL_RESULT;
+
+typedef PREPACK struct {
+    A_UINT8 result; /* the result of the join cmd. one of WMI_THIN_JOIN_RESULT */
+    A_UINT8 reserved[3]; /* alignment */
+} POSTPACK WMI_SET_CHANNEL_EVENT;
+
+typedef enum {
+    WMI_FILTERMASK_MGMT=0,
+    WMI_FILTERMASK_CTRL,
+    WMI_FILTERMASK_DATA,
+    WMI_FILTERMASK_MAX
+}WMI_FILTERMASK_INDEX;
+
+typedef PREPACK struct {
+    A_UINT16 filtermask[WMI_FILTERMASK_MAX];
+    A_UINT16 reserved; /* alignment */
+} POSTPACK WMI_RX_FRAME_FILTER_CMD;
+
+/* AP mode events */
+/* WMI_PS_POLL_EVENT */
+typedef PREPACK struct {
+    A_UINT16 aid;
+} POSTPACK WMI_PSPOLL_EVENT;
+
+typedef PREPACK struct {
+    A_UINT32 tx_bytes;
+    A_UINT32 tx_pkts;
+    A_UINT32 tx_error;
+    A_UINT32 tx_discard;
+    A_UINT32 rx_bytes;
+    A_UINT32 rx_pkts;
+    A_UINT32 rx_error;
+    A_UINT32 rx_discard;
+    A_UINT32 aid;
+} POSTPACK WMI_PER_STA_STAT;
+
+#define AP_GET_STATS    0
+#define AP_CLEAR_STATS  1
+
+typedef PREPACK struct {
+    A_UINT32            action;
+    WMI_PER_STA_STAT    sta[AP_MAX_NUM_STA];
+} POSTPACK WMI_AP_MODE_STAT;
+
+#define AP_11BG_RATESET1        1
+#define AP_11BG_RATESET2        2
+#define DEF_AP_11BG_RATESET     AP_11BG_RATESET1
+typedef PREPACK struct {
+    A_UINT8 rateset;
+} POSTPACK WMI_AP_SET_11BG_RATESET_CMD;
+/*
+ * End of AP mode definitions
+ */
+
+struct _wmm_params {
+    A_UINT8     acm;           /* ACM parameter */
+    A_UINT8     aifsn;         /* AIFSN parameters */
+    A_UINT8     logcwmin;      /* cwmin in exponential form */
+    A_UINT8     logcwmax;      /* cwmax in exponential form */
+    A_UINT16    txopLimit;     /* txopLimit */
+};
+
+/* WMI_REPORT_WMM_PARAMS_EVENT */
+typedef PREPACK struct {
+    struct _wmm_params wmm_params[4];
+} POSTPACK WMI_REPORT_WMM_PARAMS_EVENT;
+
+/* P2P module definitions */
+
+/* P2P module commands */
+typedef PREPACK struct {
+    A_UINT8 go_intent;
+    A_UINT8 country[3];
+    A_UINT8 reg_class;
+    A_UINT8 listen_channel;
+    A_UINT8 op_reg_class;
+    A_UINT8 op_channel;
+} POSTPACK WMI_P2P_SET_CONFIG_CMD;
+
+typedef PREPACK struct {
+    A_UINT16 categ;
+    A_UINT16 sub_categ;
+} POSTPACK device_type_tuple;
+
+typedef PREPACK struct {
+    device_type_tuple pri_dev_type;
+    //A_UINT8 pri_device_type[8];
+#define MAX_P2P_SEC_DEVICE_TYPES 5
+    device_type_tuple sec_dev_type[MAX_P2P_SEC_DEVICE_TYPES];
+#define WPS_UUID_LEN 16
+    A_UINT8 uuid[WPS_UUID_LEN];
+#define WPS_MAX_DEVNAME_LEN 32
+    A_UINT8 device_name[WPS_MAX_DEVNAME_LEN];
+    A_UINT8 dev_name_len;
+} POSTPACK WMI_WPS_SET_CONFIG_CMD;
+
+typedef PREPACK struct {
+    device_type_tuple pri_dev_type;
+    device_type_tuple sec_dev_type[MAX_P2P_SEC_DEVICE_TYPES];
+    A_UINT8  device_addr[ATH_MAC_LEN];
+} POSTPACK WMI_SET_REQ_DEV_ATTR_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 ssidLength;
+    A_UINT8 ssid[WMI_MAX_SSID_LEN];
+} POSTPACK P2P_SSID;
+
+typedef enum wmi_p2p_discovery_type {
+    WMI_P2P_FIND_START_WITH_FULL,
+    WMI_P2P_FIND_ONLY_SOCIAL,
+    WMI_P2P_FIND_PROGRESSIVE
+} WMI_P2P_DISC_TYPE;
+
+typedef PREPACK struct {
+    A_UINT32 timeout;
+    WMI_P2P_DISC_TYPE type;
+} POSTPACK WMI_P2P_FIND_CMD;
+
+typedef PREPACK struct {
+    A_UINT16 listen_freq;
+    A_UINT16 force_freq;
+    A_UINT16 go_oper_freq;
+    A_UINT8  dialog_token;
+    A_UINT8  peer_addr[ATH_MAC_LEN];
+    A_UINT8  own_interface_addr[ATH_MAC_LEN];
+    A_UINT8  member_in_go_dev[ATH_MAC_LEN];
+    A_UINT8  go_dev_dialog_token;
+    P2P_SSID peer_go_ssid;
+    A_UINT8  wps_method;
+    A_UINT8 dev_capab;
+    A_INT8  go_intent;
+    A_UINT8 persistent_grp;
+} POSTPACK WMI_P2P_GO_NEG_START_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 persistent_group;
+    A_UINT8 group_formation;
+} POSTPACK WMI_P2P_GRP_INIT_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 peer_addr[ATH_MAC_LEN];
+    A_UINT8 grp_formation_status;
+} POSTPACK WMI_P2P_GRP_FORMATION_DONE_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 timeout;
+}POSTPACK WMI_P2P_LISTEN_CMD;
+
+typedef PREPACK struct {
+    A_UINT16 listen_freq;
+    A_UINT16 force_freq;
+    A_UINT8 status;
+    A_INT8 go_intent;
+    A_UINT8 wps_buf[512];
+    A_UINT16 wps_buflen;
+    A_UINT8 p2p_buf[512];
+    A_UINT16 p2p_buflen;
+    A_UINT8 dialog_token;
+    A_UINT8 wps_method;
+    A_UINT8 persistent_grp;
+}POSTPACK WMI_P2P_GO_NEG_REQ_RSP_CMD;
+
+typedef enum {
+    WMI_P2P_INVITE_ROLE_GO,
+    WMI_P2P_INVITE_ROLE_ACTIVE_GO,
+    WMI_P2P_INVITE_ROLE_CLIENT,
+} WMI_P2P_INVITE_ROLE;
+
+typedef PREPACK struct {
+    WMI_P2P_INVITE_ROLE role;
+    A_UINT16 listen_freq;
+    A_UINT16 force_freq;
+    A_UINT8 dialog_token;
+    A_UINT8 peer_addr[ATH_MAC_LEN];
+    A_UINT8 bssid[ATH_MAC_LEN];
+    A_UINT8 go_dev_addr[ATH_MAC_LEN];
+    P2P_SSID ssid;
+    A_UINT8 is_persistent;
+    A_UINT8 wps_method;
+}POSTPACK WMI_P2P_INVITE_CMD;
+
+typedef PREPACK struct {
+    A_UINT16 force_freq;
+    A_UINT8 status;
+    A_UINT8 dialog_token;
+    A_UINT8 p2p_buf[512];
+    A_UINT16 p2p_buflen;
+    A_UINT8 is_go;
+    A_UINT8 group_bssid[ATH_MAC_LEN];
+}POSTPACK WMI_P2P_INVITE_REQ_RSP_CMD;
+
+typedef PREPACK struct {
+    A_UINT16 wps_method;
+    A_UINT16 listen_freq;
+    A_UINT8 dialog_token;
+    A_UINT8 peer[ATH_MAC_LEN];
+    A_UINT8 go_dev_addr[ATH_MAC_LEN];
+    P2P_SSID go_oper_ssid;
+}POSTPACK WMI_P2P_PROV_DISC_REQ_CMD;
+
+typedef enum {
+    WMI_P2P_CONFID_LISTEN_CHANNEL=1,
+    WMI_P2P_CONFID_CROSS_CONNECT=2,
+    WMI_P2P_CONFID_SSID_POSTFIX=3,
+    WMI_P2P_CONFID_INTRA_BSS=4,
+
+} WMI_P2P_CONF_ID;
+
+typedef PREPACK struct {
+    A_UINT8 reg_class;
+    A_UINT8 listen_channel;
+}POSTPACK WMI_P2P_LISTEN_CHANNEL;
+
+typedef PREPACK struct {
+    A_UINT8 flag;
+}POSTPACK WMI_P2P_SET_CROSS_CONNECT;
+
+typedef PREPACK struct {
+    A_UINT8 ssid_postfix[WMI_MAX_SSID_LEN-9];
+    A_UINT8 ssid_postfix_len;
+}POSTPACK WMI_P2P_SET_SSID_POSTFIX;
+
+typedef PREPACK struct {
+    A_UINT8 flag;
+}POSTPACK WMI_P2P_SET_INTRA_BSS;
+
+typedef PREPACK struct {
+    A_UINT8 config_id;    /* set to one of WMI_P2P_CONF_ID */
+    PREPACK union {
+        WMI_P2P_LISTEN_CHANNEL listen_ch;
+        WMI_P2P_SET_CROSS_CONNECT cross_conn;
+        WMI_P2P_SET_SSID_POSTFIX ssid_postfix;
+        WMI_P2P_SET_INTRA_BSS intra_bss;
+    }POSTPACK val;
+}POSTPACK WMI_P2P_SET_CMD;
+
+#define RATECTRL_MODE_DEFAULT 0
+#define RATECTRL_MODE_PERONLY 1
+
+typedef PREPACK struct {
+    A_UINT32 mode;
+}POSTPACK WMI_SET_RATECTRL_PARM_CMD;
+
+#define WMI_P2P_MAX_TLV_LEN 1024
+typedef enum {
+    WMI_P2P_SD_TYPE_GAS_INITIAL_REQ     = 0x1,
+    WMI_P2P_SD_TYPE_GAS_INITIAL_RESP    = 0x2,
+    WMI_P2P_SD_TYPE_GAS_COMEBACK_REQ    = 0x3,
+    WMI_P2P_SD_TYPE_GAS_COMEBACK_RESP   = 0x4,
+    WMI_P2P_PD_TYPE_RESP                = 0x5,
+    WMI_P2P_SD_TYPE_STATUS_IND          = 0x6,
+} WMI_P2P_SDPD_TYPE;
+
+typedef enum {
+    WMI_P2P_SDPD_TRANSACTION_PENDING = 0x1,
+    WMI_P2P_SDPD_TRANSACTION_COMP = 0x2,
+} WMI_P2P_SDPD_TRANSACTION_STATUS;
+
+typedef PREPACK struct {
+    A_UINT8 type;
+    A_UINT8 dialog_token;
+    A_UINT8 frag_id;
+    A_UINT8 reserved1;          /* alignment */
+    A_UINT8 peer_addr[ATH_MAC_LEN];
+    A_UINT16 freq;
+    A_UINT16 status_code;
+    A_UINT16 comeback_delay;
+    A_UINT16 tlv_length;
+    A_UINT16 update_indic;
+    A_UINT16 total_length;
+    A_UINT16 reserved2;         /* future */
+    A_UINT8  tlv[WMI_P2P_MAX_TLV_LEN];
+} POSTPACK WMI_P2P_SDPD_TX_CMD;
+
+/* P2P module events */
+
+typedef PREPACK struct {
+    A_UINT8 sa[ATH_MAC_LEN];
+    A_UINT8 wps_buf[512];
+    A_UINT16 wps_buflen;
+    A_UINT8 p2p_buf[512];
+    A_UINT16 p2p_buflen;
+    A_UINT8 dialog_token;
+}POSTPACK WMI_P2P_GO_NEG_REQ_EVENT;
+
+typedef PREPACK struct {
+    A_UINT16 freq;
+    A_INT8 status;
+    A_UINT8 role_go;
+    A_UINT8 ssid[WMI_MAX_SSID_LEN];
+    A_UINT8 ssid_len;
+#define WMI_MAX_PASSPHRASE_LEN 9
+    A_CHAR pass_phrase[WMI_MAX_PASSPHRASE_LEN];
+    A_UINT8 peer_device_addr[ATH_MAC_LEN];
+    A_UINT8 peer_interface_addr[ATH_MAC_LEN];
+    A_UINT8 wps_method;
+    A_UINT8 persistent_grp;
+} POSTPACK WMI_P2P_GO_NEG_RESULT_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8 p2p_buf[512];
+    A_UINT16 p2p_buflen;
+    A_UINT8 sa[ATH_MAC_LEN];
+    A_UINT8 bssid[ATH_MAC_LEN];
+    A_UINT8 go_dev_addr[ATH_MAC_LEN];
+    P2P_SSID ssid;
+    A_UINT8 is_persistent;
+    A_UINT8 dialog_token;
+} POSTPACK WMI_P2P_INVITE_REQ_EVENT;
+
+typedef PREPACK struct {
+    A_UINT16 oper_freq;
+    A_UINT8 sa[ATH_MAC_LEN];
+    A_UINT8 bssid[ATH_MAC_LEN];
+    A_UINT8 is_bssid_valid;
+    A_UINT8 go_dev_addr[ATH_MAC_LEN];
+    P2P_SSID ssid;
+    A_UINT8 status;
+} POSTPACK WMI_P2P_INVITE_RCVD_RESULT_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8 status;
+    A_UINT8 bssid[ATH_MAC_LEN];
+    A_UINT8 is_bssid_valid;
+} POSTPACK WMI_P2P_INVITE_SENT_RESULT_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8 sa[ATH_MAC_LEN];
+    A_UINT16 wps_config_method;
+    A_UINT8 dev_addr[ATH_MAC_LEN];
+#define WPS_DEV_TYPE_LEN 8
+    A_UINT8 pri_dev_type[WPS_DEV_TYPE_LEN];
+    A_UINT8 device_name[WPS_MAX_DEVNAME_LEN];
+    A_UINT8 dev_name_len;
+    A_UINT16 dev_config_methods;
+    A_UINT8 device_capab;
+    A_UINT8 group_capab;
+} POSTPACK WMI_P2P_PROV_DISC_REQ_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8 peer[ATH_MAC_LEN];
+    A_UINT16 config_methods;
+} POSTPACK WMI_P2P_PROV_DISC_RESP_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8 type;
+    A_UINT8 transaction_status;
+    A_UINT8 dialog_token;
+    A_UINT8 frag_id;
+    A_UINT8 peer_addr[ATH_MAC_LEN];
+    A_UINT16 freq;
+    A_UINT16 status_code;
+    A_UINT16 comeback_delay;
+    A_UINT16 tlv_length;
+    A_UINT16 update_indic;
+//  Variable length TLV will be placed after the event
+} POSTPACK WMI_P2P_SDPD_RX_EVENT;
+
+typedef PREPACK struct {
+    A_UINT8    event_id;    /* event identifier  */
+    A_UINT8    length;      /* number of bytes of data that follows */
+    A_UINT8    data[1];     /* start of event data */
+} POSTPACK WMI_ACS_EVENT_MSG;
+
+#define WMI_ACS_EVENT_HDR_LEN  (sizeof(WMI_ACS_EVENT_MSG) - sizeof(A_UINT8))
+
+typedef PREPACK struct {
+    A_UINT8    ctrl_id;     /* control identifier */
+    A_UINT8    length;      /* number of bytes of data to follow */
+    A_UINT8    data[1];     /* start of control data */
+} POSTPACK WMI_ACS_CTRL_MSG;
+
+#define WMI_ACS_CTRL_HDR_LEN  (sizeof(WMI_ACS_CTRL_MSG) - sizeof(A_UINT8))
+
+/* STORE / RECALL Commands AND Events DEFINITION START */
+typedef PREPACK struct {
+    A_UINT8 enable;
+#define STRRCL_RECIPIENT_HOST 1
+#define STRRCL_RECIPIENT_POWERSAFE_MEM 2
+    A_UINT8 recipient;
+} POSTPACK WMI_STORERECALL_CONFIGURE_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 length; /* number of bytes of data to follow */
+    A_UINT8  data[1]; /* start of data */
+} POSTPACK WMI_STORERECALL_RECALL_CMD;
+
+typedef PREPACK struct {
+    A_UINT32 sleep_msec;
+    A_UINT8 store_after_tx_empty;
+    A_UINT8 store_after_fresh_beacon_rx;
+} POSTPACK WMI_STORERECALL_HOST_READY_CMD;
+
+typedef PREPACK struct {
+    A_UINT32    msec_sleep; /* time between power off/on */
+    A_UINT32    length; /* length of following data */
+    A_UINT8     data[1]; /* start of data */
+} POSTPACK WMI_STORERECALL_STORE_EVENT;
+
+/* STORE / RECALL Commands AND Events DEFINITION END */
+/* WPS Commands AND Events DEFINITION START */
+
+typedef PREPACK struct {
+    A_UINT8 ssid[WMI_MAX_SSID_LEN];
+    A_UINT8 macaddress[ATH_MAC_LEN];
+    A_UINT16 channel;
+    A_UINT8 ssid_len;	
+} POSTPACK WPS_SCAN_LIST_ENTRY;
+
+#define WPS_PIN_LEN (8)
+
+typedef PREPACK struct {
+    A_UINT8 pin[WPS_PIN_LEN+1];
+}POSTPACK WPS_PIN;
+
+typedef enum {
+    WPS_PIN_MODE = 0x1,
+    WPS_PBC_MODE = 0x2
+} WPS_MODE;
+
+typedef enum {
+    WPS_REGISTRAR_ROLE = 0x1,
+    WPS_ENROLLEE_ROLE  = 0x2
+} WPS_OPER_MODE;
+
+typedef enum {
+    WPS_DO_CONNECT_AFTER_CRED_RECVD = 0x1
+} WPS_START_CTRL_FLAG;
+
+typedef PREPACK struct {
+    WPS_SCAN_LIST_ENTRY ssid_info;
+    A_UINT8 config_mode; /* WPS_MODE */
+    WPS_PIN wps_pin;
+    A_UINT8 timeout;     /* in Seconds */
+    A_UINT8 role;        /* WPS_OPER_MOD */	
+    A_UINT8 ctl_flag;    /* WPS_START_CTRL_FLAG */
+} POSTPACK WMI_WPS_START_CMD;
+
+typedef enum {
+    WPS_STATUS_SUCCESS = 0x0,
+    WPS_STATUS_FAILURE = 0x1,
+    WPS_STATUS_IDLE = 0x2,       
+    WPS_STATUS_IN_PROGRESS  = 0x3,
+} WPS_STATUS;
+
+typedef PREPACK struct {
+    A_UINT8  wps_status;  /* WPS_STATUS */
+    A_UINT8  wps_state;
+} POSTPACK WMI_WPS_GET_STATUS_EVENT;
+
+typedef enum {
+    WPS_ERROR_INVALID_START_INFO  = 0x1,
+    WPS_ERROR_MULTIPLE_PBC_SESSIONS,
+    WPS_ERROR_WALKTIMER_TIMEOUT,
+    WPS_ERROR_M2D_RCVD,
+    WPS_ERROR_PWD_AUTH_FAIL
+} WPS_ERROR_CODE;
+
+typedef enum {
+    WPS_AUTH_TYPE_OPEN    = 0x0001,
+    WPS_AUTH_TYPE_WPAPSK  = 0x0002,
+    WPS_AUTH_TYPE_SHARED  = 0x0004,
+    WPS_AUTH_TYPE_WPA     = 0x0008,
+    WPS_AUTH_TYPE_WPA2    = 0x0010,
+    WPS_AUTH_TYPE_WPA2PSK = 0x0020
+} WPS_AUTH_TYPE;
+
+typedef enum {
+    WPS_ENCR_TYPE_NONE = 0x0001,
+    WPS_ENCR_TYPE_WEP  = 0x0002,
+    WPS_ENCR_TYPE_TKIP = 0x0004,
+    WPS_ENCR_TYPE_AES  = 0x0008,
+} WPS_ENCR_TYPE;
+
+typedef PREPACK struct {
+    A_UINT16 ap_channel; 
+    A_UINT8  ssid[WMI_MAX_SSID_LEN];
+    A_UINT8  ssid_len;
+    A_UINT16 auth_type; /* WPS_AUTH_TYPE */ 
+    A_UINT16 encr_type; /* WPS_ENCR_TYPE */
+    A_UINT8  key_idx;
+    A_UINT8  key[64];
+    A_UINT8  key_len;
+    A_UINT8  mac_addr[ATH_MAC_LEN];
+} POSTPACK WPS_CREDENTIAL;
+
+typedef PREPACK struct {
+    A_UINT8 status;      /* WPS_STATUS */
+    A_UINT8 error_code;  /* WPS_ERROR_CODE */
+    WPS_CREDENTIAL  credential;
+} POSTPACK WMI_WPS_PROFILE_EVENT;
+
+/* WPS Commands AND Events DEFINITION END */
+
+typedef enum {
+    WMI_AP_APSD_DISABLED = 0,
+    WMI_AP_APSD_ENABLED
+} WMI_AP_APSD_STATUS;
+
+typedef PREPACK struct {
+    A_UINT8    enable;
+} POSTPACK WMI_AP_SET_APSD_CMD;
+
+typedef enum {
+    WMI_AP_APSD_NO_DELIVERY_FRAMES_FOR_THIS_TRIGGER =  0x1,
+} WMI_AP_APSD_BUFFERED_TRAFFIC_FLAGS;
+
+typedef PREPACK struct {
+    A_UINT16   aid;
+    A_UINT16   bitmap;
+    A_UINT32   flags;
+} POSTPACK WMI_AP_APSD_BUFFERED_TRAFFIC_CMD;
+    
+typedef PREPACK struct {
+    A_UINT32 freq;
+    A_UINT32 duration;
+} POSTPACK WMI_REMAIN_ON_CHNL_CMD_STRUCT;
+
+/* WMI_SEND_ACTION_CMD_STRUCT is to be deprecated; WMI_SEND_MGMT_CMD_STRUCT is 
+ * to be used instead. The new command supports P2P mgmt operations using
+ * station interface
+ */
+typedef PREPACK struct {
+    A_UINT32 ID;
+    A_UINT32 freq;
+    A_UINT32 wait;
+    A_UINT16 len;
+    A_UINT8  data[1];
+} POSTPACK  WMI_SEND_ACTION_CMD_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 ID;
+    A_UINT32 freq;
+    A_UINT32 wait;
+    A_BOOL no_cck;
+    A_UINT16 len;
+    A_UINT8  data[1];
+} POSTPACK  WMI_SEND_MGMT_CMD_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 ID;
+    A_UINT8 ACKStatus;
+} POSTPACK  WMI_TX_STATUS_EVENT_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8 enable;
+} POSTPACK  WMI_PROBE_REQ_REPORT_CMD_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8 disable;
+} POSTPACK  WMI_DISABLE_11B_RATES_CMD_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8 RoleID;
+    A_UINT8 mgmtFrmType;
+    A_UINT8 ieLen;
+    A_UINT8 ieInfo[1];
+} POSTPACK  WMI_SET_APPIE_EXTENDED_CMD_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 freq;
+    A_UINT32 duration;
+} POSTPACK  WMI_REMAIN_ON_CHNL_EVENT_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 freq;
+    A_UINT32 duration;
+    A_UINT8  status;
+} POSTPACK  WMI_CANCEL_REMAIN_ON_CHNL_EVENT_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 freq;
+    A_UINT16 len;
+    A_UINT8 data[1];
+} POSTPACK  WMI_RX_ACTION_EVENT_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT16 len;
+    A_UINT8 data[1];
+} POSTPACK  WMI_P2P_CAPABILITIES_EVENT_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 freq;
+    A_UINT16 len;
+    A_UINT8 data[1];
+} POSTPACK  WMI_P2P_RX_PROBE_REQ_EVENT_STRUCT;
+
+#define P2P_FLAG_CAPABILITIES_REQ   (0x00000001)
+#define P2P_FLAG_MACADDR_REQ        (0x00000002)
+#define P2P_FLAG_P2P_MODEL_REQ      (0x00000004)
+
+typedef PREPACK struct {
+    A_UINT32 InfoReqFlags;
+} POSTPACK  WMI_GET_P2P_INFO_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 InfoReqFlags;
+    A_UINT16 len;
+    A_UINT8  data[1];
+} POSTPACK  WMI_P2P_INFO_EVENT_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8  GOPowerSave;
+} POSTPACK  WMI_P2P_CAPABILITIES_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8  MACAddr[6];
+} POSTPACK  WMI_P2P_MACADDR_STRUCT;
+
+#define P2P_HOST_MODEL          1
+#define P2P_FW_MODEL            0
+
+typedef PREPACK struct {
+    A_UINT8  P2PModel;
+} POSTPACK  WMI_P2P_MODEL_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 freq;
+    A_UINT8  DestinationAddr[6];
+    A_UINT16 len;
+    A_UINT8  data[1];
+} POSTPACK  WMI_P2P_PROBE_RESPONSE_CMD_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT32 duration;
+    A_UINT32 interval;
+    A_UINT32 start_or_offset;
+    A_UINT8 count_or_type;
+} POSTPACK P2P_NOA_DESCRIPTOR;
+
+typedef PREPACK struct {
+    A_UINT8 enable;
+    A_UINT8 count;
+    A_UINT8 noas[1];
+} POSTPACK WMI_NOA_INFO_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8 enable;
+    A_UINT8 ctwin;
+} POSTPACK WMI_OPPPS_INFO_STRUCT;
+
+typedef PREPACK struct {
+    A_UINT8 port_id;
+    A_UINT8 port_opmode;
+    A_UINT8 port_subopmode;
+} POSTPACK WMI_ADD_PORT_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 port_id;
+} POSTPACK WMI_DEL_PORT_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 status;
+    A_UINT8 port_id;
+    A_UINT8 mac_addr[6];
+} POSTPACK WMI_PORT_STATUS_INFO;
+
+typedef PREPACK struct {
+    A_UINT16   rsn_cap;
+} POSTPACK WMI_RSN_CAP_CMD;
+
+typedef PREPACK struct {
+    A_UINT8     keyIndex;
+    A_UINT8     keyLength;
+    A_UINT8     keyRSC[6];/* key replay sequence counter */
+    A_UINT8     key[WMI_MAX_KEY_LEN];
+} POSTPACK WMI_SET_IGTK_CMD;
+
+typedef PREPACK struct {
+    A_UINT8 min_rx_bundle_frame;
+    A_UINT8 min_rx_bundle_timeout;
+} POSTPACK WMI_SET_BUNDLE_PARAM_CMD;
+
+typedef PREPACK struct {
+    A_BOOL  enable;
+    A_UINT8 nextProbeCount;
+    A_UINT8 maxBackOff;
+    A_UINT8 forceBackOff;
+} POSTPACK WMI_GREENTX_PARAMS_CMD;
+
+/* voice detection enable/disable command structure */
+typedef PREPACK struct {
+    A_UINT8    enable;
+} POSTPACK WMI_VOICE_DETECTION_ENABLE_CMD;
+
+typedef enum {
+    RECOVERY_SIM_ASSERT     = 0x01,
+    RECOVERY_SIM_NO_DETECT  = 0x02,
+    RECOVERY_SIM_CTR_EP_FULL= 0x03,
+    RECOVERY_SIM_EMPTY_POINT= 0x04,
+    RECOVERY_SIM_STACK_OV   = 0x05,
+} RECOVERY_SIM_TYPE;
+
+typedef PREPACK struct {
+    A_UINT8 type;     /*0:unused 1: ASSERT, 2: not respond detect command,3:  simulate ep-full(),4:empty point,5 stack overflow...*/
+    A_UINT8 reserved; /*unused now*/
+    A_UINT16 delay_time_ms;   /*0xffff means the simulate will delay for random time (0 ~0xffff ms)*/
+}POSTPACK WMI_SET_RECOVERY_TEST_PARAMETER_CMD;
+
+typedef PREPACK struct {
+A_UINT8 disable;  /*0: enable broadcast,  1: disable broadcast */
+} POSTPACK WMI_DISABLE_BCAST_IN_PM_CMD;
+
+typedef PREPACK struct {
+    A_INT8 rssi_value;
+} POSTPACK WMI_SET_RSSI_FILTER_CMD;
+
+
+#ifndef ATH_TARGET
+//#include "athendpack.h"
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WMI_H_ */
diff --git a/ath6kl-wmiconfig/include/wmiconfig.h b/ath6kl-wmiconfig/include/wmiconfig.h
new file mode 100755
index 0000000..d9ac071
--- /dev/null
+++ b/ath6kl-wmiconfig/include/wmiconfig.h
@@ -0,0 +1,555 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*
+ * This file contains the definitions for wmiconfig utility
+ */
+
+#ifndef _WMI_CONFIG_H_
+#define _WMI_CONFIG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+enum ath6kl_tm_attr {
+	__ATH6KL_TM_ATTR_INVALID	= 0,
+	ATH6KL_TM_ATTR_CMD		= 1,
+	ATH6KL_TM_ATTR_DATA		= 2,
+
+	/* keep last */
+	__ATH6KL_TM_ATTR_AFTER_LAST,
+	ATH6KL_TM_ATTR_MAX		= __ATH6KL_TM_ATTR_AFTER_LAST - 1,
+};
+
+enum ath6kl_tm_cmd {
+	ATH6KL_TM_CMD_TCMD		= 0,
+	ATH6KL_TM_CMD_RX_REPORT  = 1,	/* not used anymore */
+	ATH6KL_TM_CMD_WMI_CMD    = 0xF000,
+};
+
+
+enum {
+    WMI_GET_VERSION=501,     /* something that doesn't collide with ascii */
+    WMI_SET_POWER_MODE,
+    WMI_SET_IBSS_PM_CAPS,
+    WMI_SET_PM_PARAMS,
+    WMI_SET_SCAN_PARAMS,
+    WMI_SET_LISTEN_INTERVAL,
+    WMI_SET_BMISS_TIME,
+    WMI_SET_BSS_FILTER,
+    WMI_SET_RSSI_THRESHOLDS,
+    WMI_SET_CHANNEL,
+    WMI_SET_SSID,
+    WMI_SET_BADAP,
+    WMI_DELETE_BADAP,
+    WMI_CREATE_QOS,
+    WMI_DELETE_QOS,
+    WMI_GET_QOS_QUEUE,
+    WMI_GET_TARGET_STATS,
+    WMI_SET_TARGET_ERROR_REPORTING_BITMASK,
+    WMI_SET_AC_PARAMS,
+    WMI_SET_ASSOC_IE,
+    WMI_SET_DISC_TIMEOUT,
+    WMI_SET_ADHOC_BSSID,
+    WMI_SET_OPT_MODE,
+    WMI_OPT_SEND_FRAME,
+    WMI_SET_BEACON_INT,
+    WMI_SET_VOICE_PKT_SIZE,
+    WMI_SET_MAX_SP,
+    WMI_GET_ROAM_TBL,
+    WMI_SET_ROAM_CTRL,
+    WMI_SET_POWERSAVE_TIMERS,
+    WMI_SET_POWERSAVE_TIMERS_PSPOLLTIMEOUT,
+    WMI_SET_POWERSAVE_TIMERS_TRIGGERTIMEOUT,
+    WMI_GET_POWER_MODE,
+    WMI_SET_WLAN_STATE,
+    WMI_GET_WLAN_STATE,
+    WMI_GET_ROAM_DATA,
+    WMI_SET_BT_STATUS,
+    WMI_SET_BT_PARAMS,
+    WMI_SET_BTCOEX_FE_ANT,
+    WMI_SET_BTCOEX_COLOCATED_BT_DEV,
+    WMI_SET_BTCOEX_SCO_CONFIG,
+    WMI_SET_BTCOEX_A2DP_CONFIG,
+    WMI_SET_BTCOEX_ACLCOEX_CONFIG,
+    WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG,
+    WMI_SET_BTCOEX_DEBUG,
+    WMI_SET_BTCOEX_BT_OPERATING_STATUS,
+    WMI_GET_BTCOEX_CONFIG,
+    WMI_GET_BTCOEX_STATS,
+    WMI_SET_RETRYLIMITS,
+    WMI_START_SCAN,
+    WMI_SET_FIX_RATES,
+    WMI_GET_FIX_RATES,
+    WMI_SET_SNR_THRESHOLDS,
+    WMI_CLR_RSSISNR,
+    WMI_SET_LQ_THRESHOLDS,
+    WMI_SET_AUTH_MODE,
+    WMI_SET_REASSOC_MODE,
+    WMI_SET_LPREAMBLE,
+    WMI_SET_RTS,
+    WMI_SET_WMM,
+#ifdef USER_KEYS
+    USER_SETKEYS,
+#endif
+    WMI_APSD_TIM_POLICY,
+    WMI_SET_ERROR_DETECTION,
+    WMI_GET_HB_CHALLENGE_RESP,
+    WMI_SET_TXOP,
+    DIAG_ADDR,
+    DIAG_DATA,
+    DIAG_READ,
+    DIAG_WRITE,
+    WMI_GET_RD,
+    WMI_SET_KEEPALIVE,
+    WMI_GET_KEEPALIVE,
+    WMI_SET_APPIE,
+    WMI_SET_MGMT_FRM_RX_FILTER,
+    WMI_DBGLOG_CFG_MODULE,
+    WMI_DBGLOG_GET_DEBUG_LOGS,
+    WMI_SET_HOST_SLEEP_MODE,
+    WMI_SET_WOW_MODE,
+    WMI_GET_WOW_LIST,
+    WMI_ADD_WOW_PATTERN,
+    WMI_DEL_WOW_PATTERN,
+    DIAG_DUMP_CHIP_MEM,
+    WMI_SET_CONNECT_CTRL_FLAGS,
+    DUMP_HTC_CREDITS,
+    USER_SETKEYS_INITRSC,
+    WMI_SCAN_DFSCH_ACT_TIME,
+    WMI_SIMULATED_APSD_TIM_POLICY,
+    WMI_SET_AKMP_INFO,
+    WMI_AKMP_MULTI_PMKID,
+    WMI_NUM_PMKID,
+    WMI_PMKID_ENTRY,
+    WMI_SET_PMKID_LIST,
+    WMI_GET_PMKID_LIST,
+    WMI_SET_IEMASK,
+    WMI_SCAN_CHANNEL_LIST,
+    WMI_SET_BSS_PMKID_INFO,
+    WMI_BSS_PMKID_ENTRY,
+    WMI_BSSID,
+    WMI_ABORT_SCAN,
+    WMI_TARGET_EVENT_REPORT,
+    WMI_AP_GET_STA_LIST,    /* AP mode */
+    WMI_AP_HIDDEN_SSID,     /* AP mode */
+    WMI_AP_SET_NUM_STA,     /* AP mode */
+    WMI_AP_ACL_POLICY,      /* AP mode */
+    WMI_AP_ACL_MAC_LIST1,   /* AP mode */
+    WMI_AP_ACL_MAC_LIST2,   /* AP mode */
+    WMI_AP_GET_ACL_LIST,    /* AP mode */
+    WMI_AP_COMMIT_CONFIG,   /* AP mode */
+    WMI_AP_INACT_TIME,      /* AP mode */
+    WMI_AP_PROT_TIME,       /* AP mode */    
+    WMI_AP_SET_MLME,        /* AP mode */
+    WMI_AP_SET_COUNTRY,     /* AP mode */
+    WMI_AP_GET_COUNTRY_LIST,/* AP mode */
+    WMI_AP_DISABLE_REGULATORY, /* AP mode */
+    WMI_AP_SET_DTIM,        /* AP mode */    
+    WMI_AP_INTRA_BSS,       /* AP mode */    
+    WMI_AP_INTER_BSS,       /* AP mode */    
+    WMI_GET_IP,
+    WMI_SET_MCAST_FILTER,
+    WMI_DEL_MCAST_FILTER,
+    WMI_MCAST_FILTER,
+    WMI_DUMP_RCV_AGGR_STATS,
+    WMI_SETUP_AGGR,
+    WMI_CFG_ALLOW_AGGR,
+    WMI_CFG_DELE_AGGR,
+    WMI_SET_HT_CAP,
+    WMI_SET_HT_OP,
+    WMI_AP_GET_STAT,        /* AP mode */
+    WMI_AP_CLR_STAT,        /* AP mode */
+    WMI_SET_TX_SELECT_RATES,
+    WMI_SCAN_MAXACT_PER_SSID,
+    WMI_AP_GET_HIDDEN_SSID, /* AP mode */
+    WMI_AP_GET_COUNTRY,     /* AP mode */
+    WMI_AP_GET_WMODE,       /* AP mode */
+    WMI_AP_GET_DTIM,        /* AP mode */
+    WMI_AP_GET_BINTVL,      /* AP mode */    
+    WMI_GET_RTS,
+    DIAG_FETCH_TARGET_REGS,
+#ifdef ATH_INCLUDE_PAL
+    WMI_SEND_PAL_CMD,
+    WMI_SEND_PAL_DATA,
+#endif
+    WMI_SET_WLAN_CONN_PRECDNCE,
+    WMI_SET_AP_RATESET,     /* AP mode */
+    WMI_SET_TX_WAKEUP_POLICY,
+    WMI_SET_TX_NUM_FRAMES_TO_WAKEUP,
+    WMI_SET_AP_PS,
+    WMI_SET_AP_PS_PSTYPE,
+    WMI_SET_AP_PS_IDLE_TIME,
+    WMI_SET_AP_PS_PS_PERIOD,
+    WMI_SET_AP_PS_SLEEP_PERIOD,
+    WMI_SEND_CONNECT_CMD,
+    WMI_SEND_CONNECT_CMD1,
+    WMI_SEND_CONNECT_CMD2,
+    WMI_SET_WOW_FILTER,
+    WMI_SET_WOW_HOST_REQ_DELAY,
+    WMI_SET_QOS_SUPP,
+    WMI_SET_AC_VAL,
+    WMI_AP_SET_DFS, /* AP mode */
+    BT_HW_POWER_STATE,
+    SET_BT_HW_POWER_STATE,
+    GET_BT_HW_POWER_STATE,
+    DIAG_DUMP_CHIP_MEM_VENUS,
+    WMI_SET_TX_SGI_PARAM,
+    WMI_SGI_MASK,
+    WMI_PER_SGI,
+    WMI_WAC_ENABLE,
+    WMI_SET_WPA_OFFLOAD_STATE,
+    WMI_AP_ACS_DISABLE_HI_CHANNELS,
+    WMI_SET_DIVERSITY_PARAM,
+    WMI_SET_EXCESS_TX_RETRY_THRES,
+    WMI_FORCE_ASSERT,    
+    WMI_AP_SET_GNUM_STA,
+    WMI_AP_GET_GNUM_STA,
+    WMI_AP_GET_NUM_STA,
+    WMI_SUSPEND_DRIVER,
+    WMI_RESUME_DRIVER,    
+    WMI_SCAN_PROBED_SSID,
+    WMI_AP_SET_APSD,
+    WMI_GET_HT_CAP,
+    WMI_SET_MCASTRATE,
+    WMI_VOICE_DETECTION_ENABLE, /* enable/disable voice detection */
+    WMI_SET_TXE_NOTIFY,
+    WMI_SET_RECOVERY_SIMULATE, /*set recovery simulate*/
+WMI_DISABLE_BCAST_IN_PM,  /* enable/disable broadcast in power save */
+    WMI_AP_BLWL,                /*set SAP blacklist/whitelist*/
+    WMI_AP_BLWL_POLICY,          /*set SAP blacklist/whitelist policy*/
+    WMI_AP_BLWL_MAC_LIST,         /*set SAP blacklist/whitelist mac*/
+    WMI_SET_RSSI_FILTER,
+};
+
+/*
+***************************************************************************
+**  How to form a regcode from CountryCode, Regulatory domain or WWR code:
+**
+**  WWR code is nothing but a special case of Regulatory domain.
+**
+**      code is of type U_INT32
+**
+**      Bit-31  Bit-30      Bit11-0
+**        0       0          xxxx    -> Bit11-0 is a Regulatory Domain
+**        0       1          xxxx    -> Bit11-0 is a WWR code
+**        1       X          xxxx    -> Bit11-0 is a Country code
+**  
+***************************************************************************
+*/
+#define REGCODE_IS_CC_BITSET(x)     ((x) & 0x80000000)
+#define REGCODE_GET_CODE(x)         ((x) & 0xFFF)
+#define REGCODE_IS_WWR_BITSET(x)    ((x) & 0x40000000)
+#ifdef ATH_INCLUDE_PAL
+#define MAX_BUFFER_SIZE             1512    
+#endif
+
+typedef struct {
+    A_UINT32        numPMKIDUser;          /* PMKIDs user wants to enter */
+    WMI_SET_PMKID_LIST_CMD  *pmkidInfo;
+} pmkidUserInfo_t;
+
+#define KEYTYPE_PSK     1
+#define KEYTYPE_PHRASE  2
+
+typedef struct {
+    char ssid[WMI_MAX_SSID_LEN];
+    A_UINT8 ssid_len;
+    A_UINT8 wpa;
+    A_UINT8 ucipher;
+    A_UINT8 mcipher;
+    char    psk[64];
+    A_UINT8 psk_type;
+    A_UINT8 pmk[WMI_PMK_LEN];
+    A_UINT8 auth;
+    A_UINT8 wep_key[4][26];
+    A_UINT8 def_wep_key;
+} profile_t;
+
+/*
+ * Numbering from ISO 3166
+ */
+enum CountryCode {
+    CTRY_ALBANIA              = 8,       /* Albania */
+    CTRY_ALGERIA              = 12,      /* Algeria */
+    CTRY_ARGENTINA            = 32,      /* Argentina */
+    CTRY_ARMENIA              = 51,      /* Armenia */
+    CTRY_ARUBA                = 533,     /* Aruba */
+    CTRY_AUSTRALIA            = 36,      /* Australia (for STA) */
+    CTRY_AUSTRALIA_AP         = 5000,    /* Australia (for AP) */
+    CTRY_AUSTRIA              = 40,      /* Austria */
+    CTRY_AZERBAIJAN           = 31,      /* Azerbaijan */
+    CTRY_BAHRAIN              = 48,      /* Bahrain */
+    CTRY_BANGLADESH           = 50,      /* Bangladesh */
+    CTRY_BARBADOS             = 52,      /* Barbados */
+    CTRY_BELARUS              = 112,     /* Belarus */
+    CTRY_BELGIUM              = 56,      /* Belgium */
+    CTRY_BELIZE               = 84,      /* Belize */
+    CTRY_BOLIVIA              = 68,      /* Bolivia */
+    CTRY_BOSNIA_HERZEGOWANIA  = 70,      /* Bosnia & Herzegowania */
+    CTRY_BRAZIL               = 76,      /* Brazil */
+    CTRY_BRUNEI_DARUSSALAM    = 96,      /* Brunei Darussalam */
+    CTRY_BULGARIA             = 100,     /* Bulgaria */
+    CTRY_CAMBODIA             = 116,     /* Cambodia */
+    CTRY_CANADA               = 124,     /* Canada (for STA) */
+    CTRY_CANADA_AP            = 5001,    /* Canada (for AP) */
+    CTRY_CHILE                = 152,     /* Chile */
+    CTRY_CHINA                = 156,     /* People's Republic of China */
+    CTRY_COLOMBIA             = 170,     /* Colombia */
+    CTRY_COSTA_RICA           = 188,     /* Costa Rica */
+    CTRY_CROATIA              = 191,     /* Croatia */
+    CTRY_CYPRUS               = 196,
+    CTRY_CZECH                = 203,     /* Czech Republic */
+    CTRY_DENMARK              = 208,     /* Denmark */
+    CTRY_DOMINICAN_REPUBLIC   = 214,     /* Dominican Republic */
+    CTRY_ECUADOR              = 218,     /* Ecuador */
+    CTRY_EGYPT                = 818,     /* Egypt */
+    CTRY_EL_SALVADOR          = 222,     /* El Salvador */
+    CTRY_ESTONIA              = 233,     /* Estonia */
+    CTRY_FAEROE_ISLANDS       = 234,     /* Faeroe Islands */
+    CTRY_FINLAND              = 246,     /* Finland */
+    CTRY_FRANCE               = 250,     /* France */
+    CTRY_FRANCE2              = 255,     /* France2 */
+    CTRY_GEORGIA              = 268,     /* Georgia */
+    CTRY_GERMANY              = 276,     /* Germany */
+    CTRY_GREECE               = 300,     /* Greece */
+    CTRY_GREENLAND            = 304,     /* Greenland */
+    CTRY_GRENADA              = 308,     /* Grenada */
+    CTRY_GUAM                 = 316,     /* Guam */
+    CTRY_GUATEMALA            = 320,     /* Guatemala */
+    CTRY_HAITI                = 332,     /* Haiti */
+    CTRY_HONDURAS             = 340,     /* Honduras */
+    CTRY_HONG_KONG            = 344,     /* Hong Kong S.A.R., P.R.C. */
+    CTRY_HUNGARY              = 348,     /* Hungary */
+    CTRY_ICELAND              = 352,     /* Iceland */
+    CTRY_INDIA                = 356,     /* India */
+    CTRY_INDONESIA            = 360,     /* Indonesia */
+    CTRY_IRAN                 = 364,     /* Iran */
+    CTRY_IRAQ                 = 368,     /* Iraq */
+    CTRY_IRELAND              = 372,     /* Ireland */
+    CTRY_ISRAEL               = 376,     /* Israel */
+    CTRY_ITALY                = 380,     /* Italy */
+    CTRY_JAMAICA              = 388,     /* Jamaica */
+    CTRY_JAPAN                = 392,     /* Japan */
+    CTRY_JAPAN1               = 393,     /* Japan (JP1) */
+    CTRY_JAPAN2               = 394,     /* Japan (JP0) */
+    CTRY_JAPAN3               = 395,     /* Japan (JP1-1) */
+    CTRY_JAPAN4               = 396,     /* Japan (JE1) */
+    CTRY_JAPAN5               = 397,     /* Japan (JE2) */
+    CTRY_JAPAN6               = 399,     /* Japan (JP6) */
+    CTRY_JORDAN               = 400,     /* Jordan */
+    CTRY_KAZAKHSTAN           = 398,     /* Kazakhstan */
+    CTRY_KENYA                = 404,     /* Kenya */
+    CTRY_KOREA_NORTH          = 408,     /* North Korea */
+    CTRY_KOREA_ROC            = 410,     /* South Korea (for STA) */
+    CTRY_KOREA_ROC2           = 411,     /* South Korea */
+    CTRY_KOREA_ROC3           = 412,     /* South Korea (for AP) */
+    CTRY_KUWAIT               = 414,     /* Kuwait */
+    CTRY_LATVIA               = 428,     /* Latvia */
+    CTRY_LEBANON              = 422,     /* Lebanon */
+    CTRY_LIBYA                = 434,     /* Libya */
+    CTRY_LIECHTENSTEIN        = 438,     /* Liechtenstein */
+    CTRY_LITHUANIA            = 440,     /* Lithuania */
+    CTRY_LUXEMBOURG           = 442,     /* Luxembourg */
+    CTRY_MACAU                = 446,     /* Macau */
+    CTRY_MACEDONIA            = 807,     /* the Former Yugoslav Republic of Macedonia */
+    CTRY_MALAYSIA             = 458,     /* Malaysia */
+    CTRY_MALTA                = 470,     /* Malta */
+    CTRY_MEXICO               = 484,     /* Mexico */
+    CTRY_MONACO               = 492,     /* Principality of Monaco */
+    CTRY_MOROCCO              = 504,     /* Morocco */
+    CTRY_NEPAL                = 524,     /* Nepal */   
+    CTRY_NETHERLANDS          = 528,     /* Netherlands */
+    CTRY_NETHERLAND_ANTILLES  = 530,     /* Netherlands-Antilles */
+    CTRY_NEW_ZEALAND          = 554,     /* New Zealand */
+    CTRY_NICARAGUA            = 558,     /* Nicaragua */
+    CTRY_NORWAY               = 578,     /* Norway */
+    CTRY_OMAN                 = 512,     /* Oman */
+    CTRY_PAKISTAN             = 586,     /* Islamic Republic of Pakistan */
+    CTRY_PANAMA               = 591,     /* Panama */
+    CTRY_PARAGUAY             = 600,     /* Paraguay */
+    CTRY_PERU                 = 604,     /* Peru */
+    CTRY_PHILIPPINES          = 608,     /* Republic of the Philippines */
+    CTRY_POLAND               = 616,     /* Poland */
+    CTRY_PORTUGAL             = 620,     /* Portugal */
+    CTRY_PUERTO_RICO          = 630,     /* Puerto Rico */
+    CTRY_QATAR                = 634,     /* Qatar */
+    CTRY_ROMANIA              = 642,     /* Romania */
+    CTRY_RUSSIA               = 643,     /* Russia */
+    CTRY_RWANDA               = 646,     /* Rwanda */
+    CTRY_SAUDI_ARABIA         = 682,     /* Saudi Arabia */
+    CTRY_MONTENEGRO           = 891,     /* Montenegro */
+    CTRY_SINGAPORE            = 702,     /* Singapore */
+    CTRY_SLOVAKIA             = 703,     /* Slovak Republic */
+    CTRY_SLOVENIA             = 705,     /* Slovenia */
+    CTRY_SOUTH_AFRICA         = 710,     /* South Africa */
+    CTRY_SPAIN                = 724,     /* Spain */
+    CTRY_SRILANKA             = 144,     /* Sri Lanka */
+    CTRY_SWEDEN               = 752,     /* Sweden */
+    CTRY_SWITZERLAND          = 756,     /* Switzerland */
+    CTRY_SYRIA                = 760,     /* Syria */
+    CTRY_TAIWAN               = 158,     /* Taiwan */
+    CTRY_THAILAND             = 764,     /* Thailand */
+    CTRY_TRINIDAD_Y_TOBAGO    = 780,     /* Trinidad y Tobago */
+    CTRY_TUNISIA              = 788,     /* Tunisia */
+    CTRY_TURKEY               = 792,     /* Turkey */
+    CTRY_UAE                  = 784,     /* U.A.E. */
+    CTRY_UKRAINE              = 804,     /* Ukraine */
+    CTRY_UNITED_KINGDOM       = 826,     /* United Kingdom */
+    CTRY_UNITED_STATES        = 840,     /* United States (for STA) */
+    CTRY_UNITED_STATES_AP     = 841,     /* United States (for AP) */
+    CTRY_UNITED_STATES_PS     = 842,     /* United States - public safety */
+    CTRY_URUGUAY              = 858,     /* Uruguay */
+    CTRY_UZBEKISTAN           = 860,     /* Uzbekistan */
+    CTRY_VENEZUELA            = 862,     /* Venezuela */
+    CTRY_VIET_NAM             = 704,     /* Viet Nam */
+    CTRY_YEMEN                = 887,     /* Yemen */
+    CTRY_ZIMBABWE             = 716      /* Zimbabwe */
+};
+
+#define CTRY_DEBUG      0
+#define CTRY_DEFAULT    0x1ff
+#define REGCODE_COUNTRY_BIT 0x80000000
+
+typedef struct {
+    A_UINT16    countryCode;       
+    A_CHAR      isoName[3];
+} COUNTRY_CODE_MAP;
+#if 0
+static COUNTRY_CODE_MAP allCountries[] = {
+    {CTRY_DEBUG,        "DB"}, 
+    {CTRY_DEFAULT,      "NA"},
+    {CTRY_ALBANIA,      "AL"},
+    {CTRY_ALGERIA,      "DZ"},
+    {CTRY_ARGENTINA,    "AR"},
+    {CTRY_ARMENIA,      "AM"},
+    {CTRY_ARUBA,        "AW"},
+    {CTRY_AUSTRALIA,    "AU"},
+    {CTRY_AUSTRALIA_AP, "AU"},
+    {CTRY_AUSTRIA,      "AT"},
+    {CTRY_AZERBAIJAN,   "AZ"},
+    {CTRY_BAHRAIN,      "BH"},
+    {CTRY_BANGLADESH,   "BD"},
+    {CTRY_BARBADOS,     "BB"},
+    {CTRY_BELARUS,      "BY"},
+    {CTRY_BELGIUM,      "BE"},
+    {CTRY_BELIZE,       "BZ"},
+    {CTRY_BOLIVIA,      "BO"},
+    {CTRY_BOSNIA_HERZEGOWANIA,   "BA"},
+    {CTRY_BRAZIL,       "BR"},
+    {CTRY_BRUNEI_DARUSSALAM, "BN"},
+    {CTRY_BULGARIA,       "BG"},
+    {CTRY_CAMBODIA,       "KH"},
+    {CTRY_CANADA,         "CA"},
+    {CTRY_CANADA_AP,      "CA"},
+    {CTRY_CHILE,          "CL"},
+    {CTRY_CHINA,          "CN"},
+    {CTRY_COLOMBIA,       "CO"},
+    {CTRY_COSTA_RICA,     "CR"},
+    {CTRY_CROATIA,        "HR"},
+    {CTRY_CYPRUS,         "CY"},
+    {CTRY_CZECH,          "CZ"},
+    {CTRY_DENMARK,        "DK"},
+    {CTRY_DOMINICAN_REPUBLIC, "DO"},
+    {CTRY_ECUADOR,        "EC"},
+    {CTRY_EGYPT,          "EG"},
+    {CTRY_EL_SALVADOR,    "SV"},
+    {CTRY_ESTONIA,        "EE"},
+    {CTRY_FINLAND,        "FI"},
+    {CTRY_FRANCE,         "FR"},
+    {CTRY_FRANCE2,        "F2"},
+    {CTRY_GEORGIA,        "GE"},
+    {CTRY_GERMANY,        "DE"},
+    {CTRY_GREECE,         "GR"},
+    {CTRY_GREENLAND,      "GL"},
+    {CTRY_GRENADA,        "GD"},
+    {CTRY_GUAM,           "GU"},
+    {CTRY_GUATEMALA,      "GT"},
+    {CTRY_HAITI,          "HT"},
+    {CTRY_HONDURAS,       "HN"},
+    {CTRY_HONG_KONG,      "HK"},
+    {CTRY_HUNGARY,        "HU"},
+    {CTRY_ICELAND,        "IS"},
+    {CTRY_INDIA,          "IN"},
+    {CTRY_INDONESIA,      "ID"},
+    {CTRY_IRAN,           "IR"},
+    {CTRY_IRELAND,        "IE"},
+    {CTRY_ISRAEL,         "IL"},
+    {CTRY_ITALY,          "IT"},
+    {CTRY_JAMAICA,        "JM"},
+    {CTRY_JAPAN,          "JP"},
+    {CTRY_JORDAN,         "JO"},
+    {CTRY_KAZAKHSTAN,     "KZ"},
+    {CTRY_KENYA,          "KE"},
+    {CTRY_KOREA_NORTH,    "KP"},
+    {CTRY_KOREA_ROC,      "KR"},
+    {CTRY_KOREA_ROC2,     "K2"},
+    {CTRY_KOREA_ROC3,     "K3"},
+    {CTRY_KUWAIT,         "KW"},
+    {CTRY_LATVIA,         "LV"},
+    {CTRY_LEBANON,        "LB"},
+    {CTRY_LIECHTENSTEIN,  "LI"},
+    {CTRY_LITHUANIA,     "LT"},
+    {CTRY_LUXEMBOURG,    "LU"},
+    {CTRY_MACAU,         "MO"},
+    {CTRY_MACEDONIA,     "MK"},
+    {CTRY_MALAYSIA,      "MY"},
+    {CTRY_MALTA,         "MT"},
+    {CTRY_MEXICO,        "MX"},
+    {CTRY_MONACO,        "MC"},
+    {CTRY_MOROCCO,       "MA"},
+    {CTRY_NEPAL,         "NP"},
+    {CTRY_NEW_ZEALAND,   "NZ"},
+    {CTRY_NETHERLANDS,   "NL"},
+    {CTRY_NETHERLAND_ANTILLES,    "AN"},
+    {CTRY_NORWAY,         "NO"},
+    {CTRY_OMAN,           "OM"},
+    {CTRY_PAKISTAN,       "PK"},
+    {CTRY_PANAMA,         "PA"},
+    {CTRY_PERU,           "PE"},
+    {CTRY_PHILIPPINES,    "PH"},
+    {CTRY_POLAND,         "PL"},
+    {CTRY_PORTUGAL,       "PT"},
+    {CTRY_PUERTO_RICO,    "PR"},
+    {CTRY_QATAR,          "QA"},
+    {CTRY_ROMANIA,        "RO"},
+    {CTRY_RUSSIA,         "RU"},
+    {CTRY_RWANDA,         "RW"},
+    {CTRY_SAUDI_ARABIA,   "SA"},
+    {CTRY_MONTENEGRO,     "CS"},
+    {CTRY_SINGAPORE,      "SG"},
+    {CTRY_SLOVAKIA,       "SK"},
+    {CTRY_SLOVENIA,       "SI"},
+    {CTRY_SOUTH_AFRICA,   "ZA"},
+    {CTRY_SPAIN,          "ES"},
+    {CTRY_SRILANKA,       "LK"},
+    {CTRY_SWEDEN,         "SE"},
+    {CTRY_SWITZERLAND,    "CH"},
+    {CTRY_SYRIA,          "SY"},
+    {CTRY_TAIWAN,         "TW"},
+    {CTRY_THAILAND,       "TH"},
+    {CTRY_TRINIDAD_Y_TOBAGO, "TT"},
+    {CTRY_TUNISIA,        "TN"},
+    {CTRY_TURKEY,         "TR"},
+    {CTRY_UKRAINE,        "UA"},
+    {CTRY_UAE,            "AE"},
+    {CTRY_UNITED_KINGDOM, "GB"},
+    {CTRY_UNITED_STATES,    "US"},
+    {CTRY_UNITED_STATES_AP, "US"},
+    {CTRY_UNITED_STATES_PS, "PS"},
+    {CTRY_URUGUAY,        "UY"},
+    {CTRY_UZBEKISTAN,     "UZ"},    
+    {CTRY_VENEZUELA,      "VE"},
+    {CTRY_VIET_NAM,       "VN"},
+    {CTRY_YEMEN,          "YE"},
+    {CTRY_ZIMBABWE,       "ZW"}
+};
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WMI_CONFIG_H_ */
diff --git a/ath6kl-wmiconfig/wmiconfig b/ath6kl-wmiconfig/wmiconfig
new file mode 100755
index 0000000..958ded7
--- /dev/null
+++ b/ath6kl-wmiconfig/wmiconfig
Binary files differ
diff --git a/ath6kl-wmiconfig/wmiconfig.c b/ath6kl-wmiconfig/wmiconfig.c
new file mode 100755
index 0000000..5e5c2c3
--- /dev/null
+++ b/ath6kl-wmiconfig/wmiconfig.c
@@ -0,0 +1,3530 @@
+/*
+* Copyright (c) 2012 Qualcomm Atheros, Inc..
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
+#define SUPPORT_11N
+#include "libtcmd.h"
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <linux/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <a_config.h>
+#include <a_osapi.h>
+#include <athdefs.h>
+#include <a_types.h>
+#include <wmi.h>
+
+#include "athdrv_linux.h"
+#include "ieee80211.h"
+#include "ieee80211_ioctl.h"
+#include "wmiconfig.h"
+#include "pkt_log.h"
+#include "wmi.h"
+#include "dbglog.h"
+#include "testcmd.h"
+
+#define TO_LOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c)+ 0x20) : (c))
+
+#define ISDIGIT(c)  ( (((c) >= '0') && ((c) <= '9')) ? (1) : (0) )
+
+//static int send_connect_cmd();
+
+//static int send_scan_probedssid_cmd();
+
+static int _from_hex(char c);
+//static A_INT8 getPhyMode(char *pArg);
+
+static A_UINT16 wmic_ieee2freq(int chan);
+static A_STATUS wmic_ether_aton(const char *orig, A_UINT8 *eth);
+void            printTargetStats(TARGET_STATS *pStats);
+static A_STATUS
+wmic_get_ip(const char *ipstr, A_UINT32 *ip);
+A_STATUS
+wmic_validate_setkeepalive(WMI_SET_KEEPALIVE_CMD_EXT *cmd, char **argv);
+A_STATUS
+wmic_validate_roam_ctrl(WMI_SET_ROAM_CTRL_CMD *pRoamCtrl, A_UINT8 numArgs,
+                        char **argv);
+A_STATUS
+wmic_validate_appie(struct ieee80211req_getset_appiebuf *appIEInfo, char **argv);
+void rx_cb(void *buf, int len);
+A_STATUS
+wmic_validate_mgmtfilter(A_UINT32 *pMgmtFilter, char **argv);
+void convert_hexstring_bytearray(char *hexStr, A_UINT8 *byteArray,
+                                    A_UINT8 numBytes);
+//static int is_mac_null(A_UINT8 *mac);
+void print_wild_mac(unsigned char *mac, char wildcard);
+A_STATUS wmic_ether_aton_wild(const char *orig, A_UINT8 *eth, A_UINT8 *wild);
+void printBtcoexConfig(WMI_BTCOEX_CONFIG_EVENT * pConfig);
+void printBtcoexStats(WMI_BTCOEX_STATS_EVENT * pStats);
+#ifdef ATH_INCLUDE_PAL
+void *phy_attach(char *if_name);
+int pal_send_hci_cmd(void *dev, char *buf, short sz);
+int pal_send_acl_data_pkt(void *dev, char *buf, short sz);
+void cmdParser(A_UINT8 *cmd,A_UINT16 len);
+void palData(A_UINT8 *data,A_UINT32 len);
+extern int eventLogLevel; //To enable/disable Debug messages. defined in pal parser library
+
+const char palcommands[]=
+"--sendpalcmd <filename> <on/off> ; on - enable debug; off - disable debug \n\
+--sendpaldata <filename> <on/off>; on - enable debug; off - disable debug \n";
+#endif
+const char *progname;
+const char commands[] =
+"commands:\n\
+--version\n\
+--power <mode> where <mode> is rec or maxperf\n\
+--getpower is used to get the power mode(rec or maxperf)\n\
+--pmparams --it=<msec> --np=<number of PS POLL> --dp=<DTIM policy: ignore/normal/stick> --twp=<Tx wakeup policy: wakeup/sleep> --nt=<number of tx to wakeup>\n\
+--psparams --psPollTimer=<psPollTimeout> --triggerTimer=<triggerTimeout> --apsdTimPolicy=<ignore/adhere> --simulatedAPSDTimPolicy=<ignore/adhere>\n\
+--forceAssert \n\
+--ibsspmcaps --ps=<disable/atheros/ieee> --aw=<ATIM Windows in millisecond> --to=<TIMEOUT in millisecond> --ttl=<Time to live in number of beacon periods>\n\
+--appsparams --pstype=<disable/atheros> --psit=<millisecond> --psperiod=<in microsecond> --sleepperiod=<in psperiods>\n\
+--scan --fgstart=<sec> --fgend=<sec> --bg=<sec> --minact=<msec> maxact=<msec> --pas=<msec> --sr=<short scan ratio> --maxact2pas=<msec> --scanctrlflags <connScan> <scanConnected> <activeScan> <roamScan> <reportBSSINFO> <EnableAutoScan> --maxactscan_ssid=<Max no of active scan per probed ssid>\n\
+  where: \n\\n\
+  <connScan>           is 0 to not scan when Connect and Reconnect command, \n\
+                          1 to scan when Connect and Reconnect command, \n\
+  <scanConnected>      is 0 to skip the ssid it is already connected to, \n\
+                          1 to scan the ssid it is already connected to, \n\
+  <activeScan>         is 0 to disable active scan, \n\
+                          1 to enable active scan, \n\
+  <roamScan>           is 0 to disable roam scan when beacom miss and low rssi.(It's only valible when connScan is 0.\n\
+                          1 to enable roam scan.\n\
+  <reportBSSINFO>      is 0 to disable specified BSSINFO reporting rule.\n\
+                          1 to enable specified BSSINFO reporting rule.\n\
+ <EnableAutoScan>      is 0 to disable autonomous scan. No scan after a disconnect event\n\
+                          1 Enable autonomous scan.\n\
+--listen=<#of TUs, can  range from 15 to 5000>\n\
+--listenbeacons=<#of beacons, can  range from 1 to 50>\n\
+--setbmisstime <#of TUs, can range from 1000 to 5000>\n\
+--setbmissbeacons <#of beacons, can range from 5 to 50>\n\
+--filter=<filter> --ieMask 0x<mask> where <filter> is none, all, profile, not_profile, bss, not_bss, or ssid and <mask> is a combination of the following\n\
+{\n\
+    BSS_ELEMID_CHANSWITCH = 0x01 \n\
+    BSS_ELEMID_ATHEROS = 0x02\n\
+}\n\
+--wmode <mode> <list> sc <scan> where \n\
+        <mode> is a, g, b,ag, gonly (use mode alone in AP mode) \n\
+        <list> is a list of channels (frequencies in mhz or ieee channel numbers)\n\
+        <scan> is 0 to disable scan after setting channel list.\n\
+                  1 to enable scan after setting channel list.\n\
+--getwmode \n\
+--ssid <index> <ssid> \n\
+        where <ssid> is the wireless network string,'any' mean empty ssid, 'off' means disable \n\
+              <index> is 0 ~ 15 \n\
+--badAP=<macaddr> [--num=<index>] where macaddr is macaddr of AP to be avoided in xx:xx:xx:xx:xx:xx format, and num is index from 0-1.\n\
+--clrAP [--num=<index>] is used to clear a badAP entry.  num is index from 0-1\n\
+--createqos <user priority> <direction> <traffic class> <trafficType> <voice PS capability> \n\
+    <min service interval> <max service interval> <inactivity interval> <suspension interval> \n\
+    <service start time> <tsid> <nominal MSDU> <max MSDU> <min data rate> <mean data rate> \n\
+    <peak data rate> <max burst size> <delay bound> <min phy rate> <sba> <medium time>where:\n\
+        <user priority>         802.1D user priority range : 0-7        \n\
+        <direction>             is 0 for Tx(uplink) traffic,            \n\
+                                   1 for Rx(downlink) traffic,          \n\
+                                   2 for bi-directional traffic;        \n\
+        <traffic class>         is 0 for BE,                            \n\
+                                   1 for BK,                            \n\
+                                   2 for VI,                            \n\
+                                   3 for VO;                            \n\
+        <trafficType>           1-periodic, 0-aperiodic                 \n\
+        <voice PS capability>   specifies whether the voice power save mechanism \n\
+                                (APSD if AP supports it or legacy/simulated APSD \n\
+                                    [using PS-Poll] ) should be used             \n\
+                                = 0 to disable voice power save for this traffic class,\n\
+                                = 1 to enable APSD voice power save for this traffic class,\n\
+                                = 2 to enable voice power save for ALL traffic classes,\n\
+        <min service interval>  in milliseconds                     \n\
+        <max service interval>  in milliseconds                     \n\
+        <inactivity interval>   in milliseconds;=0 means infinite inactivity interval\n\
+        <suspension interval>   in milliseconds \n\
+        <service start time>    service start time \n\
+        <tsid>                  TSID range: 0-15                    \n\
+        <nominal MSDU>          nominal MAC SDU size                \n\
+        <max MSDU>              maximum MAC SDU size                \n\
+        <min data rate>         min data rate in bps                \n\
+        <mean data rate>        mean data rate in bps               \n\
+        <peak data rate>        peak data rate in bps               \n\
+        <max burst size>        max burst size in bps               \n\
+        <delay bound>           delay bound                         \n\
+        <min phy rate>          min phy rate in bps                 \n\
+        <sba>                   surplus bandwidth allowance         \n\
+        <medium time>           medium time in TU of 32-us periods per sec    \n\
+--deleteqos <trafficClass> <tsid> where:\n\
+  <traffic class>         is 0 for BE,                            \n\
+                             1 for BK,                            \n\
+                             2 for VI,                            \n\
+                             3 for VO;                            \n\
+  <tsid> is the TspecID, use --qosqueue option to get the active tsids\n\
+--qosqueue <traffic class>, where:\n\
+  <traffic class>         is 0 for BE,                            \n\
+                             1 for BK,                            \n\
+                             2 for VI,                            \n\
+                             3 for VO;                            \n\
+--getTargetStats --clearStats\n\
+   tx_unicast_rate, rx_unicast_rate values will be 0Kbps when no tx/rx \n\
+   unicast data frame is received.\n\
+--setErrorReportingBitmask\n\
+--acparams --acval <0-3> --txop <limit> --cwmin <0-15> --cwmax <0-15> --aifsn<0-15>\n\
+--disc=<timeout> to set the disconnect timeout in seconds\n\
+--mode <mode> set the optional mode, where mode is special or off \n\
+--sendframe <frmType> <dstaddr> <bssid> <optIEDatalen> <optIEData> where:\n\
+  <frmType>   is 1 for probe request frame,\n\
+                 2 for probe response frame,\n\
+                 3 for CPPP start,\n\
+                 4 for CPPP stop, \n\
+  <dstaddr>   is the destination mac address, in xx:xx:xx:xx:xx:xx format, \n\
+  <bssid>     is the bssid, in xx:xx:xx:xx:xx:xx format, \n\
+  <optIEDatalen> optional IE data length,\n\
+  <optIEData> is the pointer to optional IE data arrary \n\
+--adhocbssid <macaddr> where macaddr is the BSSID for IBSS to be created in xx:xx:xx:xx:xx:xx format\n\
+--beaconintvl   <beacon_interval in milliseonds> \n\
+--getbeaconintvl \n\
+--setretrylimits  <frameType> <trafficClass> <maxRetries> <enableNotify>\n\
+  <frameType>      is 0 for management frame, \n\
+                      1 for control frame,\n\
+                      2,for data frame;\n\
+  <trafficClass>   is 0 for BE, 1 for BK, 2 for VI, 3 for VO, only applies to data frame type\n\
+  <maxRetries>     is # in [2 - 13];      \n\
+  <enableNotify>   is \"on\" to enable the notification of max retries exceed \n\
+                      \"off\" to disable the notification of max retries excedd \n\
+--rssiThreshold <weight> <pollTimer> <above_threshold_tag_1> <above_threshold_val_1> ... \n\
+                <above_threshold_tag_6> <above_threshold_val_6> \n\
+                <below_threshold_tag_1> <below_threshold_val_1> ... \n\
+                <below_threshold_tag_6> <below_threshold_val_6> \n\
+  <weight>        share with snrThreshold\n\
+  <threshold_x>   will be converted to negatvie value automatically, \n\
+                   i.e. input 90, actually -90 will be set into HW\n\
+  <pollTimer>     is timer to poll rssi value(factor of LI), set to 0 will disable all thresholds\n\
+                 \n\
+--snrThreshold <weight> <upper_threshold_1> ... <upper_threshold_4> \n\
+               <lower_threshold_1> ... <lower_threshold_4> <pollTimer>\n\
+  <weight>        share with rssiThreshold\n\
+  <threshold_x>  is positive value, in ascending order\n\
+  <pollTimer>     is timer to poll snr value(factor of LI), set to 0 will disable all thresholds\n\
+                 \n\
+--cleanRssiSnr \n\
+--lqThreshold <enable> <upper_threshold_1>  ... <upper_threshold_4>\n\
+              <lower_threshold_1> ... <lower_threshold_4>\n\
+   <enable>       is 0 for disable,\n\
+                     1 for enable lqThreshold\n\
+   <threshold_x>  is in ascending order            \n\
+--setlongpreamble <enable>\n\
+    <enable>      is 0 for diable,\n\
+                     1 for enable.\n\
+--setRTS  <pkt length threshold>\n\
+--getRTS \n\
+--startscan   --homeDwellTime=<msec> --forceScanInt<ms> --forceScanFlags <scan type> <forcefgscan> <isLegacyCisco> --scanlist <list> where:\n\
+  <homeDwellTime>     Maximum duration in the home channel(milliseconds),\n\
+  <forceScanInt>      Time interval between scans (milliseconds),\n\
+    <scan type>     is 0 for long scan,\n\
+                     1 for short scan,\n\
+  <forcefgscan>   is 0 for disable force fgscan,\n\
+                     1 for enable force fgscan,\n\
+  <isLegacyCisco> is 0 for disable legacy Cisco AP compatible,\n\
+                     1 for enable legacy Cisco AP compatible,\n\
+  <list> is a list of channels (frequencies in mhz or ieee channel numbers)\n\
+--setfixrates <rate index> where: \n\
+  <rate index> is {0 1M},{1 2M},{2 5.5M},{3 11M},{4 6M},{5 9M},{6 12M},{7 18M},{8 24M},{9 36M},{10 48M},{11 54M},\n\
+  if want to config more rare index, can use blank to space out, such as: --setfixrates 0 1 2 \n\
+--getfixrates : Get the fix rate index from target\n\
+--setauthmode <mode> where:\n\
+  <mode>        is 0 to do authentication when reconnect, \n\
+                   1 to not do authentication when reconnect.(not clean key). \n\
+--setreassocmode <mode> where:\n\
+  <mode>        is 0 do send disassoc when reassociation, \n\
+                   1 do not send disassoc when reassociation. \n\
+--setVoicePktSize  is maximum size of voice packet \n\
+--setMaxSPLength   is the maximum service period in packets, as applicable in APSD \n\
+                   0 - deliver all packets \n\
+                   1 - deliver up to 2 packets \n\
+                   2 - deliver up to 4 packets \n\
+                   3 - deliver up to 6 packets \n\
+--setAssocIe <IE String>\n\
+--roam <roamctrl> <info>\n\
+       where <roamctrl> is   1  force a roam to specified bssid\n\
+                             2  set the roam mode \n\
+                             3  set the host bias of the specified BSSID\n\
+                             4 set the lowrssi scan parameters \n\
+      where <info> is BSSID<aa:bb:cc:dd:ee:ff> for roamctrl of 1\n\
+                      DEFAULT ,BSSBIAS or LOCK for roamctrl of 2\n\
+                      BSSID<aa:bb:cc:dd:ee:ff> <bias> for  roamctrl of 3\n\
+                             where <bias> is  a value between -256 and 255\n\
+                      <scan period> <scan threshold> <roam threshold> \n\
+                      <roam rssi floor> for roamctrl of 4\n\
+--getroamtable\n\
+--getroamdata\n\
+--wlan <enable/disable/query>\n\
+--bt <on/off/query>\n\
+--setBTstatus <streamType> <status>\n\
+      where <streamType> is    1 - Bluetooth SCO stream\n\
+                               2 - Bluetooth A2DP stream\n\
+                               3 - Bluetooth Inquiry/low priority stream\n\
+                               4 - Bluetooth E-SCO stream\n\
+      \n\
+      where <status> is        1 - stream started\n\
+                               2 - stream stopped\n\
+                               3 - stream resumed\n\
+                               4 - stream suspended\n\
+--setBTparams <paramType> <params>\n\
+      where <paramType> is     1 - Bluetooth SCO stream parameters\n\
+                               2 - Bluetooth A2DP stream parameters \n\
+                               3 - Front end antenna configuration \n\
+                               4 - Co-located Bluetooth configuration\n\
+                               5 - Bluetooth ACL coex (non-a2dp) parameters\n\
+                               6 - 11a is using a separate antenna\n\
+      \n\
+      where <params> for Bluetooth SCO are:\n\
+              <numScoCyclesForceTrigger> - number of Sco cyles, to force a trigger\n\
+               <dataResponseTimeout> - timeout for receiving downlink packet per PS-poll\n\
+               <stompScoRules> - Applicable for dual/splitter front end\n\
+                           1, Never stomp BT to receive downlink pkt\n\
+                           2, Always stomp BT to receive downlink pkt\n\
+                           3, Stomp BT only during low rssi conditions\n\
+               <stompDutyCyleVal> If Sco is stomped while waiting for downlink pkt, number sco cyles to not queue ps-poll-(Applicable only for switch FE)\n\
+              <psPollLatencyFraction> Fraction of idle SCO idle time.\n\
+                           1, if more than 3/4 idle duration is left, retrieve downlink pkt\n\
+                           2, if more than 1/2 idle duration is left, retrieve downlink pkt\n\
+                           3, if more 1/4 idle duration is left, retrieve dwnlink pkt\n\
+               <SCO slots> - number of Tx+Rx SCO slots : 2 for single-slot SCO, 6 for 3-slot SCO\n\
+          <Idle SCO slots> - number of idle slots between two SCO Tx+Rx instances\n\
+      \n\
+      where <params> for A2DP configuration are\n\
+      <a2dpWlanUsageLimit> Max duration wlan can use the medium ,whenever firmware detects medium for wlan (in msecs) \n\
+     <a2dpBurstCntMin> Mininum number of bluetooth data frames to replenish wlan usage time\n\
+     <a2dpDataRespTimeout> Time to wait for downlink data, after queuing pspoll\n\
+      where <params> for front end antenna configuration are\n\
+      1 - Dual antenna configuration (BT and wlan have seperate antenna) \n\
+      2 - Single antenna splitter configuration \n\
+      3 - Single antenna switch  configuration \n\
+      \n\
+      where <params> for co-located Bluetooth configuration are\n\
+      0 - Qualcomm BTS402x (default)\n\
+      1 - CSR Bluetooth\n\
+      2 - Atheros Bluetooth\n\
+      \n\
+      where <params> for Bluetooth ACL coex(bt ftp or bt OPP or other data based ACL profile (non a2dp)  parameter are \n\
+      <aclWlanMediumUsageTime> Usage time for Wlan.(default 30 msecs)\n\
+      <aclBtMediumUsageTime> Usage time for bluetooth (default 30 msecs)\n\
+      <aclDataRespTimeout> - timeout for receiving downlink packet per PS-poll\n\
+--setbtcoexfeant <antType> \n\
+       <antType> - Front end antenna type\n\
+       1 - Single antenna\n\
+       2 - Dual antenna\n\
+       3 - Dual antenna high isolation\n\
+       4 - bypass mode\n\
+       5 - combine mode\n\
+--setbtcoexcolocatedbt <btdevType >\n\
+        <btdevType> Co-located bluetooth device\n\
+        1 - Qualcomm BTS402X \n\
+        2 - CSR BC06 bluetooth \n\
+        3 - Atheros 3001 bluetooth\n\
+        4 - ST-ericssion CG2900 \n\
+        5 - Atheros 3002/MCI \n\
+--setbtcoexscoconfig <noscoSlots> <noidleslots> <scoflags> <linkid> <scoCyclesForceTrigger> <scoDataResponseTimeout> <scoStompDutyCyleVal> <scoStompDutyCyleMaxVal> <scoPsPollLatencyFraction> <scoStompCntIn100ms> <scoContStompMax> <scoMinlowRateMbps> <scoLowRateCnt> <scoHighPktRatio> <scoMaxAggrSize>\n\
+--setbtcoexa2dpconfig <a2dpFlags> <linkid> <a2dpWlanMaxDur> <a2dpMinBurstCnt> <a2dpDataRespTimeout> <a2dpMinlowRateMbps> <a2dpLowRateCnt> <a2dpHighPktRatio> <a2dpMaxAggrSize> <a2dpPktStompCnt>\n\
+--setbtcoexaclcoexconfig <aclWlanMediumDur> <aclBtMediumDur> <aclDetectTimeout> <aclPktCntLowerLimit> <aclIterForEnDis> <aclPktCntUpperLimit> <aclCoexFlags> <linkId> <aclDataRespTimeout> <aclCoexMinlowRateMbps> <aclCoexLowRateCnt> <aclCoexHighPktRatio> <aclCoexMaxAggrSize> <aclPktStompCnt>  \n\
+--setbtcoexbtinquirypageconfig <btInquiryDataFetchFrequency> <protectBmissDurPostBtInquiry> <btInquiryPageFlag>\n\
+--setbtcoexbtoperatingstatus <btprofiletype> <btoperatingstatus> <btlinkid>\n\
+        <btprofiletype> - Bluetooth profile\n\
+        1 - Bluetooth SCO profile \n\
+        2 - Bluetooth A2DP profile \n\
+        3 - Bluetooth Inquiry Page profile \n\
+        4 - Bluetooth ACL (non-a2dp) profile \n\
+        \n\
+        <btoperatingstatus>  profile operating status \n\
+        1 - start \n\
+        2 - stop \n\
+        \n\
+        <btlinkid> bluetooth link id -Applicable only for STE Bluetooth\n\
+        \n\
+--setbtcoexdebug <params1> <params2> <params3> <params4> <params5> \n\
+--getbtcoexconfig <btprofile> <linkid>\n\
+        <btprofile> - bluetooth profile \n\
+        1 - Bluetooth SCO profile \n\
+        2 - Bluetooth A2DP profile \n\
+        3 - Bluetooth Inquiry Page profile \n\
+        4 - Bluetooth ACL (non-a2dp) profile \n\
+        \n\
+    <btlinkid> bluetooth link id -Applicable only for STE Bluetooth\n\
+    \n\
+\n\
+--getbtcoexstats\n\
+--detecterror --frequency=<sec> --threshold=<count> where:\n\
+  <frequency>   is the periodicity of the challenge messages in seconds, \n\
+  <threshold>   is the number of challenge misses after which the error detection module in the driver will report an error, \n\
+--getheartbeat --cookie=<cookie>\n\
+  <cookie>  is used to identify the response corresponding to a challenge sent\n\
+--usersetkeys --initrsc=<on/off>\n\
+  initrsc=on(off> initialises(doesnot initialise) the RSC in the firmware\n\
+--getRD\n\
+--setcountry <countryCode> (Use --countrycodes for list of codes)\n\
+--countrycodes (Lists all the valid country codes)\n\
+--getcountry \n\
+--disableregulatory\n\
+--txopbursting <burstEnable>\n\
+        where <burstEnable> is  0 disallow TxOp bursting\n\
+                                1 allow TxOp bursting\n\
+--diagread\n\
+--diagwrite\n\
+--setkeepalive <keepalive interval> <keepalive mode> <peer mac address> <arp src ip> <arp tgt ip>\n\
+  <keepalive interval> is the time within which if there is no transmission/reception activity, the station sends a null packet to AP.\n\
+  <keepalive mode> 1: NULL data frame (default)\n\
+		   2: ARP response \n\
+		   3: both \n\
+  valid if <keepalive mode> is 2 or 3:\n\
+  <peer mac address>: target mac address for arp response\n\
+  <arp src ip>: host ip\n\
+  <arp tgt ip>: arp response target ip\n\
+--getkeepalive\n\
+--setappie <frame> <IE>\n\
+         where frame is one of beacon, probe, respon, assoc\n\
+               IE is a hex string starting with dd\n\
+               if IE is 0 then no IE is sent in the management frame\n\
+--setmgmtfilter <op> <frametype>\n\
+                op is one of set, clear\n\
+                frametype is one of beacon proberesp\n\
+--setdbglogconfig --mmask=<mask> --rep=<0/1> --tsr=<tsr codes> --size=<num>\n\
+         where <mask> is a 16 bit wide mask to selectively enable logging for different modules. Example: 0xFFFD enables logging for all modules except WMI. The mask is derived from the module ids defined in etna/include/dbglog.h header file.\n\
+               <rep> is whether the target should generate log events to the host whenever the log buffer is full.\n\
+               <tsr> resolution of the debug timestamp (less than 16)\n\
+                     0: 31.25 us\n\
+                     1: 62.50 us\n\
+                     2: 125.0 us\n\
+                     3: 250.0 us\n\
+                     4: 500.0 us\n\
+                     5: 1.0 ms and so on.\n\
+               <size> size of the report in number of debug logs.\n\
+--getdbglogs\n\
+--sethostmode <mode>\n\
+  where <mode> is awake\n\
+                  asleep\n\
+--setwowmode <mode> --wowfilter <filter> --hostreqdelay <hostreqdelay> \n\
+  where <mode> is enable \n\
+                  disable\n\
+  where <filter> is ssid -to enable ssid filtering when asleep\n\
+                    none \n\
+--getwowlist <listid> \n\
+--addwowpattern <list-id> <pattern-size> <pattern-offset> <pattern> <pattern-mask \n\
+--delwowpattern <list-id> <pattern-id>\n\
+--dumpchipmem \n\
+--dumpchipmem_venus \n\
+--setconnectctrl <ctrl flags bitmask> \n\
+  where <flags> could take the following values:\n\
+      0x0001(CONNECT_ASSOC_POLICY_USER): Assoc frames are sent using the policy specified by the flag below.\n\
+      0x0002(CONNECT_SEND_REASSOC): Send Reassoc frame while connecting otherwise send assoc frames.\n\
+      0x0004(CONNECT_IGNORE_WPAx_GROUP_CIPHER): Ignore WPAx group cipher for WPA/WPA2.\n\
+      0x0008(CONNECT_PROFILE_MATCH_DONE): Ignore any profile check.\n\
+      0x0010(CONNECT_IGNORE_AAC_BEACON): Ignore the admission control beacon.\n\
+      0x0020(CONNECT_CSA_FOLLOW_BSS):Set to Follow BSS to the new channel and connect \n\
+                                 and reset to disconnect from BSS and change channel \n\
+--dumpcreditstates \n\
+      Triggers the HTC layer to dump credit state information to the debugger \n\
+--setakmp --multipmkid=<on/off>\n\
+  multipmkid=on(off> enables(doesnot enable) Multi PMKID Caching in firmware\n\
+--setpmkidlist --numpmkid=<n> --pmkid=<pmkid_1> ... --pmkid=<pmkid_n>\n\
+   where n is the number of pmkids (max 8)\n\
+   and pmkid_i is the ith pmkid (16 bytes in hex format)\n\
+--setbsspmkid --bssid=<aabbccddeeff> --bsspmkid=<pmkid>\n\
+   bssid is 6 bytes in hex format\n\
+   bsspmkid is 16 bytes in hex format\n\
+--getpmkidlist \n\
+--abortscan \n\
+--settgtevt <event value>\n\
+      where <event value> is  0 send WMI_DISCONNECT_EVENT with disconnectReason = BSS_DISCONNECTED\n\
+                                after re-connection with AP\n\
+                              1 NOT send WMI_DISCONNECT_EVENT with disconnectReason = BSS_DISCONNECTED\n\
+                                after re-connection with AP\n\
+--getsta \n\
+--hiddenssid <value> \n\
+    where value 1-Enable, 0-Disable. \n\
+--gethiddenssid \n\
+--numsta <num> \n\
+--gnumsta <num> \n\
+--getnumsta \n\
+--getgnumsta \n\
+--conninact <period> \n\
+    where period is time in min (default 5min). \n\
+    0 will disable STA inactivity check. \n\
+--protectionscan <period> <dwell> \n\
+    where period is in min (default 5min). 0 will disable. \n\
+    dwell is in ms. (default 200ms). \n\
+--addacl <mac> \n\
+    where mac is of the format xx:xx:xx:xx:xx:xx \n\
+--delacl <index> \n\
+    use --getacl to get index \n\
+--getacl \n\
+--aclpolicy <policy> <retain list> \n\
+    where <policy> \n\
+        0 - Disable ACL \n\
+        1 - Allow MAC \n\
+        2 - Deny MAC \n\
+          <retain list> \n\
+        0 - Clear the current ACL list \n\
+        1 - Retain the current ACL list \n\
+--removesta <action> <reason> <mac> \n\
+    where <action>  \n\
+            2 - Disassoc    \n\
+            3 - Deauth      \n\
+          <reason> protocol reason code, use 1 when in doubt \n\
+          <mac> mac addr of a connected STA            \n\
+--dtim <period> \n\
+--getdtim \n\
+--intrabss <ctrl> \n\
+    where <ctrl> 0 - Disable, 1 - Enable (default) \n\
+--interbss <ctrl> \n\
+    where <ctrl> 0 - Disable, 1 - Enable (default) \n\
+--apgetstats \n\
+--apclearstats \n\
+--acsdisablehichannels <0/1> \n\
+    where 0 - ACS will choose 1, 6 or 11 \n\
+          1 - ACS will choose 1, 6 or 11 \n\
+--commit \n\
+--ip arg, arg may be \n\
+   none  - resets ip \n\
+   x.x.x.x - ip addr is dotted form\n\
+--set_ht_cap <band> <enable> <supported channel width set> <short GI 20MHz> <short GI 40MHz> <40MHz intolerant> <max AMPDU len exponent> \n\
+    where <band> : 'g' for 2.4 GHZ or 'a' for 5GHZ \n\
+    <enable> : 0 to disable 11n in band, 1 to enable 11n in band \n\
+    <supported channel width set> : 0 if only 20MHz operation supported \n\
+                                          1 if 20MHz and 40MHz operation supported \n\
+    <short GI 20MHz> : 0 if not supported, 1 if supported \n\
+    <short GI 40MHz> : 0 if not supported, 1 if supported \n\
+    <40MHz intolerant> : 1 if prohibit a receing AP from operating as a 20/40 MHz BSS \n\
+                         0 otherwise \n\
+    <max AMPDU len exponent> : valid values from 0 to 3 \n\
+--dump_recv_aggr_stats \n\
+--setup_aggr <tid> <aid> \n\
+        where <aid> = aid of a connected STA. Ignored in STA mode \n\
+--allow_aggr <tx_tid_mask>  <rx_tid_mask> \n\
+--dele_aggr <tid>  <direction> <aid> \n\
+        where <direction> =1 uplink; \n\
+                          =0 dnlink  \n\
+              <aid> = aid of a connected STA. Ignored in STA mode \n\
+--set_ht_op <STA channel width> : 0 if only allow 20MHz channel width\n\
+                                  1 if allow any channel width in the supported channel width set \n\
+--wlan_conn_prec <prec_val> \n\
+        where 0: WLAN connection will have precedence;\n\
+              1: PAL connection will have precedence;\n\
+--settxselrates <11A ratemask> <11G ratemask> <11B ratemask> <11GOnly ratemask> <11A_HT20 ratemask> <11G_HT20 ratemask> \
+<11A_HT40 ratemask> <11G_HT40 ratemask> where all rate masks are hex integers. \n\
+--aprateset <val> \n\
+        where 1: RateSet#1 - 1,2,5.5,11 basic rates (default)\n\
+              2: RateSet#2 - 1,2,5.5,11,6,12,24 basic rates\n\
+--connect <ssid> \n\
+--connect <ssid> --wpa <ver> <ucipher> <mcipher> <psk> \n\
+--connect <ssid> --wep <mode> <def_keyix> <key1> <key2*> <key3*> <key4*> \n\
+        where   <ssid>     : SSID of network \n\
+                <ver>      : 1 - WPA, 2 - RSN   \n\
+                <ucipher>  : TKIP or CCMP for unicast \n\
+                <mcipher>  : TKIP or CCMP for multicast \n\
+                <psk>      : passphrase for WPA    \n\
+                <mode>     : open or shared    \n\
+                <def_keyix>: Default TX wep key index  [1-4] \n\
+                <key>      : wep key   \n\
+                *          : optional parameters  \n\
+--set_tx_sgi --masksgi <mask> --persgi <value> \n\
+         where <mask> is a 32 bit hexadecimal value (eg: 0x0808000 or 08080000) to select desired MCS and ht20/ht40 SGI implementation (refer spec for bit location of each MCS)\n\
+             For disabling SGI enter 0x00000000 or 0.\n\
+             If mask is not entered, the default mask is 0x08080000 which enables MCS 7 to use SGI for both ht20 and ht40, when set_tx_sgi command is issued \n\
+         where  <value> is the acceptable loss percentage for Packet Error Rate (PER) for SGI (default : 10)\n\
+--set_dfs <enable> \n\
+        where  <enable> : 1 to allow DFS \n\
+                        : 0 to disable DFS \n\
+--setdivparam <idleTime> <RSSIThresh> <Enable> <Threshold Rate> \n\
+        where <idleTime> : time in ms where the idle timer would start checking the other antenna (default: 10000) \n\
+                  <RSSIThresh> : in db, where the firmware will check the other antenna if the RSSI drops below this delta (default: 10) \n\
+                  <Enable> : 1 to enable diversity \n\
+                  <Threshold Rate> : in Mbps, where the firmware will block the idleTimer if the throughput is above this rate (default 48) \n\
+--scanprobedssid <ssid> where <ssid> is the wireless network string to scan. Broadcast probe will not be sent .  Set ssid to 'off' or 'any' to send broadcast probe requests \n\
+--ap_apsd <value> \n\
+    where value 1-Enable, 0-Disable \n\
+--get_ht_cap <band> \n\
+    where <band> : 'g' for 2.4 GHZ or 'a' for 5GHZ \n\
+--set_mcast_rate <value> \n\
+    where value is rate in units of 100 Kbps \n\
+    Valid values are 10, 20, 55, 110, 60, 90, 120, 180, 240, 360, 480, 540 \n\
+--enablevoicedetection <enable> \n\
+        where  <enable> : 1 to enable voice detection \n\
+                        : 0 to disable voice detection \n\
+--txe-notify <rate> <pkts> <intvl> \n\
+	send a TXE_NOTIFY_EVENT when <rate>% of <pkts> in given <intvl> fail to be transmitted to current AP.\n\
+--setrecoverysim <type> <delay_time_ms> \n\
+        where  <type>   : 1 assert \n\
+                        : 2 not respond detect command \n\
+                        : 3 simulate ep-full (disable wmi control ep), use 'echo 60>keepalive' trigger\n\
+                        : 4 null access \n\
+                        : 5: stack overflow\n\
+        <delay_time_ms> : 0~65534 ,delay time ms\n\
+                        : 65535 ,delay random time( 0~65535) ms\n\
+--disablebcast <enable> \n\
+--blwl <control> <index> <mac> \n\
+        where  <control>: 0 disable blwl \n\
+                        : 1 enable blwl \n\
+                        : 2 add white mac \n\
+                        : 3 add black mac \n\
+                        : 4 reset whitelist \n\
+                        : 5 reset blacklist \n\
+         <index>        : valid when control=2 3 4 5, mac address index [0,9] \n\
+         <mac>          : valid when control=2 3 4 5, mac address xx:xx:xx:xx:xx:xx  \n\
+--setrssifilter <snr_value> \n\
+	where <snr_value> : 0~127 the rssi value, (DBM: value-95dbm) \n\
+";
+
+A_UINT32 mercuryAdd[5][2] = {
+            {0x20000, 0x200fc},
+            {0x28000, 0x28800},
+            {0x20800, 0x20a40},
+            {0x21000, 0x212f0},
+            {0x500000, 0x500000+184*1024},
+        };
+
+typedef struct chip_internal_t{
+    A_UINT32 addr_st;
+    A_UINT32 addr_end;
+    A_UINT8 *info;
+}CHIP_INTERNAL;
+
+CHIP_INTERNAL venus_internal[8] = {
+            {0x20000, 0x200fc, (A_UINT8 *)"General DMA and recv related registers"},
+            {0x28000, 0x28900, (A_UINT8 *)"MAC PCU register & keycache"},
+            {0x20800, 0x20a40, (A_UINT8 *)"QCU"},
+            {0x21000, 0x212f0, (A_UINT8 *)"DCU"},
+            {0x4000,  0x42e4,  (A_UINT8 *)"RTC"},
+            {0x540000, 0x540000+256*1024, (A_UINT8 *)"RAM"},
+            {0x29800, 0x2B210, (A_UINT8 *)"BB"},
+            {0x1C000, 0x1C748, (A_UINT8 *)"Analog"},
+        };
+
+
+
+static void
+usage(void)
+{
+    fprintf(stderr, "usage:\n%s [-i device] commands\n", progname);
+    fprintf(stderr, "%s\n", commands);
+#ifdef ATH_INCLUDE_PAL
+    fprintf(stderr, "%s\n", palcommands);
+#endif
+    fprintf(stderr, "The options can be given in any order\n");
+    exit(-1);
+}
+
+/* List of Country codes */
+char    *my_ctr[] = {
+    "DB", "NA", "AL", "DZ", "AR", "AM", "AU", "AT", "AZ", "BH", "BY", "BE", "BZ", "BO", "BR", "BN",
+    "BG", "CA", "CL", "CN", "CO", "CR", "HR", "CY", "CZ", "DK", "DO", "EC", "EG", "SV", "EE", "FI",
+    "FR", "GE", "DE", "GR", "GT", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IE", "IL", "IT", "JP",
+    "JO", "KZ", "KP", "KR", "K2", "KW", "LV", "LB", "LI", "LT", "LU",
+    "MO", "MK", "MY", "MX", "MC", "MA", "NL", "NZ", "NO", "OM", "PK", "PA", "PE", "PH", "PL", "PT",
+    "PR", "QA", "RO", "RU", "SA", "SG", "SK", "SI", "ZA", "ES", "SE", "CH", "SY", "TW", "TH", "TT",
+    "TN", "TR", "UA", "AE", "GB", "US", "UY", "UZ", "VE", "VN", "YE", "ZW"
+    };
+
+const char *targ_reg_name[] = {
+"zero", "pc", "lbeg", "lend", "lcount", "sar", "litbaddr", "ps",
+"brtarg", "epc1", "epc2", "epc3", "epc4", "windowbase", "windowstart", "zero",
+"zero", "zero", "zero", "zero", "zero", "zero", "zero", "zero",
+"zero", "zero", "zero", "zero", "zero", "zero", "zero", "zero",
+"ar0", "ar1", "ar2", "ar3", "ar4", "ar5", "ar6", "ar7",
+"ar8", "ar9", "ar10", "ar11", "ar12", "ar13", "ar14", "ar15",
+"ar16", "ar17", "ar18", "ar19", "ar20", "ar21", "ar22", "ar23",
+"ar24", "ar25", "ar26", "ar27", "ar28", "ar29", "ar30", "ar31",
+};
+
+#ifdef ATH_INCLUDE_PAL
+
+A_INT32
+get_input_choice(char *fname,A_UINT8 *pdu, A_UINT16 *sz)
+{
+    int fhdl;
+    A_INT32 ret = -1;
+    fhdl = open(fname, O_RDONLY);
+    if(fhdl != -1)
+    {
+        *sz  = read(fhdl, pdu,MAX_BUFFER_SIZE);
+        close(fhdl);
+        ret = 0;
+    }
+    return ret;
+}
+
+
+#endif
+int
+main (int argc, char **argv)
+{
+    int c, error;
+    char ifname[IFNAMSIZ];
+    unsigned int cmd = 0;
+    progname = argv[0];
+    char *buf = malloc(sizeof(PACKET_LOG));
+    int clearstat = 0;
+    
+
+WMI_DISABLE_BCAST_IN_PM_CMD *disableBcastCmd = (WMI_DISABLE_BCAST_IN_PM_CMD *) (buf+4);
+    WMI_LISTEN_INT_CMD *listenCmd         = (WMI_LISTEN_INT_CMD*)buf;
+    WMI_BMISS_TIME_CMD *bmissCmd         = (WMI_BMISS_TIME_CMD*)buf;
+
+    WMI_POWER_MODE_CMD *pwrCmd         = (WMI_POWER_MODE_CMD *)buf;
+    WMI_SET_MCAST_FILTER_CMD *sMcastFilterCmd       = (WMI_SET_MCAST_FILTER_CMD *)(buf + 4);
+    WMI_MCAST_FILTER_CMD *mcastFilterCmd       = (WMI_MCAST_FILTER_CMD *)(buf + 4);
+    WMI_IBSS_PM_CAPS_CMD *adhocPmCmd   = (WMI_IBSS_PM_CAPS_CMD *)buf;
+    WMI_AP_PS_CMD *apPsCmd             = (WMI_AP_PS_CMD *)(buf + 4);
+    WMI_SCAN_PARAMS_CMD *sParamCmd     = (WMI_SCAN_PARAMS_CMD *)(buf + 4);
+    WMI_BSS_FILTER_CMD *filterCmd      = (WMI_BSS_FILTER_CMD *)buf;
+    WMI_CHANNEL_PARAMS_CMD *chParamCmd = (WMI_CHANNEL_PARAMS_CMD *)buf;
+    WMI_POWER_PARAMS_CMD *pmParamCmd   = (WMI_POWER_PARAMS_CMD *)buf;
+    WMI_ADD_BAD_AP_CMD *badApCmd       = (WMI_ADD_BAD_AP_CMD *)buf;
+    WMI_CREATE_PSTREAM_CMD *crePStreamCmd = (WMI_CREATE_PSTREAM_CMD *)buf;
+    WMI_DELETE_PSTREAM_CMD *delPStreamCmd = (WMI_DELETE_PSTREAM_CMD *)buf;
+    USER_RSSI_PARAMS *rssiThresholdParam = (USER_RSSI_PARAMS *)(buf + 4);
+    WMI_SNR_THRESHOLD_PARAMS_CMD *snrThresholdParam = (WMI_SNR_THRESHOLD_PARAMS_CMD *)buf;
+    WMI_LQ_THRESHOLD_PARAMS_CMD *lqThresholdParam = (WMI_LQ_THRESHOLD_PARAMS_CMD *)(buf + 4);
+    WMI_TARGET_ERROR_REPORT_BITMASK *pBitMask =
+                                    (WMI_TARGET_ERROR_REPORT_BITMASK *)buf;
+    WMI_SET_ASSOC_INFO_CMD *ieInfo = (WMI_SET_ASSOC_INFO_CMD *)buf;
+    WMI_SET_ACCESS_PARAMS_CMD *acParamsCmd = (WMI_SET_ACCESS_PARAMS_CMD *)buf;
+    WMI_DISC_TIMEOUT_CMD *discCmd = (WMI_DISC_TIMEOUT_CMD *)(buf + 4);
+    WMI_SET_ADHOC_BSSID_CMD *adhocBssidCmd = (WMI_SET_ADHOC_BSSID_CMD *)(buf + 4);
+    WMI_BEACON_INT_CMD *bconIntvl     = (WMI_BEACON_INT_CMD *)(buf + 4);
+    WMI_SET_RETRY_LIMITS_CMD *setRetryCmd  = (WMI_SET_RETRY_LIMITS_CMD *)(buf + 4);
+    WMI_START_SCAN_CMD *startScanCmd  = (WMI_START_SCAN_CMD *)(buf + 4);
+    WMI_SET_LPREAMBLE_CMD *setLpreambleCmd = (WMI_SET_LPREAMBLE_CMD *)(buf + 4);
+    WMI_SET_RTS_CMD *setRtsCmd = (WMI_SET_RTS_CMD *)(buf + 4);
+    struct ar6000_queuereq *getQosQueueCmd = (struct ar6000_queuereq *)buf;
+    WMI_SET_VOICE_PKT_SIZE_CMD *pSizeThresh = (WMI_SET_VOICE_PKT_SIZE_CMD *)(buf + sizeof(int));
+    WMI_SET_MAX_SP_LEN_CMD *pMaxSP          = (WMI_SET_MAX_SP_LEN_CMD *)(buf + sizeof(int));
+    WMI_SET_ROAM_CTRL_CMD *pRoamCtrl        = (WMI_SET_ROAM_CTRL_CMD *)(buf +
+                                                sizeof(int));
+    WMI_POWERSAVE_TIMERS_POLICY_CMD *pPowerSave    = (WMI_POWERSAVE_TIMERS_POLICY_CMD *)(buf + sizeof(int));
+    WMI_SET_BT_STATUS_CMD *pBtStatCmd = (WMI_SET_BT_STATUS_CMD *) (buf + sizeof(int));
+    WMI_SET_BT_PARAMS_CMD *pBtParmCmd = (WMI_SET_BT_PARAMS_CMD *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_FE_ANT_CMD *pBtcoexFeAntCmd = (WMI_SET_BTCOEX_FE_ANT_CMD *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMD *pBtcoexCoLocatedBtCmd = (WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMD *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_SCO_CONFIG_CMD *pBtcoexScoConfigCmd = (WMI_SET_BTCOEX_SCO_CONFIG_CMD *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMD *pBtcoexbtinquiryPageConfigCmd = (WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMD *) (buf + sizeof(int));
+    AR6000_BTCOEX_CONFIG *pBtcoexConfig = (AR6000_BTCOEX_CONFIG *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_A2DP_CONFIG_CMD *pBtcoexA2dpConfigCmd = (WMI_SET_BTCOEX_A2DP_CONFIG_CMD *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMD *pBtcoexAclCoexConfigCmd = (WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMD *) (buf + sizeof(int));
+    WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMD *pBtcoexBtOperatingStatusCmd = (WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMD *) (buf + sizeof(int));
+    WMI_SET_WMM_CMD *setWmmCmd = (WMI_SET_WMM_CMD *)(buf + 4);
+    WMI_SET_QOS_SUPP_CMD *qosSupp = (WMI_SET_QOS_SUPP_CMD *)(buf +4);
+    WMI_SET_HB_CHALLENGE_RESP_PARAMS_CMD *hbparam = (WMI_SET_HB_CHALLENGE_RESP_PARAMS_CMD *)(buf + 4);
+    A_UINT32 *cookie = (A_UINT32 *)(buf + 4);
+    A_UINT32 *diagaddr = (A_UINT32 *)(buf + 4);
+    A_UINT32 *diagdata = (A_UINT32 *)(buf + 8);
+    WMI_SET_WMM_TXOP_CMD *pTxOp = (WMI_SET_WMM_TXOP_CMD *)(buf + sizeof(int));
+    WMI_AP_SET_COUNTRY_CMD *pCountry = (WMI_AP_SET_COUNTRY_CMD *)(buf + sizeof(int));
+    WMI_SET_KEEPALIVE_CMD_EXT *setKeepAlive = (WMI_SET_KEEPALIVE_CMD_EXT *)(buf + 4);
+    struct ieee80211req_getset_appiebuf     *appIEInfo     = (struct ieee80211req_getset_appiebuf *)(buf + 4);
+    A_UINT32              *pMgmtFilter  = (A_UINT32 *)(buf + 4);
+    DBGLOG_MODULE_CONFIG *dbglogCfg = (DBGLOG_MODULE_CONFIG *)(buf + 4);
+
+    WMI_SET_HOST_SLEEP_MODE_CMD *hostSleepModeCmd = (WMI_SET_HOST_SLEEP_MODE_CMD*)(buf + sizeof(int));
+    WMI_SET_WOW_MODE_CMD *wowModeCmd = (WMI_SET_WOW_MODE_CMD*)(buf + sizeof(int));
+    WMI_ADD_WOW_PATTERN_CMD *addWowCmd = (WMI_ADD_WOW_PATTERN_CMD*)(buf + sizeof(int));
+    WMI_DEL_WOW_PATTERN_CMD *delWowCmd = (WMI_DEL_WOW_PATTERN_CMD*)(buf + sizeof(int));
+    WMI_GET_WOW_LIST_CMD *getWowListCmd = (WMI_GET_WOW_LIST_CMD*)(buf + sizeof(int));
+    AR6000_USER_SETKEYS_INFO *user_setkeys_info =
+                                (AR6000_USER_SETKEYS_INFO *)(buf + sizeof(int));
+    WMI_SET_AKMP_PARAMS_CMD *akmpCtrlCmd =
+                                (WMI_SET_AKMP_PARAMS_CMD *)(buf + sizeof(int));
+    WMI_SET_TARGET_EVENT_REPORT_CMD *evtCfgCmd = (WMI_SET_TARGET_EVENT_REPORT_CMD *) (buf + sizeof(int));
+    WMI_ENABLE_SMPS_CMD *setDfsCmd = (WMI_ENABLE_SMPS_CMD*)(buf + 4);
+    pmkidUserInfo_t         pmkidUserInfo;
+    A_UINT8                 bssid[ATH_MAC_LEN];
+    struct ieee80211req_addpmkid *pi_cmd = (struct ieee80211req_addpmkid *)buf;
+
+    int i, index = 0, channel, chindex;//, cnt;
+    A_INT16 threshold[26];  /* user can set rssi tags */
+    A_UINT16 *clist;
+    A_UCHAR *ssid;
+    char *ethIf;
+
+    WMI_AP_HIDDEN_SSID_CMD *pHidden = (WMI_AP_HIDDEN_SSID_CMD *)(buf + 4);
+    WMI_AP_ACL_MAC_CMD *pACL = (WMI_AP_ACL_MAC_CMD *)(buf + 4);
+    WMI_AP_NUM_STA_CMD *pNumSta = (WMI_AP_NUM_STA_CMD *)(buf + 4);
+    WMI_AP_CONN_INACT_CMD *pInact = (WMI_AP_CONN_INACT_CMD *)(buf + 4);
+    WMI_AP_PROT_SCAN_TIME_CMD *pProt = (WMI_AP_PROT_SCAN_TIME_CMD *)(buf + 4);
+    struct ieee80211req_mlme *pMlme = (struct ieee80211req_mlme *)buf;
+    WMI_AP_SET_DTIM_CMD *pDtim = (WMI_AP_SET_DTIM_CMD *)(buf + 4);
+    WMI_AP_ACL_POLICY_CMD *pACLpolicy = (WMI_AP_ACL_POLICY_CMD *)(buf + 4);
+    A_UINT8 *intra = (A_UINT8 *)(buf + 4);
+    WMI_ADDBA_REQ_CMD *pAddbaReq = (WMI_ADDBA_REQ_CMD *)(buf + 4);
+    WMI_ALLOW_AGGR_CMD *pAllowAggr = (WMI_ALLOW_AGGR_CMD *)(buf + 4);
+    WMI_DELBA_REQ_CMD *pDeleteAggr = (WMI_DELBA_REQ_CMD *)(buf + 4);
+    WMI_SET_BT_WLAN_CONN_PRECEDENCE *prec = (WMI_SET_BT_WLAN_CONN_PRECEDENCE *) (buf + 4);
+    WMI_AP_SET_11BG_RATESET_CMD *pAPrs = (WMI_AP_SET_11BG_RATESET_CMD *) (buf + 4);
+    WMI_SET_TX_SGI_PARAM_CMD *set_txsgiparam = (WMI_SET_TX_SGI_PARAM_CMD *) (buf + 4);
+    WMI_DIV_PARAMS_CMD *pDiversity = (WMI_DIV_PARAMS_CMD *)(buf + 4);
+    WMI_AP_SET_APSD_CMD *pApApsd = (WMI_AP_SET_APSD_CMD *)(buf + 4);
+    WMI_SET_MCASTRATE_CMD *pMcast = (WMI_SET_MCASTRATE_CMD *)(buf + 4);
+    WMI_VOICE_DETECTION_ENABLE_CMD *pVoiceDetectionEnable = (WMI_VOICE_DETECTION_ENABLE_CMD *)(buf + 4);
+    WMI_SET_TXE_NOTIFY_CMD *pTXe = (WMI_SET_TXE_NOTIFY_CMD *)(buf + 4);
+    WMI_SET_RECOVERY_TEST_PARAMETER_CMD *pSetRecoveryParam = (WMI_SET_RECOVERY_TEST_PARAMETER_CMD*)(buf + 4);
+    WMI_SET_RSSI_FILTER_CMD *pSetRssiFilter = (WMI_SET_RSSI_FILTER_CMD*)(buf + 4);
+    WMI_PROBED_SSID_CMD *pSsidCmd = (WMI_PROBED_SSID_CMD*)(buf + 4);
+    profile_t   cp;
+    A_UINT8 *pWpaOffloadState = (A_UINT8 *) (buf + 4);
+    A_UINT32 *pExcessTxRetryThres = (A_UINT32 *)(buf + 4);
+
+    if (argc == 1) {
+        usage();
+    }
+
+    memset(buf, 0, sizeof(buf));
+    memset(ifname, '\0', IFNAMSIZ);
+    if ((ethIf = getenv("NETIF")) == NULL) {
+        ethIf = "eth1";
+    }
+    while (1) {
+        int option_index = 0;
+        static struct option long_options[] = {
+            {"it", 1, NULL, 'a'},
+            {"bg", 1, NULL, 'b'},
+            {"np", 1, NULL, 'c'},
+            {"dp", 1, NULL, 'd'},
+            {"fgend", 1, NULL, 'e'},
+            {"filter", 1, NULL, 'f'},
+            {"fgstart", 1, NULL, 'g'},
+            {"maxact", 1, NULL, 'h'},
+            {"interface", 1, NULL, 'i'},
+            {"createqos", 1, NULL, 'j'},
+            {"deleteqos", 1, NULL, 'k'},
+            {"listen", 1, NULL, 'l'},
+            {"listenbeacons", 1, NULL, 'N'},
+            {"pmparams", 0, NULL, 'm'},
+            {"num", 1, NULL, 'n'},
+            {"qosqueue", 1, NULL, 'o'},
+            {"power", 1, NULL, 'p'},
+            {"pas", 1, NULL, 'q'},
+            {"scan", 0, NULL, 's'},
+            {"sr", 1, NULL, 'r'},
+            {"ssid", 1, NULL, 't'},
+            {"rssiThreshold", 1, NULL, 'u'},
+            {"snrThreshold", 1, NULL, WMI_SET_SNR_THRESHOLDS},
+            {"cleanRssiSnr", 0, NULL, WMI_CLR_RSSISNR},
+            {"lqThreshold", 1, NULL, WMI_SET_LQ_THRESHOLDS},
+            {"version", 0, NULL, 'v'},  //WMI_GET_VERSION
+            {"wmode", 1, NULL, 'w'},
+            {"badAP", 1, NULL, 'x'},
+            {"clrAP", 0, NULL, 'y'},
+            {"minact", 1, NULL, 'z'},
+            {"getTargetStats", 0, NULL, WMI_GET_TARGET_STATS},
+            {"setErrorReportingBitmask", 1, NULL,
+                        WMI_SET_TARGET_ERROR_REPORTING_BITMASK},
+            {"acparams", 0, NULL, WMI_SET_AC_PARAMS},
+            {"acval", 1, NULL, WMI_SET_AC_VAL},
+            {"txop", 1, NULL, 'A'},
+            {"cwmin", 1, NULL, 'B'},
+            {"cwmax", 1, NULL, 'C'},
+            {"aifsn", 1, NULL, 'D'},
+            {"ps", 1, NULL, 'E'},
+            {"aw", 1, NULL, 'F'},
+            {"adhocbssid", 1, NULL, 'G'},
+            {"mode", 1, NULL, 'H'},
+            {"sendframe", 1, NULL, 'I'},
+            {"wlan", 1, NULL, 'J'},
+            {"to", 1, NULL, 'K'},
+            {"ttl", 1, NULL, 'L'},
+            {"scanctrlflags", 1, NULL, 'O'},
+            {"homeDwellTime", 1, NULL, 'P'},
+            {"forceScanInt", 1, NULL, 'Q'},
+            {"forceScanFlags",1, NULL, 'R'},
+            {"threshold", 1, NULL, 'S'},
+            {"frequency", 1, NULL, 'T'},
+            {"cookie", 1, NULL, 'U'},
+            {"mmask", 1, NULL, 'V'},
+            {"rep", 1, NULL, 'W'},
+            {"tsr", 1, NULL, 'X'},
+            {"size", 1, NULL, 'Y'},
+            {"bssid",1, NULL, WMI_BSSID},
+            {"initrsc", 1, NULL, USER_SETKEYS_INITRSC},
+            {"multipmkid", 1, NULL, WMI_AKMP_MULTI_PMKID},
+            {"numpmkid", 1, NULL, WMI_NUM_PMKID},
+            {"pmkid", 1, NULL, WMI_PMKID_ENTRY},
+            {"clearStats", 0, NULL, 'Z'},
+            {"maxact2pas", 1, NULL, WMI_SCAN_DFSCH_ACT_TIME},
+            {"maxactscan_ssid", 1, NULL, WMI_SCAN_MAXACT_PER_SSID},
+            {"ibsspmcaps", 0, NULL, WMI_SET_IBSS_PM_CAPS},
+            {"appsparams", 0, NULL, WMI_SET_AP_PS},
+            {"setAssocIe", 1, NULL, WMI_SET_ASSOC_IE},
+            {"setbmisstime", 1, NULL, WMI_SET_BMISS_TIME},
+            {"setbmissbeacons", 1, NULL, 'M'},
+            {"disc", 1, NULL, WMI_SET_DISC_TIMEOUT},
+            {"beaconintvl", 1, NULL, WMI_SET_BEACON_INT},
+            {"setVoicePktSize", 1, NULL, WMI_SET_VOICE_PKT_SIZE},
+            {"setMaxSPLength", 1, NULL, WMI_SET_MAX_SP},
+            {"getroamtable", 0, NULL, WMI_GET_ROAM_TBL},
+            {"roam", 1, NULL, WMI_SET_ROAM_CTRL},
+            {"psparams", 0, NULL, WMI_SET_POWERSAVE_TIMERS},
+            {"psPollTimer", 1, NULL, WMI_SET_POWERSAVE_TIMERS_PSPOLLTIMEOUT},
+            {"triggerTimer", 1, NULL, WMI_SET_POWERSAVE_TIMERS_TRIGGERTIMEOUT},
+            {"getpower", 0, NULL, WMI_GET_POWER_MODE},
+            {"getroamdata", 0, NULL, WMI_GET_ROAM_DATA},
+            {"setBTstatus", 1, NULL, WMI_SET_BT_STATUS},
+            {"setBTparams", 1, NULL, WMI_SET_BT_PARAMS},
+            {"setbtcoexfeant", 1, NULL, WMI_SET_BTCOEX_FE_ANT},
+            {"setbtcoexcolocatedbt", 1, NULL, WMI_SET_BTCOEX_COLOCATED_BT_DEV},
+            {"setbtcoexscoconfig", 1, NULL, WMI_SET_BTCOEX_SCO_CONFIG},
+            {"setbtcoexa2dpconfig", 1, NULL, WMI_SET_BTCOEX_A2DP_CONFIG},
+            {"setbtcoexaclcoexconfig", 1, NULL, WMI_SET_BTCOEX_ACLCOEX_CONFIG},
+            {"setbtcoexbtinquirypageconfig", 1, NULL, WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG},
+            {"setbtcoexbtoperatingstatus", 1, NULL, WMI_SET_BTCOEX_BT_OPERATING_STATUS},
+            {"getbtcoexconfig",1,NULL, WMI_GET_BTCOEX_CONFIG},
+            {"getbtcoexstats", 0, NULL, WMI_GET_BTCOEX_STATS},
+            {"setretrylimits", 1, NULL, WMI_SET_RETRYLIMITS},
+            {"startscan", 0, NULL, WMI_START_SCAN},
+            {"setfixrates", 1, NULL, WMI_SET_FIX_RATES},
+            {"getfixrates", 0, NULL, WMI_GET_FIX_RATES},
+            {"setauthmode", 1, NULL, WMI_SET_AUTH_MODE},
+            {"setreassocmode", 1, NULL, WMI_SET_REASSOC_MODE},
+            {"setlongpreamble", 1, NULL, WMI_SET_LPREAMBLE},
+            {"setRTS", 1, NULL, WMI_SET_RTS},
+            {"setwmm", 1, NULL, WMI_SET_WMM},
+            {"setqos", 1, NULL, WMI_SET_QOS_SUPP},
+            {"apsdTimPolicy", 1, NULL, WMI_APSD_TIM_POLICY},
+            {"simulatedAPSDTimPolicy", 1, NULL, WMI_SIMULATED_APSD_TIM_POLICY},
+            {"detecterror", 0, NULL, WMI_SET_ERROR_DETECTION},
+            {"getheartbeat", 0, NULL, WMI_GET_HB_CHALLENGE_RESP},
+#ifdef USER_KEYS
+            {"usersetkeys", 0, NULL, USER_SETKEYS},
+#endif
+            {"getRD", 0, NULL, WMI_GET_RD},
+            {"setcountry", 1, NULL, WMI_AP_SET_COUNTRY},
+            {"countrycodes", 0, NULL, WMI_AP_GET_COUNTRY_LIST},
+            {"disableregulatory", 0, NULL, WMI_AP_DISABLE_REGULATORY},
+            {"txopbursting", 1, NULL, WMI_SET_TXOP},
+            {"diagaddr", 1, NULL, DIAG_ADDR},
+            {"diagdata", 1, NULL, DIAG_DATA},
+            {"diagread", 0, NULL, DIAG_READ},
+            {"diagwrite", 0, NULL, DIAG_WRITE},
+            {"setkeepalive", 1, NULL, WMI_SET_KEEPALIVE},
+            {"getkeepalive", 0, NULL, WMI_GET_KEEPALIVE},
+            {"setappie", 1, NULL, WMI_SET_APPIE},
+            {"setmgmtfilter", 1, NULL, WMI_SET_MGMT_FRM_RX_FILTER},
+            {"setdbglogconfig", 0, NULL, WMI_DBGLOG_CFG_MODULE},
+            {"getdbglogs", 0, NULL, WMI_DBGLOG_GET_DEBUG_LOGS},
+            {"sethostmode", 1, NULL, WMI_SET_HOST_SLEEP_MODE},
+            {"setwowmode", 1, NULL, WMI_SET_WOW_MODE},
+            {"wowfilter",1,NULL,WMI_SET_WOW_FILTER},
+            {"hostreqdelay",1,NULL,WMI_SET_WOW_HOST_REQ_DELAY},
+            {"getwowlist", 1, NULL, WMI_GET_WOW_LIST},
+            {"addwowpattern", 1, NULL, WMI_ADD_WOW_PATTERN},
+            {"delwowpattern", 1, NULL, WMI_DEL_WOW_PATTERN},
+            {"dumpchipmem", 0, NULL, DIAG_DUMP_CHIP_MEM},
+            {"dumpchipmem_venus", 0, NULL, DIAG_DUMP_CHIP_MEM_VENUS},
+            {"setconnectctrl", 1, NULL, WMI_SET_CONNECT_CTRL_FLAGS},
+            {"dumpcreditstates",0, NULL, DUMP_HTC_CREDITS},
+            {"setakmp", 0, NULL, WMI_SET_AKMP_INFO},
+            {"setpmkidlist", 0, NULL, WMI_SET_PMKID_LIST},
+            {"getpmkidlist", 0, NULL, WMI_GET_PMKID_LIST},
+            {"ieMask", 1, NULL, WMI_SET_IEMASK},
+            {"scanlist", 1, NULL, WMI_SCAN_CHANNEL_LIST},
+            {"setbsspmkid", 0, NULL, WMI_SET_BSS_PMKID_INFO},
+            {"bsspmkid", 1, NULL, WMI_BSS_PMKID_ENTRY},
+            {"abortscan", 0, NULL, WMI_ABORT_SCAN},
+            {"settgtevt", 1, NULL, WMI_TARGET_EVENT_REPORT},
+            {"getsta", 0, NULL, WMI_AP_GET_STA_LIST},       /* AP mode */
+            {"hiddenssid", 0, NULL, WMI_AP_HIDDEN_SSID},    /* AP mode */
+            {"numsta", 0, NULL, WMI_AP_SET_NUM_STA},        /* AP mode */
+            {"aclpolicy", 0, NULL, WMI_AP_ACL_POLICY},      /* AP mode */
+            {"addacl", 0, NULL, WMI_AP_ACL_MAC_LIST1},      /* AP mode */
+            {"delacl", 0, NULL, WMI_AP_ACL_MAC_LIST2},      /* AP mode */
+            {"getacl", 0, NULL, WMI_AP_GET_ACL_LIST},       /* AP mode */
+            {"commit", 0, NULL, WMI_AP_COMMIT_CONFIG},      /* AP mode */
+            {"conninact", 0, NULL, WMI_AP_INACT_TIME},      /* AP mode */
+            {"protectionscan", 0, NULL, WMI_AP_PROT_TIME},  /* AP mode */
+            {"removesta", 0, NULL, WMI_AP_SET_MLME},        /* AP mode */
+            {"dtim", 0, NULL, WMI_AP_SET_DTIM},             /* AP mode */
+            {"intrabss", 0, NULL, WMI_AP_INTRA_BSS},        /* AP mode */
+            {"interbss", 0, NULL, WMI_AP_INTER_BSS},        /* AP mode */            
+            {"ip", 1, NULL, WMI_GET_IP},
+            {"setMcastFilter", 1, NULL, WMI_SET_MCAST_FILTER},
+            {"delMcastFilter", 1, NULL, WMI_DEL_MCAST_FILTER},
+            {"mcastFilter", 1, NULL, WMI_MCAST_FILTER},
+            {"dump_recv_aggr_stats",0, NULL, WMI_DUMP_RCV_AGGR_STATS},
+            {"setup_aggr", 2, NULL, WMI_SETUP_AGGR},
+            {"allow_aggr", 2, NULL, WMI_CFG_ALLOW_AGGR},
+            {"dele_aggr", 2, NULL, WMI_CFG_DELE_AGGR},
+            {"set_ht_cap",1, NULL, WMI_SET_HT_CAP},
+            {"set_ht_op",1, NULL, WMI_SET_HT_OP},
+            {"apgetstats", 0, NULL, WMI_AP_GET_STAT},       /* AP mode */
+            {"apclearstats", 0, NULL, WMI_AP_CLR_STAT},     /* AP mode */
+            {"settxselrates", 1, NULL, WMI_SET_TX_SELECT_RATES},
+            {"gethiddenssid", 0, NULL, WMI_AP_GET_HIDDEN_SSID},   /* AP mode */
+            {"getcountry", 0, NULL, WMI_AP_GET_COUNTRY},    /* AP mode */
+            {"getwmode", 0, NULL, WMI_AP_GET_WMODE},
+            {"getdtim", 0, NULL, WMI_AP_GET_DTIM},          /* AP mode */
+            {"getbeaconintvl", 0, NULL, WMI_AP_GET_BINTVL}, /* AP mode */
+            {"getRTS", 0, NULL, WMI_GET_RTS},
+            {"targregs", 0, NULL, DIAG_FETCH_TARGET_REGS},
+#ifdef ATH_INCLUDE_PAL
+            {"sendpalcmd", 2, NULL, WMI_SEND_PAL_CMD},
+            {"sendpaldata", 2, NULL, WMI_SEND_PAL_DATA},
+            {"wlan_conn_prec", 1, NULL, WMI_SET_WLAN_CONN_PRECDNCE},
+#endif
+            {"aprateset", 0, NULL, WMI_SET_AP_RATESET},
+            {"twp", 1, NULL, WMI_SET_TX_WAKEUP_POLICY},
+            {"nt", 1, NULL, WMI_SET_TX_NUM_FRAMES_TO_WAKEUP},
+            {"pstype", 1, NULL, WMI_SET_AP_PS_PSTYPE},
+            {"psit", 1, NULL, WMI_SET_AP_PS_IDLE_TIME},
+            {"psperiod", 1, NULL, WMI_SET_AP_PS_PS_PERIOD},
+            {"sleepperiod", 1, NULL, WMI_SET_AP_PS_SLEEP_PERIOD},
+            {"connect", 1, NULL, WMI_SEND_CONNECT_CMD},
+            {"wpa", 1, NULL, WMI_SEND_CONNECT_CMD1},
+            {"wep", 1, NULL, WMI_SEND_CONNECT_CMD2},
+            {"set_dfs", 1, NULL, WMI_AP_SET_DFS},
+            {"bt",1,NULL,BT_HW_POWER_STATE},
+            {"set_tx_sgi", 0, NULL, WMI_SET_TX_SGI_PARAM},
+            {"masksgi", 1, NULL, WMI_SGI_MASK},
+            {"persgi", 1, NULL, WMI_PER_SGI},
+            {"wac", 1, NULL, WMI_WAC_ENABLE},
+            {"setwpaoffload", 1, NULL, WMI_SET_WPA_OFFLOAD_STATE},
+            {"acsdisablehichannels", 0, NULL, WMI_AP_ACS_DISABLE_HI_CHANNELS},
+            {"setdivparam", 1, NULL, WMI_SET_DIVERSITY_PARAM},
+            {"setexcesstxretrythres", 1, NULL, WMI_SET_EXCESS_TX_RETRY_THRES},
+            {"forceAssert", 0, NULL, WMI_FORCE_ASSERT},            
+            {"gnumsta", 0, NULL, WMI_AP_SET_GNUM_STA},        /* AP mode */
+            {"getgnumsta", 0, NULL, WMI_AP_GET_GNUM_STA},     /* AP mode */
+            {"getnumsta", 0, NULL, WMI_AP_GET_NUM_STA},       /* AP mode */            
+            {"suspend", 0, NULL, WMI_SUSPEND_DRIVER},                
+            {"resume", 0, NULL, WMI_RESUME_DRIVER},                 
+            {"scanprobedssid", 1, NULL, WMI_SCAN_PROBED_SSID},  
+            {"ap_apsd", 0, NULL, WMI_AP_SET_APSD},    /* AP mode */
+            {"get_ht_cap", 0, NULL, WMI_GET_HT_CAP},
+            {"set_mcast_rate", 1, NULL, WMI_SET_MCASTRATE},
+            {"enablevoicedetection", 1, NULL, WMI_VOICE_DETECTION_ENABLE}, /* enable/disable voice detection command */            
+	    {"txe-notify", 1, NULL, WMI_SET_TXE_NOTIFY},
+            {"setrecoverysim", 0, NULL, WMI_SET_RECOVERY_SIMULATE}, /* set recovery simulation */   
+{"disablebcast", 1, NULL, WMI_DISABLE_BCAST_IN_PM},  /* disable broadcast in power save */
+            {"blwl", 0, NULL, WMI_AP_BLWL},                 /* AP mode */
+            {"setrssifilter", 0, NULL, WMI_SET_RSSI_FILTER},
+            {0, 0, 0, 0}
+        };
+
+        c = getopt_long(argc, argv, "rsvda:b:c:e:h:f:g:h:i:l:p:q:r:w:n:t:u:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:", long_options, &option_index);
+        if (c == -1)
+        break;
+        switch (c) {
+        case 'a':
+            pmParamCmd->idle_period = atoi(optarg);
+            break;
+        case 'b':
+            if (!strcasecmp(optarg,"default")) {
+                sParamCmd->bg_period = 0;
+            } else {
+                sParamCmd->bg_period = atoi(optarg);
+                /* Setting the background scan to 0 or 65535 has the same effect
+                 - it disables background scanning */
+                if(!sParamCmd->bg_period)
+                    sParamCmd->bg_period = 65535;
+            }
+            break;
+        case 'c':
+            pmParamCmd->pspoll_number = atoi(optarg);
+            break;
+        case 'd':
+            if (!strcmp(optarg, "ignore")) {
+                pmParamCmd->dtim_policy = IGNORE_DTIM;
+            } else if (!strcmp(optarg, "normal")) {
+                pmParamCmd->dtim_policy = NORMAL_DTIM;
+            } else if (!strcmp(optarg, "stick")) {
+                pmParamCmd->dtim_policy = STICK_DTIM;
+            } else {
+                cmd = 0;
+            }
+            break;
+        case 'f':
+            cmd = WMI_SET_BSS_FILTER;
+            if (!strcmp(optarg, "none")) {
+                filterCmd->bssFilter = NONE_BSS_FILTER;
+            } else if (!strcmp(optarg, "all")) {
+                filterCmd->bssFilter = ALL_BSS_FILTER;
+            } else if (!strcmp(optarg, "profile")) {
+                filterCmd->bssFilter = PROFILE_FILTER;
+            } else if (!strcmp(optarg, "not_profile")) {
+                filterCmd->bssFilter = ALL_BUT_PROFILE_FILTER;
+            } else if (!strcmp(optarg, "bss")) {
+                filterCmd->bssFilter = CURRENT_BSS_FILTER;
+            } else if (!strcmp(optarg, "not_bss")) {
+                filterCmd->bssFilter = ALL_BUT_BSS_FILTER;
+            } else if (!strcmp(optarg, "ssid")) {
+                filterCmd->bssFilter = PROBED_SSID_FILTER;
+            } else {
+                cmd = 0;
+            }
+            break;
+        case 'e':
+            sParamCmd->fg_end_period = atoi(optarg);
+            break;
+        case 'g':
+            sParamCmd->fg_start_period = atoi(optarg);
+            break;
+        case 'h':
+            sParamCmd->maxact_chdwell_time = atoi(optarg);
+            break;
+        case 'q':
+            sParamCmd->pas_chdwell_time = atoi(optarg);
+            break;
+        case 'j':
+            cmd = WMI_CREATE_QOS;
+            crePStreamCmd->userPriority = atoi(optarg);
+            break;
+        case 'k':
+            cmd = WMI_DELETE_QOS;
+            delPStreamCmd->trafficClass = atoi(optarg);
+            break;
+        case 'l':
+            cmd = WMI_SET_LISTEN_INTERVAL;
+            listenCmd->listenInterval = atoi(optarg);
+            if ((listenCmd->listenInterval < MIN_LISTEN_INTERVAL) ||
+                (listenCmd->listenInterval > MAX_LISTEN_INTERVAL))
+            {
+                printf("Listen Interval out of range\n");
+                cmd = 0;
+            }
+            break;
+        case 'N':
+            cmd =  WMI_SET_LISTEN_INTERVAL;
+            listenCmd->numBeacons = atoi(optarg);
+            if ((listenCmd->numBeacons < MIN_LISTEN_BEACONS) ||
+                (listenCmd->numBeacons > MAX_LISTEN_BEACONS))
+            {
+                printf("Listen beacons out of range\n");
+                cmd = 0;
+            }
+            break;
+        case 'm':
+            cmd = WMI_SET_PM_PARAMS;
+            break;
+        case 'n':
+            index = atoi(optarg);
+            break;
+        case 'v':
+            cmd = WMI_GET_VERSION;
+            break;
+        case 'o':
+            cmd = WMI_GET_QOS_QUEUE;
+            getQosQueueCmd->trafficClass = atoi(optarg);
+            break;
+        case 'p':
+            cmd = WMI_SET_POWER_MODE;
+            if (!strcmp(optarg, "rec")) {
+                pwrCmd->powerMode = REC_POWER;
+            } else if (!strcmp(optarg, "maxperf")) {
+                pwrCmd->powerMode = MAX_PERF_POWER;
+            } else {
+                cmd = 0;
+            }
+            break;
+        case WMI_FORCE_ASSERT:
+            cmd = WMI_FORCE_ASSERT;
+            break;
+        case WMI_SET_MCAST_FILTER:
+            cmd = WMI_SET_MCAST_FILTER;
+            sMcastFilterCmd->multicast_mac[0] = (unsigned int) atoi(argv[2]);
+            sMcastFilterCmd->multicast_mac[1] = (unsigned int) atoi(argv[3]);
+            sMcastFilterCmd->multicast_mac[2] = (unsigned int) atoi(argv[4]);
+            sMcastFilterCmd->multicast_mac[3] = (unsigned int) atoi(argv[5]);
+            sMcastFilterCmd->multicast_mac[4] = (unsigned int) atoi(argv[6]);
+            sMcastFilterCmd->multicast_mac[5] = (unsigned int) atoi(argv[7]);
+
+            printf("sMcastFilterCmd->multicast_mac[0]  %d\n",sMcastFilterCmd->multicast_mac[0] );
+            printf("sMcastFilterCmd->multicast_mac[1]  %d\n",sMcastFilterCmd->multicast_mac[1] );
+            printf("sMcastFilterCmd->multicast_mac[2]  %d\n",sMcastFilterCmd->multicast_mac[2] );
+            printf("sMcastFilterCmd->multicast_mac[3]  %d\n",sMcastFilterCmd->multicast_mac[3] );
+            printf("sMcastFilterCmd->multicast_mac[4]  %d\n",sMcastFilterCmd->multicast_mac[4] );
+            printf("sMcastFilterCmd->multicast_mac[5]  %d\n",sMcastFilterCmd->multicast_mac[5] );
+            break;
+        case WMI_DEL_MCAST_FILTER:
+            cmd = WMI_DEL_MCAST_FILTER;
+            sMcastFilterCmd->multicast_mac[0] = (unsigned int) atoi(argv[2]);
+            sMcastFilterCmd->multicast_mac[1] = (unsigned int) atoi(argv[3]);
+            sMcastFilterCmd->multicast_mac[2] = (unsigned int) atoi(argv[4]);
+            sMcastFilterCmd->multicast_mac[3] = (unsigned int) atoi(argv[5]);
+            sMcastFilterCmd->multicast_mac[4] = (unsigned int) atoi(argv[6]);
+            sMcastFilterCmd->multicast_mac[5] = (unsigned int) atoi(argv[7]);
+
+            printf("sMcastFilterCmd->multicast_mac[0]  %d\n",sMcastFilterCmd->multicast_mac[0] );
+            printf("sMcastFilterCmd->multicast_mac[1]  %d\n",sMcastFilterCmd->multicast_mac[1] );
+            printf("sMcastFilterCmd->multicast_mac[2]  %d\n",sMcastFilterCmd->multicast_mac[2] );
+            printf("sMcastFilterCmd->multicast_mac[3]  %d\n",sMcastFilterCmd->multicast_mac[3] );
+            printf("sMcastFilterCmd->multicast_mac[4]  %d\n",sMcastFilterCmd->multicast_mac[4] );
+            printf("sMcastFilterCmd->multicast_mac[5]  %d\n",sMcastFilterCmd->multicast_mac[5] );
+            break;
+        case WMI_MCAST_FILTER:
+            cmd = WMI_MCAST_FILTER;
+
+            mcastFilterCmd->enable = (unsigned int) atoi(argv[2]);
+            printf("Multicast Filter State: %s\n", mcastFilterCmd->enable ? "enable" : "disable");
+            break;
+        case 'r':
+            sParamCmd->shortScanRatio = atoi(optarg);
+            break;
+        case 's':
+            cmd = WMI_SET_SCAN_PARAMS;
+            sParamCmd->scanCtrlFlags = DEFAULT_SCAN_CTRL_FLAGS;
+            sParamCmd->shortScanRatio = WMI_SHORTSCANRATIO_DEFAULT;
+            sParamCmd->max_dfsch_act_time = 0 ;
+            break;
+        case WMI_SCAN_DFSCH_ACT_TIME:
+            sParamCmd->max_dfsch_act_time = atoi(optarg);
+            break;
+        case WMI_SCAN_MAXACT_PER_SSID:
+            sParamCmd->maxact_scan_per_ssid = atoi(optarg);
+            break;
+        case 't':
+            cmd = WMI_SET_SSID;
+            index = optind-1;
+            pSsidCmd->entryIndex =(A_UINT8)atoi(argv[index++]);
+            ssid = (A_UCHAR *)argv[index++];
+            break;
+        case 'u':
+            cmd = WMI_SET_RSSI_THRESHOLDS;
+            memset(threshold, 0, sizeof(threshold));
+            for (index = optind; index <= argc; index++)
+                threshold[index-optind] = atoi(argv[index-1]);
+
+            rssiThresholdParam->weight                  = threshold[0];
+            rssiThresholdParam->pollTime                = threshold[1];
+            rssiThresholdParam->tholds[0].tag           = threshold[2];
+            rssiThresholdParam->tholds[0].rssi          = 0 - threshold[3];
+            rssiThresholdParam->tholds[1].tag           = threshold[4];
+            rssiThresholdParam->tholds[1].rssi          = 0 - threshold[5];
+            rssiThresholdParam->tholds[2].tag           = threshold[6];
+            rssiThresholdParam->tholds[2].rssi          = 0 - threshold[7];
+            rssiThresholdParam->tholds[3].tag           = threshold[8];
+            rssiThresholdParam->tholds[3].rssi          = 0 - threshold[9];
+            rssiThresholdParam->tholds[4].tag           = threshold[10];
+            rssiThresholdParam->tholds[4].rssi          = 0 - threshold[11];
+            rssiThresholdParam->tholds[5].tag           = threshold[12];
+            rssiThresholdParam->tholds[5].rssi          = 0 - threshold[13];
+            rssiThresholdParam->tholds[6].tag           = threshold[14];
+            rssiThresholdParam->tholds[6].rssi          = 0 - threshold[15];
+            rssiThresholdParam->tholds[7].tag           = threshold[16];
+            rssiThresholdParam->tholds[7].rssi          = 0 - threshold[17];
+            rssiThresholdParam->tholds[8].tag           = threshold[18];
+            rssiThresholdParam->tholds[8].rssi          = 0 - threshold[19];
+            rssiThresholdParam->tholds[9].tag           = threshold[20];
+            rssiThresholdParam->tholds[9].rssi          = 0 - threshold[21];
+            rssiThresholdParam->tholds[10].tag           = threshold[22];
+            rssiThresholdParam->tholds[10].rssi          = 0 - threshold[23];
+            rssiThresholdParam->tholds[11].tag           = threshold[24];
+            rssiThresholdParam->tholds[11].rssi          = 0 - threshold[25];
+
+            break;
+        case WMI_SET_SNR_THRESHOLDS:
+            cmd = WMI_SET_SNR_THRESHOLDS;
+            memset(threshold, 0, sizeof(threshold));
+            for (index = optind; index <= argc; index++)
+                threshold[index-optind] = atoi(argv[index-1]);
+
+            snrThresholdParam->weight                  = threshold[0];
+            snrThresholdParam->thresholdAbove1_Val     = threshold[1];
+            snrThresholdParam->thresholdAbove2_Val     = threshold[2];
+            snrThresholdParam->thresholdAbove3_Val     = threshold[3];
+            snrThresholdParam->thresholdAbove4_Val     = threshold[4];
+            snrThresholdParam->thresholdBelow1_Val    = threshold[5];
+            snrThresholdParam->thresholdBelow2_Val    = threshold[6];
+            snrThresholdParam->thresholdBelow3_Val    = threshold[7];
+            snrThresholdParam->thresholdBelow4_Val    = threshold[8];
+            snrThresholdParam->pollTime                = threshold[9];
+            break;
+        case WMI_CLR_RSSISNR:
+            cmd = WMI_CLR_RSSISNR;
+            break;
+        case WMI_SET_LQ_THRESHOLDS:
+            cmd = WMI_SET_LQ_THRESHOLDS;
+            memset(threshold, 0, sizeof(threshold));
+            for (index = optind; index <= argc; index++)
+                threshold[index-optind] = atoi(argv[index-1]);
+
+            lqThresholdParam->enable                       = threshold[0];
+            lqThresholdParam->thresholdAbove1_Val          = threshold[1];
+            lqThresholdParam->thresholdAbove2_Val          = threshold[2];
+            lqThresholdParam->thresholdAbove3_Val          = threshold[3];
+            lqThresholdParam->thresholdAbove4_Val          = threshold[4];
+            lqThresholdParam->thresholdBelow1_Val          = threshold[5];
+            lqThresholdParam->thresholdBelow2_Val          = threshold[6];
+            lqThresholdParam->thresholdBelow3_Val          = threshold[7];
+            lqThresholdParam->thresholdBelow4_Val          = threshold[8];
+
+            break;
+        case 'i':
+            memset(ifname, '\0', 8);
+		strncpy(ifname, optarg, sizeof(ifname));
+            break;
+        case 'w':
+            cmd = WMI_SET_CHANNEL;
+            chParamCmd->numChannels = 0;
+            chParamCmd->scanParam = 0;
+            break;
+        case 'x':
+            if (wmic_ether_aton(optarg, badApCmd->bssid) != A_OK) {
+                printf("bad mac address\n");
+                break;
+            }
+            cmd = WMI_SET_BADAP;
+            break;
+        case 'y':
+            /*
+             * we are clearing a bad AP. We pass a null mac address
+             */
+            cmd = WMI_DELETE_BADAP;
+            break;
+        case 'z':
+            sParamCmd->minact_chdwell_time = atoi(optarg);
+            break;
+        case WMI_GET_TARGET_STATS:
+            cmd = WMI_GET_TARGET_STATS;
+            break;
+        case WMI_SET_TARGET_ERROR_REPORTING_BITMASK:
+            cmd = WMI_SET_TARGET_ERROR_REPORTING_BITMASK;
+            pBitMask->bitmask = atoi(optarg);
+            printf("Setting the bitmask = 0x%x\n", pBitMask->bitmask);
+            break;
+        case WMI_SET_ASSOC_IE:
+            cmd = WMI_SET_ASSOC_INFO_CMDID;
+            ieInfo->ieType = 1;
+            if (strlen(optarg) > WMI_MAX_ASSOC_INFO_LEN) {
+                printf("IE Size cannot be greater than %d\n",
+                        WMI_MAX_ASSOC_INFO_LEN);
+                cmd = 0;
+            } else {
+                ieInfo->bufferSize = strlen(optarg) + 2;
+                memcpy(&ieInfo->assocInfo[2], optarg,
+                       ieInfo->bufferSize - 2);
+               ieInfo->assocInfo[0] = 0xdd;
+               ieInfo->assocInfo[1] = ieInfo->bufferSize - 2;
+            }
+            break;
+        case WMI_SET_BMISS_TIME:
+            cmd = WMI_SET_BMISS_TIME;
+            bmissCmd->bmissTime = atoi(optarg);
+            if ((bmissCmd->bmissTime < MIN_BMISS_TIME) ||
+                (bmissCmd->bmissTime > MAX_BMISS_TIME))
+            {
+                printf("BMISS time out of range\n");
+                cmd = 0;
+            } 
+            break;
+        case 'M':
+            cmd = WMI_SET_BMISS_TIME;
+            bmissCmd->numBeacons =  atoi(optarg);
+            if ((bmissCmd->numBeacons < MIN_BMISS_BEACONS) ||
+                (bmissCmd->numBeacons > MAX_BMISS_BEACONS))
+            {
+                printf("BMISS beacons out of range\n");
+                cmd = 0;
+            }
+            break;
+
+        case WMI_SET_AC_PARAMS:
+            cmd = WMI_SET_AC_PARAMS;
+            break;
+        case WMI_SET_AC_VAL:
+            acParamsCmd->ac = atoi(optarg);
+            break;
+        case 'A':
+            acParamsCmd->txop = atoi(optarg);
+            break;
+        case 'B':
+            acParamsCmd->eCWmin = atoi(optarg);
+            break;
+        case 'C':
+            acParamsCmd->eCWmax = atoi(optarg);
+            break;
+        case 'D':
+            acParamsCmd->aifsn = atoi(optarg);
+            break;
+        case 'E':
+            if (!strcmp(optarg, "disable")) {
+                adhocPmCmd->power_saving = ADHOC_PS_DISABLE;
+            } else if (!strcmp(optarg, "atheros")) {
+                adhocPmCmd->power_saving = ADHOC_PS_ATH;
+            } else if (!strcmp(optarg, "ieee")) {
+                adhocPmCmd->power_saving = ADHOC_PS_IEEE;
+            } else {
+                cmd = 0;
+            }
+
+            break;
+        case 'F':
+            adhocPmCmd->atim_windows = atoi(optarg);
+            break;
+        case 'G':
+            if (wmic_ether_aton(optarg, adhocBssidCmd->bssid) != A_OK) {
+                printf("bad mac address\n");
+                break;
+            }
+            printf("adhoc bssid address, %x\n", adhocBssidCmd->bssid[0]);
+            cmd = WMI_SET_ADHOC_BSSID;
+            break;
+
+       case 'J':
+            cmd = WMI_SET_WLAN_STATE;
+            if (!strcmp(optarg, "enable")) {
+                ((int *)buf)[1] = WLAN_ENABLED;
+            } else if (!strcmp(optarg, "disable")) {
+                ((int *)buf)[1] = WLAN_DISABLED;
+            } else if (!strcmp(optarg, "query")) {
+                cmd = WMI_GET_WLAN_STATE;
+            } else {
+                usage();
+            }
+            break;
+        case 'K':
+            adhocPmCmd->timeout_value = atoi(optarg);
+            break;
+       case 'O':
+            index = optind;
+            index--;
+            if((index + 6) > argc) {  /*6 is the number of  flags
+                                       scanctrlflags takes  */
+                printf("Incorrect number of scanctrlflags\n");
+                cmd = 0;
+                break;
+           }
+            sParamCmd->scanCtrlFlags = 0;
+            if (atoi(argv[index]) == 1)
+                sParamCmd->scanCtrlFlags |= CONNECT_SCAN_CTRL_FLAGS;
+            index++;
+            if (atoi(argv[index]) == 1)
+                sParamCmd->scanCtrlFlags |= SCAN_CONNECTED_CTRL_FLAGS;
+            index++;
+            if (atoi(argv[index]) == 1)
+                sParamCmd->scanCtrlFlags |= ACTIVE_SCAN_CTRL_FLAGS;
+            index++;
+            if (atoi(argv[index]) == 1)
+                sParamCmd->scanCtrlFlags |= ROAM_SCAN_CTRL_FLAGS;
+            index++;
+            if (atoi(argv[index]) == 1)
+                sParamCmd->scanCtrlFlags |= REPORT_BSSINFO_CTRL_FLAGS;
+            index++;
+            if(atoi(argv[index]) == 1)
+               sParamCmd->scanCtrlFlags |= ENABLE_AUTO_CTRL_FLAGS;
+            index++;
+            if (argc - index) {
+                if(atoi(argv[index]) == 1)
+                   sParamCmd->scanCtrlFlags |= ENABLE_SCAN_ABORT_EVENT;
+                index++;
+            }
+            if(!sParamCmd->scanCtrlFlags) {
+               sParamCmd->scanCtrlFlags = 255; /* all flags have being disabled by the user */
+            }
+            break;
+       case 'L':
+            adhocPmCmd->ttl = atoi(optarg);
+            break;
+       case  'P':
+            startScanCmd->homeDwellTime =atoi(optarg);
+            break;
+       case 'Q':
+            startScanCmd->forceScanInterval =atoi(optarg);
+            break;
+       case 'R':
+            index = optind;
+            index--;
+            if((index + 3) > argc) {
+                printf("Incorrect number of forceScanCtrlFlags\n");
+                cmd = 0;
+                break;
+            }
+            startScanCmd->scanType = atoi(argv[index]);
+            index++;
+            startScanCmd->forceFgScan = atoi(argv[index]);
+            index++;
+            startScanCmd->isLegacy = atoi(argv[index]);
+            index++;
+            break;
+       case WMI_SCAN_CHANNEL_LIST:
+            chindex = 0;
+            index = optind - 1;
+            clist = startScanCmd->channelList;
+
+            while (argv[index] != NULL) {
+                channel = atoi(argv[index]);
+                if (channel < 255) {
+                    /*
+                     * assume channel is a ieee channel #
+                     */
+                clist[chindex] = wmic_ieee2freq(channel);
+                } else {
+                    clist[chindex] = channel;
+                }
+                chindex++;
+                index++;
+            }
+            startScanCmd->numChannels = chindex;
+            break;
+       case WMI_SET_IBSS_PM_CAPS:
+            cmd = WMI_SET_IBSS_PM_CAPS;
+            break;
+       case WMI_SET_AP_PS:
+            cmd = WMI_SET_AP_PS;
+            break;
+        case WMI_SET_DISC_TIMEOUT:
+            cmd = WMI_SET_DISC_TIMEOUT;
+            discCmd->disconnectTimeout = atoi(optarg);
+            break;
+        case WMI_SET_BEACON_INT:
+            cmd = WMI_SET_BEACON_INT;
+            bconIntvl->beaconInterval = atoi(optarg);
+            break;
+        case WMI_SET_VOICE_PKT_SIZE:
+            cmd = WMI_SET_VOICE_PKT_SIZE;
+            pSizeThresh->voicePktSize = atoi(optarg);
+            break;
+        case WMI_SET_MAX_SP:
+            cmd = WMI_SET_MAX_SP;
+            pMaxSP->maxSPLen = atoi(optarg);
+            break;
+        case WMI_GET_ROAM_TBL:
+            cmd = WMI_GET_ROAM_TBL;
+            break;
+        case WMI_SET_ROAM_CTRL:
+            pRoamCtrl->roamCtrlType = atoi(optarg);
+            if (A_OK != wmic_validate_roam_ctrl(pRoamCtrl, argc-optind, argv)) {
+                break;
+            }
+            cmd = WMI_SET_ROAM_CTRL;
+            break;
+        case WMI_SET_POWERSAVE_TIMERS:
+            cmd = WMI_SET_POWERSAVE_TIMERS;
+            break;
+        case WMI_SET_POWERSAVE_TIMERS_PSPOLLTIMEOUT:
+            pPowerSave->psPollTimeout = atoi(optarg);
+            break;
+        case WMI_SET_POWERSAVE_TIMERS_TRIGGERTIMEOUT:
+            pPowerSave->triggerTimeout = atoi(optarg);
+            break;
+        case WMI_GET_POWER_MODE:
+            cmd = WMI_GET_POWER_MODE;
+            break;
+        case WMI_GET_ROAM_DATA:
+            cmd = WMI_GET_ROAM_DATA;
+            break;
+        case WMI_SET_BT_STATUS:
+            cmd = WMI_SET_BT_STATUS;
+            pBtStatCmd->streamType = atoi(optarg);
+            pBtStatCmd->status = atoi(argv[optind]);
+            if (pBtStatCmd->streamType >= BT_STREAM_MAX ||
+                pBtStatCmd->status >= BT_STATUS_MAX)
+            {
+                fprintf(stderr, "Invalid parameters.\n");
+                exit(0);
+            }
+            break;
+        case WMI_SET_BT_PARAMS:
+            cmd = WMI_SET_BT_PARAMS;
+            pBtParmCmd->paramType = atoi(optarg);
+            if (pBtParmCmd->paramType >= BT_PARAM_MAX)
+            {
+                fprintf(stderr, "Invalid parameters.\n");
+                exit(0);
+            }
+            if (BT_PARAM_SCO == pBtParmCmd->paramType) {
+                pBtParmCmd->info.scoParams.numScoCyclesForceTrigger =
+                                    strtoul(argv[optind], NULL, 0);
+                pBtParmCmd->info.scoParams.dataResponseTimeout =
+                    strtoul(argv[optind+1], NULL, 0);
+                pBtParmCmd->info.scoParams.stompScoRules =
+                    strtoul(argv[optind+2], NULL, 0);
+                pBtParmCmd->info.scoParams.scoOptFlags =
+                    strtoul(argv[optind+3], NULL, 0);
+                pBtParmCmd->info.scoParams.stompDutyCyleVal =
+                    strtoul(argv[optind+4], NULL, 0);
+                pBtParmCmd->info.scoParams.stompDutyCyleMaxVal =
+                    strtoul(argv[optind+5], NULL, 0);
+                pBtParmCmd->info.scoParams. psPollLatencyFraction =
+                    strtoul(argv[optind+6], NULL, 0);
+                pBtParmCmd->info.scoParams.noSCOSlots =
+                    strtoul(argv[optind+7], NULL, 0);
+                pBtParmCmd->info.scoParams.noIdleSlots =
+                    strtoul(argv[optind+8], NULL, 0);
+                pBtParmCmd->info.scoParams.scoOptOffRssi =
+                    strtoul(argv[optind+9], NULL, 0);
+                pBtParmCmd->info.scoParams.scoOptOnRssi =
+                    strtoul(argv[optind+10], NULL, 0);
+                pBtParmCmd->info.scoParams.scoOptRtsCount =
+                    strtoul(argv[optind+11], NULL, 0);
+            }else if (BT_PARAM_A2DP == pBtParmCmd->paramType) {
+                pBtParmCmd->info.a2dpParams.a2dpWlanUsageLimit =
+                    strtoul(argv[optind], NULL, 0);
+                pBtParmCmd->info.a2dpParams.a2dpBurstCntMin =
+                    strtoul(argv[optind+1 ], NULL, 0);
+                pBtParmCmd->info.a2dpParams.a2dpDataRespTimeout =
+                    strtoul(argv[optind+2 ], NULL, 0);
+                pBtParmCmd->info.a2dpParams.a2dpOptFlags =
+                    strtoul(argv[optind+3 ], NULL, 0);
+                pBtParmCmd->info.a2dpParams.isCoLocatedBtRoleMaster =
+                    strtoul(argv[optind+4 ], NULL, 0);
+                pBtParmCmd->info.a2dpParams.a2dpOptOffRssi =
+                    strtoul(argv[optind+5], NULL, 0);
+                pBtParmCmd->info.a2dpParams.a2dpOptOnRssi =
+                    strtoul(argv[optind+6], NULL, 0);
+                pBtParmCmd->info.a2dpParams.a2dpOptRtsCount =
+                    strtoul(argv[optind+7 ], NULL, 0);
+
+            }else if (BT_PARAM_ANTENNA_CONFIG == pBtParmCmd->paramType) {
+                pBtParmCmd->info.antType = strtoul(argv[optind], NULL, 0);
+            } else if (BT_PARAM_COLOCATED_BT_DEVICE == pBtParmCmd->paramType) {
+                pBtParmCmd->info.coLocatedBtDev =
+                                         strtoul(argv[optind], NULL, 0);
+            }else if(BT_PARAM_ACLCOEX == pBtParmCmd->paramType) {
+                pBtParmCmd->info.aclCoexParams.aclWlanMediumUsageTime =
+                                            strtoul(argv[optind], NULL, 0);
+                pBtParmCmd->info.aclCoexParams.aclBtMediumUsageTime =
+                                            strtoul(argv[optind+1], NULL, 0);
+                pBtParmCmd->info.aclCoexParams.aclDataRespTimeout =
+                                            strtoul(argv[optind+2], NULL, 0);
+                pBtParmCmd->info.aclCoexParams.aclDetectTimeout =
+                                            strtoul(argv[optind+3], NULL, 0);
+                pBtParmCmd->info.aclCoexParams.aclmaxPktCnt =
+                                            strtoul(argv[optind + 4], NULL, 0);
+            } else if (BT_PARAM_11A_SEPARATE_ANT == pBtParmCmd->paramType) {
+                printf("BT_PARAM_11A_SEPARATE_ANT \n");
+            }
+            else
+            {
+                fprintf(stderr, "Invalid parameters.\n");
+                exit(0);
+            }
+            break;
+        case WMI_SET_BTCOEX_FE_ANT:
+            cmd = WMI_SET_BTCOEX_FE_ANT;
+            pBtcoexFeAntCmd->btcoexFeAntType = atoi(optarg);
+            if (pBtcoexFeAntCmd->btcoexFeAntType >= WMI_BTCOEX_FE_ANT_TYPE_MAX) {
+                printf("Invalid configuration [1-Single Antenna,  2- dual antenna low isolation, 3 - dual antenna high isolation\n");
+                printf("4 - bypass mode, 5 - combine mode]\n");
+                exit(-1);
+            }
+            break;
+    case WMI_SET_BTCOEX_COLOCATED_BT_DEV:
+        cmd = WMI_SET_BTCOEX_COLOCATED_BT_DEV;
+        pBtcoexCoLocatedBtCmd->btcoexCoLocatedBTdev = atoi(optarg);
+            if (pBtcoexCoLocatedBtCmd->btcoexCoLocatedBTdev > 4) {
+                printf("Invalid configuration %d\n",
+                        pBtcoexCoLocatedBtCmd->btcoexCoLocatedBTdev);
+                exit(-1);
+            }
+        printf("btcoex colocated antType = %d\n",
+                   pBtcoexCoLocatedBtCmd->btcoexCoLocatedBTdev);
+        break;
+    case WMI_SET_BTCOEX_SCO_CONFIG:
+        cmd = WMI_SET_BTCOEX_SCO_CONFIG;
+        index = optind - 1;
+        if((index + 17) > argc) {
+            printf("Incorrect number of sco Config\n");
+            exit(-1);
+        }
+        pBtcoexScoConfigCmd->scoConfig.scoSlots =  atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoConfig.scoIdleSlots = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoConfig.scoFlags = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoConfig.linkId = atoi(argv[index++]);
+
+        pBtcoexScoConfigCmd->scoPspollConfig.scoCyclesForceTrigger = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoPspollConfig.scoDataResponseTimeout = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoPspollConfig.scoStompDutyCyleVal = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoPspollConfig.scoStompDutyCyleMaxVal = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoPspollConfig.scoPsPollLatencyFraction = atoi(argv[index++]);
+
+
+        pBtcoexScoConfigCmd->scoOptModeConfig.scoStompCntIn100ms = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoOptModeConfig.scoContStompMax = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoOptModeConfig.scoMinlowRateMbps = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoOptModeConfig.scoLowRateCnt = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoOptModeConfig.scoHighPktRatio = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoOptModeConfig.scoMaxAggrSize = atoi(argv[index++]);
+
+        pBtcoexScoConfigCmd->scoWlanScanConfig.scanInterval = atoi(argv[index++]);
+        pBtcoexScoConfigCmd->scoWlanScanConfig.maxScanStompCnt = atoi(argv[index++]);
+        break;
+    case WMI_SET_BTCOEX_A2DP_CONFIG:
+        cmd = WMI_SET_BTCOEX_A2DP_CONFIG;
+        index = optind - 1;
+        if((index + 10) > argc ) {
+            printf("Incorrect number of A2DP Config\n");
+            exit(-1);
+        }
+        pBtcoexA2dpConfigCmd->a2dpConfig.a2dpFlags =  atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dpConfig.linkId = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dppspollConfig.a2dpWlanMaxDur = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dppspollConfig.a2dpMinBurstCnt = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dppspollConfig.a2dpDataRespTimeout = atoi(argv[index++]);
+
+        pBtcoexA2dpConfigCmd->a2dpOptConfig.a2dpMinlowRateMbps = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dpOptConfig.a2dpLowRateCnt = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dpOptConfig.a2dpHighPktRatio = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dpOptConfig.a2dpMaxAggrSize = atoi(argv[index++]);
+        pBtcoexA2dpConfigCmd->a2dpOptConfig.a2dpPktStompCnt = atoi(argv[index++]);
+
+        printf("a2dp Config, flags=%x\n", pBtcoexA2dpConfigCmd->a2dpConfig.a2dpFlags);
+        break;
+    case WMI_SET_BTCOEX_ACLCOEX_CONFIG:
+        cmd = WMI_SET_BTCOEX_ACLCOEX_CONFIG;
+        index = optind - 1;
+        if((index + 14) > argc ) {
+            printf("Incorrect number of ACL COEX Config\n");
+            exit(-1);
+        }
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclWlanMediumDur     =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclBtMediumDur       =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclDetectTimeout     =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclPktCntLowerLimit  =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclIterForEnDis      =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclPktCntUpperLimit  =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.aclCoexFlags         =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexConfig.linkId               =  atoi(argv[index++]);
+
+        pBtcoexAclCoexConfigCmd->aclCoexPspollConfig.aclDataRespTimeout =  atoi(argv[index++]);
+
+        pBtcoexAclCoexConfigCmd->aclCoexOptConfig.aclCoexMinlowRateMbps  =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexOptConfig.aclCoexLowRateCnt  =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexOptConfig.aclCoexHighPktRatio  =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexOptConfig.aclCoexMaxAggrSize  =  atoi(argv[index++]);
+        pBtcoexAclCoexConfigCmd->aclCoexOptConfig.aclPktStompCnt  =  atoi(argv[index++]);
+        break;
+
+    case WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG:
+        cmd = WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG;
+        index = optind - 1;
+        if((index + 3) > argc) {
+            printf("Incorrect number of inquiry_page Config\n");
+            exit(-1);
+        }
+        pBtcoexbtinquiryPageConfigCmd->btInquiryDataFetchFrequency = atoi(argv[index++]);
+        pBtcoexbtinquiryPageConfigCmd->protectBmissDurPostBtInquiry = atoi(argv[index++]);
+        pBtcoexbtinquiryPageConfigCmd->btInquiryPageFlag = atoi(argv[index++]);
+        break;
+
+    case WMI_SET_BTCOEX_BT_OPERATING_STATUS:
+        cmd = WMI_SET_BTCOEX_BT_OPERATING_STATUS;
+        index = optind - 1;
+        if((index + 3) > argc) {
+            printf("Incorrect number of operating status cmdn");
+            exit(-1);
+        }
+
+        pBtcoexBtOperatingStatusCmd->btProfileType =atoi(argv[index++]);
+        pBtcoexBtOperatingStatusCmd->btOperatingStatus =atoi(argv[index++]);
+        pBtcoexBtOperatingStatusCmd->btLinkId =atoi(argv[index++]);
+        break;
+
+    case WMI_GET_BTCOEX_CONFIG:
+        cmd = WMI_GET_BTCOEX_CONFIG;
+        index = optind - 1;
+        if((index + 2) > argc) {
+            printf("Incorrect number of get Config\n");
+            exit(-1);
+        }
+        pBtcoexConfig->configCmd.btProfileType = atoi(argv[index++]);
+        pBtcoexConfig->configCmd.linkId = atoi(argv[index++]);
+        break;
+    case WMI_GET_BTCOEX_STATS:
+        cmd = WMI_GET_BTCOEX_STATS;
+        break;
+        case WMI_SET_RETRYLIMITS:
+            index = optind - 1;
+            setRetryCmd->frameType = atoi(argv[index++]);
+            if (setRetryCmd->frameType > 2) {
+                printf("Invalid frame type! [0 - 2]\n");
+                exit(-1);
+            }
+            setRetryCmd->trafficClass = atoi(argv[index++]);
+            if (setRetryCmd->trafficClass > 3) {
+                printf("Invalid traffic class! [0 - 3]\n");
+                exit(-1);
+            }
+            setRetryCmd->maxRetries = atoi(argv[index++]);
+            if (setRetryCmd->maxRetries > WMI_MAX_RETRIES) {
+                printf("Invalid max retries! [0 - 13] \n");
+                exit(-1);
+            }
+            if (!strcmp(argv[index], "on")) {
+                setRetryCmd->enableNotify = 1;
+            } else if (!strcmp(argv[index], "off")) {
+                setRetryCmd->enableNotify = 0;
+            } else {
+                usage();
+            }
+            cmd = WMI_SET_RETRYLIMITS;
+            break;
+        case WMI_START_SCAN:
+            cmd = WMI_START_SCAN;
+            startScanCmd->scanType= 0;
+            startScanCmd->forceFgScan= false;
+            startScanCmd->isLegacy= false;
+            startScanCmd->homeDwellTime = 0;
+            startScanCmd->forceScanInterval = 0;
+            startScanCmd->numChannels = 0;
+            break;
+        case WMI_SET_FIX_RATES:
+            cmd = WMI_SET_FIX_RATES;
+            break;
+        case WMI_GET_FIX_RATES:
+            cmd = WMI_GET_FIX_RATES;
+            break;
+        case WMI_SET_AUTH_MODE:
+            cmd = WMI_SET_AUTH_MODE;
+            break;
+        case WMI_SET_REASSOC_MODE:
+            cmd = WMI_SET_REASSOC_MODE;
+            break;
+        case WMI_SET_LPREAMBLE:
+            cmd = WMI_SET_LPREAMBLE;
+            setLpreambleCmd->status = atoi(optarg);
+            break;
+        case WMI_SET_RTS:
+            cmd = WMI_SET_RTS;
+            setRtsCmd->threshold = atoi(optarg);
+            break;
+        case WMI_SET_WMM:
+            cmd = WMI_SET_WMM;
+            setWmmCmd->status = atoi(optarg);
+            break;
+        case WMI_SET_QOS_SUPP:
+            cmd = WMI_SET_QOS_SUPP;
+            qosSupp->status = atoi(optarg);
+            break;
+        case WMI_APSD_TIM_POLICY:
+            if (!strcmp(optarg, "ignore")) {
+                pPowerSave->apsdTimPolicy = IGNORE_TIM_ALL_QUEUES_APSD;
+            } else {
+                pPowerSave->apsdTimPolicy = PROCESS_TIM_ALL_QUEUES_APSD;
+            }
+            break;
+        case WMI_SIMULATED_APSD_TIM_POLICY:
+            if (!strcmp(optarg, "ignore")) {
+                pPowerSave->simulatedAPSDTimPolicy = IGNORE_TIM_SIMULATED_APSD;
+            } else {
+                pPowerSave->simulatedAPSDTimPolicy = PROCESS_TIM_SIMULATED_APSD;
+            }
+            break;
+        case WMI_SET_ERROR_DETECTION:
+            cmd = WMI_SET_ERROR_DETECTION;
+            break;
+        case 'S':
+            hbparam->threshold = atoi(optarg);
+            break;
+        case 'T':
+            hbparam->frequency = atoi(optarg);
+            break;
+        case WMI_GET_HB_CHALLENGE_RESP:
+            cmd = WMI_GET_HB_CHALLENGE_RESP;
+            break;
+        case 'U':
+            *cookie = strtoul(optarg, (char **)NULL, 0);
+            break;
+        case USER_SETKEYS:
+            if (argc == 5) {
+                user_setkeys_info->keyOpCtrl = 0;
+                cmd = USER_SETKEYS;
+            } else {
+              printf("Invalid arg %s:Usage --usersetkeys --initrsc=<on/off>",
+                     optarg);
+            }
+            break;
+        case WMI_GET_RD:
+            cmd = WMI_GET_RD;
+            break;
+        case WMI_SET_TXOP:
+            cmd = WMI_SET_TXOP;
+            pTxOp->txopEnable = atoi(optarg);
+            break;
+        case DIAG_ADDR:
+            *diagaddr = strtoul(optarg, (char **)NULL, 0);
+            printf("addr: 0x%x\n", *diagaddr);
+            break;
+        case DIAG_DATA:
+            *diagdata = strtoul(optarg, (char **)NULL, 0);
+            printf("data: 0x%x\n", *diagdata);
+            break;
+        case DIAG_READ:
+            cmd = DIAG_READ;
+            break;
+        case DIAG_WRITE:
+            cmd = DIAG_WRITE;
+            break;
+        case WMI_SET_KEEPALIVE:
+             cmd = WMI_SET_KEEPALIVE;
+	     if (wmic_validate_setkeepalive(setKeepAlive, argv) != A_OK) {
+		     printf("setkeepalive: invalid args\n");
+		     cmd = 0;
+		     break;
+	     }
+             break;
+        case WMI_GET_KEEPALIVE:
+             cmd = WMI_GET_KEEPALIVE;
+             break;
+        case WMI_SET_APPIE:
+             cmd = WMI_SET_APPIE;
+
+            if (argc - optind != 1) {
+                printf("Usage is --setappie <beacon/probe/respon/assoc> <IE>\n");
+                cmd = 0;
+                break;
+            }
+
+            if (A_OK != wmic_validate_appie(appIEInfo, argv)) {
+                cmd = 0;
+                break;
+            }
+            break;
+        case WMI_SET_MGMT_FRM_RX_FILTER:
+             cmd = WMI_SET_MGMT_FRM_RX_FILTER;
+            if (argc - optind != 1) {
+                printf("Usage is --setmgmtfilter <set/clear> <frmtype> \n");
+                cmd = 0;
+                break;
+            }
+
+            if (A_OK != wmic_validate_mgmtfilter(pMgmtFilter, argv)) {
+                cmd = 0;
+                break;
+            }
+            break;
+        case 'V':
+            dbglogCfg->mmask = strtoul(optarg, (char **)NULL, 0);
+            dbglogCfg->valid |= DBGLOG_MODULE_LOG_ENABLE_MASK;
+            break;
+        case 'W':
+            dbglogCfg->rep = strtoul(optarg, (char **)NULL, 0);
+            dbglogCfg->valid |= DBGLOG_REPORTING_ENABLED_MASK;
+            break;
+        case 'X':
+            dbglogCfg->tsr = strtoul(optarg, (char **)NULL, 0);
+            dbglogCfg->valid |= DBGLOG_TIMESTAMP_RESOLUTION_MASK;
+            break;
+        case 'Y':
+            dbglogCfg->size = strtoul(optarg, (char **)NULL, 0);
+            dbglogCfg->valid |= DBGLOG_REPORT_SIZE_MASK;
+            break;
+        case 'Z':
+            clearstat = 1;
+            break;
+        case WMI_BSSID:
+             convert_hexstring_bytearray(optarg, bssid, sizeof(bssid));
+            break;
+        case USER_SETKEYS_INITRSC:
+            if (strcmp(optarg, "on") == 0) {
+                user_setkeys_info->keyOpCtrl &=
+                                    ~AR6000_USER_SETKEYS_RSC_UNCHANGED;
+            } else if (strcmp(optarg, "off") == 0) {
+                user_setkeys_info->keyOpCtrl |=
+                                    AR6000_USER_SETKEYS_RSC_UNCHANGED;
+            } else {
+              printf("Invalid arg %s:Usage --usersetkeys --initrsc=<on/off>",
+                     optarg);
+            }
+            break;
+        case WMI_DBGLOG_CFG_MODULE:
+            dbglogCfg->valid = 0;
+            cmd = WMI_DBGLOG_CFG_MODULE;
+            break;
+        case WMI_DBGLOG_GET_DEBUG_LOGS:
+            cmd = WMI_DBGLOG_GET_DEBUG_LOGS;
+            break;
+        case WMI_SET_HOST_SLEEP_MODE:
+            cmd = WMI_SET_HOST_SLEEP_MODE;
+            if (!strcmp(optarg, "asleep")) {
+                hostSleepModeCmd->asleep = TRUE;
+                hostSleepModeCmd->awake = FALSE;
+            } else if (!strcmp(optarg, "awake")) {
+                hostSleepModeCmd->asleep = FALSE;
+                hostSleepModeCmd->awake = TRUE;