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