xref: /freebsd/sys/contrib/dev/broadcom/brcm80211/brcmfmac/fwil.h (revision 902136e0fe112383ec64d2ef43a446063b5e6417)
1b4c3e9b5SBjoern A. Zeeb // SPDX-License-Identifier: ISC
2b4c3e9b5SBjoern A. Zeeb /*
3b4c3e9b5SBjoern A. Zeeb  * Copyright (c) 2012 Broadcom Corporation
4b4c3e9b5SBjoern A. Zeeb  */
5b4c3e9b5SBjoern A. Zeeb 
6b4c3e9b5SBjoern A. Zeeb #ifndef _fwil_h_
7b4c3e9b5SBjoern A. Zeeb #define _fwil_h_
8b4c3e9b5SBjoern A. Zeeb 
9b4c3e9b5SBjoern A. Zeeb #include "debug.h"
10b4c3e9b5SBjoern A. Zeeb 
11b4c3e9b5SBjoern A. Zeeb /*******************************************************************************
12b4c3e9b5SBjoern A. Zeeb  * Dongle command codes that are interpreted by firmware
13b4c3e9b5SBjoern A. Zeeb  ******************************************************************************/
14b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_VERSION			1
15b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_UP				2
16b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_DOWN				3
17b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_PROMISC			10
18b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_RATE			12
19b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_INFRA			19
20b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_INFRA			20
21b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_AUTH			21
22b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_AUTH			22
23b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_BSSID			23
24b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_SSID			25
25b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SSID			26
26b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_TERMINATED			28
27b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_CHANNEL			29
28b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_CHANNEL			30
29b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_SRL				31
30b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SRL				32
31b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_LRL				33
32b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_LRL				34
33b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_RADIO			37
34b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_RADIO			38
35b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_PHYTYPE			39
36b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_KEY				45
37b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_REGULATORY			46
38b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_REGULATORY			47
39b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_PASSIVE_SCAN		49
40b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SCAN				50
41b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SCAN_RESULTS			51
42b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_DISASSOC			52
43b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_REASSOC				53
44b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_ROAM_TRIGGER		55
45b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_ROAM_DELTA			57
46b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_BCNPRD			75
47b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_BCNPRD			76
48b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_DTIMPRD			77
49b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_DTIMPRD			78
50b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_COUNTRY			84
51b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_PM				85
52b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_PM				86
53b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_REVINFO			98
54b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_MONITOR			107
55b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_MONITOR			108
56b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_CURR_RATESET		114
57b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_AP				117
58b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_AP				118
59b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SCB_AUTHORIZE		121
60b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SCB_DEAUTHORIZE		122
61b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_RSSI			127
62b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_WSEC			133
63b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_WSEC			134
64b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_PHY_NOISE			135
65b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_BSS_INFO			136
66b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_GET_PKTCNTS			137
67b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_BANDLIST			140
68b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SCB_TIMEOUT			158
69b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_ASSOCLIST			159
70b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_PHYLIST			180
71b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SCAN_CHANNEL_TIME		185
72b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SCAN_UNASSOC_TIME		187
73b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON	201
74b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_ASSOC_PREFER		205
75b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_VALID_CHANNELS		217
76b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_FAKEFRAG			219
77b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_KEY_PRIMARY			235
78b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_KEY_PRIMARY			236
79b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_SCAN_PASSIVE_TIME		258
80b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_GET_VAR				262
81b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_VAR				263
82b4c3e9b5SBjoern A. Zeeb #define BRCMF_C_SET_WSEC_PMK			268
83b4c3e9b5SBjoern A. Zeeb 
84b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_cmd_data_set(struct brcmf_if *ifp, u32 cmd, void *data, u32 len);
85b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_cmd_data_get(struct brcmf_if *ifp, u32 cmd, void *data, u32 len);
86b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_cmd_int_set(struct brcmf_if * ifp,u32 cmd,u32 data)87b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_cmd_int_set(struct brcmf_if *ifp, u32 cmd, u32 data)
88b4c3e9b5SBjoern A. Zeeb {
89b4c3e9b5SBjoern A. Zeeb 	s32 err;
90b4c3e9b5SBjoern A. Zeeb 	__le32 data_le = cpu_to_le32(data);
91b4c3e9b5SBjoern A. Zeeb 
92b4c3e9b5SBjoern A. Zeeb 	brcmf_dbg(FIL, "ifidx=%d, cmd=%d, value=%d\n", ifp->ifidx, cmd, data);
93b4c3e9b5SBjoern A. Zeeb 	err = brcmf_fil_cmd_data_set(ifp, cmd, &data_le, sizeof(data_le));
94b4c3e9b5SBjoern A. Zeeb 
95b4c3e9b5SBjoern A. Zeeb 	return err;
96b4c3e9b5SBjoern A. Zeeb }
97b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_cmd_int_get(struct brcmf_if * ifp,u32 cmd,u32 * data)98b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_cmd_int_get(struct brcmf_if *ifp, u32 cmd, u32 *data)
99b4c3e9b5SBjoern A. Zeeb {
100b4c3e9b5SBjoern A. Zeeb 	s32 err;
101b4c3e9b5SBjoern A. Zeeb 
102b4c3e9b5SBjoern A. Zeeb 	err = brcmf_fil_cmd_data_get(ifp, cmd, data, sizeof(*data));
103b4c3e9b5SBjoern A. Zeeb 	if (err == 0)
104b4c3e9b5SBjoern A. Zeeb 		*data = le32_to_cpu(*(__le32 *)data);
105b4c3e9b5SBjoern A. Zeeb 	brcmf_dbg(FIL, "ifidx=%d, cmd=%d, value=%d\n", ifp->ifidx, cmd, *data);
106b4c3e9b5SBjoern A. Zeeb 
107b4c3e9b5SBjoern A. Zeeb 	return err;
108b4c3e9b5SBjoern A. Zeeb }
109b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_cmd_int_query(struct brcmf_if * ifp,u32 cmd,u32 * data)110b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_cmd_int_query(struct brcmf_if *ifp, u32 cmd, u32 *data)
111b4c3e9b5SBjoern A. Zeeb {
112b4c3e9b5SBjoern A. Zeeb 	__le32 *data_le = (__le32 *)data;
113b4c3e9b5SBjoern A. Zeeb 
114b4c3e9b5SBjoern A. Zeeb 	*data_le = cpu_to_le32(*data);
115b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_cmd_int_get(ifp, cmd, data);
116b4c3e9b5SBjoern A. Zeeb }
117b4c3e9b5SBjoern A. Zeeb 
118b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_iovar_data_set(struct brcmf_if *ifp, const char *name,
119b4c3e9b5SBjoern A. Zeeb 			     const void *data, u32 len);
120b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_iovar_data_get(struct brcmf_if *ifp, const char *name, void *data,
121b4c3e9b5SBjoern A. Zeeb 			     u32 len);
122b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_iovar_int_set(struct brcmf_if * ifp,const char * name,u32 data)123b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_iovar_int_set(struct brcmf_if *ifp, const char *name, u32 data)
124b4c3e9b5SBjoern A. Zeeb {
125b4c3e9b5SBjoern A. Zeeb 	__le32 data_le = cpu_to_le32(data);
126b4c3e9b5SBjoern A. Zeeb 
127b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_iovar_data_set(ifp, name, &data_le, sizeof(data_le));
128b4c3e9b5SBjoern A. Zeeb }
129b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_iovar_int_get(struct brcmf_if * ifp,const char * name,u32 * data)130b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_iovar_int_get(struct brcmf_if *ifp, const char *name, u32 *data)
131b4c3e9b5SBjoern A. Zeeb {
132b4c3e9b5SBjoern A. Zeeb 	s32 err;
133b4c3e9b5SBjoern A. Zeeb 
134b4c3e9b5SBjoern A. Zeeb 	err = brcmf_fil_iovar_data_get(ifp, name, data, sizeof(*data));
135b4c3e9b5SBjoern A. Zeeb 	if (err == 0)
136b4c3e9b5SBjoern A. Zeeb 		*data = le32_to_cpu(*(__le32 *)data);
137b4c3e9b5SBjoern A. Zeeb 	return err;
138b4c3e9b5SBjoern A. Zeeb }
139b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_iovar_int_query(struct brcmf_if * ifp,const char * name,u32 * data)140b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_iovar_int_query(struct brcmf_if *ifp, const char *name, u32 *data)
141b4c3e9b5SBjoern A. Zeeb {
142b4c3e9b5SBjoern A. Zeeb 	__le32 *data_le = (__le32 *)data;
143b4c3e9b5SBjoern A. Zeeb 
144b4c3e9b5SBjoern A. Zeeb 	*data_le = cpu_to_le32(*data);
145b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_iovar_int_get(ifp, name, data);
146b4c3e9b5SBjoern A. Zeeb }
147b4c3e9b5SBjoern A. Zeeb 
148b4c3e9b5SBjoern A. Zeeb 
149b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_bsscfg_data_set(struct brcmf_if *ifp, const char *name,
150*902136e0SBjoern A. Zeeb #if defined(__linux__)
151b4c3e9b5SBjoern A. Zeeb 			      void *data, u32 len);
152*902136e0SBjoern A. Zeeb #elif defined(__FreeBSD__)
153*902136e0SBjoern A. Zeeb 			      const void *data, u32 len);
154*902136e0SBjoern A. Zeeb #endif
155b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_bsscfg_data_get(struct brcmf_if *ifp, const char *name,
156b4c3e9b5SBjoern A. Zeeb 			      void *data, u32 len);
157b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_bsscfg_int_set(struct brcmf_if * ifp,const char * name,u32 data)158b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_bsscfg_int_set(struct brcmf_if *ifp, const char *name, u32 data)
159b4c3e9b5SBjoern A. Zeeb {
160b4c3e9b5SBjoern A. Zeeb 	__le32 data_le = cpu_to_le32(data);
161b4c3e9b5SBjoern A. Zeeb 
162b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_bsscfg_data_set(ifp, name, &data_le,
163b4c3e9b5SBjoern A. Zeeb 					 sizeof(data_le));
164b4c3e9b5SBjoern A. Zeeb }
165b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_bsscfg_int_get(struct brcmf_if * ifp,const char * name,u32 * data)166b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_bsscfg_int_get(struct brcmf_if *ifp, const char *name, u32 *data)
167b4c3e9b5SBjoern A. Zeeb {
168b4c3e9b5SBjoern A. Zeeb 	s32 err;
169b4c3e9b5SBjoern A. Zeeb 
170b4c3e9b5SBjoern A. Zeeb 	err = brcmf_fil_bsscfg_data_get(ifp, name, data, sizeof(*data));
171b4c3e9b5SBjoern A. Zeeb 	if (err == 0)
172b4c3e9b5SBjoern A. Zeeb 		*data = le32_to_cpu(*(__le32 *)data);
173b4c3e9b5SBjoern A. Zeeb 	return err;
174b4c3e9b5SBjoern A. Zeeb }
175b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_bsscfg_int_query(struct brcmf_if * ifp,const char * name,u32 * data)176b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_bsscfg_int_query(struct brcmf_if *ifp, const char *name, u32 *data)
177b4c3e9b5SBjoern A. Zeeb {
178b4c3e9b5SBjoern A. Zeeb 	__le32 *data_le = (__le32 *)data;
179b4c3e9b5SBjoern A. Zeeb 
180b4c3e9b5SBjoern A. Zeeb 	*data_le = cpu_to_le32(*data);
181b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_bsscfg_int_get(ifp, name, data);
182b4c3e9b5SBjoern A. Zeeb }
183b4c3e9b5SBjoern A. Zeeb 
184b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_xtlv_data_set(struct brcmf_if *ifp, const char *name, u16 id,
185b4c3e9b5SBjoern A. Zeeb 			    void *data, u32 len);
186b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_xtlv_data_get(struct brcmf_if *ifp, const char *name, u16 id,
187b4c3e9b5SBjoern A. Zeeb 			    void *data, u32 len);
188b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_xtlv_int_set(struct brcmf_if * ifp,const char * name,u16 id,u32 data)189b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_xtlv_int_set(struct brcmf_if *ifp, const char *name, u16 id,
190b4c3e9b5SBjoern A. Zeeb 			   u32 data)
191b4c3e9b5SBjoern A. Zeeb {
192b4c3e9b5SBjoern A. Zeeb 	__le32 data_le = cpu_to_le32(data);
193b4c3e9b5SBjoern A. Zeeb 
194b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_xtlv_data_set(ifp, name, id, &data_le,
195b4c3e9b5SBjoern A. Zeeb 					 sizeof(data_le));
196b4c3e9b5SBjoern A. Zeeb }
197b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_xtlv_int_get(struct brcmf_if * ifp,const char * name,u16 id,u32 * data)198b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_xtlv_int_get(struct brcmf_if *ifp, const char *name, u16 id,
199b4c3e9b5SBjoern A. Zeeb 			   u32 *data)
200b4c3e9b5SBjoern A. Zeeb {
201b4c3e9b5SBjoern A. Zeeb 	__le32 data_le = cpu_to_le32(*data);
202b4c3e9b5SBjoern A. Zeeb 	s32 err;
203b4c3e9b5SBjoern A. Zeeb 
204b4c3e9b5SBjoern A. Zeeb 	err = brcmf_fil_xtlv_data_get(ifp, name, id, &data_le, sizeof(data_le));
205b4c3e9b5SBjoern A. Zeeb 	if (err == 0)
206b4c3e9b5SBjoern A. Zeeb 		*data = le32_to_cpu(data_le);
207b4c3e9b5SBjoern A. Zeeb 	return err;
208b4c3e9b5SBjoern A. Zeeb }
209b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_xtlv_int8_get(struct brcmf_if * ifp,const char * name,u16 id,u8 * data)210b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_xtlv_int8_get(struct brcmf_if *ifp, const char *name, u16 id,
211b4c3e9b5SBjoern A. Zeeb 			    u8 *data)
212b4c3e9b5SBjoern A. Zeeb {
213b4c3e9b5SBjoern A. Zeeb 	return brcmf_fil_xtlv_data_get(ifp, name, id, data, sizeof(*data));
214b4c3e9b5SBjoern A. Zeeb }
215b4c3e9b5SBjoern A. Zeeb static inline
brcmf_fil_xtlv_int16_get(struct brcmf_if * ifp,const char * name,u16 id,u16 * data)216b4c3e9b5SBjoern A. Zeeb s32 brcmf_fil_xtlv_int16_get(struct brcmf_if *ifp, const char *name, u16 id,
217b4c3e9b5SBjoern A. Zeeb 			     u16 *data)
218b4c3e9b5SBjoern A. Zeeb {
219b4c3e9b5SBjoern A. Zeeb 	__le16 data_le = cpu_to_le16(*data);
220b4c3e9b5SBjoern A. Zeeb 	s32 err;
221b4c3e9b5SBjoern A. Zeeb 
222b4c3e9b5SBjoern A. Zeeb 	err = brcmf_fil_xtlv_data_get(ifp, name, id, &data_le, sizeof(data_le));
223b4c3e9b5SBjoern A. Zeeb 	if (err == 0)
224b4c3e9b5SBjoern A. Zeeb 		*data = le16_to_cpu(data_le);
225b4c3e9b5SBjoern A. Zeeb 	return err;
226b4c3e9b5SBjoern A. Zeeb }
227b4c3e9b5SBjoern A. Zeeb 
228b4c3e9b5SBjoern A. Zeeb #endif /* _fwil_h_ */
229