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