diff options
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/Makefile | 1 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 29 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fwil.c | 345 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fwil.h | 43 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 549 |
8 files changed, 577 insertions, 404 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/Makefile b/drivers/net/wireless/brcm80211/brcmfmac/Makefile index 9d5170b6df5..fe80b637c51 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/Makefile +++ b/drivers/net/wireless/brcm80211/brcmfmac/Makefile | |||
@@ -24,6 +24,7 @@ ccflags-y += -D__CHECK_ENDIAN__ | |||
24 | obj-$(CONFIG_BRCMFMAC) += brcmfmac.o | 24 | obj-$(CONFIG_BRCMFMAC) += brcmfmac.o |
25 | brcmfmac-objs += \ | 25 | brcmfmac-objs += \ |
26 | wl_cfg80211.o \ | 26 | wl_cfg80211.o \ |
27 | fwil.o \ | ||
27 | dhd_cdc.o \ | 28 | dhd_cdc.o \ |
28 | dhd_common.o \ | 29 | dhd_common.o \ |
29 | dhd_linux.o | 30 | dhd_linux.o |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h index 0510960ad5f..a73da9dd05e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h | |||
@@ -318,6 +318,12 @@ struct brcmf_event { | |||
318 | #define BRCMF_E_LINK_ASSOC_REC 3 | 318 | #define BRCMF_E_LINK_ASSOC_REC 3 |
319 | #define BRCMF_E_LINK_BSSCFG_DIS 4 | 319 | #define BRCMF_E_LINK_BSSCFG_DIS 4 |
320 | 320 | ||
321 | /* Small, medium and maximum buffer size for dcmd | ||
322 | */ | ||
323 | #define BRCMF_DCMD_SMLEN 256 | ||
324 | #define BRCMF_DCMD_MEDLEN 1536 | ||
325 | #define BRCMF_DCMD_MAXLEN 8192 | ||
326 | |||
321 | /* Pattern matching filter. Specifies an offset within received packets to | 327 | /* Pattern matching filter. Specifies an offset within received packets to |
322 | * start matching, the pattern to match, the size of the pattern, and a bitmask | 328 | * start matching, the pattern to match, the size of the pattern, and a bitmask |
323 | * that indicates which bits within the pattern should be matched. | 329 | * that indicates which bits within the pattern should be matched. |
@@ -661,6 +667,7 @@ struct brcmf_pub { | |||
661 | struct brcmf_if *iflist[BRCMF_MAX_IFS]; | 667 | struct brcmf_if *iflist[BRCMF_MAX_IFS]; |
662 | 668 | ||
663 | struct mutex proto_block; | 669 | struct mutex proto_block; |
670 | unsigned char proto_buf[BRCMF_DCMD_MAXLEN]; | ||
664 | 671 | ||
665 | struct work_struct setmacaddr_work; | 672 | struct work_struct setmacaddr_work; |
666 | struct work_struct multicast_work; | 673 | struct work_struct multicast_work; |
@@ -671,6 +678,22 @@ struct brcmf_pub { | |||
671 | #endif | 678 | #endif |
672 | }; | 679 | }; |
673 | 680 | ||
681 | /* struct brcmf_if - Interface control information | ||
682 | * | ||
683 | * @drvr: back pointer to brcmf_pub | ||
684 | * @ndev: interface net device pointer | ||
685 | * @stats: net device statistics | ||
686 | * @idx: iface idx in dongle | ||
687 | * @mac_addr: assigned MAC address | ||
688 | */ | ||
689 | struct brcmf_if { | ||
690 | struct brcmf_pub *drvr; | ||
691 | struct net_device *ndev; | ||
692 | struct net_device_stats stats; | ||
693 | int idx; | ||
694 | u8 mac_addr[ETH_ALEN]; | ||
695 | }; | ||
696 | |||
674 | struct brcmf_if_event { | 697 | struct brcmf_if_event { |
675 | u8 ifidx; | 698 | u8 ifidx; |
676 | u8 action; | 699 | u8 action; |
@@ -701,6 +724,8 @@ extern char *brcmf_ifname(struct brcmf_pub *drvr, int idx); | |||
701 | /* Query dongle */ | 724 | /* Query dongle */ |
702 | extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, | 725 | extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, |
703 | uint cmd, void *buf, uint len); | 726 | uint cmd, void *buf, uint len); |
727 | extern int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd, | ||
728 | void *buf, uint len); | ||
704 | 729 | ||
705 | extern int brcmf_ifname2idx(struct brcmf_pub *drvr, char *name); | 730 | extern int brcmf_ifname2idx(struct brcmf_pub *drvr, char *name); |
706 | extern int brcmf_c_host_event(struct brcmf_pub *drvr, int *idx, | 731 | extern int brcmf_c_host_event(struct brcmf_pub *drvr, int *idx, |
@@ -713,8 +738,4 @@ extern void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg); | |||
713 | extern void brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg, | 738 | extern void brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg, |
714 | int enable, int master_mode); | 739 | int enable, int master_mode); |
715 | 740 | ||
716 | #define BRCMF_DCMD_SMLEN 256 /* "small" cmd buffer required */ | ||
717 | #define BRCMF_DCMD_MEDLEN 1536 /* "med" cmd buffer required */ | ||
718 | #define BRCMF_DCMD_MAXLEN 8192 /* max length cmd buffer required */ | ||
719 | |||
720 | #endif /* _BRCMF_H_ */ | 741 | #endif /* _BRCMF_H_ */ |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c index 7f89540b56d..fa08058aada 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/if.h> | 18 | #include <linux/if.h> |
19 | #include <linux/ieee80211.h> | 19 | #include <linux/ieee80211.h> |
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/netdevice.h> | ||
21 | 22 | ||
22 | #include <defs.h> | 23 | #include <defs.h> |
23 | #include <brcmu_wifi.h> | 24 | #include <brcmu_wifi.h> |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h index fb508c2256d..eefa6c2560c 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | |||
@@ -31,6 +31,7 @@ | |||
31 | #define BRCMF_EVENT_VAL 0x0800 | 31 | #define BRCMF_EVENT_VAL 0x0800 |
32 | #define BRCMF_BTA_VAL 0x1000 | 32 | #define BRCMF_BTA_VAL 0x1000 |
33 | #define BRCMF_ISCAN_VAL 0x2000 | 33 | #define BRCMF_ISCAN_VAL 0x2000 |
34 | #define BRCMF_FIL_VAL 0x4000 | ||
34 | 35 | ||
35 | #if defined(DEBUG) | 36 | #if defined(DEBUG) |
36 | 37 | ||
@@ -56,6 +57,7 @@ do { \ | |||
56 | #define BRCMF_BYTES_ON() (brcmf_msg_level & BRCMF_BYTES_VAL) | 57 | #define BRCMF_BYTES_ON() (brcmf_msg_level & BRCMF_BYTES_VAL) |
57 | #define BRCMF_GLOM_ON() (brcmf_msg_level & BRCMF_GLOM_VAL) | 58 | #define BRCMF_GLOM_ON() (brcmf_msg_level & BRCMF_GLOM_VAL) |
58 | #define BRCMF_EVENT_ON() (brcmf_msg_level & BRCMF_EVENT_VAL) | 59 | #define BRCMF_EVENT_ON() (brcmf_msg_level & BRCMF_EVENT_VAL) |
60 | #define BRCMF_FIL_ON() (brcmf_msg_level & BRCMF_FIL_VAL) | ||
59 | 61 | ||
60 | #else /* (defined DEBUG) || (defined DEBUG) */ | 62 | #else /* (defined DEBUG) || (defined DEBUG) */ |
61 | 63 | ||
@@ -67,6 +69,7 @@ do { \ | |||
67 | #define BRCMF_BYTES_ON() 0 | 69 | #define BRCMF_BYTES_ON() 0 |
68 | #define BRCMF_GLOM_ON() 0 | 70 | #define BRCMF_GLOM_ON() 0 |
69 | #define BRCMF_EVENT_ON() 0 | 71 | #define BRCMF_EVENT_ON() 0 |
72 | #define BRCMF_FIL_ON() 0 | ||
70 | 73 | ||
71 | #endif /* defined(DEBUG) */ | 74 | #endif /* defined(DEBUG) */ |
72 | 75 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index c462263e041..189c5be2b05 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -52,16 +52,6 @@ MODULE_SUPPORTED_DEVICE("Broadcom 802.11n WLAN fullmac cards"); | |||
52 | MODULE_LICENSE("Dual BSD/GPL"); | 52 | MODULE_LICENSE("Dual BSD/GPL"); |
53 | 53 | ||
54 | 54 | ||
55 | /* Interface control information */ | ||
56 | struct brcmf_if { | ||
57 | struct brcmf_pub *drvr; /* back pointer to brcmf_pub */ | ||
58 | /* OS/stack specifics */ | ||
59 | struct net_device *ndev; | ||
60 | struct net_device_stats stats; | ||
61 | int idx; /* iface idx in dongle */ | ||
62 | u8 mac_addr[ETH_ALEN]; /* assigned MAC address */ | ||
63 | }; | ||
64 | |||
65 | /* Error bits */ | 55 | /* Error bits */ |
66 | int brcmf_msg_level = BRCMF_ERROR_VAL; | 56 | int brcmf_msg_level = BRCMF_ERROR_VAL; |
67 | module_param(brcmf_msg_level, int, 0); | 57 | module_param(brcmf_msg_level, int, 0); |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwil.c b/drivers/net/wireless/brcm80211/brcmfmac/fwil.c new file mode 100644 index 00000000000..8528937067d --- /dev/null +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil.c | |||
@@ -0,0 +1,345 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2012 Broadcom Corporation | ||
3 | * | ||
4 | * Permission to use, copy, modify, and/or distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | ||
11 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | ||
13 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||
14 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
17 | /* FWIL is the Firmware Interface Layer. In this module the support functions | ||
18 | * are located to set and get variables to and from the firmware. | ||
19 | */ | ||
20 | |||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/netdevice.h> | ||
23 | #include <defs.h> | ||
24 | #include <brcmu_utils.h> | ||
25 | #include <brcmu_wifi.h> | ||
26 | #include "dhd.h" | ||
27 | #include "dhd_bus.h" | ||
28 | #include "dhd_dbg.h" | ||
29 | |||
30 | |||
31 | static s32 | ||
32 | brcmf_fil_cmd_data(struct brcmf_if *ifp, u32 cmd, void *data, u32 len, bool set) | ||
33 | { | ||
34 | struct brcmf_pub *drvr = ifp->drvr; | ||
35 | s32 err; | ||
36 | |||
37 | if (drvr->bus_if->state == BRCMF_BUS_DOWN) { | ||
38 | brcmf_dbg(ERROR, "bus is down. we have nothing to do.\n"); | ||
39 | return -EIO; | ||
40 | } | ||
41 | |||
42 | if (data != NULL) | ||
43 | len = min_t(uint, len, BRCMF_DCMD_MAXLEN); | ||
44 | if (set) | ||
45 | err = brcmf_proto_cdc_set_dcmd(drvr, ifp->idx, cmd, data, len); | ||
46 | else | ||
47 | err = brcmf_proto_cdc_query_dcmd(drvr, ifp->idx, cmd, data, | ||
48 | len); | ||
49 | |||
50 | if (err >= 0) | ||
51 | err = 0; | ||
52 | else | ||
53 | brcmf_dbg(ERROR, "Failed err=%d\n", err); | ||
54 | |||
55 | return err; | ||
56 | } | ||
57 | |||
58 | s32 | ||
59 | brcmf_fil_cmd_data_set(struct net_device *ndev, u32 cmd, void *data, u32 len) | ||
60 | { | ||
61 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
62 | s32 err; | ||
63 | |||
64 | mutex_lock(&ifp->drvr->proto_block); | ||
65 | |||
66 | brcmf_dbg(FIL, "cmd=%d, len=%d\n", cmd, len); | ||
67 | brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, len, "data"); | ||
68 | |||
69 | err = brcmf_fil_cmd_data(ifp, cmd, data, len, true); | ||
70 | mutex_unlock(&ifp->drvr->proto_block); | ||
71 | |||
72 | return err; | ||
73 | } | ||
74 | |||
75 | s32 | ||
76 | brcmf_fil_cmd_data_get(struct net_device *ndev, u32 cmd, void *data, u32 len) | ||
77 | { | ||
78 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
79 | s32 err; | ||
80 | |||
81 | mutex_lock(&ifp->drvr->proto_block); | ||
82 | err = brcmf_fil_cmd_data(ifp, cmd, data, len, false); | ||
83 | |||
84 | brcmf_dbg(FIL, "cmd=%d, len=%d\n", cmd, len); | ||
85 | brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, len, "data"); | ||
86 | |||
87 | mutex_unlock(&ifp->drvr->proto_block); | ||
88 | |||
89 | return err; | ||
90 | } | ||
91 | |||
92 | |||
93 | s32 | ||
94 | brcmf_fil_cmd_int_set(struct net_device *ndev, u32 cmd, u32 data) | ||
95 | { | ||
96 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
97 | s32 err; | ||
98 | __le32 data_le = cpu_to_le32(data); | ||
99 | |||
100 | mutex_lock(&ifp->drvr->proto_block); | ||
101 | err = brcmf_fil_cmd_data(ifp, cmd, &data_le, sizeof(data_le), true); | ||
102 | mutex_unlock(&ifp->drvr->proto_block); | ||
103 | |||
104 | return err; | ||
105 | } | ||
106 | |||
107 | s32 | ||
108 | brcmf_fil_cmd_int_get(struct net_device *ndev, u32 cmd, u32 *data) | ||
109 | { | ||
110 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
111 | s32 err; | ||
112 | __le32 data_le = cpu_to_le32(*data); | ||
113 | |||
114 | mutex_lock(&ifp->drvr->proto_block); | ||
115 | err = brcmf_fil_cmd_data(ifp, cmd, &data_le, sizeof(data_le), false); | ||
116 | mutex_unlock(&ifp->drvr->proto_block); | ||
117 | *data = le32_to_cpu(data_le); | ||
118 | |||
119 | return err; | ||
120 | } | ||
121 | |||
122 | static u32 | ||
123 | brcmf_create_iovar(char *name, char *data, u32 datalen, char *buf, u32 buflen) | ||
124 | { | ||
125 | u32 len; | ||
126 | |||
127 | len = strlen(name) + 1; | ||
128 | |||
129 | if ((len + datalen) > buflen) | ||
130 | return 0; | ||
131 | |||
132 | memcpy(buf, name, len); | ||
133 | |||
134 | /* append data onto the end of the name string */ | ||
135 | if (data && datalen) | ||
136 | memcpy(&buf[len], data, datalen); | ||
137 | |||
138 | return len + datalen; | ||
139 | } | ||
140 | |||
141 | |||
142 | s32 | ||
143 | brcmf_fil_iovar_data_set(struct net_device *ndev, char *name, void *data, | ||
144 | u32 len) | ||
145 | { | ||
146 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
147 | struct brcmf_pub *drvr = ifp->drvr; | ||
148 | s32 err; | ||
149 | u32 buflen; | ||
150 | |||
151 | mutex_lock(&drvr->proto_block); | ||
152 | |||
153 | brcmf_dbg(FIL, "name=%s, len=%d\n", name, len); | ||
154 | brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, len, "data"); | ||
155 | |||
156 | buflen = brcmf_create_iovar(name, data, len, drvr->proto_buf, | ||
157 | sizeof(drvr->proto_buf)); | ||
158 | if (buflen) { | ||
159 | err = brcmf_fil_cmd_data(ifp, BRCMF_C_SET_VAR, drvr->proto_buf, | ||
160 | buflen, true); | ||
161 | } else { | ||
162 | err = -EPERM; | ||
163 | brcmf_dbg(ERROR, "Creating iovar failed\n"); | ||
164 | } | ||
165 | |||
166 | mutex_unlock(&drvr->proto_block); | ||
167 | return err; | ||
168 | } | ||
169 | |||
170 | s32 | ||
171 | brcmf_fil_iovar_data_get(struct net_device *ndev, char *name, void *data, | ||
172 | u32 len) | ||
173 | { | ||
174 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
175 | struct brcmf_pub *drvr = ifp->drvr; | ||
176 | s32 err; | ||
177 | u32 buflen; | ||
178 | |||
179 | mutex_lock(&drvr->proto_block); | ||
180 | |||
181 | buflen = brcmf_create_iovar(name, data, len, drvr->proto_buf, | ||
182 | sizeof(drvr->proto_buf)); | ||
183 | if (buflen) { | ||
184 | err = brcmf_fil_cmd_data(ifp, BRCMF_C_GET_VAR, drvr->proto_buf, | ||
185 | buflen, false); | ||
186 | if (err == 0) | ||
187 | memcpy(data, drvr->proto_buf, len); | ||
188 | } else { | ||
189 | err = -EPERM; | ||
190 | brcmf_dbg(ERROR, "Creating iovar failed\n"); | ||
191 | } | ||
192 | |||
193 | brcmf_dbg(FIL, "name=%s, len=%d\n", name, len); | ||
194 | brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, len, "data"); | ||
195 | |||
196 | mutex_unlock(&drvr->proto_block); | ||
197 | return err; | ||
198 | } | ||
199 | |||
200 | s32 | ||
201 | brcmf_fil_iovar_int_set(struct net_device *ndev, char *name, u32 data) | ||
202 | { | ||
203 | __le32 data_le = cpu_to_le32(data); | ||
204 | |||
205 | return brcmf_fil_iovar_data_set(ndev, name, &data_le, sizeof(data_le)); | ||
206 | } | ||
207 | |||
208 | s32 | ||
209 | brcmf_fil_iovar_int_get(struct net_device *ndev, char *name, u32 *data) | ||
210 | { | ||
211 | __le32 data_le = cpu_to_le32(*data); | ||
212 | s32 err; | ||
213 | |||
214 | err = brcmf_fil_iovar_data_get(ndev, name, &data_le, sizeof(data_le)); | ||
215 | if (err == 0) | ||
216 | *data = le32_to_cpu(data_le); | ||
217 | return err; | ||
218 | } | ||
219 | |||
220 | static u32 | ||
221 | brcmf_create_bsscfg(s32 bssidx, char *name, char *data, u32 datalen, char *buf, | ||
222 | u32 buflen) | ||
223 | { | ||
224 | const s8 *prefix = "bsscfg:"; | ||
225 | s8 *p; | ||
226 | u32 prefixlen; | ||
227 | u32 namelen; | ||
228 | u32 iolen; | ||
229 | __le32 bssidx_le; | ||
230 | |||
231 | if (bssidx == 0) | ||
232 | return brcmf_create_iovar(name, data, datalen, buf, buflen); | ||
233 | |||
234 | prefixlen = strlen(prefix); | ||
235 | namelen = strlen(name) + 1; /* lengh of iovar name + null */ | ||
236 | iolen = prefixlen + namelen + sizeof(bssidx_le) + datalen; | ||
237 | |||
238 | if (buflen < iolen) { | ||
239 | brcmf_dbg(ERROR, "buffer is too short\n"); | ||
240 | return 0; | ||
241 | } | ||
242 | |||
243 | p = buf; | ||
244 | |||
245 | /* copy prefix, no null */ | ||
246 | memcpy(p, prefix, prefixlen); | ||
247 | p += prefixlen; | ||
248 | |||
249 | /* copy iovar name including null */ | ||
250 | memcpy(p, name, namelen); | ||
251 | p += namelen; | ||
252 | |||
253 | /* bss config index as first data */ | ||
254 | bssidx_le = cpu_to_le32(bssidx); | ||
255 | memcpy(p, &bssidx_le, sizeof(bssidx_le)); | ||
256 | p += sizeof(bssidx_le); | ||
257 | |||
258 | /* parameter buffer follows */ | ||
259 | if (datalen) | ||
260 | memcpy(p, data, datalen); | ||
261 | |||
262 | return iolen; | ||
263 | } | ||
264 | |||
265 | s32 | ||
266 | brcmf_fil_bsscfg_data_set(struct net_device *ndev, s32 bssidx, char *name, | ||
267 | void *data, u32 len) | ||
268 | { | ||
269 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
270 | struct brcmf_pub *drvr = ifp->drvr; | ||
271 | s32 err; | ||
272 | u32 buflen; | ||
273 | |||
274 | mutex_lock(&drvr->proto_block); | ||
275 | |||
276 | brcmf_dbg(FIL, "bssidx=%d, name=%s, len=%d\n", bssidx, name, len); | ||
277 | brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, len, "data"); | ||
278 | |||
279 | buflen = brcmf_create_bsscfg(bssidx, name, data, len, drvr->proto_buf, | ||
280 | sizeof(drvr->proto_buf)); | ||
281 | if (buflen) { | ||
282 | err = brcmf_fil_cmd_data(ifp, BRCMF_C_SET_VAR, drvr->proto_buf, | ||
283 | buflen, true); | ||
284 | } else { | ||
285 | err = -EPERM; | ||
286 | brcmf_dbg(ERROR, "Creating bsscfg failed\n"); | ||
287 | } | ||
288 | |||
289 | mutex_unlock(&drvr->proto_block); | ||
290 | return err; | ||
291 | } | ||
292 | |||
293 | s32 | ||
294 | brcmf_fil_bsscfg_data_get(struct net_device *ndev, s32 bssidx, char *name, | ||
295 | void *data, u32 len) | ||
296 | { | ||
297 | struct brcmf_if *ifp = netdev_priv(ndev); | ||
298 | struct brcmf_pub *drvr = ifp->drvr; | ||
299 | s32 err; | ||
300 | u32 buflen; | ||
301 | |||
302 | mutex_lock(&drvr->proto_block); | ||
303 | |||
304 | buflen = brcmf_create_bsscfg(bssidx, name, NULL, len, drvr->proto_buf, | ||
305 | sizeof(drvr->proto_buf)); | ||
306 | if (buflen) { | ||
307 | err = brcmf_fil_cmd_data(ifp, BRCMF_C_GET_VAR, drvr->proto_buf, | ||
308 | buflen, false); | ||
309 | if (err == 0) | ||
310 | memcpy(data, drvr->proto_buf, len); | ||
311 | } else { | ||
312 | err = -EPERM; | ||
313 | brcmf_dbg(ERROR, "Creating bsscfg failed\n"); | ||
314 | } | ||
315 | brcmf_dbg(FIL, "bssidx=%d, name=%s, len=%d\n", bssidx, name, len); | ||
316 | brcmf_dbg_hex_dump(BRCMF_FIL_ON(), data, len, "data"); | ||
317 | |||
318 | mutex_unlock(&drvr->proto_block); | ||
319 | return err; | ||
320 | |||
321 | } | ||
322 | |||
323 | s32 | ||
324 | brcmf_fil_bsscfg_int_set(struct net_device *ndev, s32 bssidx, char *name, | ||
325 | u32 data) | ||
326 | { | ||
327 | __le32 data_le = cpu_to_le32(data); | ||
328 | |||
329 | return brcmf_fil_bsscfg_data_set(ndev, bssidx, name, &data_le, | ||
330 | sizeof(data_le)); | ||
331 | } | ||
332 | |||
333 | s32 | ||
334 | brcmf_fil_bsscfg_int_get(struct net_device *ndev, s32 bssidx, char *name, | ||
335 | u32 *data) | ||
336 | { | ||
337 | __le32 data_le = cpu_to_le32(*data); | ||
338 | s32 err; | ||
339 | |||
340 | err = brcmf_fil_bsscfg_data_get(ndev, bssidx, name, &data_le, | ||
341 | sizeof(data_le)); | ||
342 | if (err == 0) | ||
343 | *data = le32_to_cpu(data_le); | ||
344 | return err; | ||
345 | } | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwil.h b/drivers/net/wireless/brcm80211/brcmfmac/fwil.h new file mode 100644 index 00000000000..54855ef0f0a --- /dev/null +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2012 Broadcom Corporation | ||
3 | * | ||
4 | * Permission to use, copy, modify, and/or distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | ||
11 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | ||
13 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||
14 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
17 | #ifndef _fwil_h_ | ||
18 | #define _fwil_h_ | ||
19 | |||
20 | s32 brcmf_fil_cmd_data_set(struct net_device *ndev, u32 cmd, void *data, | ||
21 | u32 len); | ||
22 | s32 brcmf_fil_cmd_data_get(struct net_device *ndev, u32 cmd, void *data, | ||
23 | u32 len); | ||
24 | s32 brcmf_fil_cmd_int_set(struct net_device *ndev, u32 cmd, u32 data); | ||
25 | s32 brcmf_fil_cmd_int_get(struct net_device *ndev, u32 cmd, u32 *data); | ||
26 | |||
27 | s32 brcmf_fil_iovar_data_set(struct net_device *ndev, char *name, void *data, | ||
28 | u32 len); | ||
29 | s32 brcmf_fil_iovar_data_get(struct net_device *ndev, char *name, void *data, | ||
30 | u32 len); | ||
31 | s32 brcmf_fil_iovar_int_set(struct net_device *ndev, char *name, u32 data); | ||
32 | s32 brcmf_fil_iovar_int_get(struct net_device *ndev, char *name, u32 *data); | ||
33 | |||
34 | s32 brcmf_fil_bsscfg_data_set(struct net_device *ndev, s32 bssidx, char *name, | ||
35 | void *data, u32 len); | ||
36 | s32 brcmf_fil_bsscfg_data_get(struct net_device *ndev, s32 bssidx, char *name, | ||
37 | void *data, u32 len); | ||
38 | s32 brcmf_fil_bsscfg_int_set(struct net_device *ndev, s32 bssidx, char *name, | ||
39 | u32 data); | ||
40 | s32 brcmf_fil_bsscfg_int_get(struct net_device *ndev, s32 bssidx, char *name, | ||
41 | u32 *data); | ||
42 | |||
43 | #endif /* _fwil_h_ */ | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c index fdbfa204e5d..0beb2c6db2a 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <brcmu_wifi.h> | 35 | #include <brcmu_wifi.h> |
36 | #include "dhd.h" | 36 | #include "dhd.h" |
37 | #include "wl_cfg80211.h" | 37 | #include "wl_cfg80211.h" |
38 | #include "fwil.h" | ||
38 | 39 | ||
39 | #define BRCMF_SCAN_IE_LEN_MAX 2048 | 40 | #define BRCMF_SCAN_IE_LEN_MAX 2048 |
40 | #define BRCMF_PNO_VERSION 2 | 41 | #define BRCMF_PNO_VERSION 2 |
@@ -391,57 +392,6 @@ static u8 brcmf_mw_to_qdbm(u16 mw) | |||
391 | return qdbm; | 392 | return qdbm; |
392 | } | 393 | } |
393 | 394 | ||
394 | /* function for reading/writing a single u32 from/to the dongle */ | ||
395 | static int | ||
396 | brcmf_exec_dcmd_u32(struct net_device *ndev, u32 cmd, u32 *par) | ||
397 | { | ||
398 | int err; | ||
399 | __le32 par_le = cpu_to_le32(*par); | ||
400 | |||
401 | err = brcmf_exec_dcmd(ndev, cmd, &par_le, sizeof(__le32)); | ||
402 | *par = le32_to_cpu(par_le); | ||
403 | |||
404 | return err; | ||
405 | } | ||
406 | |||
407 | static s32 | ||
408 | brcmf_dev_iovar_setbuf_bsscfg(struct net_device *ndev, s8 *name, | ||
409 | void *param, s32 paramlen, | ||
410 | void *buf, s32 buflen, s32 bssidx) | ||
411 | { | ||
412 | s32 err = -ENOMEM; | ||
413 | u32 len; | ||
414 | |||
415 | len = brcmf_c_mkiovar_bsscfg(name, param, paramlen, | ||
416 | buf, buflen, bssidx); | ||
417 | BUG_ON(!len); | ||
418 | if (len > 0) | ||
419 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, buf, len); | ||
420 | if (err) | ||
421 | WL_ERR("error (%d)\n", err); | ||
422 | |||
423 | return err; | ||
424 | } | ||
425 | |||
426 | static s32 | ||
427 | brcmf_dev_iovar_getbuf_bsscfg(struct net_device *ndev, s8 *name, | ||
428 | void *param, s32 paramlen, | ||
429 | void *buf, s32 buflen, s32 bssidx) | ||
430 | { | ||
431 | s32 err = -ENOMEM; | ||
432 | u32 len; | ||
433 | |||
434 | len = brcmf_c_mkiovar_bsscfg(name, param, paramlen, | ||
435 | buf, buflen, bssidx); | ||
436 | BUG_ON(!len); | ||
437 | if (len > 0) | ||
438 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_VAR, buf, len); | ||
439 | if (err) | ||
440 | WL_ERR("error (%d)\n", err); | ||
441 | |||
442 | return err; | ||
443 | } | ||
444 | |||
445 | static void convert_key_from_CPU(struct brcmf_wsec_key *key, | 395 | static void convert_key_from_CPU(struct brcmf_wsec_key *key, |
446 | struct brcmf_wsec_key_le *key_le) | 396 | struct brcmf_wsec_key_le *key_le) |
447 | { | 397 | { |
@@ -465,10 +415,10 @@ send_key_to_dongle(struct brcmf_cfg80211_info *cfg, s32 bssidx, | |||
465 | 415 | ||
466 | convert_key_from_CPU(key, &key_le); | 416 | convert_key_from_CPU(key, &key_le); |
467 | 417 | ||
468 | err = brcmf_dev_iovar_setbuf_bsscfg(ndev, "wsec_key", &key_le, | 418 | brcmf_netdev_wait_pend8021x(ndev); |
469 | sizeof(key_le), | 419 | |
470 | cfg->extra_buf, | 420 | err = brcmf_fil_bsscfg_data_set(ndev, bssidx, "wsec_key", &key_le, |
471 | WL_EXTRA_BUF_MAX, bssidx); | 421 | sizeof(key_le)); |
472 | 422 | ||
473 | if (err) | 423 | if (err) |
474 | WL_ERR("wsec_key error (%d)\n", err); | 424 | WL_ERR("wsec_key error (%d)\n", err); |
@@ -521,7 +471,7 @@ brcmf_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev, | |||
521 | } | 471 | } |
522 | WL_INFO("IF Type = AP\n"); | 472 | WL_INFO("IF Type = AP\n"); |
523 | } else { | 473 | } else { |
524 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_INFRA, &infra); | 474 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_INFRA, infra); |
525 | if (err) { | 475 | if (err) { |
526 | WL_ERR("WLC_SET_INFRA error (%d)\n", err); | 476 | WL_ERR("WLC_SET_INFRA error (%d)\n", err); |
527 | err = -EAGAIN; | 477 | err = -EAGAIN; |
@@ -539,82 +489,6 @@ done: | |||
539 | return err; | 489 | return err; |
540 | } | 490 | } |
541 | 491 | ||
542 | static s32 brcmf_dev_intvar_set(struct net_device *ndev, s8 *name, s32 val) | ||
543 | { | ||
544 | s8 buf[BRCMF_DCMD_SMLEN]; | ||
545 | u32 len; | ||
546 | s32 err = 0; | ||
547 | __le32 val_le; | ||
548 | |||
549 | val_le = cpu_to_le32(val); | ||
550 | len = brcmf_c_mkiovar(name, (char *)(&val_le), sizeof(val_le), buf, | ||
551 | sizeof(buf)); | ||
552 | BUG_ON(!len); | ||
553 | |||
554 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, buf, len); | ||
555 | if (err) | ||
556 | WL_ERR("error (%d)\n", err); | ||
557 | |||
558 | return err; | ||
559 | } | ||
560 | |||
561 | static s32 | ||
562 | brcmf_dev_intvar_get(struct net_device *ndev, s8 *name, s32 *retval) | ||
563 | { | ||
564 | union { | ||
565 | s8 buf[BRCMF_DCMD_SMLEN]; | ||
566 | __le32 val; | ||
567 | } var; | ||
568 | u32 len; | ||
569 | u32 data_null; | ||
570 | s32 err = 0; | ||
571 | |||
572 | len = | ||
573 | brcmf_c_mkiovar(name, (char *)(&data_null), 0, (char *)(&var), | ||
574 | sizeof(var.buf)); | ||
575 | BUG_ON(!len); | ||
576 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_VAR, &var, len); | ||
577 | if (err) | ||
578 | WL_ERR("error (%d)\n", err); | ||
579 | |||
580 | *retval = le32_to_cpu(var.val); | ||
581 | |||
582 | return err; | ||
583 | } | ||
584 | |||
585 | static s32 | ||
586 | brcmf_dev_intvar_set_bsscfg(struct net_device *ndev, s8 *name, u32 val, | ||
587 | s32 bssidx) | ||
588 | { | ||
589 | s8 buf[BRCMF_DCMD_SMLEN]; | ||
590 | __le32 val_le; | ||
591 | |||
592 | val_le = cpu_to_le32(val); | ||
593 | |||
594 | return brcmf_dev_iovar_setbuf_bsscfg(ndev, name, &val_le, | ||
595 | sizeof(val_le), buf, sizeof(buf), | ||
596 | bssidx); | ||
597 | } | ||
598 | |||
599 | static s32 | ||
600 | brcmf_dev_intvar_get_bsscfg(struct net_device *ndev, s8 *name, s32 *val, | ||
601 | s32 bssidx) | ||
602 | { | ||
603 | s8 buf[BRCMF_DCMD_SMLEN]; | ||
604 | s32 err; | ||
605 | __le32 val_le; | ||
606 | |||
607 | memset(buf, 0, sizeof(buf)); | ||
608 | err = brcmf_dev_iovar_getbuf_bsscfg(ndev, name, val, sizeof(*val), buf, | ||
609 | sizeof(buf), bssidx); | ||
610 | if (err == 0) { | ||
611 | memcpy(&val_le, buf, sizeof(val_le)); | ||
612 | *val = le32_to_cpu(val_le); | ||
613 | } | ||
614 | return err; | ||
615 | } | ||
616 | |||
617 | |||
618 | /* | 492 | /* |
619 | * For now brcmf_find_bssidx will return 0. Once p2p gets implemented this | 493 | * For now brcmf_find_bssidx will return 0. Once p2p gets implemented this |
620 | * should return the ndev matching bssidx. | 494 | * should return the ndev matching bssidx. |
@@ -631,7 +505,7 @@ static void brcmf_set_mpc(struct net_device *ndev, int mpc) | |||
631 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); | 505 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); |
632 | 506 | ||
633 | if (test_bit(WL_STATUS_READY, &cfg->status)) { | 507 | if (test_bit(WL_STATUS_READY, &cfg->status)) { |
634 | err = brcmf_dev_intvar_set(ndev, "mpc", mpc); | 508 | err = brcmf_fil_iovar_int_set(ndev, "mpc", mpc); |
635 | if (err) { | 509 | if (err) { |
636 | WL_ERR("fail to set mpc\n"); | 510 | WL_ERR("fail to set mpc\n"); |
637 | return; | 511 | return; |
@@ -658,30 +532,6 @@ static void brcmf_iscan_prep(struct brcmf_scan_params_le *params_le, | |||
658 | } | 532 | } |
659 | 533 | ||
660 | static s32 | 534 | static s32 |
661 | brcmf_dev_iovar_setbuf(struct net_device *ndev, s8 * iovar, void *param, | ||
662 | s32 paramlen, void *bufptr, s32 buflen) | ||
663 | { | ||
664 | s32 iolen; | ||
665 | |||
666 | iolen = brcmf_c_mkiovar(iovar, param, paramlen, bufptr, buflen); | ||
667 | BUG_ON(!iolen); | ||
668 | |||
669 | return brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, bufptr, iolen); | ||
670 | } | ||
671 | |||
672 | static s32 | ||
673 | brcmf_dev_iovar_getbuf(struct net_device *ndev, s8 * iovar, void *param, | ||
674 | s32 paramlen, void *bufptr, s32 buflen) | ||
675 | { | ||
676 | s32 iolen; | ||
677 | |||
678 | iolen = brcmf_c_mkiovar(iovar, param, paramlen, bufptr, buflen); | ||
679 | BUG_ON(!iolen); | ||
680 | |||
681 | return brcmf_exec_dcmd(ndev, BRCMF_C_GET_VAR, bufptr, buflen); | ||
682 | } | ||
683 | |||
684 | static s32 | ||
685 | brcmf_run_iscan(struct brcmf_cfg80211_iscan_ctrl *iscan, | 535 | brcmf_run_iscan(struct brcmf_cfg80211_iscan_ctrl *iscan, |
686 | struct brcmf_ssid *ssid, u16 action) | 536 | struct brcmf_ssid *ssid, u16 action) |
687 | { | 537 | { |
@@ -703,8 +553,8 @@ brcmf_run_iscan(struct brcmf_cfg80211_iscan_ctrl *iscan, | |||
703 | params->action = cpu_to_le16(action); | 553 | params->action = cpu_to_le16(action); |
704 | params->scan_duration = cpu_to_le16(0); | 554 | params->scan_duration = cpu_to_le16(0); |
705 | 555 | ||
706 | err = brcmf_dev_iovar_setbuf(iscan->ndev, "iscan", params, params_size, | 556 | err = brcmf_fil_iovar_data_set(iscan->ndev, "iscan", params, |
707 | iscan->dcmd_buf, BRCMF_DCMD_SMLEN); | 557 | params_size); |
708 | if (err) { | 558 | if (err) { |
709 | if (err == -EBUSY) | 559 | if (err == -EBUSY) |
710 | WL_INFO("system busy : iscan canceled\n"); | 560 | WL_INFO("system busy : iscan canceled\n"); |
@@ -721,7 +571,7 @@ static s32 brcmf_do_iscan(struct brcmf_cfg80211_info *cfg) | |||
721 | struct brcmf_cfg80211_iscan_ctrl *iscan = cfg_to_iscan(cfg); | 571 | struct brcmf_cfg80211_iscan_ctrl *iscan = cfg_to_iscan(cfg); |
722 | struct net_device *ndev = cfg_to_ndev(cfg); | 572 | struct net_device *ndev = cfg_to_ndev(cfg); |
723 | struct brcmf_ssid ssid; | 573 | struct brcmf_ssid ssid; |
724 | __le32 passive_scan; | 574 | u32 passive_scan; |
725 | s32 err = 0; | 575 | s32 err = 0; |
726 | 576 | ||
727 | /* Broadcast scan by default */ | 577 | /* Broadcast scan by default */ |
@@ -729,9 +579,9 @@ static s32 brcmf_do_iscan(struct brcmf_cfg80211_info *cfg) | |||
729 | 579 | ||
730 | iscan->state = WL_ISCAN_STATE_SCANING; | 580 | iscan->state = WL_ISCAN_STATE_SCANING; |
731 | 581 | ||
732 | passive_scan = cfg->active_scan ? 0 : cpu_to_le32(1); | 582 | passive_scan = cfg->active_scan ? 0 : 1; |
733 | err = brcmf_exec_dcmd(cfg_to_ndev(cfg), BRCMF_C_SET_PASSIVE_SCAN, | 583 | err = brcmf_fil_cmd_int_set(cfg_to_ndev(cfg), |
734 | &passive_scan, sizeof(passive_scan)); | 584 | BRCMF_C_SET_PASSIVE_SCAN, passive_scan); |
735 | if (err) { | 585 | if (err) { |
736 | WL_ERR("error (%d)\n", err); | 586 | WL_ERR("error (%d)\n", err); |
737 | return err; | 587 | return err; |
@@ -757,7 +607,7 @@ brcmf_cfg80211_iscan(struct wiphy *wiphy, struct net_device *ndev, | |||
757 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); | 607 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); |
758 | struct cfg80211_ssid *ssids; | 608 | struct cfg80211_ssid *ssids; |
759 | struct brcmf_cfg80211_scan_req *sr = cfg->scan_req_int; | 609 | struct brcmf_cfg80211_scan_req *sr = cfg->scan_req_int; |
760 | __le32 passive_scan; | 610 | u32 passive_scan; |
761 | bool iscan_req; | 611 | bool iscan_req; |
762 | bool spec_scan; | 612 | bool spec_scan; |
763 | s32 err = 0; | 613 | s32 err = 0; |
@@ -813,16 +663,16 @@ brcmf_cfg80211_iscan(struct wiphy *wiphy, struct net_device *ndev, | |||
813 | WL_SCAN("Broadcast scan\n"); | 663 | WL_SCAN("Broadcast scan\n"); |
814 | } | 664 | } |
815 | 665 | ||
816 | passive_scan = cfg->active_scan ? 0 : cpu_to_le32(1); | 666 | passive_scan = cfg->active_scan ? 0 : 1; |
817 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_PASSIVE_SCAN, | 667 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_PASSIVE_SCAN, |
818 | &passive_scan, sizeof(passive_scan)); | 668 | passive_scan); |
819 | if (err) { | 669 | if (err) { |
820 | WL_ERR("WLC_SET_PASSIVE_SCAN error (%d)\n", err); | 670 | WL_ERR("WLC_SET_PASSIVE_SCAN error (%d)\n", err); |
821 | goto scan_out; | 671 | goto scan_out; |
822 | } | 672 | } |
823 | brcmf_set_mpc(ndev, 0); | 673 | brcmf_set_mpc(ndev, 0); |
824 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SCAN, &sr->ssid_le, | 674 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SCAN, &sr->ssid_le, |
825 | sizeof(sr->ssid_le)); | 675 | sizeof(sr->ssid_le)); |
826 | if (err) { | 676 | if (err) { |
827 | if (err == -EBUSY) | 677 | if (err == -EBUSY) |
828 | WL_INFO("system busy : scan for \"%s\" " | 678 | WL_INFO("system busy : scan for \"%s\" " |
@@ -977,8 +827,8 @@ brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg, | |||
977 | /* Scan is aborted by setting channel_list[0] to -1 */ | 827 | /* Scan is aborted by setting channel_list[0] to -1 */ |
978 | params_le.channel_list[0] = cpu_to_le16(-1); | 828 | params_le.channel_list[0] = cpu_to_le16(-1); |
979 | /* E-Scan (or anyother type) can be aborted by SCAN */ | 829 | /* E-Scan (or anyother type) can be aborted by SCAN */ |
980 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SCAN, ¶ms_le, | 830 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SCAN, ¶ms_le, |
981 | sizeof(params_le)); | 831 | sizeof(params_le)); |
982 | if (err) | 832 | if (err) |
983 | WL_ERR("Scan abort failed\n"); | 833 | WL_ERR("Scan abort failed\n"); |
984 | } | 834 | } |
@@ -1036,8 +886,7 @@ brcmf_run_escan(struct brcmf_cfg80211_info *cfg, struct net_device *ndev, | |||
1036 | params->action = cpu_to_le16(action); | 886 | params->action = cpu_to_le16(action); |
1037 | params->sync_id = cpu_to_le16(0x1234); | 887 | params->sync_id = cpu_to_le16(0x1234); |
1038 | 888 | ||
1039 | err = brcmf_dev_iovar_setbuf(ndev, "escan", params, params_size, | 889 | err = brcmf_fil_iovar_data_set(ndev, "escan", params, params_size); |
1040 | cfg->escan_ioctl_buf, BRCMF_DCMD_MEDLEN); | ||
1041 | if (err) { | 890 | if (err) { |
1042 | if (err == -EBUSY) | 891 | if (err == -EBUSY) |
1043 | WL_INFO("system busy : escan canceled\n"); | 892 | WL_INFO("system busy : escan canceled\n"); |
@@ -1055,16 +904,16 @@ brcmf_do_escan(struct brcmf_cfg80211_info *cfg, struct wiphy *wiphy, | |||
1055 | struct net_device *ndev, struct cfg80211_scan_request *request) | 904 | struct net_device *ndev, struct cfg80211_scan_request *request) |
1056 | { | 905 | { |
1057 | s32 err; | 906 | s32 err; |
1058 | __le32 passive_scan; | 907 | u32 passive_scan; |
1059 | struct brcmf_scan_results *results; | 908 | struct brcmf_scan_results *results; |
1060 | 909 | ||
1061 | WL_SCAN("Enter\n"); | 910 | WL_SCAN("Enter\n"); |
1062 | cfg->escan_info.ndev = ndev; | 911 | cfg->escan_info.ndev = ndev; |
1063 | cfg->escan_info.wiphy = wiphy; | 912 | cfg->escan_info.wiphy = wiphy; |
1064 | cfg->escan_info.escan_state = WL_ESCAN_STATE_SCANNING; | 913 | cfg->escan_info.escan_state = WL_ESCAN_STATE_SCANNING; |
1065 | passive_scan = cfg->active_scan ? 0 : cpu_to_le32(1); | 914 | passive_scan = cfg->active_scan ? 0 : 1; |
1066 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_PASSIVE_SCAN, | 915 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_PASSIVE_SCAN, |
1067 | &passive_scan, sizeof(passive_scan)); | 916 | passive_scan); |
1068 | if (err) { | 917 | if (err) { |
1069 | WL_ERR("error (%d)\n", err); | 918 | WL_ERR("error (%d)\n", err); |
1070 | return err; | 919 | return err; |
@@ -1089,7 +938,7 @@ brcmf_cfg80211_escan(struct wiphy *wiphy, struct net_device *ndev, | |||
1089 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); | 938 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); |
1090 | struct cfg80211_ssid *ssids; | 939 | struct cfg80211_ssid *ssids; |
1091 | struct brcmf_cfg80211_scan_req *sr = cfg->scan_req_int; | 940 | struct brcmf_cfg80211_scan_req *sr = cfg->scan_req_int; |
1092 | __le32 passive_scan; | 941 | u32 passive_scan; |
1093 | bool escan_req; | 942 | bool escan_req; |
1094 | bool spec_scan; | 943 | bool spec_scan; |
1095 | s32 err; | 944 | s32 err; |
@@ -1149,16 +998,16 @@ brcmf_cfg80211_escan(struct wiphy *wiphy, struct net_device *ndev, | |||
1149 | } else | 998 | } else |
1150 | WL_SCAN("Broadcast scan\n"); | 999 | WL_SCAN("Broadcast scan\n"); |
1151 | 1000 | ||
1152 | passive_scan = cfg->active_scan ? 0 : cpu_to_le32(1); | 1001 | passive_scan = cfg->active_scan ? 0 : 1; |
1153 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_PASSIVE_SCAN, | 1002 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_PASSIVE_SCAN, |
1154 | &passive_scan, sizeof(passive_scan)); | 1003 | passive_scan); |
1155 | if (err) { | 1004 | if (err) { |
1156 | WL_ERR("WLC_SET_PASSIVE_SCAN error (%d)\n", err); | 1005 | WL_ERR("WLC_SET_PASSIVE_SCAN error (%d)\n", err); |
1157 | goto scan_out; | 1006 | goto scan_out; |
1158 | } | 1007 | } |
1159 | brcmf_set_mpc(ndev, 0); | 1008 | brcmf_set_mpc(ndev, 0); |
1160 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SCAN, &sr->ssid_le, | 1009 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SCAN, &sr->ssid_le, |
1161 | sizeof(sr->ssid_le)); | 1010 | sizeof(sr->ssid_le)); |
1162 | if (err) { | 1011 | if (err) { |
1163 | if (err == -EBUSY) | 1012 | if (err == -EBUSY) |
1164 | WL_INFO("BUSY: scan for \"%s\" canceled\n", | 1013 | WL_INFO("BUSY: scan for \"%s\" canceled\n", |
@@ -1210,7 +1059,7 @@ static s32 brcmf_set_rts(struct net_device *ndev, u32 rts_threshold) | |||
1210 | { | 1059 | { |
1211 | s32 err = 0; | 1060 | s32 err = 0; |
1212 | 1061 | ||
1213 | err = brcmf_dev_intvar_set(ndev, "rtsthresh", rts_threshold); | 1062 | err = brcmf_fil_iovar_int_set(ndev, "rtsthresh", rts_threshold); |
1214 | if (err) | 1063 | if (err) |
1215 | WL_ERR("Error (%d)\n", err); | 1064 | WL_ERR("Error (%d)\n", err); |
1216 | 1065 | ||
@@ -1221,7 +1070,7 @@ static s32 brcmf_set_frag(struct net_device *ndev, u32 frag_threshold) | |||
1221 | { | 1070 | { |
1222 | s32 err = 0; | 1071 | s32 err = 0; |
1223 | 1072 | ||
1224 | err = brcmf_dev_intvar_set(ndev, "fragthresh", frag_threshold); | 1073 | err = brcmf_fil_iovar_int_set(ndev, "fragthresh", frag_threshold); |
1225 | if (err) | 1074 | if (err) |
1226 | WL_ERR("Error (%d)\n", err); | 1075 | WL_ERR("Error (%d)\n", err); |
1227 | 1076 | ||
@@ -1233,7 +1082,7 @@ static s32 brcmf_set_retry(struct net_device *ndev, u32 retry, bool l) | |||
1233 | s32 err = 0; | 1082 | s32 err = 0; |
1234 | u32 cmd = (l ? BRCM_SET_LRL : BRCM_SET_SRL); | 1083 | u32 cmd = (l ? BRCM_SET_LRL : BRCM_SET_SRL); |
1235 | 1084 | ||
1236 | err = brcmf_exec_dcmd_u32(ndev, cmd, &retry); | 1085 | err = brcmf_fil_cmd_int_set(ndev, cmd, retry); |
1237 | if (err) { | 1086 | if (err) { |
1238 | WL_ERR("cmd (%d) , error (%d)\n", cmd, err); | 1087 | WL_ERR("cmd (%d) , error (%d)\n", cmd, err); |
1239 | return err; | 1088 | return err; |
@@ -1327,7 +1176,7 @@ static void brcmf_link_down(struct brcmf_cfg80211_info *cfg) | |||
1327 | if (cfg->link_up) { | 1176 | if (cfg->link_up) { |
1328 | ndev = cfg_to_ndev(cfg); | 1177 | ndev = cfg_to_ndev(cfg); |
1329 | WL_INFO("Call WLC_DISASSOC to stop excess roaming\n "); | 1178 | WL_INFO("Call WLC_DISASSOC to stop excess roaming\n "); |
1330 | err = brcmf_exec_dcmd(ndev, BRCMF_C_DISASSOC, NULL, 0); | 1179 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_DISASSOC, NULL, 0); |
1331 | if (err) | 1180 | if (err) |
1332 | WL_ERR("WLC_DISASSOC failed (%d)\n", err); | 1181 | WL_ERR("WLC_DISASSOC failed (%d)\n", err); |
1333 | cfg->link_up = false; | 1182 | cfg->link_up = false; |
@@ -1399,7 +1248,7 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev, | |||
1399 | if (params->privacy) | 1248 | if (params->privacy) |
1400 | wsec |= WEP_ENABLED; | 1249 | wsec |= WEP_ENABLED; |
1401 | 1250 | ||
1402 | err = brcmf_dev_intvar_set(ndev, "wsec", wsec); | 1251 | err = brcmf_fil_iovar_int_set(ndev, "wsec", wsec); |
1403 | if (err) { | 1252 | if (err) { |
1404 | WL_ERR("wsec failed (%d)\n", err); | 1253 | WL_ERR("wsec failed (%d)\n", err); |
1405 | goto done; | 1254 | goto done; |
@@ -1411,7 +1260,7 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev, | |||
1411 | else | 1260 | else |
1412 | bcnprd = 100; | 1261 | bcnprd = 100; |
1413 | 1262 | ||
1414 | err = brcmf_exec_dcmd_u32(ndev, BRCM_SET_BCNPRD, &bcnprd); | 1263 | err = brcmf_fil_cmd_int_set(ndev, BRCM_SET_BCNPRD, bcnprd); |
1415 | if (err) { | 1264 | if (err) { |
1416 | WL_ERR("WLC_SET_BCNPRD failed (%d)\n", err); | 1265 | WL_ERR("WLC_SET_BCNPRD failed (%d)\n", err); |
1417 | goto done; | 1266 | goto done; |
@@ -1453,8 +1302,8 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev, | |||
1453 | 1302 | ||
1454 | /* set channel for starter */ | 1303 | /* set channel for starter */ |
1455 | target_channel = cfg->channel; | 1304 | target_channel = cfg->channel; |
1456 | err = brcmf_exec_dcmd_u32(ndev, BRCM_SET_CHANNEL, | 1305 | err = brcmf_fil_cmd_int_set(ndev, BRCM_SET_CHANNEL, |
1457 | &target_channel); | 1306 | target_channel); |
1458 | if (err) { | 1307 | if (err) { |
1459 | WL_ERR("WLC_SET_CHANNEL failed (%d)\n", err); | 1308 | WL_ERR("WLC_SET_CHANNEL failed (%d)\n", err); |
1460 | goto done; | 1309 | goto done; |
@@ -1465,8 +1314,8 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev, | |||
1465 | cfg->ibss_starter = false; | 1314 | cfg->ibss_starter = false; |
1466 | 1315 | ||
1467 | 1316 | ||
1468 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_SSID, | 1317 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SET_SSID, |
1469 | &join_params, join_params_size); | 1318 | &join_params, join_params_size); |
1470 | if (err) { | 1319 | if (err) { |
1471 | WL_ERR("WLC_SET_SSID failed (%d)\n", err); | 1320 | WL_ERR("WLC_SET_SSID failed (%d)\n", err); |
1472 | goto done; | 1321 | goto done; |
@@ -1512,7 +1361,7 @@ static s32 brcmf_set_wpa_version(struct net_device *ndev, | |||
1512 | else | 1361 | else |
1513 | val = WPA_AUTH_DISABLED; | 1362 | val = WPA_AUTH_DISABLED; |
1514 | WL_CONN("setting wpa_auth to 0x%0x\n", val); | 1363 | WL_CONN("setting wpa_auth to 0x%0x\n", val); |
1515 | err = brcmf_dev_intvar_set(ndev, "wpa_auth", val); | 1364 | err = brcmf_fil_iovar_int_set(ndev, "wpa_auth", val); |
1516 | if (err) { | 1365 | if (err) { |
1517 | WL_ERR("set wpa_auth failed (%d)\n", err); | 1366 | WL_ERR("set wpa_auth failed (%d)\n", err); |
1518 | return err; | 1367 | return err; |
@@ -1552,7 +1401,7 @@ static s32 brcmf_set_auth_type(struct net_device *ndev, | |||
1552 | break; | 1401 | break; |
1553 | } | 1402 | } |
1554 | 1403 | ||
1555 | err = brcmf_dev_intvar_set(ndev, "auth", val); | 1404 | err = brcmf_fil_iovar_int_set(ndev, "auth", val); |
1556 | if (err) { | 1405 | if (err) { |
1557 | WL_ERR("set auth failed (%d)\n", err); | 1406 | WL_ERR("set auth failed (%d)\n", err); |
1558 | return err; | 1407 | return err; |
@@ -1617,7 +1466,7 @@ brcmf_set_set_cipher(struct net_device *ndev, | |||
1617 | } | 1466 | } |
1618 | 1467 | ||
1619 | WL_CONN("pval (%d) gval (%d)\n", pval, gval); | 1468 | WL_CONN("pval (%d) gval (%d)\n", pval, gval); |
1620 | err = brcmf_dev_intvar_set(ndev, "wsec", pval | gval); | 1469 | err = brcmf_fil_iovar_int_set(ndev, "wsec", pval | gval); |
1621 | if (err) { | 1470 | if (err) { |
1622 | WL_ERR("error (%d)\n", err); | 1471 | WL_ERR("error (%d)\n", err); |
1623 | return err; | 1472 | return err; |
@@ -1640,7 +1489,7 @@ brcmf_set_key_mgmt(struct net_device *ndev, struct cfg80211_connect_params *sme) | |||
1640 | s32 err = 0; | 1489 | s32 err = 0; |
1641 | 1490 | ||
1642 | if (sme->crypto.n_akm_suites) { | 1491 | if (sme->crypto.n_akm_suites) { |
1643 | err = brcmf_dev_intvar_get(ndev, "wpa_auth", &val); | 1492 | err = brcmf_fil_iovar_int_get(ndev, "wpa_auth", &val); |
1644 | if (err) { | 1493 | if (err) { |
1645 | WL_ERR("could not get wpa_auth (%d)\n", err); | 1494 | WL_ERR("could not get wpa_auth (%d)\n", err); |
1646 | return err; | 1495 | return err; |
@@ -1674,7 +1523,7 @@ brcmf_set_key_mgmt(struct net_device *ndev, struct cfg80211_connect_params *sme) | |||
1674 | } | 1523 | } |
1675 | 1524 | ||
1676 | WL_CONN("setting wpa_auth to %d\n", val); | 1525 | WL_CONN("setting wpa_auth to %d\n", val); |
1677 | err = brcmf_dev_intvar_set(ndev, "wpa_auth", val); | 1526 | err = brcmf_fil_iovar_int_set(ndev, "wpa_auth", val); |
1678 | if (err) { | 1527 | if (err) { |
1679 | WL_ERR("could not set wpa_auth (%d)\n", err); | 1528 | WL_ERR("could not set wpa_auth (%d)\n", err); |
1680 | return err; | 1529 | return err; |
@@ -1747,7 +1596,7 @@ brcmf_set_sharedkey(struct net_device *ndev, | |||
1747 | if (sec->auth_type == NL80211_AUTHTYPE_SHARED_KEY) { | 1596 | if (sec->auth_type == NL80211_AUTHTYPE_SHARED_KEY) { |
1748 | WL_CONN("set auth_type to shared key\n"); | 1597 | WL_CONN("set auth_type to shared key\n"); |
1749 | val = WL_AUTH_SHARED_KEY; /* shared key */ | 1598 | val = WL_AUTH_SHARED_KEY; /* shared key */ |
1750 | err = brcmf_dev_intvar_set_bsscfg(ndev, "auth", val, bssidx); | 1599 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "auth", val); |
1751 | if (err) | 1600 | if (err) |
1752 | WL_ERR("set auth failed (%d)\n", err); | 1601 | WL_ERR("set auth failed (%d)\n", err); |
1753 | } | 1602 | } |
@@ -1835,8 +1684,8 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev, | |||
1835 | 1684 | ||
1836 | brcmf_ch_to_chanspec(cfg->channel, | 1685 | brcmf_ch_to_chanspec(cfg->channel, |
1837 | &join_params, &join_params_size); | 1686 | &join_params, &join_params_size); |
1838 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_SSID, | 1687 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SET_SSID, |
1839 | &join_params, join_params_size); | 1688 | &join_params, join_params_size); |
1840 | if (err) | 1689 | if (err) |
1841 | WL_ERR("WLC_SET_SSID failed (%d)\n", err); | 1690 | WL_ERR("WLC_SET_SSID failed (%d)\n", err); |
1842 | 1691 | ||
@@ -1864,8 +1713,8 @@ brcmf_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *ndev, | |||
1864 | 1713 | ||
1865 | memcpy(&scbval.ea, &profile->bssid, ETH_ALEN); | 1714 | memcpy(&scbval.ea, &profile->bssid, ETH_ALEN); |
1866 | scbval.val = cpu_to_le32(reason_code); | 1715 | scbval.val = cpu_to_le32(reason_code); |
1867 | err = brcmf_exec_dcmd(ndev, BRCMF_C_DISASSOC, &scbval, | 1716 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_DISASSOC, &scbval, |
1868 | sizeof(struct brcmf_scb_val_le)); | 1717 | sizeof(struct brcmf_scb_val_le)); |
1869 | if (err) | 1718 | if (err) |
1870 | WL_ERR("error (%d)\n", err); | 1719 | WL_ERR("error (%d)\n", err); |
1871 | 1720 | ||
@@ -1905,7 +1754,7 @@ brcmf_cfg80211_set_tx_power(struct wiphy *wiphy, | |||
1905 | } | 1754 | } |
1906 | /* Make sure radio is off or on as far as software is concerned */ | 1755 | /* Make sure radio is off or on as far as software is concerned */ |
1907 | disable = WL_RADIO_SW_DISABLE << 16; | 1756 | disable = WL_RADIO_SW_DISABLE << 16; |
1908 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_RADIO, &disable); | 1757 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_RADIO, disable); |
1909 | if (err) | 1758 | if (err) |
1910 | WL_ERR("WLC_SET_RADIO error (%d)\n", err); | 1759 | WL_ERR("WLC_SET_RADIO error (%d)\n", err); |
1911 | 1760 | ||
@@ -1913,7 +1762,7 @@ brcmf_cfg80211_set_tx_power(struct wiphy *wiphy, | |||
1913 | txpwrmw = 0xffff; | 1762 | txpwrmw = 0xffff; |
1914 | else | 1763 | else |
1915 | txpwrmw = (u16) dbm; | 1764 | txpwrmw = (u16) dbm; |
1916 | err = brcmf_dev_intvar_set(ndev, "qtxpower", | 1765 | err = brcmf_fil_iovar_int_set(ndev, "qtxpower", |
1917 | (s32) (brcmf_mw_to_qdbm(txpwrmw))); | 1766 | (s32) (brcmf_mw_to_qdbm(txpwrmw))); |
1918 | if (err) | 1767 | if (err) |
1919 | WL_ERR("qtxpower error (%d)\n", err); | 1768 | WL_ERR("qtxpower error (%d)\n", err); |
@@ -1936,7 +1785,7 @@ static s32 brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, s32 *dbm) | |||
1936 | if (!check_sys_up(wiphy)) | 1785 | if (!check_sys_up(wiphy)) |
1937 | return -EIO; | 1786 | return -EIO; |
1938 | 1787 | ||
1939 | err = brcmf_dev_intvar_get(ndev, "qtxpower", &txpwrdbm); | 1788 | err = brcmf_fil_iovar_int_get(ndev, "qtxpower", &txpwrdbm); |
1940 | if (err) { | 1789 | if (err) { |
1941 | WL_ERR("error (%d)\n", err); | 1790 | WL_ERR("error (%d)\n", err); |
1942 | goto done; | 1791 | goto done; |
@@ -1966,7 +1815,7 @@ brcmf_cfg80211_config_default_key(struct wiphy *wiphy, struct net_device *ndev, | |||
1966 | return -EIO; | 1815 | return -EIO; |
1967 | 1816 | ||
1968 | bssidx = brcmf_find_bssidx(cfg, ndev); | 1817 | bssidx = brcmf_find_bssidx(cfg, ndev); |
1969 | err = brcmf_dev_intvar_get_bsscfg(ndev, "wsec", &wsec, bssidx); | 1818 | err = brcmf_fil_bsscfg_int_get(ndev, bssidx, "wsec", &wsec); |
1970 | if (err) { | 1819 | if (err) { |
1971 | WL_ERR("WLC_GET_WSEC error (%d)\n", err); | 1820 | WL_ERR("WLC_GET_WSEC error (%d)\n", err); |
1972 | goto done; | 1821 | goto done; |
@@ -1975,8 +1824,8 @@ brcmf_cfg80211_config_default_key(struct wiphy *wiphy, struct net_device *ndev, | |||
1975 | if (wsec & WEP_ENABLED) { | 1824 | if (wsec & WEP_ENABLED) { |
1976 | /* Just select a new current key */ | 1825 | /* Just select a new current key */ |
1977 | index = key_idx; | 1826 | index = key_idx; |
1978 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_KEY_PRIMARY, | 1827 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_KEY_PRIMARY, |
1979 | &index); | 1828 | index); |
1980 | if (err) | 1829 | if (err) |
1981 | WL_ERR("error (%d)\n", err); | 1830 | WL_ERR("error (%d)\n", err); |
1982 | } | 1831 | } |
@@ -1991,7 +1840,6 @@ brcmf_add_keyext(struct wiphy *wiphy, struct net_device *ndev, | |||
1991 | { | 1840 | { |
1992 | struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); | 1841 | struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); |
1993 | struct brcmf_wsec_key key; | 1842 | struct brcmf_wsec_key key; |
1994 | struct brcmf_wsec_key_le key_le; | ||
1995 | s32 err = 0; | 1843 | s32 err = 0; |
1996 | s32 bssidx; | 1844 | s32 bssidx; |
1997 | 1845 | ||
@@ -2061,13 +1909,7 @@ brcmf_add_keyext(struct wiphy *wiphy, struct net_device *ndev, | |||
2061 | WL_ERR("Invalid cipher (0x%x)\n", params->cipher); | 1909 | WL_ERR("Invalid cipher (0x%x)\n", params->cipher); |
2062 | return -EINVAL; | 1910 | return -EINVAL; |
2063 | } | 1911 | } |
2064 | convert_key_from_CPU(&key, &key_le); | 1912 | err = send_key_to_dongle(cfg, bssidx, ndev, &key); |
2065 | |||
2066 | brcmf_netdev_wait_pend8021x(ndev); | ||
2067 | err = brcmf_dev_iovar_setbuf_bsscfg(ndev, "wsec_key", &key_le, | ||
2068 | sizeof(key_le), | ||
2069 | cfg->extra_buf, | ||
2070 | WL_EXTRA_BUF_MAX, bssidx); | ||
2071 | if (err) | 1913 | if (err) |
2072 | WL_ERR("wsec_key error (%d)\n", err); | 1914 | WL_ERR("wsec_key error (%d)\n", err); |
2073 | } | 1915 | } |
@@ -2152,13 +1994,13 @@ brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev, | |||
2152 | if (err) | 1994 | if (err) |
2153 | goto done; | 1995 | goto done; |
2154 | 1996 | ||
2155 | err = brcmf_dev_intvar_get_bsscfg(ndev, "wsec", &wsec, bssidx); | 1997 | err = brcmf_fil_bsscfg_int_get(ndev, bssidx, "wsec", &wsec); |
2156 | if (err) { | 1998 | if (err) { |
2157 | WL_ERR("get wsec error (%d)\n", err); | 1999 | WL_ERR("get wsec error (%d)\n", err); |
2158 | goto done; | 2000 | goto done; |
2159 | } | 2001 | } |
2160 | wsec |= val; | 2002 | wsec |= val; |
2161 | err = brcmf_dev_intvar_set_bsscfg(ndev, "wsec", wsec, bssidx); | 2003 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "wsec", wsec); |
2162 | if (err) { | 2004 | if (err) { |
2163 | WL_ERR("set wsec error (%d)\n", err); | 2005 | WL_ERR("set wsec error (%d)\n", err); |
2164 | goto done; | 2006 | goto done; |
@@ -2228,7 +2070,7 @@ brcmf_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev, | |||
2228 | memset(¶ms, 0, sizeof(params)); | 2070 | memset(¶ms, 0, sizeof(params)); |
2229 | 2071 | ||
2230 | bssidx = brcmf_find_bssidx(cfg, ndev); | 2072 | bssidx = brcmf_find_bssidx(cfg, ndev); |
2231 | err = brcmf_dev_intvar_get_bsscfg(ndev, "wsec", &wsec, bssidx); | 2073 | err = brcmf_fil_bsscfg_int_get(ndev, bssidx, "wsec", &wsec); |
2232 | if (err) { | 2074 | if (err) { |
2233 | WL_ERR("WLC_GET_WSEC error (%d)\n", err); | 2075 | WL_ERR("WLC_GET_WSEC error (%d)\n", err); |
2234 | /* Ignore this error, may happen during DISASSOC */ | 2076 | /* Ignore this error, may happen during DISASSOC */ |
@@ -2286,27 +2128,25 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, | |||
2286 | s32 rate; | 2128 | s32 rate; |
2287 | s32 err = 0; | 2129 | s32 err = 0; |
2288 | u8 *bssid = profile->bssid; | 2130 | u8 *bssid = profile->bssid; |
2289 | struct brcmf_sta_info_le *sta_info_le; | 2131 | struct brcmf_sta_info_le sta_info_le; |
2290 | 2132 | ||
2291 | WL_TRACE("Enter, MAC %pM\n", mac); | 2133 | WL_TRACE("Enter, MAC %pM\n", mac); |
2292 | if (!check_sys_up(wiphy)) | 2134 | if (!check_sys_up(wiphy)) |
2293 | return -EIO; | 2135 | return -EIO; |
2294 | 2136 | ||
2295 | if (cfg->conf->mode == WL_MODE_AP) { | 2137 | if (cfg->conf->mode == WL_MODE_AP) { |
2296 | err = brcmf_dev_iovar_getbuf(ndev, "sta_info", mac, ETH_ALEN, | 2138 | memcpy(&sta_info_le, mac, ETH_ALEN); |
2297 | cfg->dcmd_buf, | 2139 | err = brcmf_fil_iovar_data_get(ndev, "sta_info", &sta_info_le, |
2298 | WL_DCMD_LEN_MAX); | 2140 | sizeof(sta_info_le)); |
2299 | if (err < 0) { | 2141 | if (err < 0) { |
2300 | WL_ERR("GET STA INFO failed, %d\n", err); | 2142 | WL_ERR("GET STA INFO failed, %d\n", err); |
2301 | goto done; | 2143 | goto done; |
2302 | } | 2144 | } |
2303 | sta_info_le = (struct brcmf_sta_info_le *)cfg->dcmd_buf; | ||
2304 | |||
2305 | sinfo->filled = STATION_INFO_INACTIVE_TIME; | 2145 | sinfo->filled = STATION_INFO_INACTIVE_TIME; |
2306 | sinfo->inactive_time = le32_to_cpu(sta_info_le->idle) * 1000; | 2146 | sinfo->inactive_time = le32_to_cpu(sta_info_le.idle) * 1000; |
2307 | if (le32_to_cpu(sta_info_le->flags) & BRCMF_STA_ASSOC) { | 2147 | if (le32_to_cpu(sta_info_le.flags) & BRCMF_STA_ASSOC) { |
2308 | sinfo->filled |= STATION_INFO_CONNECTED_TIME; | 2148 | sinfo->filled |= STATION_INFO_CONNECTED_TIME; |
2309 | sinfo->connected_time = le32_to_cpu(sta_info_le->in); | 2149 | sinfo->connected_time = le32_to_cpu(sta_info_le.in); |
2310 | } | 2150 | } |
2311 | WL_TRACE("STA idle time : %d ms, connected time :%d sec\n", | 2151 | WL_TRACE("STA idle time : %d ms, connected time :%d sec\n", |
2312 | sinfo->inactive_time, sinfo->connected_time); | 2152 | sinfo->inactive_time, sinfo->connected_time); |
@@ -2318,7 +2158,7 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, | |||
2318 | goto done; | 2158 | goto done; |
2319 | } | 2159 | } |
2320 | /* Report the current tx rate */ | 2160 | /* Report the current tx rate */ |
2321 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_GET_RATE, &rate); | 2161 | err = brcmf_fil_cmd_int_get(ndev, BRCMF_C_GET_RATE, &rate); |
2322 | if (err) { | 2162 | if (err) { |
2323 | WL_ERR("Could not get rate (%d)\n", err); | 2163 | WL_ERR("Could not get rate (%d)\n", err); |
2324 | goto done; | 2164 | goto done; |
@@ -2330,8 +2170,8 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, | |||
2330 | 2170 | ||
2331 | if (test_bit(WL_STATUS_CONNECTED, &cfg->status)) { | 2171 | if (test_bit(WL_STATUS_CONNECTED, &cfg->status)) { |
2332 | memset(&scb_val, 0, sizeof(scb_val)); | 2172 | memset(&scb_val, 0, sizeof(scb_val)); |
2333 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_RSSI, &scb_val, | 2173 | err = brcmf_fil_cmd_data_get(ndev, BRCMF_C_GET_RSSI, &scb_val, |
2334 | sizeof(scb_val)); | 2174 | sizeof(struct brcmf_scb_val_le)); |
2335 | if (err) { | 2175 | if (err) { |
2336 | WL_ERR("Could not get rssi (%d)\n", err); | 2176 | WL_ERR("Could not get rssi (%d)\n", err); |
2337 | goto done; | 2177 | goto done; |
@@ -2376,7 +2216,7 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, | |||
2376 | pm = enabled ? PM_FAST : PM_OFF; | 2216 | pm = enabled ? PM_FAST : PM_OFF; |
2377 | WL_INFO("power save %s\n", (pm ? "enabled" : "disabled")); | 2217 | WL_INFO("power save %s\n", (pm ? "enabled" : "disabled")); |
2378 | 2218 | ||
2379 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_PM, &pm); | 2219 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_PM, pm); |
2380 | if (err) { | 2220 | if (err) { |
2381 | if (err == -ENODEV) | 2221 | if (err == -ENODEV) |
2382 | WL_ERR("net_device is not ready yet\n"); | 2222 | WL_ERR("net_device is not ready yet\n"); |
@@ -2407,8 +2247,8 @@ brcmf_cfg80211_set_bitrate_mask(struct wiphy *wiphy, struct net_device *ndev, | |||
2407 | 2247 | ||
2408 | /* addr param is always NULL. ignore it */ | 2248 | /* addr param is always NULL. ignore it */ |
2409 | /* Get current rateset */ | 2249 | /* Get current rateset */ |
2410 | err = brcmf_exec_dcmd(ndev, BRCM_GET_CURR_RATESET, &rateset_le, | 2250 | err = brcmf_fil_cmd_data_get(ndev, BRCM_GET_CURR_RATESET, &rateset_le, |
2411 | sizeof(rateset_le)); | 2251 | sizeof(rateset_le)); |
2412 | if (err) { | 2252 | if (err) { |
2413 | WL_ERR("could not get current rateset (%d)\n", err); | 2253 | WL_ERR("could not get current rateset (%d)\n", err); |
2414 | goto done; | 2254 | goto done; |
@@ -2435,8 +2275,8 @@ brcmf_cfg80211_set_bitrate_mask(struct wiphy *wiphy, struct net_device *ndev, | |||
2435 | * Set rate override, | 2275 | * Set rate override, |
2436 | * Since the is a/b/g-blind, both a/bg_rate are enforced. | 2276 | * Since the is a/b/g-blind, both a/bg_rate are enforced. |
2437 | */ | 2277 | */ |
2438 | err_bg = brcmf_dev_intvar_set(ndev, "bg_rate", rate); | 2278 | err_bg = brcmf_fil_iovar_int_set(ndev, "bg_rate", rate); |
2439 | err_a = brcmf_dev_intvar_set(ndev, "a_rate", rate); | 2279 | err_a = brcmf_fil_iovar_int_set(ndev, "a_rate", rate); |
2440 | if (err_bg && err_a) { | 2280 | if (err_bg && err_a) { |
2441 | WL_ERR("could not set fixed rate (%d) (%d)\n", err_bg, err_a); | 2281 | WL_ERR("could not set fixed rate (%d) (%d)\n", err_bg, err_a); |
2442 | err = err_bg | err_a; | 2282 | err = err_bg | err_a; |
@@ -2565,7 +2405,8 @@ static s32 wl_inform_ibss(struct brcmf_cfg80211_info *cfg, | |||
2565 | 2405 | ||
2566 | *(__le32 *)buf = cpu_to_le32(WL_BSS_INFO_MAX); | 2406 | *(__le32 *)buf = cpu_to_le32(WL_BSS_INFO_MAX); |
2567 | 2407 | ||
2568 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_BSS_INFO, buf, WL_BSS_INFO_MAX); | 2408 | err = brcmf_fil_cmd_data_get(ndev, BRCMF_C_GET_BSS_INFO, buf, |
2409 | WL_BSS_INFO_MAX); | ||
2569 | if (err) { | 2410 | if (err) { |
2570 | WL_ERR("WLC_GET_BSS_INFO failed: %d\n", err); | 2411 | WL_ERR("WLC_GET_BSS_INFO failed: %d\n", err); |
2571 | goto CleanUp; | 2412 | goto CleanUp; |
@@ -2706,8 +2547,9 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg) | |||
2706 | ssid = &profile->ssid; | 2547 | ssid = &profile->ssid; |
2707 | 2548 | ||
2708 | *(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX); | 2549 | *(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX); |
2709 | err = brcmf_exec_dcmd(cfg_to_ndev(cfg), BRCMF_C_GET_BSS_INFO, | 2550 | err = brcmf_fil_cmd_data_get(cfg_to_ndev(cfg), |
2710 | cfg->extra_buf, WL_EXTRA_BUF_MAX); | 2551 | BRCMF_C_GET_BSS_INFO, |
2552 | cfg->extra_buf, WL_EXTRA_BUF_MAX); | ||
2711 | if (err) { | 2553 | if (err) { |
2712 | WL_ERR("Could not get bss info %d\n", err); | 2554 | WL_ERR("Could not get bss info %d\n", err); |
2713 | goto update_bss_info_out; | 2555 | goto update_bss_info_out; |
@@ -2732,8 +2574,8 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg) | |||
2732 | * so we speficially query dtim information to dongle. | 2574 | * so we speficially query dtim information to dongle. |
2733 | */ | 2575 | */ |
2734 | u32 var; | 2576 | u32 var; |
2735 | err = brcmf_dev_intvar_get(cfg_to_ndev(cfg), | 2577 | err = brcmf_fil_iovar_int_get(cfg_to_ndev(cfg), |
2736 | "dtim_assoc", &var); | 2578 | "dtim_assoc", &var); |
2737 | if (err) { | 2579 | if (err) { |
2738 | WL_ERR("wl dtim_assoc failed (%d)\n", err); | 2580 | WL_ERR("wl dtim_assoc failed (%d)\n", err); |
2739 | goto update_bss_info_out; | 2581 | goto update_bss_info_out; |
@@ -2820,7 +2662,6 @@ static s32 | |||
2820 | brcmf_get_iscan_results(struct brcmf_cfg80211_iscan_ctrl *iscan, u32 *status, | 2662 | brcmf_get_iscan_results(struct brcmf_cfg80211_iscan_ctrl *iscan, u32 *status, |
2821 | struct brcmf_scan_results **bss_list) | 2663 | struct brcmf_scan_results **bss_list) |
2822 | { | 2664 | { |
2823 | struct brcmf_iscan_results list; | ||
2824 | struct brcmf_scan_results *results; | 2665 | struct brcmf_scan_results *results; |
2825 | struct brcmf_scan_results_le *results_le; | 2666 | struct brcmf_scan_results_le *results_le; |
2826 | struct brcmf_iscan_results *list_buf; | 2667 | struct brcmf_iscan_results *list_buf; |
@@ -2830,15 +2671,13 @@ brcmf_get_iscan_results(struct brcmf_cfg80211_iscan_ctrl *iscan, u32 *status, | |||
2830 | list_buf = (struct brcmf_iscan_results *)iscan->scan_buf; | 2671 | list_buf = (struct brcmf_iscan_results *)iscan->scan_buf; |
2831 | results = &list_buf->results; | 2672 | results = &list_buf->results; |
2832 | results_le = &list_buf->results_le; | 2673 | results_le = &list_buf->results_le; |
2833 | results->buflen = BRCMF_ISCAN_RESULTS_FIXED_SIZE; | 2674 | results_le->buflen = cpu_to_le32(sizeof(iscan->scan_buf)); |
2834 | results->version = 0; | 2675 | results_le->version = 0; |
2835 | results->count = 0; | 2676 | results_le->count = 0; |
2836 | 2677 | ||
2837 | memset(&list, 0, sizeof(list)); | 2678 | err = brcmf_fil_iovar_data_get(iscan->ndev, "iscanresults", |
2838 | list.results_le.buflen = cpu_to_le32(WL_ISCAN_BUF_MAX); | 2679 | iscan->scan_buf, |
2839 | err = brcmf_dev_iovar_getbuf(iscan->ndev, "iscanresults", &list, | 2680 | sizeof(iscan->scan_buf)); |
2840 | BRCMF_ISCAN_RESULTS_FIXED_SIZE, | ||
2841 | iscan->scan_buf, WL_ISCAN_BUF_MAX); | ||
2842 | if (err) { | 2681 | if (err) { |
2843 | WL_ERR("error (%d)\n", err); | 2682 | WL_ERR("error (%d)\n", err); |
2844 | return err; | 2683 | return err; |
@@ -3222,42 +3061,6 @@ static s32 brcmf_cfg80211_suspend(struct wiphy *wiphy, | |||
3222 | } | 3061 | } |
3223 | 3062 | ||
3224 | static __used s32 | 3063 | static __used s32 |
3225 | brcmf_dev_bufvar_set(struct net_device *ndev, s8 *name, s8 *buf, s32 len) | ||
3226 | { | ||
3227 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); | ||
3228 | u32 buflen; | ||
3229 | |||
3230 | buflen = brcmf_c_mkiovar(name, buf, len, cfg->dcmd_buf, | ||
3231 | WL_DCMD_LEN_MAX); | ||
3232 | BUG_ON(!buflen); | ||
3233 | |||
3234 | return brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, cfg->dcmd_buf, | ||
3235 | buflen); | ||
3236 | } | ||
3237 | |||
3238 | static s32 | ||
3239 | brcmf_dev_bufvar_get(struct net_device *ndev, s8 *name, s8 *buf, | ||
3240 | s32 buf_len) | ||
3241 | { | ||
3242 | struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev); | ||
3243 | u32 len; | ||
3244 | s32 err = 0; | ||
3245 | |||
3246 | len = brcmf_c_mkiovar(name, NULL, 0, cfg->dcmd_buf, | ||
3247 | WL_DCMD_LEN_MAX); | ||
3248 | BUG_ON(!len); | ||
3249 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_VAR, cfg->dcmd_buf, | ||
3250 | WL_DCMD_LEN_MAX); | ||
3251 | if (err) { | ||
3252 | WL_ERR("error (%d)\n", err); | ||
3253 | return err; | ||
3254 | } | ||
3255 | memcpy(buf, cfg->dcmd_buf, buf_len); | ||
3256 | |||
3257 | return err; | ||
3258 | } | ||
3259 | |||
3260 | static __used s32 | ||
3261 | brcmf_update_pmklist(struct net_device *ndev, | 3064 | brcmf_update_pmklist(struct net_device *ndev, |
3262 | struct brcmf_cfg80211_pmk_list *pmk_list, s32 err) | 3065 | struct brcmf_cfg80211_pmk_list *pmk_list, s32 err) |
3263 | { | 3066 | { |
@@ -3275,8 +3078,8 @@ brcmf_update_pmklist(struct net_device *ndev, | |||
3275 | } | 3078 | } |
3276 | 3079 | ||
3277 | if (!err) | 3080 | if (!err) |
3278 | brcmf_dev_bufvar_set(ndev, "pmkid_info", (char *)pmk_list, | 3081 | brcmf_fil_iovar_data_set(ndev, "pmkid_info", (char *)pmk_list, |
3279 | sizeof(*pmk_list)); | 3082 | sizeof(*pmk_list)); |
3280 | 3083 | ||
3281 | return err; | 3084 | return err; |
3282 | } | 3085 | } |
@@ -3512,15 +3315,13 @@ out_err: | |||
3512 | #ifndef CONFIG_BRCMISCAN | 3315 | #ifndef CONFIG_BRCMISCAN |
3513 | static int brcmf_dev_pno_clean(struct net_device *ndev) | 3316 | static int brcmf_dev_pno_clean(struct net_device *ndev) |
3514 | { | 3317 | { |
3515 | char iovbuf[128]; | ||
3516 | int ret; | 3318 | int ret; |
3517 | 3319 | ||
3518 | /* Disable pfn */ | 3320 | /* Disable pfn */ |
3519 | ret = brcmf_dev_intvar_set(ndev, "pfn", 0); | 3321 | ret = brcmf_fil_iovar_int_set(ndev, "pfn", 0); |
3520 | if (ret == 0) { | 3322 | if (ret == 0) { |
3521 | /* clear pfn */ | 3323 | /* clear pfn */ |
3522 | ret = brcmf_dev_iovar_setbuf(ndev, "pfnclear", NULL, 0, | 3324 | ret = brcmf_fil_iovar_data_set(ndev, "pfnclear", NULL, 0); |
3523 | iovbuf, sizeof(iovbuf)); | ||
3524 | } | 3325 | } |
3525 | if (ret < 0) | 3326 | if (ret < 0) |
3526 | WL_ERR("failed code %d\n", ret); | 3327 | WL_ERR("failed code %d\n", ret); |
@@ -3531,7 +3332,6 @@ static int brcmf_dev_pno_clean(struct net_device *ndev) | |||
3531 | static int brcmf_dev_pno_config(struct net_device *ndev) | 3332 | static int brcmf_dev_pno_config(struct net_device *ndev) |
3532 | { | 3333 | { |
3533 | struct brcmf_pno_param_le pfn_param; | 3334 | struct brcmf_pno_param_le pfn_param; |
3534 | char iovbuf[128]; | ||
3535 | 3335 | ||
3536 | memset(&pfn_param, 0, sizeof(pfn_param)); | 3336 | memset(&pfn_param, 0, sizeof(pfn_param)); |
3537 | pfn_param.version = cpu_to_le32(BRCMF_PNO_VERSION); | 3337 | pfn_param.version = cpu_to_le32(BRCMF_PNO_VERSION); |
@@ -3544,9 +3344,8 @@ static int brcmf_dev_pno_config(struct net_device *ndev) | |||
3544 | /* set up pno scan fr */ | 3344 | /* set up pno scan fr */ |
3545 | pfn_param.scan_freq = cpu_to_le32(BRCMF_PNO_TIME); | 3345 | pfn_param.scan_freq = cpu_to_le32(BRCMF_PNO_TIME); |
3546 | 3346 | ||
3547 | return brcmf_dev_iovar_setbuf(ndev, "pfn_set", | 3347 | return brcmf_fil_iovar_data_set(ndev, "pfn_set", &pfn_param, |
3548 | &pfn_param, sizeof(pfn_param), | 3348 | sizeof(pfn_param)); |
3549 | iovbuf, sizeof(iovbuf)); | ||
3550 | } | 3349 | } |
3551 | 3350 | ||
3552 | static int | 3351 | static int |
@@ -3554,7 +3353,6 @@ brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy, | |||
3554 | struct net_device *ndev, | 3353 | struct net_device *ndev, |
3555 | struct cfg80211_sched_scan_request *request) | 3354 | struct cfg80211_sched_scan_request *request) |
3556 | { | 3355 | { |
3557 | char iovbuf[128]; | ||
3558 | struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); | 3356 | struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); |
3559 | struct brcmf_pno_net_param_le pfn; | 3357 | struct brcmf_pno_net_param_le pfn; |
3560 | int i; | 3358 | int i; |
@@ -3620,15 +3418,14 @@ brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy, | |||
3620 | pfn.flags = cpu_to_le32(1 << BRCMF_PNO_HIDDEN_BIT); | 3418 | pfn.flags = cpu_to_le32(1 << BRCMF_PNO_HIDDEN_BIT); |
3621 | pfn.ssid.SSID_len = cpu_to_le32(ssid_len); | 3419 | pfn.ssid.SSID_len = cpu_to_le32(ssid_len); |
3622 | memcpy(pfn.ssid.SSID, ssid->ssid, ssid_len); | 3420 | memcpy(pfn.ssid.SSID, ssid->ssid, ssid_len); |
3623 | ret = brcmf_dev_iovar_setbuf(ndev, "pfn_add", | 3421 | ret = brcmf_fil_iovar_data_set(ndev, "pfn_add", |
3624 | &pfn, sizeof(pfn), | 3422 | &pfn, sizeof(pfn)); |
3625 | iovbuf, sizeof(iovbuf)); | ||
3626 | WL_SCAN(">>> PNO filter %s for ssid (%s)\n", | 3423 | WL_SCAN(">>> PNO filter %s for ssid (%s)\n", |
3627 | ret == 0 ? "set" : "failed", | 3424 | ret == 0 ? "set" : "failed", |
3628 | ssid->ssid); | 3425 | ssid->ssid); |
3629 | } | 3426 | } |
3630 | /* Enable the PNO */ | 3427 | /* Enable the PNO */ |
3631 | if (brcmf_dev_intvar_set(ndev, "pfn", 1) < 0) { | 3428 | if (brcmf_fil_iovar_int_set(ndev, "pfn", 1) < 0) { |
3632 | WL_ERR("PNO enable failed!! ret=%d\n", ret); | 3429 | WL_ERR("PNO enable failed!! ret=%d\n", ret); |
3633 | return -EINVAL; | 3430 | return -EINVAL; |
3634 | } | 3431 | } |
@@ -3676,20 +3473,19 @@ static s32 brcmf_configure_opensecurity(struct net_device *ndev, s32 bssidx) | |||
3676 | s32 err; | 3473 | s32 err; |
3677 | 3474 | ||
3678 | /* set auth */ | 3475 | /* set auth */ |
3679 | err = brcmf_dev_intvar_set_bsscfg(ndev, "auth", 0, bssidx); | 3476 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "auth", 0); |
3680 | if (err < 0) { | 3477 | if (err < 0) { |
3681 | WL_ERR("auth error %d\n", err); | 3478 | WL_ERR("auth error %d\n", err); |
3682 | return err; | 3479 | return err; |
3683 | } | 3480 | } |
3684 | /* set wsec */ | 3481 | /* set wsec */ |
3685 | err = brcmf_dev_intvar_set_bsscfg(ndev, "wsec", 0, bssidx); | 3482 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "wsec", 0); |
3686 | if (err < 0) { | 3483 | if (err < 0) { |
3687 | WL_ERR("wsec error %d\n", err); | 3484 | WL_ERR("wsec error %d\n", err); |
3688 | return err; | 3485 | return err; |
3689 | } | 3486 | } |
3690 | /* set upper-layer auth */ | 3487 | /* set upper-layer auth */ |
3691 | err = brcmf_dev_intvar_set_bsscfg(ndev, "wpa_auth", | 3488 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "wpa_auth", WPA_AUTH_NONE); |
3692 | WPA_AUTH_NONE, bssidx); | ||
3693 | if (err < 0) { | 3489 | if (err < 0) { |
3694 | WL_ERR("wpa_auth error %d\n", err); | 3490 | WL_ERR("wpa_auth error %d\n", err); |
3695 | return err; | 3491 | return err; |
@@ -3850,8 +3646,8 @@ brcmf_configure_wpaie(struct net_device *ndev, struct brcmf_vs_tlv *wpa_ie, | |||
3850 | wme_bss_disable = 0; | 3646 | wme_bss_disable = 0; |
3851 | } | 3647 | } |
3852 | /* set wme_bss_disable to sync RSN Capabilities */ | 3648 | /* set wme_bss_disable to sync RSN Capabilities */ |
3853 | err = brcmf_dev_intvar_set_bsscfg(ndev, "wme_bss_disable", | 3649 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "wme_bss_disable", |
3854 | wme_bss_disable, bssidx); | 3650 | wme_bss_disable); |
3855 | if (err < 0) { | 3651 | if (err < 0) { |
3856 | WL_ERR("wme_bss_disable error %d\n", err); | 3652 | WL_ERR("wme_bss_disable error %d\n", err); |
3857 | goto exit; | 3653 | goto exit; |
@@ -3861,19 +3657,19 @@ brcmf_configure_wpaie(struct net_device *ndev, struct brcmf_vs_tlv *wpa_ie, | |||
3861 | wsec = (pval | gval | SES_OW_ENABLED); | 3657 | wsec = (pval | gval | SES_OW_ENABLED); |
3862 | 3658 | ||
3863 | /* set auth */ | 3659 | /* set auth */ |
3864 | err = brcmf_dev_intvar_set_bsscfg(ndev, "auth", auth, bssidx); | 3660 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "auth", auth); |
3865 | if (err < 0) { | 3661 | if (err < 0) { |
3866 | WL_ERR("auth error %d\n", err); | 3662 | WL_ERR("auth error %d\n", err); |
3867 | goto exit; | 3663 | goto exit; |
3868 | } | 3664 | } |
3869 | /* set wsec */ | 3665 | /* set wsec */ |
3870 | err = brcmf_dev_intvar_set_bsscfg(ndev, "wsec", wsec, bssidx); | 3666 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "wsec", wsec); |
3871 | if (err < 0) { | 3667 | if (err < 0) { |
3872 | WL_ERR("wsec error %d\n", err); | 3668 | WL_ERR("wsec error %d\n", err); |
3873 | goto exit; | 3669 | goto exit; |
3874 | } | 3670 | } |
3875 | /* set upper-layer auth */ | 3671 | /* set upper-layer auth */ |
3876 | err = brcmf_dev_intvar_set_bsscfg(ndev, "wpa_auth", wpa_auth, bssidx); | 3672 | err = brcmf_fil_bsscfg_int_set(ndev, bssidx, "wpa_auth", wpa_auth); |
3877 | if (err < 0) { | 3673 | if (err < 0) { |
3878 | WL_ERR("wpa_auth error %d\n", err); | 3674 | WL_ERR("wpa_auth error %d\n", err); |
3879 | goto exit; | 3675 | goto exit; |
@@ -4103,11 +3899,9 @@ brcmf_set_management_ie(struct brcmf_cfg80211_info *cfg, | |||
4103 | } | 3899 | } |
4104 | } | 3900 | } |
4105 | if (total_ie_buf_len) { | 3901 | if (total_ie_buf_len) { |
4106 | err = brcmf_dev_iovar_setbuf_bsscfg(ndev, "vndr_ie", | 3902 | err = brcmf_fil_bsscfg_data_set(ndev, bssidx, "vndr_ie", |
4107 | iovar_ie_buf, | 3903 | iovar_ie_buf, |
4108 | total_ie_buf_len, | 3904 | total_ie_buf_len); |
4109 | cfg->extra_buf, | ||
4110 | WL_EXTRA_BUF_MAX, bssidx); | ||
4111 | if (err) | 3905 | if (err) |
4112 | WL_ERR("vndr ie set error : %d\n", err); | 3906 | WL_ERR("vndr ie set error : %d\n", err); |
4113 | } | 3907 | } |
@@ -4124,7 +3918,6 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
4124 | s32 ie_offset; | 3918 | s32 ie_offset; |
4125 | struct brcmf_tlv *ssid_ie; | 3919 | struct brcmf_tlv *ssid_ie; |
4126 | struct brcmf_ssid_le ssid_le; | 3920 | struct brcmf_ssid_le ssid_le; |
4127 | s32 ioctl_value; | ||
4128 | s32 err = -EPERM; | 3921 | s32 err = -EPERM; |
4129 | struct brcmf_tlv *rsn_ie; | 3922 | struct brcmf_tlv *rsn_ie; |
4130 | struct brcmf_vs_tlv *wpa_ie; | 3923 | struct brcmf_vs_tlv *wpa_ie; |
@@ -4163,20 +3956,17 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
4163 | } | 3956 | } |
4164 | 3957 | ||
4165 | brcmf_set_mpc(ndev, 0); | 3958 | brcmf_set_mpc(ndev, 0); |
4166 | ioctl_value = 1; | 3959 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_DOWN, 1); |
4167 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_DOWN, &ioctl_value); | ||
4168 | if (err < 0) { | 3960 | if (err < 0) { |
4169 | WL_ERR("BRCMF_C_DOWN error %d\n", err); | 3961 | WL_ERR("BRCMF_C_DOWN error %d\n", err); |
4170 | goto exit; | 3962 | goto exit; |
4171 | } | 3963 | } |
4172 | ioctl_value = 1; | 3964 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_INFRA, 1); |
4173 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_INFRA, &ioctl_value); | ||
4174 | if (err < 0) { | 3965 | if (err < 0) { |
4175 | WL_ERR("SET INFRA error %d\n", err); | 3966 | WL_ERR("SET INFRA error %d\n", err); |
4176 | goto exit; | 3967 | goto exit; |
4177 | } | 3968 | } |
4178 | ioctl_value = 1; | 3969 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_AP, 1); |
4179 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_AP, &ioctl_value); | ||
4180 | if (err < 0) { | 3970 | if (err < 0) { |
4181 | WL_ERR("setting AP mode failed %d\n", err); | 3971 | WL_ERR("setting AP mode failed %d\n", err); |
4182 | goto exit; | 3972 | goto exit; |
@@ -4245,25 +4035,22 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
4245 | WL_TRACE("Applied Vndr IEs for Probe Resp\n"); | 4035 | WL_TRACE("Applied Vndr IEs for Probe Resp\n"); |
4246 | 4036 | ||
4247 | if (settings->beacon_interval) { | 4037 | if (settings->beacon_interval) { |
4248 | ioctl_value = settings->beacon_interval; | 4038 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_BCNPRD, |
4249 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_BCNPRD, | 4039 | settings->beacon_interval); |
4250 | &ioctl_value); | ||
4251 | if (err < 0) { | 4040 | if (err < 0) { |
4252 | WL_ERR("Beacon Interval Set Error, %d\n", err); | 4041 | WL_ERR("Beacon Interval Set Error, %d\n", err); |
4253 | goto exit; | 4042 | goto exit; |
4254 | } | 4043 | } |
4255 | } | 4044 | } |
4256 | if (settings->dtim_period) { | 4045 | if (settings->dtim_period) { |
4257 | ioctl_value = settings->dtim_period; | 4046 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_DTIMPRD, |
4258 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_DTIMPRD, | 4047 | settings->dtim_period); |
4259 | &ioctl_value); | ||
4260 | if (err < 0) { | 4048 | if (err < 0) { |
4261 | WL_ERR("DTIM Interval Set Error, %d\n", err); | 4049 | WL_ERR("DTIM Interval Set Error, %d\n", err); |
4262 | goto exit; | 4050 | goto exit; |
4263 | } | 4051 | } |
4264 | } | 4052 | } |
4265 | ioctl_value = 1; | 4053 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_UP, 1); |
4266 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_UP, &ioctl_value); | ||
4267 | if (err < 0) { | 4054 | if (err < 0) { |
4268 | WL_ERR("BRCMF_C_UP error (%d)\n", err); | 4055 | WL_ERR("BRCMF_C_UP error (%d)\n", err); |
4269 | goto exit; | 4056 | goto exit; |
@@ -4273,8 +4060,8 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev, | |||
4273 | /* join parameters starts with ssid */ | 4060 | /* join parameters starts with ssid */ |
4274 | memcpy(&join_params.ssid_le, &ssid_le, sizeof(ssid_le)); | 4061 | memcpy(&join_params.ssid_le, &ssid_le, sizeof(ssid_le)); |
4275 | /* create softap */ | 4062 | /* create softap */ |
4276 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_SSID, &join_params, | 4063 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SET_SSID, &join_params, |
4277 | sizeof(join_params)); | 4064 | sizeof(join_params)); |
4278 | if (err < 0) { | 4065 | if (err < 0) { |
4279 | WL_ERR("SET SSID error (%d)\n", err); | 4066 | WL_ERR("SET SSID error (%d)\n", err); |
4280 | goto exit; | 4067 | goto exit; |
@@ -4291,7 +4078,6 @@ exit: | |||
4291 | static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev) | 4078 | static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev) |
4292 | { | 4079 | { |
4293 | struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); | 4080 | struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); |
4294 | s32 ioctl_value; | ||
4295 | s32 err = -EPERM; | 4081 | s32 err = -EPERM; |
4296 | 4082 | ||
4297 | WL_TRACE("Enter\n"); | 4083 | WL_TRACE("Enter\n"); |
@@ -4300,14 +4086,12 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev) | |||
4300 | /* Due to most likely deauths outstanding we sleep */ | 4086 | /* Due to most likely deauths outstanding we sleep */ |
4301 | /* first to make sure they get processed by fw. */ | 4087 | /* first to make sure they get processed by fw. */ |
4302 | msleep(400); | 4088 | msleep(400); |
4303 | ioctl_value = 0; | 4089 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_AP, 0); |
4304 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_AP, &ioctl_value); | ||
4305 | if (err < 0) { | 4090 | if (err < 0) { |
4306 | WL_ERR("setting AP mode failed %d\n", err); | 4091 | WL_ERR("setting AP mode failed %d\n", err); |
4307 | goto exit; | 4092 | goto exit; |
4308 | } | 4093 | } |
4309 | ioctl_value = 0; | 4094 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_UP, 0); |
4310 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_UP, &ioctl_value); | ||
4311 | if (err < 0) { | 4095 | if (err < 0) { |
4312 | WL_ERR("BRCMF_C_UP error %d\n", err); | 4096 | WL_ERR("BRCMF_C_UP error %d\n", err); |
4313 | goto exit; | 4097 | goto exit; |
@@ -4337,8 +4121,9 @@ brcmf_cfg80211_del_station(struct wiphy *wiphy, struct net_device *ndev, | |||
4337 | 4121 | ||
4338 | memcpy(&scbval.ea, mac, ETH_ALEN); | 4122 | memcpy(&scbval.ea, mac, ETH_ALEN); |
4339 | scbval.val = cpu_to_le32(WLAN_REASON_DEAUTH_LEAVING); | 4123 | scbval.val = cpu_to_le32(WLAN_REASON_DEAUTH_LEAVING); |
4340 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON, | 4124 | err = brcmf_fil_cmd_data_set(ndev, |
4341 | &scbval, sizeof(scbval)); | 4125 | BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON, |
4126 | &scbval, sizeof(scbval)); | ||
4342 | if (err) | 4127 | if (err) |
4343 | WL_ERR("SCB_DEAUTHENTICATE_FOR_REASON failed %d\n", err); | 4128 | WL_ERR("SCB_DEAUTHENTICATE_FOR_REASON failed %d\n", err); |
4344 | 4129 | ||
@@ -4549,8 +4334,8 @@ static s32 brcmf_get_assoc_ies(struct brcmf_cfg80211_info *cfg) | |||
4549 | 4334 | ||
4550 | brcmf_clear_assoc_ies(cfg); | 4335 | brcmf_clear_assoc_ies(cfg); |
4551 | 4336 | ||
4552 | err = brcmf_dev_bufvar_get(ndev, "assoc_info", cfg->extra_buf, | 4337 | err = brcmf_fil_iovar_data_get(ndev, "assoc_info", cfg->extra_buf, |
4553 | WL_ASSOC_INFO_MAX); | 4338 | WL_ASSOC_INFO_MAX); |
4554 | if (err) { | 4339 | if (err) { |
4555 | WL_ERR("could not get assoc info (%d)\n", err); | 4340 | WL_ERR("could not get assoc info (%d)\n", err); |
4556 | return err; | 4341 | return err; |
@@ -4560,9 +4345,9 @@ static s32 brcmf_get_assoc_ies(struct brcmf_cfg80211_info *cfg) | |||
4560 | req_len = le32_to_cpu(assoc_info->req_len); | 4345 | req_len = le32_to_cpu(assoc_info->req_len); |
4561 | resp_len = le32_to_cpu(assoc_info->resp_len); | 4346 | resp_len = le32_to_cpu(assoc_info->resp_len); |
4562 | if (req_len) { | 4347 | if (req_len) { |
4563 | err = brcmf_dev_bufvar_get(ndev, "assoc_req_ies", | 4348 | err = brcmf_fil_iovar_data_get(ndev, "assoc_req_ies", |
4564 | cfg->extra_buf, | 4349 | cfg->extra_buf, |
4565 | WL_ASSOC_INFO_MAX); | 4350 | WL_ASSOC_INFO_MAX); |
4566 | if (err) { | 4351 | if (err) { |
4567 | WL_ERR("could not get assoc req (%d)\n", err); | 4352 | WL_ERR("could not get assoc req (%d)\n", err); |
4568 | return err; | 4353 | return err; |
@@ -4576,9 +4361,9 @@ static s32 brcmf_get_assoc_ies(struct brcmf_cfg80211_info *cfg) | |||
4576 | conn_info->req_ie = NULL; | 4361 | conn_info->req_ie = NULL; |
4577 | } | 4362 | } |
4578 | if (resp_len) { | 4363 | if (resp_len) { |
4579 | err = brcmf_dev_bufvar_get(ndev, "assoc_resp_ies", | 4364 | err = brcmf_fil_iovar_data_get(ndev, "assoc_resp_ies", |
4580 | cfg->extra_buf, | 4365 | cfg->extra_buf, |
4581 | WL_ASSOC_INFO_MAX); | 4366 | WL_ASSOC_INFO_MAX); |
4582 | if (err) { | 4367 | if (err) { |
4583 | WL_ERR("could not get assoc resp (%d)\n", err); | 4368 | WL_ERR("could not get assoc resp (%d)\n", err); |
4584 | return err; | 4369 | return err; |
@@ -4627,7 +4412,8 @@ brcmf_bss_roaming_done(struct brcmf_cfg80211_info *cfg, | |||
4627 | 4412 | ||
4628 | /* data sent to dongle has to be little endian */ | 4413 | /* data sent to dongle has to be little endian */ |
4629 | *(__le32 *)buf = cpu_to_le32(WL_BSS_INFO_MAX); | 4414 | *(__le32 *)buf = cpu_to_le32(WL_BSS_INFO_MAX); |
4630 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_BSS_INFO, buf, WL_BSS_INFO_MAX); | 4415 | err = brcmf_fil_cmd_data_get(ndev, BRCMF_C_GET_BSS_INFO, buf, |
4416 | WL_BSS_INFO_MAX); | ||
4631 | 4417 | ||
4632 | if (err) | 4418 | if (err) |
4633 | goto done; | 4419 | goto done; |
@@ -4841,8 +4627,9 @@ brcmf_notify_scan_status(struct brcmf_cfg80211_info *cfg, | |||
4841 | goto scan_done_out; | 4627 | goto scan_done_out; |
4842 | } | 4628 | } |
4843 | 4629 | ||
4844 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_CHANNEL, &channel_inform_le, | 4630 | err = brcmf_fil_cmd_data_get(ndev, BRCMF_C_GET_CHANNEL, |
4845 | sizeof(channel_inform_le)); | 4631 | &channel_inform_le, |
4632 | sizeof(channel_inform_le)); | ||
4846 | if (err) { | 4633 | if (err) { |
4847 | WL_ERR("scan busy (%d)\n", err); | 4634 | WL_ERR("scan busy (%d)\n", err); |
4848 | scan_abort = true; | 4635 | scan_abort = true; |
@@ -4856,8 +4643,8 @@ brcmf_notify_scan_status(struct brcmf_cfg80211_info *cfg, | |||
4856 | 4643 | ||
4857 | memset(cfg->scan_results, 0, len); | 4644 | memset(cfg->scan_results, 0, len); |
4858 | bss_list_le->buflen = cpu_to_le32(len); | 4645 | bss_list_le->buflen = cpu_to_le32(len); |
4859 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SCAN_RESULTS, | 4646 | err = brcmf_fil_cmd_data_get(ndev, BRCMF_C_SCAN_RESULTS, |
4860 | cfg->scan_results, len); | 4647 | cfg->scan_results, len); |
4861 | if (err) { | 4648 | if (err) { |
4862 | WL_ERR("%s Scan_results error (%d)\n", ndev->name, err); | 4649 | WL_ERR("%s Scan_results error (%d)\n", ndev->name, err); |
4863 | err = -EINVAL; | 4650 | err = -EINVAL; |
@@ -5201,22 +4988,18 @@ brcmf_cfg80211_event(struct net_device *ndev, | |||
5201 | 4988 | ||
5202 | static s32 brcmf_dongle_eventmsg(struct net_device *ndev) | 4989 | static s32 brcmf_dongle_eventmsg(struct net_device *ndev) |
5203 | { | 4990 | { |
5204 | /* Room for "event_msgs" + '\0' + bitvec */ | ||
5205 | s8 iovbuf[BRCMF_EVENTING_MASK_LEN + 12]; | ||
5206 | s8 eventmask[BRCMF_EVENTING_MASK_LEN]; | 4991 | s8 eventmask[BRCMF_EVENTING_MASK_LEN]; |
5207 | s32 err = 0; | 4992 | s32 err = 0; |
5208 | 4993 | ||
5209 | WL_TRACE("Enter\n"); | 4994 | WL_TRACE("Enter\n"); |
5210 | 4995 | ||
5211 | /* Setup event_msgs */ | 4996 | /* Setup event_msgs */ |
5212 | brcmf_c_mkiovar("event_msgs", eventmask, BRCMF_EVENTING_MASK_LEN, | 4997 | err = brcmf_fil_iovar_data_get(ndev, "event_msgs", eventmask, |
5213 | iovbuf, sizeof(iovbuf)); | 4998 | BRCMF_EVENTING_MASK_LEN); |
5214 | err = brcmf_exec_dcmd(ndev, BRCMF_C_GET_VAR, iovbuf, sizeof(iovbuf)); | ||
5215 | if (err) { | 4999 | if (err) { |
5216 | WL_ERR("Get event_msgs error (%d)\n", err); | 5000 | WL_ERR("Get event_msgs error (%d)\n", err); |
5217 | goto dongle_eventmsg_out; | 5001 | goto dongle_eventmsg_out; |
5218 | } | 5002 | } |
5219 | memcpy(eventmask, iovbuf, BRCMF_EVENTING_MASK_LEN); | ||
5220 | 5003 | ||
5221 | setbit(eventmask, BRCMF_E_SET_SSID); | 5004 | setbit(eventmask, BRCMF_E_SET_SSID); |
5222 | setbit(eventmask, BRCMF_E_ROAM); | 5005 | setbit(eventmask, BRCMF_E_ROAM); |
@@ -5240,9 +5023,8 @@ static s32 brcmf_dongle_eventmsg(struct net_device *ndev) | |||
5240 | setbit(eventmask, BRCMF_E_ESCAN_RESULT); | 5023 | setbit(eventmask, BRCMF_E_ESCAN_RESULT); |
5241 | setbit(eventmask, BRCMF_E_PFN_NET_FOUND); | 5024 | setbit(eventmask, BRCMF_E_PFN_NET_FOUND); |
5242 | 5025 | ||
5243 | brcmf_c_mkiovar("event_msgs", eventmask, BRCMF_EVENTING_MASK_LEN, | 5026 | err = brcmf_fil_iovar_data_set(ndev, "event_msgs", eventmask, |
5244 | iovbuf, sizeof(iovbuf)); | 5027 | BRCMF_EVENTING_MASK_LEN); |
5245 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, iovbuf, sizeof(iovbuf)); | ||
5246 | if (err) { | 5028 | if (err) { |
5247 | WL_ERR("Set event_msgs error (%d)\n", err); | 5029 | WL_ERR("Set event_msgs error (%d)\n", err); |
5248 | goto dongle_eventmsg_out; | 5030 | goto dongle_eventmsg_out; |
@@ -5256,23 +5038,16 @@ dongle_eventmsg_out: | |||
5256 | static s32 | 5038 | static s32 |
5257 | brcmf_dongle_roam(struct net_device *ndev, u32 roamvar, u32 bcn_timeout) | 5039 | brcmf_dongle_roam(struct net_device *ndev, u32 roamvar, u32 bcn_timeout) |
5258 | { | 5040 | { |
5259 | s8 iovbuf[32]; | ||
5260 | s32 err = 0; | 5041 | s32 err = 0; |
5261 | __le32 roamtrigger[2]; | 5042 | __le32 roamtrigger[2]; |
5262 | __le32 roam_delta[2]; | 5043 | __le32 roam_delta[2]; |
5263 | __le32 bcn_to_le; | ||
5264 | __le32 roamvar_le; | ||
5265 | 5044 | ||
5266 | /* | 5045 | /* |
5267 | * Setup timeout if Beacons are lost and roam is | 5046 | * Setup timeout if Beacons are lost and roam is |
5268 | * off to report link down | 5047 | * off to report link down |
5269 | */ | 5048 | */ |
5270 | if (roamvar) { | 5049 | if (roamvar) { |
5271 | bcn_to_le = cpu_to_le32(bcn_timeout); | 5050 | err = brcmf_fil_iovar_int_set(ndev, "bcn_timeout", bcn_timeout); |
5272 | brcmf_c_mkiovar("bcn_timeout", (char *)&bcn_to_le, | ||
5273 | sizeof(bcn_to_le), iovbuf, sizeof(iovbuf)); | ||
5274 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, | ||
5275 | iovbuf, sizeof(iovbuf)); | ||
5276 | if (err) { | 5051 | if (err) { |
5277 | WL_ERR("bcn_timeout error (%d)\n", err); | 5052 | WL_ERR("bcn_timeout error (%d)\n", err); |
5278 | goto dongle_rom_out; | 5053 | goto dongle_rom_out; |
@@ -5284,10 +5059,7 @@ brcmf_dongle_roam(struct net_device *ndev, u32 roamvar, u32 bcn_timeout) | |||
5284 | * to take care of roaming | 5059 | * to take care of roaming |
5285 | */ | 5060 | */ |
5286 | WL_INFO("Internal Roaming = %s\n", roamvar ? "Off" : "On"); | 5061 | WL_INFO("Internal Roaming = %s\n", roamvar ? "Off" : "On"); |
5287 | roamvar_le = cpu_to_le32(roamvar); | 5062 | err = brcmf_fil_iovar_int_set(ndev, "roam_off", roamvar); |
5288 | brcmf_c_mkiovar("roam_off", (char *)&roamvar_le, | ||
5289 | sizeof(roamvar_le), iovbuf, sizeof(iovbuf)); | ||
5290 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_VAR, iovbuf, sizeof(iovbuf)); | ||
5291 | if (err) { | 5063 | if (err) { |
5292 | WL_ERR("roam_off error (%d)\n", err); | 5064 | WL_ERR("roam_off error (%d)\n", err); |
5293 | goto dongle_rom_out; | 5065 | goto dongle_rom_out; |
@@ -5295,8 +5067,8 @@ brcmf_dongle_roam(struct net_device *ndev, u32 roamvar, u32 bcn_timeout) | |||
5295 | 5067 | ||
5296 | roamtrigger[0] = cpu_to_le32(WL_ROAM_TRIGGER_LEVEL); | 5068 | roamtrigger[0] = cpu_to_le32(WL_ROAM_TRIGGER_LEVEL); |
5297 | roamtrigger[1] = cpu_to_le32(BRCM_BAND_ALL); | 5069 | roamtrigger[1] = cpu_to_le32(BRCM_BAND_ALL); |
5298 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_ROAM_TRIGGER, | 5070 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SET_ROAM_TRIGGER, |
5299 | (void *)roamtrigger, sizeof(roamtrigger)); | 5071 | (void *)roamtrigger, sizeof(roamtrigger)); |
5300 | if (err) { | 5072 | if (err) { |
5301 | WL_ERR("WLC_SET_ROAM_TRIGGER error (%d)\n", err); | 5073 | WL_ERR("WLC_SET_ROAM_TRIGGER error (%d)\n", err); |
5302 | goto dongle_rom_out; | 5074 | goto dongle_rom_out; |
@@ -5304,8 +5076,8 @@ brcmf_dongle_roam(struct net_device *ndev, u32 roamvar, u32 bcn_timeout) | |||
5304 | 5076 | ||
5305 | roam_delta[0] = cpu_to_le32(WL_ROAM_DELTA); | 5077 | roam_delta[0] = cpu_to_le32(WL_ROAM_DELTA); |
5306 | roam_delta[1] = cpu_to_le32(BRCM_BAND_ALL); | 5078 | roam_delta[1] = cpu_to_le32(BRCM_BAND_ALL); |
5307 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_ROAM_DELTA, | 5079 | err = brcmf_fil_cmd_data_set(ndev, BRCMF_C_SET_ROAM_DELTA, |
5308 | (void *)roam_delta, sizeof(roam_delta)); | 5080 | (void *)roam_delta, sizeof(roam_delta)); |
5309 | if (err) { | 5081 | if (err) { |
5310 | WL_ERR("WLC_SET_ROAM_DELTA error (%d)\n", err); | 5082 | WL_ERR("WLC_SET_ROAM_DELTA error (%d)\n", err); |
5311 | goto dongle_rom_out; | 5083 | goto dongle_rom_out; |
@@ -5320,12 +5092,9 @@ brcmf_dongle_scantime(struct net_device *ndev, s32 scan_assoc_time, | |||
5320 | s32 scan_unassoc_time, s32 scan_passive_time) | 5092 | s32 scan_unassoc_time, s32 scan_passive_time) |
5321 | { | 5093 | { |
5322 | s32 err = 0; | 5094 | s32 err = 0; |
5323 | __le32 scan_assoc_tm_le = cpu_to_le32(scan_assoc_time); | ||
5324 | __le32 scan_unassoc_tm_le = cpu_to_le32(scan_unassoc_time); | ||
5325 | __le32 scan_passive_tm_le = cpu_to_le32(scan_passive_time); | ||
5326 | 5095 | ||
5327 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_SCAN_CHANNEL_TIME, | 5096 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_SCAN_CHANNEL_TIME, |
5328 | &scan_assoc_tm_le, sizeof(scan_assoc_tm_le)); | 5097 | scan_assoc_time); |
5329 | if (err) { | 5098 | if (err) { |
5330 | if (err == -EOPNOTSUPP) | 5099 | if (err == -EOPNOTSUPP) |
5331 | WL_INFO("Scan assoc time is not supported\n"); | 5100 | WL_INFO("Scan assoc time is not supported\n"); |
@@ -5333,8 +5102,8 @@ brcmf_dongle_scantime(struct net_device *ndev, s32 scan_assoc_time, | |||
5333 | WL_ERR("Scan assoc time error (%d)\n", err); | 5102 | WL_ERR("Scan assoc time error (%d)\n", err); |
5334 | goto dongle_scantime_out; | 5103 | goto dongle_scantime_out; |
5335 | } | 5104 | } |
5336 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_SCAN_UNASSOC_TIME, | 5105 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_SCAN_UNASSOC_TIME, |
5337 | &scan_unassoc_tm_le, sizeof(scan_unassoc_tm_le)); | 5106 | scan_unassoc_time); |
5338 | if (err) { | 5107 | if (err) { |
5339 | if (err == -EOPNOTSUPP) | 5108 | if (err == -EOPNOTSUPP) |
5340 | WL_INFO("Scan unassoc time is not supported\n"); | 5109 | WL_INFO("Scan unassoc time is not supported\n"); |
@@ -5343,8 +5112,8 @@ brcmf_dongle_scantime(struct net_device *ndev, s32 scan_assoc_time, | |||
5343 | goto dongle_scantime_out; | 5112 | goto dongle_scantime_out; |
5344 | } | 5113 | } |
5345 | 5114 | ||
5346 | err = brcmf_exec_dcmd(ndev, BRCMF_C_SET_SCAN_PASSIVE_TIME, | 5115 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_SCAN_PASSIVE_TIME, |
5347 | &scan_passive_tm_le, sizeof(scan_passive_tm_le)); | 5116 | scan_passive_time); |
5348 | if (err) { | 5117 | if (err) { |
5349 | if (err == -EOPNOTSUPP) | 5118 | if (err == -EOPNOTSUPP) |
5350 | WL_INFO("Scan passive time is not supported\n"); | 5119 | WL_INFO("Scan passive time is not supported\n"); |
@@ -5364,8 +5133,8 @@ static s32 wl_update_wiphybands(struct brcmf_cfg80211_info *cfg) | |||
5364 | s8 phy; | 5133 | s8 phy; |
5365 | s32 err = 0; | 5134 | s32 err = 0; |
5366 | 5135 | ||
5367 | err = brcmf_exec_dcmd(cfg_to_ndev(cfg), BRCM_GET_PHYLIST, | 5136 | err = brcmf_fil_cmd_data_get(cfg_to_ndev(cfg), BRCM_GET_PHYLIST, |
5368 | &phy_list, sizeof(phy_list)); | 5137 | &phy_list, sizeof(phy_list)); |
5369 | if (err) { | 5138 | if (err) { |
5370 | WL_ERR("error (%d)\n", err); | 5139 | WL_ERR("error (%d)\n", err); |
5371 | return err; | 5140 | return err; |
@@ -5407,7 +5176,7 @@ static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg) | |||
5407 | goto default_conf_out; | 5176 | goto default_conf_out; |
5408 | 5177 | ||
5409 | power_mode = cfg->pwr_save ? PM_FAST : PM_OFF; | 5178 | power_mode = cfg->pwr_save ? PM_FAST : PM_OFF; |
5410 | err = brcmf_exec_dcmd_u32(ndev, BRCMF_C_SET_PM, &power_mode); | 5179 | err = brcmf_fil_cmd_int_set(ndev, BRCMF_C_SET_PM, power_mode); |
5411 | if (err) | 5180 | if (err) |
5412 | goto default_conf_out; | 5181 | goto default_conf_out; |
5413 | WL_INFO("power save set to %s\n", | 5182 | WL_INFO("power save set to %s\n", |