1*10741SFei.Feng@Sun.COM /* 2*10741SFei.Feng@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 3*10741SFei.Feng@Sun.COM * Use is subject to license terms. 4*10741SFei.Feng@Sun.COM */ 5*10741SFei.Feng@Sun.COM 6*10741SFei.Feng@Sun.COM /* 7*10741SFei.Feng@Sun.COM * Copyright (c) 2007-2009 Sam Leffler, Errno Consulting 8*10741SFei.Feng@Sun.COM * Copyright (c) 2007-2009 Marvell Semiconductor, Inc. 9*10741SFei.Feng@Sun.COM * All rights reserved. 10*10741SFei.Feng@Sun.COM * 11*10741SFei.Feng@Sun.COM * Redistribution and use in source and binary forms, with or without 12*10741SFei.Feng@Sun.COM * modification, are permitted provided that the following conditions 13*10741SFei.Feng@Sun.COM * are met: 14*10741SFei.Feng@Sun.COM * 1. Redistributions of source code must retain the above copyright 15*10741SFei.Feng@Sun.COM * notice, this list of conditions and the following disclaimer, 16*10741SFei.Feng@Sun.COM * without modification. 17*10741SFei.Feng@Sun.COM * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*10741SFei.Feng@Sun.COM * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 19*10741SFei.Feng@Sun.COM * redistribution must be conditioned upon including a substantially 20*10741SFei.Feng@Sun.COM * similar Disclaimer requirement for further binary redistribution. 21*10741SFei.Feng@Sun.COM * 22*10741SFei.Feng@Sun.COM * NO WARRANTY 23*10741SFei.Feng@Sun.COM * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24*10741SFei.Feng@Sun.COM * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25*10741SFei.Feng@Sun.COM * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 26*10741SFei.Feng@Sun.COM * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 27*10741SFei.Feng@Sun.COM * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 28*10741SFei.Feng@Sun.COM * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29*10741SFei.Feng@Sun.COM * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30*10741SFei.Feng@Sun.COM * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 31*10741SFei.Feng@Sun.COM * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32*10741SFei.Feng@Sun.COM * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 33*10741SFei.Feng@Sun.COM * THE POSSIBILITY OF SUCH DAMAGES. 34*10741SFei.Feng@Sun.COM */ 35*10741SFei.Feng@Sun.COM 36*10741SFei.Feng@Sun.COM /* 37*10741SFei.Feng@Sun.COM * Definitions for the Marvell Wireless LAN controller Hardware Access Layer. 38*10741SFei.Feng@Sun.COM */ 39*10741SFei.Feng@Sun.COM 40*10741SFei.Feng@Sun.COM #ifndef _MWL_REG_H 41*10741SFei.Feng@Sun.COM #define _MWL_REG_H 42*10741SFei.Feng@Sun.COM 43*10741SFei.Feng@Sun.COM #ifdef __cplusplus 44*10741SFei.Feng@Sun.COM extern "C" { 45*10741SFei.Feng@Sun.COM #endif 46*10741SFei.Feng@Sun.COM 47*10741SFei.Feng@Sun.COM #define MWL_MBSS_SUPPORT /* enable multi-bss support */ 48*10741SFei.Feng@Sun.COM 49*10741SFei.Feng@Sun.COM /* 50*10741SFei.Feng@Sun.COM * Host/Firmware Interface definitions. 51*10741SFei.Feng@Sun.COM */ 52*10741SFei.Feng@Sun.COM 53*10741SFei.Feng@Sun.COM /* 54*10741SFei.Feng@Sun.COM * Define total number of TX queues in the shared memory. 55*10741SFei.Feng@Sun.COM * This count includes the EDCA queues, Block Ack queues, and HCCA queues 56*10741SFei.Feng@Sun.COM * In addition to this, there could be a management packet queue some 57*10741SFei.Feng@Sun.COM * time in the future 58*10741SFei.Feng@Sun.COM */ 59*10741SFei.Feng@Sun.COM #define NUM_EDCA_QUEUES 4 60*10741SFei.Feng@Sun.COM #define NUM_HCCA_QUEUES 0 61*10741SFei.Feng@Sun.COM #define NUM_BA_QUEUES 0 62*10741SFei.Feng@Sun.COM #define NUM_MGMT_QUEUES 0 63*10741SFei.Feng@Sun.COM #define NUM_ACK_EVENT_QUEUE 1 64*10741SFei.Feng@Sun.COM #define TOTAL_TX_QUEUES \ 65*10741SFei.Feng@Sun.COM (NUM_EDCA_QUEUES + \ 66*10741SFei.Feng@Sun.COM NUM_HCCA_QUEUES + \ 67*10741SFei.Feng@Sun.COM NUM_BA_QUEUES + \ 68*10741SFei.Feng@Sun.COM NUM_MGMT_QUEUES + \ 69*10741SFei.Feng@Sun.COM NUM_ACK_EVENT_QUEUE) 70*10741SFei.Feng@Sun.COM #define MAX_TXWCB_QUEUES TOTAL_TX_QUEUES - NUM_ACK_EVENT_QUEUE 71*10741SFei.Feng@Sun.COM #define MAX_RXWCB_QUEUES 1 72*10741SFei.Feng@Sun.COM 73*10741SFei.Feng@Sun.COM /* 74*10741SFei.Feng@Sun.COM * Firmware download support. 75*10741SFei.Feng@Sun.COM */ 76*10741SFei.Feng@Sun.COM #define FW_DOWNLOAD_BLOCK_SIZE 256 77*10741SFei.Feng@Sun.COM #define FW_CHECK_USECS (5*1000) /* 5ms */ 78*10741SFei.Feng@Sun.COM #define FW_MAX_NUM_CHECKS 200 79*10741SFei.Feng@Sun.COM 80*10741SFei.Feng@Sun.COM #define MWL_ANT_INFO_SUPPORT /* per-antenna data in rx descriptor */ 81*10741SFei.Feng@Sun.COM 82*10741SFei.Feng@Sun.COM #define MACREG_REG_TSF_LOW 0xa600 /* TSF lo */ 83*10741SFei.Feng@Sun.COM #define MACREG_REG_TSF_HIGH 0xa604 /* TSF hi */ 84*10741SFei.Feng@Sun.COM #define MACREG_REG_CHIP_REV 0xa814 /* chip rev */ 85*10741SFei.Feng@Sun.COM 86*10741SFei.Feng@Sun.COM /* 87*10741SFei.Feng@Sun.COM * Map to 0x80000000 (Bus control) on BAR0 88*10741SFei.Feng@Sun.COM */ 89*10741SFei.Feng@Sun.COM /* From host to ARM */ 90*10741SFei.Feng@Sun.COM #define MACREG_REG_H2A_INTERRUPT_EVENTS 0x00000C18 91*10741SFei.Feng@Sun.COM #define MACREG_REG_H2A_INTERRUPT_CAUSE 0x00000C1C 92*10741SFei.Feng@Sun.COM #define MACREG_REG_H2A_INTERRUPT_MASK 0x00000C20 93*10741SFei.Feng@Sun.COM #define MACREG_REG_H2A_INTERRUPT_CLEAR_SEL 0x00000C24 94*10741SFei.Feng@Sun.COM #define MACREG_REG_H2A_INTERRUPT_STATUS_MASK 0x00000C28 95*10741SFei.Feng@Sun.COM /* From ARM to host */ 96*10741SFei.Feng@Sun.COM #define MACREG_REG_A2H_INTERRUPT_EVENTS 0x00000C2C 97*10741SFei.Feng@Sun.COM #define MACREG_REG_A2H_INTERRUPT_CAUSE 0x00000C30 98*10741SFei.Feng@Sun.COM #define MACREG_REG_A2H_INTERRUPT_MASK 0x00000C34 99*10741SFei.Feng@Sun.COM #define MACREG_REG_A2H_INTERRUPT_CLEAR_SEL 0x00000C38 100*10741SFei.Feng@Sun.COM #define MACREG_REG_A2H_INTERRUPT_STATUS_MASK 0x00000C3C 101*10741SFei.Feng@Sun.COM 102*10741SFei.Feng@Sun.COM 103*10741SFei.Feng@Sun.COM /* Map to 0x80000000 on BAR1 */ 104*10741SFei.Feng@Sun.COM #define MACREG_REG_GEN_PTR 0x00000C10 105*10741SFei.Feng@Sun.COM #define MACREG_REG_INT_CODE 0x00000C14 106*10741SFei.Feng@Sun.COM #define MACREG_REG_SCRATCH 0x00000C40 107*10741SFei.Feng@Sun.COM #define MACREG_REG_FW_PRESENT 0x0000BFFC 108*10741SFei.Feng@Sun.COM 109*10741SFei.Feng@Sun.COM #define MACREG_REG_PROMISCUOUS 0xA300 110*10741SFei.Feng@Sun.COM /* Bit definitio for MACREG_REG_A2H_INTERRUPT_CAUSE (A2HRIC) */ 111*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_TX_DONE 0x00000001 /* bit 0 */ 112*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_RX_RDY 0x00000002 /* bit 1 */ 113*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_OPC_DONE 0x00000004 /* bit 2 */ 114*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_MAC_EVENT 0x00000008 /* bit 3 */ 115*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_RX_PROBLEM 0x00000010 /* bit 4 */ 116*10741SFei.Feng@Sun.COM 117*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_RADIO_OFF 0x00000020 /* bit 5 */ 118*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_RADIO_ON 0x00000040 /* bit 6 */ 119*10741SFei.Feng@Sun.COM 120*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_RADAR_DETECT 0x00000080 /* bit 7 */ 121*10741SFei.Feng@Sun.COM 122*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_ICV_ERROR 0x00000100 /* bit 8 */ 123*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_MIC_ERROR 0x00000200 /* bit 9 */ 124*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_QUEUE_EMPTY 0x00004000 125*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_QUEUE_FULL 0x00000800 126*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_CHAN_SWITCH 0x00001000 127*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_TX_WATCHDOG 0x00002000 128*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_BA_WATCHDOG 0x00000400 129*10741SFei.Feng@Sun.COM #define MACREQ_A2HRIC_BIT_TX_ACK 0x00008000 130*10741SFei.Feng@Sun.COM #define ISR_SRC_BITS ((MACREG_A2HRIC_BIT_RX_RDY) | \ 131*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_TX_DONE) | \ 132*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_OPC_DONE) | \ 133*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_MAC_EVENT) | \ 134*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_MIC_ERROR) | \ 135*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_ICV_ERROR) | \ 136*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_RADAR_DETECT)| \ 137*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_CHAN_SWITCH) | \ 138*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_TX_WATCHDOG) | \ 139*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_QUEUE_EMPTY) | \ 140*10741SFei.Feng@Sun.COM (MACREG_A2HRIC_BIT_BA_WATCHDOG) | \ 141*10741SFei.Feng@Sun.COM (MACREQ_A2HRIC_BIT_TX_ACK)) 142*10741SFei.Feng@Sun.COM 143*10741SFei.Feng@Sun.COM #define MACREG_A2HRIC_BIT_MASK ISR_SRC_BITS 144*10741SFei.Feng@Sun.COM 145*10741SFei.Feng@Sun.COM /* Bit definitio for MACREG_REG_H2A_INTERRUPT_CAUSE (H2ARIC) */ 146*10741SFei.Feng@Sun.COM #define MACREG_H2ARIC_BIT_PPA_READY 0x00000001 /* bit 0 */ 147*10741SFei.Feng@Sun.COM #define MACREG_H2ARIC_BIT_DOOR_BELL 0x00000002 /* bit 1 */ 148*10741SFei.Feng@Sun.COM #define ISR_RESET (1<<15) 149*10741SFei.Feng@Sun.COM 150*10741SFei.Feng@Sun.COM /* INT code register event definition */ 151*10741SFei.Feng@Sun.COM #define MACREG_INT_CODE_CMD_FINISHED 0x00000005 152*10741SFei.Feng@Sun.COM 153*10741SFei.Feng@Sun.COM /* 154*10741SFei.Feng@Sun.COM * Define OpMode for SoftAP/Station mode 155*10741SFei.Feng@Sun.COM */ 156*10741SFei.Feng@Sun.COM 157*10741SFei.Feng@Sun.COM /* 158*10741SFei.Feng@Sun.COM * The following mode signature has to be written to PCI scratch register#0 159*10741SFei.Feng@Sun.COM * right after successfully downloading the last block of firmware and 160*10741SFei.Feng@Sun.COM * before waiting for firmware ready signature 161*10741SFei.Feng@Sun.COM */ 162*10741SFei.Feng@Sun.COM #define HostCmd_STA_MODE 0x5A 163*10741SFei.Feng@Sun.COM #define HostCmd_SOFTAP_MODE 0xA5 164*10741SFei.Feng@Sun.COM 165*10741SFei.Feng@Sun.COM #define HostCmd_STA_FWRDY_SIGNATURE 0xF0F1F2F4 166*10741SFei.Feng@Sun.COM #define HostCmd_SOFTAP_FWRDY_SIGNATURE 0xF1F2F4A5 167*10741SFei.Feng@Sun.COM 168*10741SFei.Feng@Sun.COM #define HostCmd_CMD_CODE_DNLD 0x0001 169*10741SFei.Feng@Sun.COM #define HostCmd_CMD_GET_HW_SPEC 0x0003 170*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_HW_SPEC 0x0004 171*10741SFei.Feng@Sun.COM #define HostCmd_CMD_MAC_MULTICAST_ADR 0x0010 172*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11_GET_STAT 0x0014 173*10741SFei.Feng@Sun.COM #define HostCmd_CMD_MAC_REG_ACCESS 0x0019 174*10741SFei.Feng@Sun.COM #define HostCmd_CMD_BBP_REG_ACCESS 0x001a 175*10741SFei.Feng@Sun.COM #define HostCmd_CMD_RF_REG_ACCESS 0x001b 176*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11_RADIO_CONTROL 0x001c 177*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11_RF_TX_POWER 0x001e 178*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11_RF_ANTENNA 0x0020 179*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_BEACON 0x0100 180*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_AID 0x010d 181*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_RF_CHANNEL 0x010a 182*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_INFRA_MODE 0x010e 183*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_G_PROTECT_FLAG 0x010f 184*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11_RTS_THSD 0x0113 185*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11_SET_SLOT 0x0114 186*10741SFei.Feng@Sun.COM 187*10741SFei.Feng@Sun.COM #define HostCmd_CMD_802_11H_DETECT_RADAR 0x0120 188*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_WMM_MODE 0x0123 189*10741SFei.Feng@Sun.COM #define HostCmd_CMD_HT_GUARD_INTERVAL 0x0124 190*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_FIXED_RATE 0x0126 191*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_LINKADAPT_CS_MODE 0x0129 192*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_MAC_ADDR 0x0202 193*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_RATE_ADAPT_MODE 0x0203 194*10741SFei.Feng@Sun.COM #define HostCmd_CMD_GET_WATCHDOG_BITMAP 0x0205 195*10741SFei.Feng@Sun.COM 196*10741SFei.Feng@Sun.COM /* SoftAP command code */ 197*10741SFei.Feng@Sun.COM #define HostCmd_CMD_BSS_START 0x1100 198*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_NEW_STN 0x1111 199*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_KEEP_ALIVE 0x1112 200*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_APMODE 0x1114 201*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_SWITCH_CHANNEL 0x1121 202*10741SFei.Feng@Sun.COM 203*10741SFei.Feng@Sun.COM /* 204*10741SFei.Feng@Sun.COM * @HWENCR@ 205*10741SFei.Feng@Sun.COM * Command to update firmware encryption keys. 206*10741SFei.Feng@Sun.COM */ 207*10741SFei.Feng@Sun.COM #define HostCmd_CMD_UPDATE_ENCRYPTION 0x1122 208*10741SFei.Feng@Sun.COM /* 209*10741SFei.Feng@Sun.COM * @11E-BA@ 210*10741SFei.Feng@Sun.COM * Command to create/destroy block ACK 211*10741SFei.Feng@Sun.COM */ 212*10741SFei.Feng@Sun.COM #define HostCmd_CMD_BASTREAM 0x1125 213*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_RIFS 0x1126 214*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_N_PROTECT_FLAG 0x1131 215*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_N_PROTECT_OPMODE 0x1132 216*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_OPTIMIZATION_LEVEL 0x1133 217*10741SFei.Feng@Sun.COM #define HostCmd_CMD_GET_CALTABLE 0x1134 218*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_MIMOPSHT 0x1135 219*10741SFei.Feng@Sun.COM #define HostCmd_CMD_GET_BEACON 0x1138 220*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_REGION_CODE 0x1139 221*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_POWERSAVESTATION 0x1140 222*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_TIM 0x1141 223*10741SFei.Feng@Sun.COM #define HostCmd_CMD_GET_TIM 0x1142 224*10741SFei.Feng@Sun.COM #define HostCmd_CMD_GET_SEQNO 0x1143 225*10741SFei.Feng@Sun.COM #define HostCmd_CMD_DWDS_ENABLE 0x1144 226*10741SFei.Feng@Sun.COM #define HostCmd_CMD_AMPDU_RETRY_RATEDROP_MODE 0x1145 227*10741SFei.Feng@Sun.COM #define HostCmd_CMD_CFEND_ENABLE 0x1146 228*10741SFei.Feng@Sun.COM 229*10741SFei.Feng@Sun.COM /* 230*10741SFei.Feng@Sun.COM * Define general result code for each command 231*10741SFei.Feng@Sun.COM */ 232*10741SFei.Feng@Sun.COM /* RESULT OK */ 233*10741SFei.Feng@Sun.COM #define HostCmd_RESULT_OK 0x0000 234*10741SFei.Feng@Sun.COM /* Genenral error */ 235*10741SFei.Feng@Sun.COM #define HostCmd_RESULT_ERROR 0x0001 236*10741SFei.Feng@Sun.COM /* Command is not valid */ 237*10741SFei.Feng@Sun.COM #define HostCmd_RESULT_NOT_SUPPORT 0x0002 238*10741SFei.Feng@Sun.COM /* Command is pending (will be processed) */ 239*10741SFei.Feng@Sun.COM #define HostCmd_RESULT_PENDING 0x0003 240*10741SFei.Feng@Sun.COM /* System is busy (command ignored) */ 241*10741SFei.Feng@Sun.COM #define HostCmd_RESULT_BUSY 0x0004 242*10741SFei.Feng@Sun.COM /* Data buffer is not big enough */ 243*10741SFei.Feng@Sun.COM #define HostCmd_RESULT_PARTIAL_DATA 0x0005 244*10741SFei.Feng@Sun.COM 245*10741SFei.Feng@Sun.COM #define HostCmd_CMD_SET_EDCA_PARAMS 0x0115 246*10741SFei.Feng@Sun.COM 247*10741SFei.Feng@Sun.COM /* 248*10741SFei.Feng@Sun.COM * Definition of action or option for each command 249*10741SFei.Feng@Sun.COM */ 250*10741SFei.Feng@Sun.COM 251*10741SFei.Feng@Sun.COM /* 252*10741SFei.Feng@Sun.COM * Define general purpose action 253*10741SFei.Feng@Sun.COM */ 254*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_READ 0x0000 255*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_WRITE 0x0001 256*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_GET 0x0000 257*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_SET 0x0001 258*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_OFF 0x0000 259*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_ON 0x0001 260*10741SFei.Feng@Sun.COM 261*10741SFei.Feng@Sun.COM #define HostCmd_ACT_DIFF_CHANNEL 0x0002 262*10741SFei.Feng@Sun.COM #define HostCmd_ACT_GEN_SET_LIST 0x0002 263*10741SFei.Feng@Sun.COM 264*10741SFei.Feng@Sun.COM /* Define action or option for HostCmd_FW_USE_FIXED_RATE */ 265*10741SFei.Feng@Sun.COM #define HostCmd_ACT_USE_FIXED_RATE 0x0001 266*10741SFei.Feng@Sun.COM #define HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002 267*10741SFei.Feng@Sun.COM 268*10741SFei.Feng@Sun.COM /* Define action or option for HostCmd_CMD_802_11_SET_WEP */ 269*10741SFei.Feng@Sun.COM #define HostCmd_ACT_ADD 0x0002 270*10741SFei.Feng@Sun.COM #define HostCmd_ACT_REMOVE 0x0004 271*10741SFei.Feng@Sun.COM #define HostCmd_ACT_USE_DEFAULT 0x0008 272*10741SFei.Feng@Sun.COM 273*10741SFei.Feng@Sun.COM /* 274*10741SFei.Feng@Sun.COM * PUBLIC DEFINITIONS 275*10741SFei.Feng@Sun.COM */ 276*10741SFei.Feng@Sun.COM #define RATE_INDEX_MAX_ARRAY 14 277*10741SFei.Feng@Sun.COM #define WOW_MAX_STATION 32 278*10741SFei.Feng@Sun.COM 279*10741SFei.Feng@Sun.COM 280*10741SFei.Feng@Sun.COM #pragma pack(1) 281*10741SFei.Feng@Sun.COM 282*10741SFei.Feng@Sun.COM struct mwl_ant_info { 283*10741SFei.Feng@Sun.COM uint8_t rssi_a; /* RSSI for antenna A */ 284*10741SFei.Feng@Sun.COM uint8_t rssi_b; /* RSSI for antenna B */ 285*10741SFei.Feng@Sun.COM uint8_t rssi_c; /* RSSI for antenna C */ 286*10741SFei.Feng@Sun.COM uint8_t rsvd1; /* Reserved */ 287*10741SFei.Feng@Sun.COM uint8_t nf_a; /* Noise floor for antenna A */ 288*10741SFei.Feng@Sun.COM uint8_t nf_b; /* Noise floor for antenna B */ 289*10741SFei.Feng@Sun.COM uint8_t nf_c; /* Noise floor for antenna C */ 290*10741SFei.Feng@Sun.COM uint8_t rsvd2; /* Reserved */ 291*10741SFei.Feng@Sun.COM uint8_t nf; /* Noise floor */ 292*10741SFei.Feng@Sun.COM uint8_t rsvd3[3]; /* Reserved - To make word aligned */ 293*10741SFei.Feng@Sun.COM }; 294*10741SFei.Feng@Sun.COM 295*10741SFei.Feng@Sun.COM /* 296*10741SFei.Feng@Sun.COM * Hardware tx/rx descriptors. 297*10741SFei.Feng@Sun.COM * 298*10741SFei.Feng@Sun.COM * NB: tx descriptor size must match f/w expected size 299*10741SFei.Feng@Sun.COM * because f/w prefetch's the next descriptor linearly 300*10741SFei.Feng@Sun.COM * and doesn't chase the next pointer. 301*10741SFei.Feng@Sun.COM */ 302*10741SFei.Feng@Sun.COM struct mwl_txdesc { 303*10741SFei.Feng@Sun.COM uint32_t Status; 304*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_IDLE 0x00000000 305*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_USED 0x00000001 306*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_OK 0x00000001 307*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_OK_RETRY 0x00000002 308*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_OK_MORE_RETRY 0x00000004 309*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_MULTICAST_TX 0x00000008 310*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_BROADCAST_TX 0x00000010 311*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_FAILED_LINK_ERROR 0x00000020 312*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT 0x00000040 313*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_FAILED_XRETRY EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT 314*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_FAILED_AGING 0x00000080 315*10741SFei.Feng@Sun.COM #define EAGLE_TXD_STATUS_FW_OWNED 0x80000000 316*10741SFei.Feng@Sun.COM uint8_t DataRate; 317*10741SFei.Feng@Sun.COM uint8_t TxPriority; 318*10741SFei.Feng@Sun.COM uint16_t QosCtrl; 319*10741SFei.Feng@Sun.COM uint32_t PktPtr; 320*10741SFei.Feng@Sun.COM uint16_t PktLen; 321*10741SFei.Feng@Sun.COM uint8_t DestAddr[6]; 322*10741SFei.Feng@Sun.COM uint32_t pPhysNext; 323*10741SFei.Feng@Sun.COM uint32_t SapPktInfo; 324*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_BONLY 1 325*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_GONLY 2 326*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_BG 3 327*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_NONLY 4 328*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_BN 5 329*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_GN 6 330*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_BGN 7 331*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_AONLY 8 332*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_AG 10 333*10741SFei.Feng@Sun.COM #define EAGLE_TXD_MODE_AN 12 334*10741SFei.Feng@Sun.COM uint16_t Format; 335*10741SFei.Feng@Sun.COM #define EAGLE_TXD_FORMAT 0x0001 /* frame format/rate */ 336*10741SFei.Feng@Sun.COM #define EAGLE_TXD_FORMAT_LEGACY 0x0000 /* legacy rate frame */ 337*10741SFei.Feng@Sun.COM #define EAGLE_TXD_FORMAT_HT 0x0001 /* HT rate frame */ 338*10741SFei.Feng@Sun.COM #define EAGLE_TXD_GI 0x0002 /* guard interval */ 339*10741SFei.Feng@Sun.COM #define EAGLE_TXD_GI_SHORT 0x0002 /* short guard interval */ 340*10741SFei.Feng@Sun.COM #define EAGLE_TXD_GI_LONG 0x0000 /* long guard interval */ 341*10741SFei.Feng@Sun.COM #define EAGLE_TXD_CHW 0x0004 /* channel width */ 342*10741SFei.Feng@Sun.COM #define EAGLE_TXD_CHW_20 0x0000 /* 20MHz channel width */ 343*10741SFei.Feng@Sun.COM #define EAGLE_TXD_CHW_40 0x0004 /* 40MHz channel width */ 344*10741SFei.Feng@Sun.COM #define EAGLE_TXD_RATE 0x01f8 /* tx rate (legacy)/ MCS */ 345*10741SFei.Feng@Sun.COM #define EAGLE_TXD_RATE_S 3 346*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ADV 0x0600 /* advanced coding */ 347*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ADV_S 9 348*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ADV_NONE 0x0000 349*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ADV_LDPC 0x0200 350*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ADV_RS 0x0400 351*10741SFei.Feng@Sun.COM /* NB: 3 is reserved */ 352*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ANTENNA 0x1800 /* antenna select */ 353*10741SFei.Feng@Sun.COM #define EAGLE_TXD_ANTENNA_S 11 354*10741SFei.Feng@Sun.COM #define EAGLE_TXD_EXTCHAN 0x6000 /* extension channel */ 355*10741SFei.Feng@Sun.COM #define EAGLE_TXD_EXTCHAN_S 13 356*10741SFei.Feng@Sun.COM #define EAGLE_TXD_EXTCHAN_HI 0x0000 /* above */ 357*10741SFei.Feng@Sun.COM #define EAGLE_TXD_EXTCHAN_LO 0x2000 /* below */ 358*10741SFei.Feng@Sun.COM #define EAGLE_TXD_PREAMBLE 0x8000 359*10741SFei.Feng@Sun.COM #define EAGLE_TXD_PREAMBLE_SHORT 0x8000 /* short preamble */ 360*10741SFei.Feng@Sun.COM #define EAGLE_TXD_PREAMBLE_LONG 0x0000 /* long preamble */ 361*10741SFei.Feng@Sun.COM uint16_t pad; /* align to 4-byte boundary */ 362*10741SFei.Feng@Sun.COM #define EAGLE_TXD_FIXED_RATE 0x0100 /* get tx rate from Format */ 363*10741SFei.Feng@Sun.COM #define EAGLE_TXD_DONT_AGGR 0x0200 /* don't aggregate frame */ 364*10741SFei.Feng@Sun.COM uint32_t ack_wcb_addr; 365*10741SFei.Feng@Sun.COM }; 366*10741SFei.Feng@Sun.COM 367*10741SFei.Feng@Sun.COM struct mwl_rxdesc { 368*10741SFei.Feng@Sun.COM /* control element */ 369*10741SFei.Feng@Sun.COM uint8_t RxControl; 370*10741SFei.Feng@Sun.COM #define EAGLE_RXD_CTRL_DRIVER_OWN 0x00 371*10741SFei.Feng@Sun.COM #define EAGLE_RXD_CTRL_OS_OWN 0x04 372*10741SFei.Feng@Sun.COM #define EAGLE_RXD_CTRL_DMA_OWN 0x80 373*10741SFei.Feng@Sun.COM /* received signal strengt indication */ 374*10741SFei.Feng@Sun.COM uint8_t RSSI; 375*10741SFei.Feng@Sun.COM /* status field w/ USED bit */ 376*10741SFei.Feng@Sun.COM uint8_t Status; 377*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_IDLE 0x00 378*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_OK 0x01 379*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_MULTICAST_RX 0x02 380*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_BROADCAST_RX 0x04 381*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_FRAGMENT_RX 0x08 382*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_GENERAL_DECRYPT_ERR 0xff 383*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_DECRYPT_ERR_MASK 0x80 384*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_TKIP_MIC_DECRYPT_ERR 0x02 385*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_WEP_ICV_DECRYPT_ERR 0x04 386*10741SFei.Feng@Sun.COM #define EAGLE_RXD_STATUS_TKIP_ICV_DECRYPT_ERR 0x08 387*10741SFei.Feng@Sun.COM /* channel # pkt received on */ 388*10741SFei.Feng@Sun.COM uint8_t Channel; 389*10741SFei.Feng@Sun.COM /* total length of received data */ 390*10741SFei.Feng@Sun.COM uint16_t PktLen; 391*10741SFei.Feng@Sun.COM /* not used */ 392*10741SFei.Feng@Sun.COM uint8_t SQ2; 393*10741SFei.Feng@Sun.COM /* received data rate */ 394*10741SFei.Feng@Sun.COM uint8_t Rate; 395*10741SFei.Feng@Sun.COM /* physical address of payload data */ 396*10741SFei.Feng@Sun.COM uint32_t pPhysBuffData; 397*10741SFei.Feng@Sun.COM /* physical address of next RX desc */ 398*10741SFei.Feng@Sun.COM uint32_t pPhysNext; 399*10741SFei.Feng@Sun.COM /* received QosCtrl field variable */ 400*10741SFei.Feng@Sun.COM uint16_t QosCtrl; 401*10741SFei.Feng@Sun.COM /* like name states */ 402*10741SFei.Feng@Sun.COM uint16_t HtSig2; 403*10741SFei.Feng@Sun.COM #ifdef MWL_ANT_INFO_SUPPORT 404*10741SFei.Feng@Sun.COM /* antenna info */ 405*10741SFei.Feng@Sun.COM struct mwl_ant_info ai; 406*10741SFei.Feng@Sun.COM #endif 407*10741SFei.Feng@Sun.COM }; 408*10741SFei.Feng@Sun.COM #pragma pack() 409*10741SFei.Feng@Sun.COM 410*10741SFei.Feng@Sun.COM 411*10741SFei.Feng@Sun.COM 412*10741SFei.Feng@Sun.COM // ============================================================================= 413*10741SFei.Feng@Sun.COM // HOST COMMAND DEFINITIONS 414*10741SFei.Feng@Sun.COM // ============================================================================= 415*10741SFei.Feng@Sun.COM 416*10741SFei.Feng@Sun.COM // 417*10741SFei.Feng@Sun.COM // Definition of data structure for each command 418*10741SFei.Feng@Sun.COM // 419*10741SFei.Feng@Sun.COM // Define general data structure 420*10741SFei.Feng@Sun.COM #pragma pack(1) 421*10741SFei.Feng@Sun.COM typedef struct { 422*10741SFei.Feng@Sun.COM uint16_t Cmd; 423*10741SFei.Feng@Sun.COM uint16_t Length; 424*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT 425*10741SFei.Feng@Sun.COM uint8_t SeqNum; 426*10741SFei.Feng@Sun.COM uint8_t MacId; 427*10741SFei.Feng@Sun.COM #else 428*10741SFei.Feng@Sun.COM uint16_t SeqNum; 429*10741SFei.Feng@Sun.COM #endif 430*10741SFei.Feng@Sun.COM uint16_t Result; 431*10741SFei.Feng@Sun.COM } FWCmdHdr; 432*10741SFei.Feng@Sun.COM 433*10741SFei.Feng@Sun.COM typedef struct { 434*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 435*10741SFei.Feng@Sun.COM uint8_t annex; 436*10741SFei.Feng@Sun.COM uint8_t index; 437*10741SFei.Feng@Sun.COM uint8_t len; 438*10741SFei.Feng@Sun.COM uint8_t Reserverd; 439*10741SFei.Feng@Sun.COM #define CAL_TBL_SIZE 160 440*10741SFei.Feng@Sun.COM uint8_t calTbl[CAL_TBL_SIZE]; 441*10741SFei.Feng@Sun.COM } HostCmd_FW_GET_CALTABLE; 442*10741SFei.Feng@Sun.COM 443*10741SFei.Feng@Sun.COM typedef struct { 444*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 445*10741SFei.Feng@Sun.COM /* version of the HW */ 446*10741SFei.Feng@Sun.COM uint8_t Version; 447*10741SFei.Feng@Sun.COM /* host interface */ 448*10741SFei.Feng@Sun.COM uint8_t HostIf; 449*10741SFei.Feng@Sun.COM /* Max. number of WCB FW can handle */ 450*10741SFei.Feng@Sun.COM uint16_t NumOfWCB; 451*10741SFei.Feng@Sun.COM /* MaxNbr of MC addresses FW can handle */ 452*10741SFei.Feng@Sun.COM uint16_t NumOfMCastAddr; 453*10741SFei.Feng@Sun.COM /* MAC address programmed in HW */ 454*10741SFei.Feng@Sun.COM uint8_t PermanentAddr[6]; 455*10741SFei.Feng@Sun.COM uint16_t RegionCode; 456*10741SFei.Feng@Sun.COM /* Number of antenna used */ 457*10741SFei.Feng@Sun.COM uint16_t NumberOfAntenna; 458*10741SFei.Feng@Sun.COM /* 4 byte of FW release number */ 459*10741SFei.Feng@Sun.COM uint32_t FWReleaseNumber; 460*10741SFei.Feng@Sun.COM uint32_t WcbBase0; 461*10741SFei.Feng@Sun.COM uint32_t RxPdWrPtr; 462*10741SFei.Feng@Sun.COM uint32_t RxPdRdPtr; 463*10741SFei.Feng@Sun.COM uint32_t ulFwAwakeCookie; 464*10741SFei.Feng@Sun.COM uint32_t WcbBase1[3]; 465*10741SFei.Feng@Sun.COM } HostCmd_DS_GET_HW_SPEC; 466*10741SFei.Feng@Sun.COM 467*10741SFei.Feng@Sun.COM typedef struct { 468*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 469*10741SFei.Feng@Sun.COM /* HW revision */ 470*10741SFei.Feng@Sun.COM uint8_t Version; 471*10741SFei.Feng@Sun.COM /* Host interface */ 472*10741SFei.Feng@Sun.COM uint8_t HostIf; 473*10741SFei.Feng@Sun.COM /* Max. number of Multicast address FW can handle */ 474*10741SFei.Feng@Sun.COM uint16_t NumOfMCastAdr; 475*10741SFei.Feng@Sun.COM /* MAC address */ 476*10741SFei.Feng@Sun.COM uint8_t PermanentAddr[6]; 477*10741SFei.Feng@Sun.COM /* Region Code */ 478*10741SFei.Feng@Sun.COM uint16_t RegionCode; 479*10741SFei.Feng@Sun.COM /* 4 byte of FW release number */ 480*10741SFei.Feng@Sun.COM uint32_t FWReleaseNumber; 481*10741SFei.Feng@Sun.COM /* Firmware awake cookie */ 482*10741SFei.Feng@Sun.COM uint32_t ulFwAwakeCookie; 483*10741SFei.Feng@Sun.COM /* Device capabilities (see above) */ 484*10741SFei.Feng@Sun.COM uint32_t DeviceCaps; 485*10741SFei.Feng@Sun.COM /* Rx shared memory queue */ 486*10741SFei.Feng@Sun.COM uint32_t RxPdWrPtr; 487*10741SFei.Feng@Sun.COM /* TX queues in WcbBase array */ 488*10741SFei.Feng@Sun.COM uint32_t NumTxQueues; 489*10741SFei.Feng@Sun.COM /* TX WCB Rings */ 490*10741SFei.Feng@Sun.COM uint32_t WcbBase[MAX_TXWCB_QUEUES]; 491*10741SFei.Feng@Sun.COM uint32_t Flags; 492*10741SFei.Feng@Sun.COM #define SET_HW_SPEC_DISABLEMBSS 0x08 493*10741SFei.Feng@Sun.COM #define SET_HW_SPEC_HOSTFORM_BEACON 0x10 494*10741SFei.Feng@Sun.COM #define SET_HW_SPEC_HOSTFORM_PROBERESP 0x20 495*10741SFei.Feng@Sun.COM #define SET_HW_SPEC_HOST_POWERSAVE 0x40 496*10741SFei.Feng@Sun.COM #define SET_HW_SPEC_HOSTENCRDECR_MGMT 0x80 497*10741SFei.Feng@Sun.COM uint32_t TxWcbNumPerQueue; 498*10741SFei.Feng@Sun.COM uint32_t TotalRxWcb; 499*10741SFei.Feng@Sun.COM }HostCmd_DS_SET_HW_SPEC; 500*10741SFei.Feng@Sun.COM 501*10741SFei.Feng@Sun.COM // used for stand alone bssid sets/clears 502*10741SFei.Feng@Sun.COM typedef struct { 503*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 504*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT 505*10741SFei.Feng@Sun.COM uint16_t MacType; 506*10741SFei.Feng@Sun.COM #define WL_MAC_TYPE_PRIMARY_CLIENT 0 507*10741SFei.Feng@Sun.COM #define WL_MAC_TYPE_SECONDARY_CLIENT 1 508*10741SFei.Feng@Sun.COM #define WL_MAC_TYPE_PRIMARY_AP 2 509*10741SFei.Feng@Sun.COM #define WL_MAC_TYPE_SECONDARY_AP 3 510*10741SFei.Feng@Sun.COM #endif 511*10741SFei.Feng@Sun.COM uint8_t MacAddr[6]; 512*10741SFei.Feng@Sun.COM } HostCmd_DS_SET_MAC, 513*10741SFei.Feng@Sun.COM HostCmd_FW_SET_BSSID, 514*10741SFei.Feng@Sun.COM HostCmd_FW_SET_MAC; 515*10741SFei.Feng@Sun.COM 516*10741SFei.Feng@Sun.COM typedef struct { 517*10741SFei.Feng@Sun.COM uint32_t LegacyRateBitMap; 518*10741SFei.Feng@Sun.COM uint32_t HTRateBitMap; 519*10741SFei.Feng@Sun.COM uint16_t CapInfo; 520*10741SFei.Feng@Sun.COM uint16_t HTCapabilitiesInfo; 521*10741SFei.Feng@Sun.COM uint8_t MacHTParamInfo; 522*10741SFei.Feng@Sun.COM uint8_t Rev; 523*10741SFei.Feng@Sun.COM struct { 524*10741SFei.Feng@Sun.COM uint8_t ControlChan; 525*10741SFei.Feng@Sun.COM uint8_t AddChan; 526*10741SFei.Feng@Sun.COM uint16_t OpMode; 527*10741SFei.Feng@Sun.COM uint16_t stbc; 528*10741SFei.Feng@Sun.COM } AddHtInfo; 529*10741SFei.Feng@Sun.COM } PeerInfo_t; 530*10741SFei.Feng@Sun.COM 531*10741SFei.Feng@Sun.COM typedef struct { 532*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 533*10741SFei.Feng@Sun.COM uint16_t AID; 534*10741SFei.Feng@Sun.COM uint8_t MacAddr[6]; 535*10741SFei.Feng@Sun.COM uint16_t StnId; 536*10741SFei.Feng@Sun.COM uint16_t Action; 537*10741SFei.Feng@Sun.COM uint16_t Reserved; 538*10741SFei.Feng@Sun.COM PeerInfo_t PeerInfo; 539*10741SFei.Feng@Sun.COM uint8_t Qosinfo; 540*10741SFei.Feng@Sun.COM uint8_t isQosSta; 541*10741SFei.Feng@Sun.COM uint32_t FwStaPtr; 542*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_NEW_STN; 543*10741SFei.Feng@Sun.COM 544*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_802_11_RF_ANTENNA */ 545*10741SFei.Feng@Sun.COM typedef struct _HostCmd_DS_802_11_RF_ANTENNA { 546*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 547*10741SFei.Feng@Sun.COM uint16_t Action; 548*10741SFei.Feng@Sun.COM /* Number of antennas or 0xffff(diversity) */ 549*10741SFei.Feng@Sun.COM uint16_t AntennaMode; 550*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RF_ANTENNA; 551*10741SFei.Feng@Sun.COM 552*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_802_11_RADIO_CONTROL */ 553*10741SFei.Feng@Sun.COM typedef struct { 554*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 555*10741SFei.Feng@Sun.COM uint16_t Action; 556*10741SFei.Feng@Sun.COM /* 557*10741SFei.Feng@Sun.COM * @bit0: 1/0, on/off 558*10741SFei.Feng@Sun.COM * @bit1: 1/0, long/short 559*10741SFei.Feng@Sun.COM * @bit2: 1/0,auto/fix 560*10741SFei.Feng@Sun.COM */ 561*10741SFei.Feng@Sun.COM uint16_t Control; 562*10741SFei.Feng@Sun.COM uint16_t RadioOn; 563*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RADIO_CONTROL; 564*10741SFei.Feng@Sun.COM 565*10741SFei.Feng@Sun.COM /* for HostCmd_CMD_SET_WMM_MODE */ 566*10741SFei.Feng@Sun.COM typedef struct { 567*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 568*10741SFei.Feng@Sun.COM /* 0->unset, 1->set */ 569*10741SFei.Feng@Sun.COM uint16_t Action; 570*10741SFei.Feng@Sun.COM } HostCmd_FW_SetWMMMode; 571*10741SFei.Feng@Sun.COM 572*10741SFei.Feng@Sun.COM /* bits 0-5 specify frequency band */ 573*10741SFei.Feng@Sun.COM #define FREQ_BAND_2DOT4GHZ 0x0001 574*10741SFei.Feng@Sun.COM #define FREQ_BAND_4DOT9GHZ 0x0002 /* XXX not implemented */ 575*10741SFei.Feng@Sun.COM #define FREQ_BAND_5GHZ 0x0004 576*10741SFei.Feng@Sun.COM #define FREQ_BAND_5DOT2GHZ 0x0008 /* XXX not implemented */ 577*10741SFei.Feng@Sun.COM /* bits 6-10 specify channel width */ 578*10741SFei.Feng@Sun.COM #define CH_AUTO_WIDTH 0x0000 /* XXX not used? */ 579*10741SFei.Feng@Sun.COM #define CH_10_MHz_WIDTH 0x0040 580*10741SFei.Feng@Sun.COM #define CH_20_MHz_WIDTH 0x0080 581*10741SFei.Feng@Sun.COM #define CH_40_MHz_WIDTH 0x0100 582*10741SFei.Feng@Sun.COM /* bits 11-12 specify extension channel */ 583*10741SFei.Feng@Sun.COM #define EXT_CH_NONE 0x0000 /* no extension channel */ 584*10741SFei.Feng@Sun.COM #define EXT_CH_ABOVE_CTRL_CH 0x0800 /* extension channel above */ 585*10741SFei.Feng@Sun.COM #define EXT_CH_AUTO 0x1000 /* XXX not used? */ 586*10741SFei.Feng@Sun.COM #define EXT_CH_BELOW_CTRL_CH 0x1800 /* extension channel below */ 587*10741SFei.Feng@Sun.COM /* bits 13-31 are reserved */ 588*10741SFei.Feng@Sun.COM 589*10741SFei.Feng@Sun.COM #define FIXED_RATE_WITH_AUTO_RATE_DROP 0 590*10741SFei.Feng@Sun.COM #define FIXED_RATE_WITHOUT_AUTORATE_DROP 1 591*10741SFei.Feng@Sun.COM 592*10741SFei.Feng@Sun.COM #define LEGACY_RATE_TYPE 0 593*10741SFei.Feng@Sun.COM #define HT_RATE_TYPE 1 594*10741SFei.Feng@Sun.COM 595*10741SFei.Feng@Sun.COM #define RETRY_COUNT_VALID 0 596*10741SFei.Feng@Sun.COM #define RETRY_COUNT_INVALID 1 597*10741SFei.Feng@Sun.COM 598*10741SFei.Feng@Sun.COM // Define data structure for HostCmd_CMD_802_11_RF_CHANNEL 599*10741SFei.Feng@Sun.COM typedef struct { 600*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 601*10741SFei.Feng@Sun.COM uint16_t Action; 602*10741SFei.Feng@Sun.COM uint8_t CurrentChannel; /* channel # */ 603*10741SFei.Feng@Sun.COM uint32_t ChannelFlags; /* see below */ 604*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_RF_CHANNEL; 605*10741SFei.Feng@Sun.COM 606*10741SFei.Feng@Sun.COM #define TX_POWER_LEVEL_TOTAL 8 607*10741SFei.Feng@Sun.COM 608*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_802_11_RF_TX_POWER */ 609*10741SFei.Feng@Sun.COM typedef struct { 610*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 611*10741SFei.Feng@Sun.COM uint16_t Action; 612*10741SFei.Feng@Sun.COM uint16_t SupportTxPowerLevel; 613*10741SFei.Feng@Sun.COM uint16_t CurrentTxPowerLevel; 614*10741SFei.Feng@Sun.COM uint16_t Reserved; 615*10741SFei.Feng@Sun.COM uint16_t PowerLevelList[TX_POWER_LEVEL_TOTAL]; 616*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RF_TX_POWER; 617*10741SFei.Feng@Sun.COM 618*10741SFei.Feng@Sun.COM typedef struct { 619*10741SFei.Feng@Sun.COM /* 620*10741SFei.Feng@Sun.COM * lower rate after the retry count 621*10741SFei.Feng@Sun.COM * 0: legacy, 1: HT 622*10741SFei.Feng@Sun.COM */ 623*10741SFei.Feng@Sun.COM uint32_t FixRateType; 624*10741SFei.Feng@Sun.COM /* 625*10741SFei.Feng@Sun.COM * 0: retry count is not valid 626*10741SFei.Feng@Sun.COM * 1: use retry count specified 627*10741SFei.Feng@Sun.COM */ 628*10741SFei.Feng@Sun.COM uint32_t RetryCountValid; 629*10741SFei.Feng@Sun.COM } FIX_RATE_FLAG; 630*10741SFei.Feng@Sun.COM 631*10741SFei.Feng@Sun.COM typedef struct { 632*10741SFei.Feng@Sun.COM FIX_RATE_FLAG FixRateTypeFlags; 633*10741SFei.Feng@Sun.COM /* legacy rate(not index) or an MCS code */ 634*10741SFei.Feng@Sun.COM uint32_t FixedRate; 635*10741SFei.Feng@Sun.COM uint32_t RetryCount; 636*10741SFei.Feng@Sun.COM } FIXED_RATE_ENTRY; 637*10741SFei.Feng@Sun.COM 638*10741SFei.Feng@Sun.COM typedef struct { 639*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 640*10741SFei.Feng@Sun.COM /* 641*10741SFei.Feng@Sun.COM * HostCmd_ACT_GEN_GET 0x0000 642*10741SFei.Feng@Sun.COM * HostCmd_ACT_GEN_SET 0x0001 643*10741SFei.Feng@Sun.COM * HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002 644*10741SFei.Feng@Sun.COM */ 645*10741SFei.Feng@Sun.COM uint32_t Action; 646*10741SFei.Feng@Sun.COM /* use fixed rate specified but firmware can drop */ 647*10741SFei.Feng@Sun.COM uint32_t AllowRateDrop; 648*10741SFei.Feng@Sun.COM uint32_t EntryCount; 649*10741SFei.Feng@Sun.COM FIXED_RATE_ENTRY FixedRateTable[4]; 650*10741SFei.Feng@Sun.COM uint8_t MulticastRate; 651*10741SFei.Feng@Sun.COM uint8_t MultiRateTxType; 652*10741SFei.Feng@Sun.COM uint8_t ManagementRate; 653*10741SFei.Feng@Sun.COM } HostCmd_FW_USE_FIXED_RATE; 654*10741SFei.Feng@Sun.COM 655*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_SET_RATE_ADAPT_MODE */ 656*10741SFei.Feng@Sun.COM typedef struct { 657*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 658*10741SFei.Feng@Sun.COM uint16_t Action; 659*10741SFei.Feng@Sun.COM uint16_t RateAdaptMode; 660*10741SFei.Feng@Sun.COM } HostCmd_DS_SET_RATE_ADAPT_MODE; 661*10741SFei.Feng@Sun.COM 662*10741SFei.Feng@Sun.COM typedef struct { 663*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 664*10741SFei.Feng@Sun.COM uint8_t OptLevel; 665*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_OPTIMIZATION_LEVEL; 666*10741SFei.Feng@Sun.COM 667*10741SFei.Feng@Sun.COM typedef struct { 668*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 669*10741SFei.Feng@Sun.COM uint16_t regionCode; 670*10741SFei.Feng@Sun.COM } HostCmd_SET_REGIONCODE_INFO; 671*10741SFei.Feng@Sun.COM 672*10741SFei.Feng@Sun.COM typedef struct { 673*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 674*10741SFei.Feng@Sun.COM uint16_t Action; /* 0: Get. 1:Set */ 675*10741SFei.Feng@Sun.COM uint32_t Option; /* 0: default. 1:Aggressive */ 676*10741SFei.Feng@Sun.COM uint32_t Threshold; /* Range 0-200, default 8 */ 677*10741SFei.Feng@Sun.COM } HostCmd_FW_AMPDU_RETRY_RATEDROP_MODE; 678*10741SFei.Feng@Sun.COM 679*10741SFei.Feng@Sun.COM typedef struct { 680*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 681*10741SFei.Feng@Sun.COM uint32_t Enable; /* 0 -- Disable. or 1 -- Enable */ 682*10741SFei.Feng@Sun.COM } HostCmd_CFEND_ENABLE; 683*10741SFei.Feng@Sun.COM 684*10741SFei.Feng@Sun.COM typedef struct { 685*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 686*10741SFei.Feng@Sun.COM uint32_t Enable; /* FALSE: Disable or TRUE: Enable */ 687*10741SFei.Feng@Sun.COM } HostCmd_DS_BSS_START; 688*10741SFei.Feng@Sun.COM 689*10741SFei.Feng@Sun.COM typedef struct { 690*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 691*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_INFRA_MODE; 692*10741SFei.Feng@Sun.COM 693*10741SFei.Feng@Sun.COM /* used for AID sets/clears */ 694*10741SFei.Feng@Sun.COM typedef struct { 695*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 696*10741SFei.Feng@Sun.COM uint16_t AssocID; 697*10741SFei.Feng@Sun.COM uint8_t MacAddr[6]; /* AP's Mac Address(BSSID) */ 698*10741SFei.Feng@Sun.COM uint32_t GProtection; 699*10741SFei.Feng@Sun.COM uint8_t ApRates[RATE_INDEX_MAX_ARRAY]; 700*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_AID; 701*10741SFei.Feng@Sun.COM 702*10741SFei.Feng@Sun.COM typedef struct { 703*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 704*10741SFei.Feng@Sun.COM uint16_t Action; 705*10741SFei.Feng@Sun.COM uint16_t Threshold; 706*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RTS_THSD; 707*10741SFei.Feng@Sun.COM 708*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_SET_LINKADAPT_CS_MODE */ 709*10741SFei.Feng@Sun.COM typedef struct { 710*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 711*10741SFei.Feng@Sun.COM uint16_t Action; 712*10741SFei.Feng@Sun.COM uint16_t CSMode; 713*10741SFei.Feng@Sun.COM } HostCmd_DS_SET_LINKADAPT_CS_MODE; 714*10741SFei.Feng@Sun.COM 715*10741SFei.Feng@Sun.COM typedef struct { 716*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 717*10741SFei.Feng@Sun.COM uint32_t ActionType; /* ENCR_ACTION_TYPE */ 718*10741SFei.Feng@Sun.COM uint32_t DataLength; /* size of the data buffer attached */ 719*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT 720*10741SFei.Feng@Sun.COM uint8_t macaddr[6]; 721*10741SFei.Feng@Sun.COM #endif 722*10741SFei.Feng@Sun.COM uint8_t ActionData[1]; 723*10741SFei.Feng@Sun.COM } HostCmd_FW_UPDATE_ENCRYPTION; 724*10741SFei.Feng@Sun.COM 725*10741SFei.Feng@Sun.COM /* 726*10741SFei.Feng@Sun.COM * @HWENCR@ 727*10741SFei.Feng@Sun.COM * Hardware Encryption related data structures and constant definitions. 728*10741SFei.Feng@Sun.COM * Note that all related changes are marked with the @HWENCR@ tag. 729*10741SFei.Feng@Sun.COM */ 730*10741SFei.Feng@Sun.COM 731*10741SFei.Feng@Sun.COM #define MAX_ENCR_KEY_LENGTH 16 /* max 128 bits - depends on type */ 732*10741SFei.Feng@Sun.COM #define MIC_KEY_LENGTH 8 /* size of Tx/Rx MIC key - 8 bytes */ 733*10741SFei.Feng@Sun.COM 734*10741SFei.Feng@Sun.COM #define ENCR_KEY_TYPE_ID_WEP 0x00 /* Key type is WEP */ 735*10741SFei.Feng@Sun.COM #define ENCR_KEY_TYPE_ID_TKIP 0x01 /* Key type is TKIP */ 736*10741SFei.Feng@Sun.COM #define ENCR_KEY_TYPE_ID_AES 0x02 /* Key type is AES-CCMP */ 737*10741SFei.Feng@Sun.COM 738*10741SFei.Feng@Sun.COM /* 739*10741SFei.Feng@Sun.COM * flags used in structure - same as driver EKF_XXX flags 740*10741SFei.Feng@Sun.COM */ 741*10741SFei.Feng@Sun.COM /* indicate key is in use */ 742*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_INUSE 0x00000001 743*10741SFei.Feng@Sun.COM /* Group key for RX only */ 744*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_RXGROUPKEY 0x00000002 745*10741SFei.Feng@Sun.COM /* Group key for TX */ 746*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_TXGROUPKEY 0x00000004 747*10741SFei.Feng@Sun.COM /* pairwise */ 748*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_PAIRWISE 0x00000008 749*10741SFei.Feng@Sun.COM /* only used for RX */ 750*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_RXONLY 0x00000010 751*10741SFei.Feng@Sun.COM /* 752*10741SFei.Feng@Sun.COM * These flags are new additions - for hardware encryption commands only 753*10741SFei.Feng@Sun.COM */ 754*10741SFei.Feng@Sun.COM /* Key is for Authenticator */ 755*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_AUTHENTICATOR 0x00000020 756*10741SFei.Feng@Sun.COM /* Sequence counters valid */ 757*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_TSC_VALID 0x00000040 758*10741SFei.Feng@Sun.COM /* Tx key for WEP */ 759*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_WEP_TXKEY 0x01000000 760*10741SFei.Feng@Sun.COM /* Tx/Rx MIC keys are valid */ 761*10741SFei.Feng@Sun.COM #define ENCR_KEY_FLAG_MICKEY_VALID 0x02000000 762*10741SFei.Feng@Sun.COM 763*10741SFei.Feng@Sun.COM /* 764*10741SFei.Feng@Sun.COM * Key material definitions (for WEP, TKIP, & AES-CCMP) 765*10741SFei.Feng@Sun.COM */ 766*10741SFei.Feng@Sun.COM 767*10741SFei.Feng@Sun.COM /* 768*10741SFei.Feng@Sun.COM * WEP Key material definition 769*10741SFei.Feng@Sun.COM * ---------------------------- 770*10741SFei.Feng@Sun.COM * WEPKey --> An array of 'MAX_ENCR_KEY_LENGTH' bytes. 771*10741SFei.Feng@Sun.COM * Note that we do not support 152bit WEP keys 772*10741SFei.Feng@Sun.COM */ 773*10741SFei.Feng@Sun.COM typedef struct { 774*10741SFei.Feng@Sun.COM /* WEP key material (max 128bit) */ 775*10741SFei.Feng@Sun.COM uint8_t KeyMaterial[MAX_ENCR_KEY_LENGTH]; 776*10741SFei.Feng@Sun.COM } WEP_TYPE_KEY; 777*10741SFei.Feng@Sun.COM 778*10741SFei.Feng@Sun.COM /* 779*10741SFei.Feng@Sun.COM * TKIP Key material definition 780*10741SFei.Feng@Sun.COM * ---------------------------- 781*10741SFei.Feng@Sun.COM * This structure defines TKIP key material. Note that 782*10741SFei.Feng@Sun.COM * the TxMicKey and RxMicKey may or may not be valid. 783*10741SFei.Feng@Sun.COM */ 784*10741SFei.Feng@Sun.COM /* 785*10741SFei.Feng@Sun.COM * TKIP Sequence counter - 24 bits 786*10741SFei.Feng@Sun.COM * Incremented on each fragment MPDU 787*10741SFei.Feng@Sun.COM */ 788*10741SFei.Feng@Sun.COM typedef struct { 789*10741SFei.Feng@Sun.COM uint16_t low; 790*10741SFei.Feng@Sun.COM uint32_t high; 791*10741SFei.Feng@Sun.COM } ENCR_TKIPSEQCNT; 792*10741SFei.Feng@Sun.COM 793*10741SFei.Feng@Sun.COM /* 794*10741SFei.Feng@Sun.COM * TKIP Key material. Key type (group or pairwise key) is 795*10741SFei.Feng@Sun.COM * determined by flags in KEY_PARAM_SET structure 796*10741SFei.Feng@Sun.COM */ 797*10741SFei.Feng@Sun.COM typedef struct { 798*10741SFei.Feng@Sun.COM uint8_t KeyMaterial[MAX_ENCR_KEY_LENGTH]; 799*10741SFei.Feng@Sun.COM uint8_t TkipTxMicKey[MIC_KEY_LENGTH]; 800*10741SFei.Feng@Sun.COM uint8_t TkipRxMicKey[MIC_KEY_LENGTH]; 801*10741SFei.Feng@Sun.COM ENCR_TKIPSEQCNT TkipRsc; 802*10741SFei.Feng@Sun.COM ENCR_TKIPSEQCNT TkipTsc; 803*10741SFei.Feng@Sun.COM } TKIP_TYPE_KEY; 804*10741SFei.Feng@Sun.COM 805*10741SFei.Feng@Sun.COM /* 806*10741SFei.Feng@Sun.COM * AES-CCMP Key material definition 807*10741SFei.Feng@Sun.COM * -------------------------------- 808*10741SFei.Feng@Sun.COM * This structure defines AES-CCMP key material. 809*10741SFei.Feng@Sun.COM */ 810*10741SFei.Feng@Sun.COM typedef struct { 811*10741SFei.Feng@Sun.COM /* AES Key material */ 812*10741SFei.Feng@Sun.COM uint8_t KeyMaterial[MAX_ENCR_KEY_LENGTH]; 813*10741SFei.Feng@Sun.COM } AES_TYPE_KEY; 814*10741SFei.Feng@Sun.COM 815*10741SFei.Feng@Sun.COM /* 816*10741SFei.Feng@Sun.COM * UPDATE_ENCRYPTION command action type. 817*10741SFei.Feng@Sun.COM */ 818*10741SFei.Feng@Sun.COM typedef enum { 819*10741SFei.Feng@Sun.COM /* request to enable/disable HW encryption */ 820*10741SFei.Feng@Sun.COM EncrActionEnableHWEncryption, 821*10741SFei.Feng@Sun.COM /* request to set encryption key */ 822*10741SFei.Feng@Sun.COM EncrActionTypeSetKey, 823*10741SFei.Feng@Sun.COM /* request to remove one or more keys */ 824*10741SFei.Feng@Sun.COM EncrActionTypeRemoveKey, 825*10741SFei.Feng@Sun.COM EncrActionTypeSetGroupKey 826*10741SFei.Feng@Sun.COM } ENCR_ACTION_TYPE; 827*10741SFei.Feng@Sun.COM 828*10741SFei.Feng@Sun.COM /* 829*10741SFei.Feng@Sun.COM * Encryption key definition. 830*10741SFei.Feng@Sun.COM * -------------------------- 831*10741SFei.Feng@Sun.COM * This structure provides all required/essential 832*10741SFei.Feng@Sun.COM * information about the key being set/removed. 833*10741SFei.Feng@Sun.COM */ 834*10741SFei.Feng@Sun.COM typedef struct { 835*10741SFei.Feng@Sun.COM uint16_t Length; /* Total length of this structure */ 836*10741SFei.Feng@Sun.COM uint16_t KeyTypeId; /* Key type - WEP, TKIP or AES-CCMP */ 837*10741SFei.Feng@Sun.COM uint32_t KeyInfo; /* key flags */ 838*10741SFei.Feng@Sun.COM uint32_t KeyIndex; /* For WEP only - actual key index */ 839*10741SFei.Feng@Sun.COM uint16_t KeyLen; /* Size of the key */ 840*10741SFei.Feng@Sun.COM union { /* Key material (variable size array) */ 841*10741SFei.Feng@Sun.COM WEP_TYPE_KEY WepKey; 842*10741SFei.Feng@Sun.COM TKIP_TYPE_KEY TkipKey; 843*10741SFei.Feng@Sun.COM AES_TYPE_KEY AesKey; 844*10741SFei.Feng@Sun.COM } Key; 845*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT 846*10741SFei.Feng@Sun.COM uint8_t Macaddr[6]; 847*10741SFei.Feng@Sun.COM #endif 848*10741SFei.Feng@Sun.COM } KEY_PARAM_SET; 849*10741SFei.Feng@Sun.COM 850*10741SFei.Feng@Sun.COM 851*10741SFei.Feng@Sun.COM typedef struct { 852*10741SFei.Feng@Sun.COM FWCmdHdr CmdHdr; 853*10741SFei.Feng@Sun.COM uint32_t ActionType; /* ENCR_ACTION_TYPE */ 854*10741SFei.Feng@Sun.COM uint32_t DataLength; /* size of the data buffer attached */ 855*10741SFei.Feng@Sun.COM KEY_PARAM_SET KeyParam; 856*10741SFei.Feng@Sun.COM #ifndef MWL_MBSS_SUPPORT 857*10741SFei.Feng@Sun.COM uint8_t Macaddr[8]; 858*10741SFei.Feng@Sun.COM #endif 859*10741SFei.Feng@Sun.COM } HostCmd_FW_UPDATE_ENCRYPTION_SET_KEY; 860*10741SFei.Feng@Sun.COM #pragma pack() 861*10741SFei.Feng@Sun.COM 862*10741SFei.Feng@Sun.COM #ifdef __cplusplus 863*10741SFei.Feng@Sun.COM } 864*10741SFei.Feng@Sun.COM #endif 865*10741SFei.Feng@Sun.COM 866*10741SFei.Feng@Sun.COM #endif /* _MWL_REG_H */ 867