xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/marvell/libertas/host.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * This file function prototypes, data structure
4*4882a593Smuzhiyun  * and  definitions for all the host/station commands
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _LBS_HOST_H_
8*4882a593Smuzhiyun #define _LBS_HOST_H_
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include "types.h"
11*4882a593Smuzhiyun #include "defs.h"
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define DEFAULT_AD_HOC_CHANNEL                  6
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define CMD_OPTION_WAITFORRSP                   0x0002
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /* Host command IDs */
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /*
20*4882a593Smuzhiyun  * Return command are almost always the same as the host command, but with
21*4882a593Smuzhiyun  * bit 15 set high.  There are a few exceptions, though...
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun #define CMD_RET(cmd)                            (0x8000 | cmd)
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* Return command convention exceptions: */
26*4882a593Smuzhiyun #define CMD_RET_802_11_ASSOCIATE                0x8012
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* Command codes */
29*4882a593Smuzhiyun #define CMD_GET_HW_SPEC                         0x0003
30*4882a593Smuzhiyun #define CMD_EEPROM_UPDATE                       0x0004
31*4882a593Smuzhiyun #define CMD_802_11_RESET                        0x0005
32*4882a593Smuzhiyun #define CMD_802_11_SCAN                         0x0006
33*4882a593Smuzhiyun #define CMD_802_11_GET_LOG                      0x000b
34*4882a593Smuzhiyun #define CMD_MAC_MULTICAST_ADR                   0x0010
35*4882a593Smuzhiyun #define CMD_802_11_AUTHENTICATE                 0x0011
36*4882a593Smuzhiyun #define CMD_802_11_EEPROM_ACCESS                0x0059
37*4882a593Smuzhiyun #define CMD_802_11_ASSOCIATE                    0x0050
38*4882a593Smuzhiyun #define CMD_802_11_SET_WEP                      0x0013
39*4882a593Smuzhiyun #define CMD_802_11_GET_STAT                     0x0014
40*4882a593Smuzhiyun #define CMD_802_3_GET_STAT                      0x0015
41*4882a593Smuzhiyun #define CMD_802_11_SNMP_MIB                     0x0016
42*4882a593Smuzhiyun #define CMD_MAC_REG_MAP                         0x0017
43*4882a593Smuzhiyun #define CMD_BBP_REG_MAP                         0x0018
44*4882a593Smuzhiyun #define CMD_MAC_REG_ACCESS                      0x0019
45*4882a593Smuzhiyun #define CMD_BBP_REG_ACCESS                      0x001a
46*4882a593Smuzhiyun #define CMD_RF_REG_ACCESS                       0x001b
47*4882a593Smuzhiyun #define CMD_802_11_RADIO_CONTROL                0x001c
48*4882a593Smuzhiyun #define CMD_802_11_RF_CHANNEL                   0x001d
49*4882a593Smuzhiyun #define CMD_802_11_RF_TX_POWER                  0x001e
50*4882a593Smuzhiyun #define CMD_802_11_RSSI                         0x001f
51*4882a593Smuzhiyun #define CMD_802_11_RF_ANTENNA                   0x0020
52*4882a593Smuzhiyun #define CMD_802_11_PS_MODE                      0x0021
53*4882a593Smuzhiyun #define CMD_802_11_DATA_RATE                    0x0022
54*4882a593Smuzhiyun #define CMD_RF_REG_MAP                          0x0023
55*4882a593Smuzhiyun #define CMD_802_11_DEAUTHENTICATE               0x0024
56*4882a593Smuzhiyun #define CMD_802_11_REASSOCIATE                  0x0025
57*4882a593Smuzhiyun #define CMD_MAC_CONTROL                         0x0028
58*4882a593Smuzhiyun #define CMD_802_11_AD_HOC_START                 0x002b
59*4882a593Smuzhiyun #define CMD_802_11_AD_HOC_JOIN                  0x002c
60*4882a593Smuzhiyun #define CMD_802_11_QUERY_TKIP_REPLY_CNTRS       0x002e
61*4882a593Smuzhiyun #define CMD_802_11_ENABLE_RSN                   0x002f
62*4882a593Smuzhiyun #define CMD_802_11_SET_AFC                      0x003c
63*4882a593Smuzhiyun #define CMD_802_11_GET_AFC                      0x003d
64*4882a593Smuzhiyun #define CMD_802_11_DEEP_SLEEP                   0x003e
65*4882a593Smuzhiyun #define CMD_802_11_AD_HOC_STOP                  0x0040
66*4882a593Smuzhiyun #define CMD_802_11_HOST_SLEEP_CFG               0x0043
67*4882a593Smuzhiyun #define CMD_802_11_WAKEUP_CONFIRM               0x0044
68*4882a593Smuzhiyun #define CMD_802_11_HOST_SLEEP_ACTIVATE          0x0045
69*4882a593Smuzhiyun #define CMD_802_11_BEACON_STOP                  0x0049
70*4882a593Smuzhiyun #define CMD_802_11_MAC_ADDRESS                  0x004d
71*4882a593Smuzhiyun #define CMD_802_11_LED_GPIO_CTRL                0x004e
72*4882a593Smuzhiyun #define CMD_802_11_BAND_CONFIG                  0x0058
73*4882a593Smuzhiyun #define CMD_GSPI_BUS_CONFIG                     0x005a
74*4882a593Smuzhiyun #define CMD_802_11D_DOMAIN_INFO                 0x005b
75*4882a593Smuzhiyun #define CMD_802_11_KEY_MATERIAL                 0x005e
76*4882a593Smuzhiyun #define CMD_802_11_SLEEP_PARAMS                 0x0066
77*4882a593Smuzhiyun #define CMD_802_11_INACTIVITY_TIMEOUT           0x0067
78*4882a593Smuzhiyun #define CMD_802_11_SLEEP_PERIOD                 0x0068
79*4882a593Smuzhiyun #define CMD_802_11_TPC_CFG                      0x0072
80*4882a593Smuzhiyun #define CMD_802_11_PA_CFG                       0x0073
81*4882a593Smuzhiyun #define CMD_802_11_FW_WAKE_METHOD               0x0074
82*4882a593Smuzhiyun #define CMD_802_11_SUBSCRIBE_EVENT              0x0075
83*4882a593Smuzhiyun #define CMD_802_11_RATE_ADAPT_RATESET           0x0076
84*4882a593Smuzhiyun #define CMD_802_11_TX_RATE_QUERY                0x007f
85*4882a593Smuzhiyun #define CMD_GET_TSF                             0x0080
86*4882a593Smuzhiyun #define CMD_BT_ACCESS                           0x0087
87*4882a593Smuzhiyun #define CMD_FWT_ACCESS                          0x0095
88*4882a593Smuzhiyun #define CMD_802_11_MONITOR_MODE                 0x0098
89*4882a593Smuzhiyun #define CMD_MESH_ACCESS                         0x009b
90*4882a593Smuzhiyun #define CMD_MESH_CONFIG_OLD                     0x00a3
91*4882a593Smuzhiyun #define CMD_MESH_CONFIG                         0x00ac
92*4882a593Smuzhiyun #define CMD_SET_BOOT2_VER                       0x00a5
93*4882a593Smuzhiyun #define CMD_FUNC_INIT                           0x00a9
94*4882a593Smuzhiyun #define CMD_FUNC_SHUTDOWN                       0x00aa
95*4882a593Smuzhiyun #define CMD_802_11_BEACON_CTRL                  0x00b0
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /* For the IEEE Power Save */
98*4882a593Smuzhiyun #define PS_MODE_ACTION_ENTER_PS                 0x0030
99*4882a593Smuzhiyun #define PS_MODE_ACTION_EXIT_PS                  0x0031
100*4882a593Smuzhiyun #define PS_MODE_ACTION_SLEEP_CONFIRMED          0x0034
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #define CMD_ENABLE_RSN                          0x0001
103*4882a593Smuzhiyun #define CMD_DISABLE_RSN                         0x0000
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #define CMD_ACT_GET                             0x0000
106*4882a593Smuzhiyun #define CMD_ACT_SET                             0x0001
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /* Define action or option for CMD_802_11_SET_WEP */
109*4882a593Smuzhiyun #define CMD_ACT_ADD                             0x0002
110*4882a593Smuzhiyun #define CMD_ACT_REMOVE                          0x0004
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define CMD_TYPE_WEP_40_BIT                     0x01
113*4882a593Smuzhiyun #define CMD_TYPE_WEP_104_BIT                    0x02
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun #define CMD_NUM_OF_WEP_KEYS                     4
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #define CMD_WEP_KEY_INDEX_MASK                  0x3fff
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* Define action or option for CMD_802_11_SCAN */
120*4882a593Smuzhiyun #define CMD_BSS_TYPE_BSS                        0x0001
121*4882a593Smuzhiyun #define CMD_BSS_TYPE_IBSS                       0x0002
122*4882a593Smuzhiyun #define CMD_BSS_TYPE_ANY                        0x0003
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* Define action or option for CMD_802_11_SCAN */
125*4882a593Smuzhiyun #define CMD_SCAN_TYPE_ACTIVE                    0x0000
126*4882a593Smuzhiyun #define CMD_SCAN_TYPE_PASSIVE                   0x0001
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define CMD_SCAN_RADIO_TYPE_BG                  0
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define CMD_SCAN_PROBE_DELAY_TIME               0
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun /* Define action or option for CMD_MAC_CONTROL */
133*4882a593Smuzhiyun #define CMD_ACT_MAC_RX_ON                       0x0001
134*4882a593Smuzhiyun #define CMD_ACT_MAC_TX_ON                       0x0002
135*4882a593Smuzhiyun #define CMD_ACT_MAC_LOOPBACK_ON                 0x0004
136*4882a593Smuzhiyun #define CMD_ACT_MAC_WEP_ENABLE                  0x0008
137*4882a593Smuzhiyun #define CMD_ACT_MAC_INT_ENABLE                  0x0010
138*4882a593Smuzhiyun #define CMD_ACT_MAC_MULTICAST_ENABLE            0x0020
139*4882a593Smuzhiyun #define CMD_ACT_MAC_BROADCAST_ENABLE            0x0040
140*4882a593Smuzhiyun #define CMD_ACT_MAC_PROMISCUOUS_ENABLE          0x0080
141*4882a593Smuzhiyun #define CMD_ACT_MAC_ALL_MULTICAST_ENABLE        0x0100
142*4882a593Smuzhiyun #define CMD_ACT_MAC_STRICT_PROTECTION_ENABLE    0x0400
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun /* Event flags for CMD_802_11_SUBSCRIBE_EVENT */
145*4882a593Smuzhiyun #define CMD_SUBSCRIBE_RSSI_LOW                  0x0001
146*4882a593Smuzhiyun #define CMD_SUBSCRIBE_SNR_LOW                   0x0002
147*4882a593Smuzhiyun #define CMD_SUBSCRIBE_FAILCOUNT                 0x0004
148*4882a593Smuzhiyun #define CMD_SUBSCRIBE_BCNMISS                   0x0008
149*4882a593Smuzhiyun #define CMD_SUBSCRIBE_RSSI_HIGH                 0x0010
150*4882a593Smuzhiyun #define CMD_SUBSCRIBE_SNR_HIGH                  0x0020
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun #define RADIO_PREAMBLE_LONG                     0x00
153*4882a593Smuzhiyun #define RADIO_PREAMBLE_SHORT                    0x02
154*4882a593Smuzhiyun #define RADIO_PREAMBLE_AUTO                     0x04
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun /* Define action or option for CMD_802_11_RF_CHANNEL */
157*4882a593Smuzhiyun #define CMD_OPT_802_11_RF_CHANNEL_GET           0x00
158*4882a593Smuzhiyun #define CMD_OPT_802_11_RF_CHANNEL_SET           0x01
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /* Define action or option for CMD_802_11_DATA_RATE */
161*4882a593Smuzhiyun #define CMD_ACT_SET_TX_AUTO                     0x0000
162*4882a593Smuzhiyun #define CMD_ACT_SET_TX_FIX_RATE                 0x0001
163*4882a593Smuzhiyun #define CMD_ACT_GET_TX_RATE                     0x0002
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* Options for CMD_802_11_FW_WAKE_METHOD */
166*4882a593Smuzhiyun #define CMD_WAKE_METHOD_UNCHANGED               0x0000
167*4882a593Smuzhiyun #define CMD_WAKE_METHOD_COMMAND_INT             0x0001
168*4882a593Smuzhiyun #define CMD_WAKE_METHOD_GPIO                    0x0002
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /* Object IDs for CMD_802_11_SNMP_MIB */
171*4882a593Smuzhiyun #define SNMP_MIB_OID_BSS_TYPE                   0x0000
172*4882a593Smuzhiyun #define SNMP_MIB_OID_OP_RATE_SET                0x0001
173*4882a593Smuzhiyun #define SNMP_MIB_OID_BEACON_PERIOD              0x0002  /* Reserved on v9+ */
174*4882a593Smuzhiyun #define SNMP_MIB_OID_DTIM_PERIOD                0x0003  /* Reserved on v9+ */
175*4882a593Smuzhiyun #define SNMP_MIB_OID_ASSOC_TIMEOUT              0x0004  /* Reserved on v9+ */
176*4882a593Smuzhiyun #define SNMP_MIB_OID_RTS_THRESHOLD              0x0005
177*4882a593Smuzhiyun #define SNMP_MIB_OID_SHORT_RETRY_LIMIT          0x0006
178*4882a593Smuzhiyun #define SNMP_MIB_OID_LONG_RETRY_LIMIT           0x0007
179*4882a593Smuzhiyun #define SNMP_MIB_OID_FRAG_THRESHOLD             0x0008
180*4882a593Smuzhiyun #define SNMP_MIB_OID_11D_ENABLE                 0x0009
181*4882a593Smuzhiyun #define SNMP_MIB_OID_11H_ENABLE                 0x000A
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun /* Define action or option for CMD_BT_ACCESS */
184*4882a593Smuzhiyun enum cmd_bt_access_opts {
185*4882a593Smuzhiyun 	/* The bt commands start at 5 instead of 1 because the old dft commands
186*4882a593Smuzhiyun 	 * are mapped to 1-4.  These old commands are no longer maintained and
187*4882a593Smuzhiyun 	 * should not be called.
188*4882a593Smuzhiyun 	 */
189*4882a593Smuzhiyun 	CMD_ACT_BT_ACCESS_ADD = 5,
190*4882a593Smuzhiyun 	CMD_ACT_BT_ACCESS_DEL,
191*4882a593Smuzhiyun 	CMD_ACT_BT_ACCESS_LIST,
192*4882a593Smuzhiyun 	CMD_ACT_BT_ACCESS_RESET,
193*4882a593Smuzhiyun 	CMD_ACT_BT_ACCESS_SET_INVERT,
194*4882a593Smuzhiyun 	CMD_ACT_BT_ACCESS_GET_INVERT
195*4882a593Smuzhiyun };
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* Define action or option for CMD_FWT_ACCESS */
198*4882a593Smuzhiyun enum cmd_fwt_access_opts {
199*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_ADD = 1,
200*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_DEL,
201*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_LOOKUP,
202*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_LIST,
203*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_LIST_ROUTE,
204*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_LIST_NEIGHBOR,
205*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_RESET,
206*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_CLEANUP,
207*4882a593Smuzhiyun 	CMD_ACT_FWT_ACCESS_TIME,
208*4882a593Smuzhiyun };
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun /* Define action or option for CMD_802_11_HOST_SLEEP_CFG */
211*4882a593Smuzhiyun enum cmd_wol_cfg_opts {
212*4882a593Smuzhiyun 	CMD_ACT_ACTION_NONE = 0,
213*4882a593Smuzhiyun 	CMD_ACT_SET_WOL_RULE,
214*4882a593Smuzhiyun 	CMD_ACT_GET_WOL_RULE,
215*4882a593Smuzhiyun 	CMD_ACT_RESET_WOL_RULE,
216*4882a593Smuzhiyun };
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun /* Define action or option for CMD_MESH_ACCESS */
219*4882a593Smuzhiyun enum cmd_mesh_access_opts {
220*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_TTL = 1,
221*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_TTL,
222*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_STATS,
223*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_ANYCAST,
224*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_ANYCAST,
225*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_LINK_COSTS,
226*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_LINK_COSTS,
227*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_BCAST_RATE,
228*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_BCAST_RATE,
229*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_RREQ_DELAY,
230*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_RREQ_DELAY,
231*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_ROUTE_EXP,
232*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_ROUTE_EXP,
233*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_AUTOSTART_ENABLED,
234*4882a593Smuzhiyun 	CMD_ACT_MESH_GET_AUTOSTART_ENABLED,
235*4882a593Smuzhiyun 	CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT = 17,
236*4882a593Smuzhiyun };
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun /* Define actions and types for CMD_MESH_CONFIG */
239*4882a593Smuzhiyun enum cmd_mesh_config_actions {
240*4882a593Smuzhiyun 	CMD_ACT_MESH_CONFIG_STOP = 0,
241*4882a593Smuzhiyun 	CMD_ACT_MESH_CONFIG_START,
242*4882a593Smuzhiyun 	CMD_ACT_MESH_CONFIG_SET,
243*4882a593Smuzhiyun 	CMD_ACT_MESH_CONFIG_GET,
244*4882a593Smuzhiyun };
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun enum cmd_mesh_config_types {
247*4882a593Smuzhiyun 	CMD_TYPE_MESH_SET_BOOTFLAG = 1,
248*4882a593Smuzhiyun 	CMD_TYPE_MESH_SET_BOOTTIME,
249*4882a593Smuzhiyun 	CMD_TYPE_MESH_SET_DEF_CHANNEL,
250*4882a593Smuzhiyun 	CMD_TYPE_MESH_SET_MESH_IE,
251*4882a593Smuzhiyun 	CMD_TYPE_MESH_GET_DEFAULTS,
252*4882a593Smuzhiyun 	CMD_TYPE_MESH_GET_MESH_IE, /* GET_DEFAULTS is superset of GET_MESHIE */
253*4882a593Smuzhiyun };
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun /* Card Event definition */
256*4882a593Smuzhiyun #define MACREG_INT_CODE_TX_PPA_FREE		0
257*4882a593Smuzhiyun #define MACREG_INT_CODE_TX_DMA_DONE		1
258*4882a593Smuzhiyun #define MACREG_INT_CODE_LINK_LOST_W_SCAN	2
259*4882a593Smuzhiyun #define MACREG_INT_CODE_LINK_LOST_NO_SCAN	3
260*4882a593Smuzhiyun #define MACREG_INT_CODE_LINK_SENSED		4
261*4882a593Smuzhiyun #define MACREG_INT_CODE_CMD_FINISHED		5
262*4882a593Smuzhiyun #define MACREG_INT_CODE_MIB_CHANGED		6
263*4882a593Smuzhiyun #define MACREG_INT_CODE_INIT_DONE		7
264*4882a593Smuzhiyun #define MACREG_INT_CODE_DEAUTHENTICATED		8
265*4882a593Smuzhiyun #define MACREG_INT_CODE_DISASSOCIATED		9
266*4882a593Smuzhiyun #define MACREG_INT_CODE_PS_AWAKE		10
267*4882a593Smuzhiyun #define MACREG_INT_CODE_PS_SLEEP		11
268*4882a593Smuzhiyun #define MACREG_INT_CODE_MIC_ERR_MULTICAST	13
269*4882a593Smuzhiyun #define MACREG_INT_CODE_MIC_ERR_UNICAST		14
270*4882a593Smuzhiyun #define MACREG_INT_CODE_WM_AWAKE		15
271*4882a593Smuzhiyun #define MACREG_INT_CODE_DEEP_SLEEP_AWAKE	16
272*4882a593Smuzhiyun #define MACREG_INT_CODE_ADHOC_BCN_LOST		17
273*4882a593Smuzhiyun #define MACREG_INT_CODE_HOST_AWAKE		18
274*4882a593Smuzhiyun #define MACREG_INT_CODE_STOP_TX			19
275*4882a593Smuzhiyun #define MACREG_INT_CODE_START_TX		20
276*4882a593Smuzhiyun #define MACREG_INT_CODE_CHANNEL_SWITCH		21
277*4882a593Smuzhiyun #define MACREG_INT_CODE_MEASUREMENT_RDY		22
278*4882a593Smuzhiyun #define MACREG_INT_CODE_WMM_CHANGE		23
279*4882a593Smuzhiyun #define MACREG_INT_CODE_BG_SCAN_REPORT		24
280*4882a593Smuzhiyun #define MACREG_INT_CODE_RSSI_LOW		25
281*4882a593Smuzhiyun #define MACREG_INT_CODE_SNR_LOW			26
282*4882a593Smuzhiyun #define MACREG_INT_CODE_MAX_FAIL		27
283*4882a593Smuzhiyun #define MACREG_INT_CODE_RSSI_HIGH		28
284*4882a593Smuzhiyun #define MACREG_INT_CODE_SNR_HIGH		29
285*4882a593Smuzhiyun #define MACREG_INT_CODE_MESH_AUTO_STARTED	35
286*4882a593Smuzhiyun #define MACREG_INT_CODE_FIRMWARE_READY		48
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun /* 802.11-related definitions */
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /* TxPD descriptor */
292*4882a593Smuzhiyun struct txpd {
293*4882a593Smuzhiyun 	/* union to cope up with later FW revisions */
294*4882a593Smuzhiyun 	union {
295*4882a593Smuzhiyun 		/* Current Tx packet status */
296*4882a593Smuzhiyun 		__le32 tx_status;
297*4882a593Smuzhiyun 		struct {
298*4882a593Smuzhiyun 			/* BSS type: client, AP, etc. */
299*4882a593Smuzhiyun 			u8 bss_type;
300*4882a593Smuzhiyun 			/* BSS number */
301*4882a593Smuzhiyun 			u8 bss_num;
302*4882a593Smuzhiyun 			/* Reserved */
303*4882a593Smuzhiyun 			__le16 reserved;
304*4882a593Smuzhiyun 		} bss;
305*4882a593Smuzhiyun 	} u;
306*4882a593Smuzhiyun 	/* Tx control */
307*4882a593Smuzhiyun 	__le32 tx_control;
308*4882a593Smuzhiyun 	__le32 tx_packet_location;
309*4882a593Smuzhiyun 	/* Tx packet length */
310*4882a593Smuzhiyun 	__le16 tx_packet_length;
311*4882a593Smuzhiyun 	/* First 2 byte of destination MAC address */
312*4882a593Smuzhiyun 	u8 tx_dest_addr_high[2];
313*4882a593Smuzhiyun 	/* Last 4 byte of destination MAC address */
314*4882a593Smuzhiyun 	u8 tx_dest_addr_low[4];
315*4882a593Smuzhiyun 	/* Pkt Priority */
316*4882a593Smuzhiyun 	u8 priority;
317*4882a593Smuzhiyun 	/* Pkt Trasnit Power control */
318*4882a593Smuzhiyun 	u8 powermgmt;
319*4882a593Smuzhiyun 	/* Amount of time the packet has been queued (units = 2ms) */
320*4882a593Smuzhiyun 	u8 pktdelay_2ms;
321*4882a593Smuzhiyun 	/* reserved */
322*4882a593Smuzhiyun 	u8 reserved1;
323*4882a593Smuzhiyun } __packed;
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun /* RxPD Descriptor */
326*4882a593Smuzhiyun struct rxpd {
327*4882a593Smuzhiyun 	/* union to cope up with later FW revisions */
328*4882a593Smuzhiyun 	union {
329*4882a593Smuzhiyun 		/* Current Rx packet status */
330*4882a593Smuzhiyun 		__le16 status;
331*4882a593Smuzhiyun 		struct {
332*4882a593Smuzhiyun 			/* BSS type: client, AP, etc. */
333*4882a593Smuzhiyun 			u8 bss_type;
334*4882a593Smuzhiyun 			/* BSS number */
335*4882a593Smuzhiyun 			u8 bss_num;
336*4882a593Smuzhiyun 		} __packed bss;
337*4882a593Smuzhiyun 	} __packed u;
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun 	/* SNR */
340*4882a593Smuzhiyun 	u8 snr;
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun 	/* Tx control */
343*4882a593Smuzhiyun 	u8 rx_control;
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun 	/* Pkt length */
346*4882a593Smuzhiyun 	__le16 pkt_len;
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun 	/* Noise Floor */
349*4882a593Smuzhiyun 	u8 nf;
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun 	/* Rx Packet Rate */
352*4882a593Smuzhiyun 	u8 rx_rate;
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun 	/* Pkt addr */
355*4882a593Smuzhiyun 	__le32 pkt_ptr;
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun 	/* Next Rx RxPD addr */
358*4882a593Smuzhiyun 	__le32 next_rxpd_ptr;
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun 	/* Pkt Priority */
361*4882a593Smuzhiyun 	u8 priority;
362*4882a593Smuzhiyun 	u8 reserved[3];
363*4882a593Smuzhiyun } __packed;
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun struct cmd_header {
366*4882a593Smuzhiyun 	__le16 command;
367*4882a593Smuzhiyun 	__le16 size;
368*4882a593Smuzhiyun 	__le16 seqnum;
369*4882a593Smuzhiyun 	__le16 result;
370*4882a593Smuzhiyun } __packed;
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun /* Generic structure to hold all key types. */
373*4882a593Smuzhiyun struct enc_key {
374*4882a593Smuzhiyun 	u16 len;
375*4882a593Smuzhiyun 	u16 flags;  /* KEY_INFO_* from defs.h */
376*4882a593Smuzhiyun 	u16 type; /* KEY_TYPE_* from defs.h */
377*4882a593Smuzhiyun 	u8 key[32];
378*4882a593Smuzhiyun };
379*4882a593Smuzhiyun 
380*4882a593Smuzhiyun /* lbs_offset_value */
381*4882a593Smuzhiyun struct lbs_offset_value {
382*4882a593Smuzhiyun 	u32 offset;
383*4882a593Smuzhiyun 	u32 value;
384*4882a593Smuzhiyun } __packed;
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun #define MAX_11D_TRIPLETS	83
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun struct mrvl_ie_domain_param_set {
389*4882a593Smuzhiyun 	struct mrvl_ie_header header;
390*4882a593Smuzhiyun 
391*4882a593Smuzhiyun 	u8 country_code[IEEE80211_COUNTRY_STRING_LEN];
392*4882a593Smuzhiyun 	struct ieee80211_country_ie_triplet triplet[MAX_11D_TRIPLETS];
393*4882a593Smuzhiyun } __packed;
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun struct cmd_ds_802_11d_domain_info {
396*4882a593Smuzhiyun 	struct cmd_header hdr;
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun 	__le16 action;
399*4882a593Smuzhiyun 	struct mrvl_ie_domain_param_set domain;
400*4882a593Smuzhiyun } __packed;
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun /*
403*4882a593Smuzhiyun  * Define data structure for CMD_GET_HW_SPEC
404*4882a593Smuzhiyun  * This structure defines the response for the GET_HW_SPEC command
405*4882a593Smuzhiyun  */
406*4882a593Smuzhiyun struct cmd_ds_get_hw_spec {
407*4882a593Smuzhiyun 	struct cmd_header hdr;
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun 	/* HW Interface version number */
410*4882a593Smuzhiyun 	__le16 hwifversion;
411*4882a593Smuzhiyun 	/* HW version number */
412*4882a593Smuzhiyun 	__le16 version;
413*4882a593Smuzhiyun 	/* Max number of TxPD FW can handle */
414*4882a593Smuzhiyun 	__le16 nr_txpd;
415*4882a593Smuzhiyun 	/* Max no of Multicast address */
416*4882a593Smuzhiyun 	__le16 nr_mcast_adr;
417*4882a593Smuzhiyun 	/* MAC address */
418*4882a593Smuzhiyun 	u8 permanentaddr[6];
419*4882a593Smuzhiyun 
420*4882a593Smuzhiyun 	/* region Code */
421*4882a593Smuzhiyun 	__le16 regioncode;
422*4882a593Smuzhiyun 
423*4882a593Smuzhiyun 	/* Number of antenna used */
424*4882a593Smuzhiyun 	__le16 nr_antenna;
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun 	/* FW release number, example 0x01030304 = 2.3.4p1 */
427*4882a593Smuzhiyun 	__le32 fwrelease;
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun 	/* Base Address of TxPD queue */
430*4882a593Smuzhiyun 	__le32 wcb_base;
431*4882a593Smuzhiyun 	/* Read Pointer of RxPd queue */
432*4882a593Smuzhiyun 	__le32 rxpd_rdptr;
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun 	/* Write Pointer of RxPd queue */
435*4882a593Smuzhiyun 	__le32 rxpd_wrptr;
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun 	/*FW/HW capability */
438*4882a593Smuzhiyun 	__le32 fwcapinfo;
439*4882a593Smuzhiyun } __packed;
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun struct cmd_ds_802_11_subscribe_event {
442*4882a593Smuzhiyun 	struct cmd_header hdr;
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun 	__le16 action;
445*4882a593Smuzhiyun 	__le16 events;
446*4882a593Smuzhiyun 
447*4882a593Smuzhiyun 	/* A TLV to the CMD_802_11_SUBSCRIBE_EVENT command can contain a
448*4882a593Smuzhiyun 	 * number of TLVs. From the v5.1 manual, those TLVs would add up to
449*4882a593Smuzhiyun 	 * 40 bytes. However, future firmware might add additional TLVs, so I
450*4882a593Smuzhiyun 	 * bump this up a bit.
451*4882a593Smuzhiyun 	 */
452*4882a593Smuzhiyun 	uint8_t tlv[128];
453*4882a593Smuzhiyun } __packed;
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun /*
456*4882a593Smuzhiyun  * This scan handle Country Information IE(802.11d compliant)
457*4882a593Smuzhiyun  * Define data structure for CMD_802_11_SCAN
458*4882a593Smuzhiyun  */
459*4882a593Smuzhiyun struct cmd_ds_802_11_scan {
460*4882a593Smuzhiyun 	struct cmd_header hdr;
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun 	uint8_t bsstype;
463*4882a593Smuzhiyun 	uint8_t bssid[ETH_ALEN];
464*4882a593Smuzhiyun 	uint8_t tlvbuffer[];
465*4882a593Smuzhiyun } __packed;
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun struct cmd_ds_802_11_scan_rsp {
468*4882a593Smuzhiyun 	struct cmd_header hdr;
469*4882a593Smuzhiyun 
470*4882a593Smuzhiyun 	__le16 bssdescriptsize;
471*4882a593Smuzhiyun 	uint8_t nr_sets;
472*4882a593Smuzhiyun 	uint8_t bssdesc_and_tlvbuffer[];
473*4882a593Smuzhiyun } __packed;
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun struct cmd_ds_802_11_get_log {
476*4882a593Smuzhiyun 	struct cmd_header hdr;
477*4882a593Smuzhiyun 
478*4882a593Smuzhiyun 	__le32 mcasttxframe;
479*4882a593Smuzhiyun 	__le32 failed;
480*4882a593Smuzhiyun 	__le32 retry;
481*4882a593Smuzhiyun 	__le32 multiretry;
482*4882a593Smuzhiyun 	__le32 framedup;
483*4882a593Smuzhiyun 	__le32 rtssuccess;
484*4882a593Smuzhiyun 	__le32 rtsfailure;
485*4882a593Smuzhiyun 	__le32 ackfailure;
486*4882a593Smuzhiyun 	__le32 rxfrag;
487*4882a593Smuzhiyun 	__le32 mcastrxframe;
488*4882a593Smuzhiyun 	__le32 fcserror;
489*4882a593Smuzhiyun 	__le32 txframe;
490*4882a593Smuzhiyun 	__le32 wepundecryptable;
491*4882a593Smuzhiyun } __packed;
492*4882a593Smuzhiyun 
493*4882a593Smuzhiyun struct cmd_ds_mac_control {
494*4882a593Smuzhiyun 	struct cmd_header hdr;
495*4882a593Smuzhiyun 	__le16 action;
496*4882a593Smuzhiyun 	u16 reserved;
497*4882a593Smuzhiyun } __packed;
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun struct cmd_ds_mac_multicast_adr {
500*4882a593Smuzhiyun 	struct cmd_header hdr;
501*4882a593Smuzhiyun 	__le16 action;
502*4882a593Smuzhiyun 	__le16 nr_of_adrs;
503*4882a593Smuzhiyun 	u8 maclist[ETH_ALEN * MRVDRV_MAX_MULTICAST_LIST_SIZE];
504*4882a593Smuzhiyun } __packed;
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun struct cmd_ds_802_11_authenticate {
507*4882a593Smuzhiyun 	struct cmd_header hdr;
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun 	u8 bssid[ETH_ALEN];
510*4882a593Smuzhiyun 	u8 authtype;
511*4882a593Smuzhiyun 	u8 reserved[10];
512*4882a593Smuzhiyun } __packed;
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun struct cmd_ds_802_11_deauthenticate {
515*4882a593Smuzhiyun 	struct cmd_header hdr;
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun 	u8 macaddr[ETH_ALEN];
518*4882a593Smuzhiyun 	__le16 reasoncode;
519*4882a593Smuzhiyun } __packed;
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun struct cmd_ds_802_11_associate {
522*4882a593Smuzhiyun 	struct cmd_header hdr;
523*4882a593Smuzhiyun 
524*4882a593Smuzhiyun 	u8 bssid[6];
525*4882a593Smuzhiyun 	__le16 capability;
526*4882a593Smuzhiyun 	__le16 listeninterval;
527*4882a593Smuzhiyun 	__le16 bcnperiod;
528*4882a593Smuzhiyun 	u8 dtimperiod;
529*4882a593Smuzhiyun 	u8 iebuf[512];    /* Enough for required and most optional IEs */
530*4882a593Smuzhiyun } __packed;
531*4882a593Smuzhiyun 
532*4882a593Smuzhiyun struct cmd_ds_802_11_associate_response {
533*4882a593Smuzhiyun 	struct cmd_header hdr;
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun 	__le16 capability;
536*4882a593Smuzhiyun 	__le16 statuscode;
537*4882a593Smuzhiyun 	__le16 aid;
538*4882a593Smuzhiyun 	u8 iebuf[512];
539*4882a593Smuzhiyun } __packed;
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun struct cmd_ds_802_11_set_wep {
542*4882a593Smuzhiyun 	struct cmd_header hdr;
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun 	/* ACT_ADD, ACT_REMOVE or ACT_ENABLE */
545*4882a593Smuzhiyun 	__le16 action;
546*4882a593Smuzhiyun 
547*4882a593Smuzhiyun 	/* key Index selected for Tx */
548*4882a593Smuzhiyun 	__le16 keyindex;
549*4882a593Smuzhiyun 
550*4882a593Smuzhiyun 	/* 40, 128bit or TXWEP */
551*4882a593Smuzhiyun 	uint8_t keytype[4];
552*4882a593Smuzhiyun 	uint8_t keymaterial[4][16];
553*4882a593Smuzhiyun } __packed;
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun struct cmd_ds_802_11_snmp_mib {
556*4882a593Smuzhiyun 	struct cmd_header hdr;
557*4882a593Smuzhiyun 
558*4882a593Smuzhiyun 	__le16 action;
559*4882a593Smuzhiyun 	__le16 oid;
560*4882a593Smuzhiyun 	__le16 bufsize;
561*4882a593Smuzhiyun 	u8 value[128];
562*4882a593Smuzhiyun } __packed;
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun struct cmd_ds_reg_access {
565*4882a593Smuzhiyun 	struct cmd_header hdr;
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun 	__le16 action;
568*4882a593Smuzhiyun 	__le16 offset;
569*4882a593Smuzhiyun 	union {
570*4882a593Smuzhiyun 		u8 bbp_rf;  /* for BBP and RF registers */
571*4882a593Smuzhiyun 		__le32 mac; /* for MAC registers */
572*4882a593Smuzhiyun 	} value;
573*4882a593Smuzhiyun } __packed;
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun struct cmd_ds_802_11_radio_control {
576*4882a593Smuzhiyun 	struct cmd_header hdr;
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun 	__le16 action;
579*4882a593Smuzhiyun 	__le16 control;
580*4882a593Smuzhiyun } __packed;
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun struct cmd_ds_802_11_beacon_control {
583*4882a593Smuzhiyun 	struct cmd_header hdr;
584*4882a593Smuzhiyun 
585*4882a593Smuzhiyun 	__le16 action;
586*4882a593Smuzhiyun 	__le16 beacon_enable;
587*4882a593Smuzhiyun 	__le16 beacon_period;
588*4882a593Smuzhiyun } __packed;
589*4882a593Smuzhiyun 
590*4882a593Smuzhiyun struct cmd_ds_802_11_sleep_params {
591*4882a593Smuzhiyun 	struct cmd_header hdr;
592*4882a593Smuzhiyun 
593*4882a593Smuzhiyun 	/* ACT_GET/ACT_SET */
594*4882a593Smuzhiyun 	__le16 action;
595*4882a593Smuzhiyun 
596*4882a593Smuzhiyun 	/* Sleep clock error in ppm */
597*4882a593Smuzhiyun 	__le16 error;
598*4882a593Smuzhiyun 
599*4882a593Smuzhiyun 	/* Wakeup offset in usec */
600*4882a593Smuzhiyun 	__le16 offset;
601*4882a593Smuzhiyun 
602*4882a593Smuzhiyun 	/* Clock stabilization time in usec */
603*4882a593Smuzhiyun 	__le16 stabletime;
604*4882a593Smuzhiyun 
605*4882a593Smuzhiyun 	/* control periodic calibration */
606*4882a593Smuzhiyun 	uint8_t calcontrol;
607*4882a593Smuzhiyun 
608*4882a593Smuzhiyun 	/* control the use of external sleep clock */
609*4882a593Smuzhiyun 	uint8_t externalsleepclk;
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun 	/* reserved field, should be set to zero */
612*4882a593Smuzhiyun 	__le16 reserved;
613*4882a593Smuzhiyun } __packed;
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun struct cmd_ds_802_11_rf_channel {
616*4882a593Smuzhiyun 	struct cmd_header hdr;
617*4882a593Smuzhiyun 
618*4882a593Smuzhiyun 	__le16 action;
619*4882a593Smuzhiyun 	__le16 channel;
620*4882a593Smuzhiyun 	__le16 rftype;      /* unused */
621*4882a593Smuzhiyun 	__le16 reserved;    /* unused */
622*4882a593Smuzhiyun 	u8 channellist[32]; /* unused */
623*4882a593Smuzhiyun } __packed;
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun struct cmd_ds_802_11_rssi {
626*4882a593Smuzhiyun 	struct cmd_header hdr;
627*4882a593Smuzhiyun 
628*4882a593Smuzhiyun 	/*
629*4882a593Smuzhiyun 	 * request:  number of beacons (N) to average the SNR and NF over
630*4882a593Smuzhiyun 	 * response: SNR of most recent beacon
631*4882a593Smuzhiyun 	 */
632*4882a593Smuzhiyun 	__le16 n_or_snr;
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun 	/*
635*4882a593Smuzhiyun 	 * The following fields are only set in the response.
636*4882a593Smuzhiyun 	 * In the request these are reserved and should be set to 0.
637*4882a593Smuzhiyun 	 */
638*4882a593Smuzhiyun 	__le16 nf;       /* most recent beacon noise floor */
639*4882a593Smuzhiyun 	__le16 avg_snr;  /* average SNR weighted by N from request */
640*4882a593Smuzhiyun 	__le16 avg_nf;   /* average noise floor weighted by N from request */
641*4882a593Smuzhiyun } __packed;
642*4882a593Smuzhiyun 
643*4882a593Smuzhiyun struct cmd_ds_802_11_mac_address {
644*4882a593Smuzhiyun 	struct cmd_header hdr;
645*4882a593Smuzhiyun 
646*4882a593Smuzhiyun 	__le16 action;
647*4882a593Smuzhiyun 	u8 macadd[ETH_ALEN];
648*4882a593Smuzhiyun } __packed;
649*4882a593Smuzhiyun 
650*4882a593Smuzhiyun struct cmd_ds_802_11_rf_tx_power {
651*4882a593Smuzhiyun 	struct cmd_header hdr;
652*4882a593Smuzhiyun 
653*4882a593Smuzhiyun 	__le16 action;
654*4882a593Smuzhiyun 	__le16 curlevel;
655*4882a593Smuzhiyun 	s8 maxlevel;
656*4882a593Smuzhiyun 	s8 minlevel;
657*4882a593Smuzhiyun } __packed;
658*4882a593Smuzhiyun 
659*4882a593Smuzhiyun /* MONITOR_MODE only exists in OLPC v5 firmware */
660*4882a593Smuzhiyun struct cmd_ds_802_11_monitor_mode {
661*4882a593Smuzhiyun 	struct cmd_header hdr;
662*4882a593Smuzhiyun 
663*4882a593Smuzhiyun 	__le16 action;
664*4882a593Smuzhiyun 	__le16 mode;
665*4882a593Smuzhiyun } __packed;
666*4882a593Smuzhiyun 
667*4882a593Smuzhiyun struct cmd_ds_set_boot2_ver {
668*4882a593Smuzhiyun 	struct cmd_header hdr;
669*4882a593Smuzhiyun 
670*4882a593Smuzhiyun 	__le16 action;
671*4882a593Smuzhiyun 	__le16 version;
672*4882a593Smuzhiyun } __packed;
673*4882a593Smuzhiyun 
674*4882a593Smuzhiyun struct cmd_ds_802_11_fw_wake_method {
675*4882a593Smuzhiyun 	struct cmd_header hdr;
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun 	__le16 action;
678*4882a593Smuzhiyun 	__le16 method;
679*4882a593Smuzhiyun } __packed;
680*4882a593Smuzhiyun 
681*4882a593Smuzhiyun struct cmd_ds_802_11_ps_mode {
682*4882a593Smuzhiyun 	struct cmd_header hdr;
683*4882a593Smuzhiyun 
684*4882a593Smuzhiyun 	__le16 action;
685*4882a593Smuzhiyun 
686*4882a593Smuzhiyun 	/*
687*4882a593Smuzhiyun 	 * Interval for keepalive in PS mode:
688*4882a593Smuzhiyun 	 * 0x0000 = don't change
689*4882a593Smuzhiyun 	 * 0x001E = firmware default
690*4882a593Smuzhiyun 	 * 0xFFFF = disable
691*4882a593Smuzhiyun 	 */
692*4882a593Smuzhiyun 	__le16 nullpktinterval;
693*4882a593Smuzhiyun 
694*4882a593Smuzhiyun 	/*
695*4882a593Smuzhiyun 	 * Number of DTIM intervals to wake up for:
696*4882a593Smuzhiyun 	 * 0 = don't change
697*4882a593Smuzhiyun 	 * 1 = firmware default
698*4882a593Smuzhiyun 	 * 5 = max
699*4882a593Smuzhiyun 	 */
700*4882a593Smuzhiyun 	__le16 multipledtim;
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun 	__le16 reserved;
703*4882a593Smuzhiyun 	__le16 locallisteninterval;
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun 	/*
706*4882a593Smuzhiyun 	 * AdHoc awake period (FW v9+ only):
707*4882a593Smuzhiyun 	 * 0 = don't change
708*4882a593Smuzhiyun 	 * 1 = always awake (IEEE standard behavior)
709*4882a593Smuzhiyun 	 * 2 - 31 = sleep for (n - 1) periods and awake for 1 period
710*4882a593Smuzhiyun 	 * 32 - 254 = invalid
711*4882a593Smuzhiyun 	 * 255 = sleep at each ATIM
712*4882a593Smuzhiyun 	 */
713*4882a593Smuzhiyun 	__le16 adhoc_awake_period;
714*4882a593Smuzhiyun } __packed;
715*4882a593Smuzhiyun 
716*4882a593Smuzhiyun struct cmd_confirm_sleep {
717*4882a593Smuzhiyun 	struct cmd_header hdr;
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun 	__le16 action;
720*4882a593Smuzhiyun 	__le16 nullpktinterval;
721*4882a593Smuzhiyun 	__le16 multipledtim;
722*4882a593Smuzhiyun 	__le16 reserved;
723*4882a593Smuzhiyun 	__le16 locallisteninterval;
724*4882a593Smuzhiyun } __packed;
725*4882a593Smuzhiyun 
726*4882a593Smuzhiyun struct cmd_ds_802_11_data_rate {
727*4882a593Smuzhiyun 	struct cmd_header hdr;
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun 	__le16 action;
730*4882a593Smuzhiyun 	__le16 reserved;
731*4882a593Smuzhiyun 	u8 rates[MAX_RATES];
732*4882a593Smuzhiyun } __packed;
733*4882a593Smuzhiyun 
734*4882a593Smuzhiyun struct cmd_ds_802_11_rate_adapt_rateset {
735*4882a593Smuzhiyun 	struct cmd_header hdr;
736*4882a593Smuzhiyun 	__le16 action;
737*4882a593Smuzhiyun 	__le16 enablehwauto;
738*4882a593Smuzhiyun 	__le16 bitmap;
739*4882a593Smuzhiyun } __packed;
740*4882a593Smuzhiyun 
741*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_start {
742*4882a593Smuzhiyun 	struct cmd_header hdr;
743*4882a593Smuzhiyun 
744*4882a593Smuzhiyun 	u8 ssid[IEEE80211_MAX_SSID_LEN];
745*4882a593Smuzhiyun 	u8 bsstype;
746*4882a593Smuzhiyun 	__le16 beaconperiod;
747*4882a593Smuzhiyun 	u8 dtimperiod;   /* Reserved on v9 and later */
748*4882a593Smuzhiyun 	struct ieee_ie_ibss_param_set ibss;
749*4882a593Smuzhiyun 	u8 reserved1[4];
750*4882a593Smuzhiyun 	struct ieee_ie_ds_param_set ds;
751*4882a593Smuzhiyun 	u8 reserved2[4];
752*4882a593Smuzhiyun 	__le16 probedelay;  /* Reserved on v9 and later */
753*4882a593Smuzhiyun 	__le16 capability;
754*4882a593Smuzhiyun 	u8 rates[MAX_RATES];
755*4882a593Smuzhiyun 	u8 tlv_memory_size_pad[100];
756*4882a593Smuzhiyun } __packed;
757*4882a593Smuzhiyun 
758*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_result {
759*4882a593Smuzhiyun 	struct cmd_header hdr;
760*4882a593Smuzhiyun 
761*4882a593Smuzhiyun 	u8 pad[3];
762*4882a593Smuzhiyun 	u8 bssid[ETH_ALEN];
763*4882a593Smuzhiyun } __packed;
764*4882a593Smuzhiyun 
765*4882a593Smuzhiyun struct adhoc_bssdesc {
766*4882a593Smuzhiyun 	u8 bssid[ETH_ALEN];
767*4882a593Smuzhiyun 	u8 ssid[IEEE80211_MAX_SSID_LEN];
768*4882a593Smuzhiyun 	u8 type;
769*4882a593Smuzhiyun 	__le16 beaconperiod;
770*4882a593Smuzhiyun 	u8 dtimperiod;
771*4882a593Smuzhiyun 	__le64 timestamp;
772*4882a593Smuzhiyun 	__le64 localtime;
773*4882a593Smuzhiyun 	struct ieee_ie_ds_param_set ds;
774*4882a593Smuzhiyun 	u8 reserved1[4];
775*4882a593Smuzhiyun 	struct ieee_ie_ibss_param_set ibss;
776*4882a593Smuzhiyun 	u8 reserved2[4];
777*4882a593Smuzhiyun 	__le16 capability;
778*4882a593Smuzhiyun 	u8 rates[MAX_RATES];
779*4882a593Smuzhiyun 
780*4882a593Smuzhiyun 	/*
781*4882a593Smuzhiyun 	 * DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used below in the
782*4882a593Smuzhiyun 	 * Adhoc join command and will cause a binary layout mismatch with
783*4882a593Smuzhiyun 	 * the firmware
784*4882a593Smuzhiyun 	 */
785*4882a593Smuzhiyun } __packed;
786*4882a593Smuzhiyun 
787*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_join {
788*4882a593Smuzhiyun 	struct cmd_header hdr;
789*4882a593Smuzhiyun 
790*4882a593Smuzhiyun 	struct adhoc_bssdesc bss;
791*4882a593Smuzhiyun 	__le16 failtimeout;   /* Reserved on v9 and later */
792*4882a593Smuzhiyun 	__le16 probedelay;    /* Reserved on v9 and later */
793*4882a593Smuzhiyun } __packed;
794*4882a593Smuzhiyun 
795*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_stop {
796*4882a593Smuzhiyun 	struct cmd_header hdr;
797*4882a593Smuzhiyun } __packed;
798*4882a593Smuzhiyun 
799*4882a593Smuzhiyun struct cmd_ds_802_11_enable_rsn {
800*4882a593Smuzhiyun 	struct cmd_header hdr;
801*4882a593Smuzhiyun 
802*4882a593Smuzhiyun 	__le16 action;
803*4882a593Smuzhiyun 	__le16 enable;
804*4882a593Smuzhiyun } __packed;
805*4882a593Smuzhiyun 
806*4882a593Smuzhiyun struct MrvlIEtype_keyParamSet {
807*4882a593Smuzhiyun 	/* type ID */
808*4882a593Smuzhiyun 	__le16 type;
809*4882a593Smuzhiyun 
810*4882a593Smuzhiyun 	/* length of Payload */
811*4882a593Smuzhiyun 	__le16 length;
812*4882a593Smuzhiyun 
813*4882a593Smuzhiyun 	/* type of key: WEP=0, TKIP=1, AES=2 */
814*4882a593Smuzhiyun 	__le16 keytypeid;
815*4882a593Smuzhiyun 
816*4882a593Smuzhiyun 	/* key control Info specific to a keytypeid */
817*4882a593Smuzhiyun 	__le16 keyinfo;
818*4882a593Smuzhiyun 
819*4882a593Smuzhiyun 	/* length of key */
820*4882a593Smuzhiyun 	__le16 keylen;
821*4882a593Smuzhiyun 
822*4882a593Smuzhiyun 	/* key material of size keylen */
823*4882a593Smuzhiyun 	u8 key[32];
824*4882a593Smuzhiyun } __packed;
825*4882a593Smuzhiyun 
826*4882a593Smuzhiyun #define MAX_WOL_RULES 		16
827*4882a593Smuzhiyun 
828*4882a593Smuzhiyun struct host_wol_rule {
829*4882a593Smuzhiyun 	uint8_t rule_no;
830*4882a593Smuzhiyun 	uint8_t rule_ops;
831*4882a593Smuzhiyun 	__le16 sig_offset;
832*4882a593Smuzhiyun 	__le16 sig_length;
833*4882a593Smuzhiyun 	__le16 reserve;
834*4882a593Smuzhiyun 	__be32 sig_mask;
835*4882a593Smuzhiyun 	__be32 signature;
836*4882a593Smuzhiyun } __packed;
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun struct wol_config {
839*4882a593Smuzhiyun 	uint8_t action;
840*4882a593Smuzhiyun 	uint8_t pattern;
841*4882a593Smuzhiyun 	uint8_t no_rules_in_cmd;
842*4882a593Smuzhiyun 	uint8_t result;
843*4882a593Smuzhiyun 	struct host_wol_rule rule[MAX_WOL_RULES];
844*4882a593Smuzhiyun } __packed;
845*4882a593Smuzhiyun 
846*4882a593Smuzhiyun struct cmd_ds_host_sleep {
847*4882a593Smuzhiyun 	struct cmd_header hdr;
848*4882a593Smuzhiyun 	__le32 criteria;
849*4882a593Smuzhiyun 	uint8_t gpio;
850*4882a593Smuzhiyun 	uint16_t gap;
851*4882a593Smuzhiyun 	struct wol_config wol_conf;
852*4882a593Smuzhiyun } __packed;
853*4882a593Smuzhiyun 
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun 
856*4882a593Smuzhiyun struct cmd_ds_802_11_key_material {
857*4882a593Smuzhiyun 	struct cmd_header hdr;
858*4882a593Smuzhiyun 
859*4882a593Smuzhiyun 	__le16 action;
860*4882a593Smuzhiyun 	struct MrvlIEtype_keyParamSet keyParamSet[2];
861*4882a593Smuzhiyun } __packed;
862*4882a593Smuzhiyun 
863*4882a593Smuzhiyun struct cmd_ds_802_11_eeprom_access {
864*4882a593Smuzhiyun 	struct cmd_header hdr;
865*4882a593Smuzhiyun 	__le16 action;
866*4882a593Smuzhiyun 	__le16 offset;
867*4882a593Smuzhiyun 	__le16 len;
868*4882a593Smuzhiyun 	/* firmware says it returns a maximum of 20 bytes */
869*4882a593Smuzhiyun #define LBS_EEPROM_READ_LEN 20
870*4882a593Smuzhiyun 	u8 value[LBS_EEPROM_READ_LEN];
871*4882a593Smuzhiyun } __packed;
872*4882a593Smuzhiyun 
873*4882a593Smuzhiyun struct cmd_ds_802_11_tpc_cfg {
874*4882a593Smuzhiyun 	struct cmd_header hdr;
875*4882a593Smuzhiyun 
876*4882a593Smuzhiyun 	__le16 action;
877*4882a593Smuzhiyun 	uint8_t enable;
878*4882a593Smuzhiyun 	int8_t P0;
879*4882a593Smuzhiyun 	int8_t P1;
880*4882a593Smuzhiyun 	int8_t P2;
881*4882a593Smuzhiyun 	uint8_t usesnr;
882*4882a593Smuzhiyun } __packed;
883*4882a593Smuzhiyun 
884*4882a593Smuzhiyun 
885*4882a593Smuzhiyun struct cmd_ds_802_11_pa_cfg {
886*4882a593Smuzhiyun 	struct cmd_header hdr;
887*4882a593Smuzhiyun 
888*4882a593Smuzhiyun 	__le16 action;
889*4882a593Smuzhiyun 	uint8_t enable;
890*4882a593Smuzhiyun 	int8_t P0;
891*4882a593Smuzhiyun 	int8_t P1;
892*4882a593Smuzhiyun 	int8_t P2;
893*4882a593Smuzhiyun } __packed;
894*4882a593Smuzhiyun 
895*4882a593Smuzhiyun 
896*4882a593Smuzhiyun struct cmd_ds_802_11_led_ctrl {
897*4882a593Smuzhiyun 	struct cmd_header hdr;
898*4882a593Smuzhiyun 
899*4882a593Smuzhiyun 	__le16 action;
900*4882a593Smuzhiyun 	__le16 numled;
901*4882a593Smuzhiyun 	u8 data[256];
902*4882a593Smuzhiyun } __packed;
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun /* Automatic Frequency Control */
905*4882a593Smuzhiyun struct cmd_ds_802_11_afc {
906*4882a593Smuzhiyun 	struct cmd_header hdr;
907*4882a593Smuzhiyun 
908*4882a593Smuzhiyun 	__le16 afc_auto;
909*4882a593Smuzhiyun 	union {
910*4882a593Smuzhiyun 		struct {
911*4882a593Smuzhiyun 			__le16 threshold;
912*4882a593Smuzhiyun 			__le16 period;
913*4882a593Smuzhiyun 		};
914*4882a593Smuzhiyun 		struct {
915*4882a593Smuzhiyun 			__le16 timing_offset; /* signed */
916*4882a593Smuzhiyun 			__le16 carrier_offset; /* signed */
917*4882a593Smuzhiyun 		};
918*4882a593Smuzhiyun 	};
919*4882a593Smuzhiyun } __packed;
920*4882a593Smuzhiyun 
921*4882a593Smuzhiyun struct cmd_tx_rate_query {
922*4882a593Smuzhiyun 	__le16 txrate;
923*4882a593Smuzhiyun } __packed;
924*4882a593Smuzhiyun 
925*4882a593Smuzhiyun struct cmd_ds_get_tsf {
926*4882a593Smuzhiyun 	__le64 tsfvalue;
927*4882a593Smuzhiyun } __packed;
928*4882a593Smuzhiyun 
929*4882a593Smuzhiyun struct cmd_ds_bt_access {
930*4882a593Smuzhiyun 	struct cmd_header hdr;
931*4882a593Smuzhiyun 
932*4882a593Smuzhiyun 	__le16 action;
933*4882a593Smuzhiyun 	__le32 id;
934*4882a593Smuzhiyun 	u8 addr1[ETH_ALEN];
935*4882a593Smuzhiyun 	u8 addr2[ETH_ALEN];
936*4882a593Smuzhiyun } __packed;
937*4882a593Smuzhiyun 
938*4882a593Smuzhiyun struct cmd_ds_fwt_access {
939*4882a593Smuzhiyun 	struct cmd_header hdr;
940*4882a593Smuzhiyun 
941*4882a593Smuzhiyun 	__le16 action;
942*4882a593Smuzhiyun 	__le32 id;
943*4882a593Smuzhiyun 	u8 valid;
944*4882a593Smuzhiyun 	u8 da[ETH_ALEN];
945*4882a593Smuzhiyun 	u8 dir;
946*4882a593Smuzhiyun 	u8 ra[ETH_ALEN];
947*4882a593Smuzhiyun 	__le32 ssn;
948*4882a593Smuzhiyun 	__le32 dsn;
949*4882a593Smuzhiyun 	__le32 metric;
950*4882a593Smuzhiyun 	u8 rate;
951*4882a593Smuzhiyun 	u8 hopcount;
952*4882a593Smuzhiyun 	u8 ttl;
953*4882a593Smuzhiyun 	__le32 expiration;
954*4882a593Smuzhiyun 	u8 sleepmode;
955*4882a593Smuzhiyun 	__le32 snr;
956*4882a593Smuzhiyun 	__le32 references;
957*4882a593Smuzhiyun 	u8 prec[ETH_ALEN];
958*4882a593Smuzhiyun } __packed;
959*4882a593Smuzhiyun 
960*4882a593Smuzhiyun struct cmd_ds_mesh_config {
961*4882a593Smuzhiyun 	struct cmd_header hdr;
962*4882a593Smuzhiyun 
963*4882a593Smuzhiyun 	__le16 action;
964*4882a593Smuzhiyun 	__le16 channel;
965*4882a593Smuzhiyun 	__le16 type;
966*4882a593Smuzhiyun 	__le16 length;
967*4882a593Smuzhiyun 	u8 data[128];	/* last position reserved */
968*4882a593Smuzhiyun } __packed;
969*4882a593Smuzhiyun 
970*4882a593Smuzhiyun struct cmd_ds_mesh_access {
971*4882a593Smuzhiyun 	struct cmd_header hdr;
972*4882a593Smuzhiyun 
973*4882a593Smuzhiyun 	__le16 action;
974*4882a593Smuzhiyun 	__le32 data[32];	/* last position reserved */
975*4882a593Smuzhiyun } __packed;
976*4882a593Smuzhiyun 
977*4882a593Smuzhiyun /* Number of stats counters returned by the firmware */
978*4882a593Smuzhiyun #define MESH_STATS_NUM 8
979*4882a593Smuzhiyun #endif
980