diff options
Diffstat (limited to 'drivers/net/wireless/wl12xx/cmd.c')
-rw-r--r-- | drivers/net/wireless/wl12xx/cmd.c | 99 |
1 files changed, 92 insertions, 7 deletions
diff --git a/drivers/net/wireless/wl12xx/cmd.c b/drivers/net/wireless/wl12xx/cmd.c index 96324336f936..69d24f35cd9a 100644 --- a/drivers/net/wireless/wl12xx/cmd.c +++ b/drivers/net/wireless/wl12xx/cmd.c | |||
@@ -110,7 +110,47 @@ out: | |||
110 | int wl1271_cmd_general_parms(struct wl1271 *wl) | 110 | int wl1271_cmd_general_parms(struct wl1271 *wl) |
111 | { | 111 | { |
112 | struct wl1271_general_parms_cmd *gen_parms; | 112 | struct wl1271_general_parms_cmd *gen_parms; |
113 | struct wl1271_ini_general_params *gp = &wl->nvs->general_params; | 113 | struct wl1271_ini_general_params *gp = |
114 | &((struct wl1271_nvs_file *)wl->nvs)->general_params; | ||
115 | bool answer = false; | ||
116 | int ret; | ||
117 | |||
118 | if (!wl->nvs) | ||
119 | return -ENODEV; | ||
120 | |||
121 | gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL); | ||
122 | if (!gen_parms) | ||
123 | return -ENOMEM; | ||
124 | |||
125 | gen_parms->test.id = TEST_CMD_INI_FILE_GENERAL_PARAM; | ||
126 | |||
127 | memcpy(&gen_parms->general_params, gp, sizeof(*gp)); | ||
128 | |||
129 | if (gp->tx_bip_fem_auto_detect) | ||
130 | answer = true; | ||
131 | |||
132 | ret = wl1271_cmd_test(wl, gen_parms, sizeof(*gen_parms), answer); | ||
133 | if (ret < 0) { | ||
134 | wl1271_warning("CMD_INI_FILE_GENERAL_PARAM failed"); | ||
135 | goto out; | ||
136 | } | ||
137 | |||
138 | gp->tx_bip_fem_manufacturer = | ||
139 | gen_parms->general_params.tx_bip_fem_manufacturer; | ||
140 | |||
141 | wl1271_debug(DEBUG_CMD, "FEM autodetect: %s, manufacturer: %d\n", | ||
142 | answer ? "auto" : "manual", gp->tx_bip_fem_manufacturer); | ||
143 | |||
144 | out: | ||
145 | kfree(gen_parms); | ||
146 | return ret; | ||
147 | } | ||
148 | |||
149 | int wl128x_cmd_general_parms(struct wl1271 *wl) | ||
150 | { | ||
151 | struct wl128x_general_parms_cmd *gen_parms; | ||
152 | struct wl128x_ini_general_params *gp = | ||
153 | &((struct wl128x_nvs_file *)wl->nvs)->general_params; | ||
114 | bool answer = false; | 154 | bool answer = false; |
115 | int ret; | 155 | int ret; |
116 | 156 | ||
@@ -147,8 +187,9 @@ out: | |||
147 | 187 | ||
148 | int wl1271_cmd_radio_parms(struct wl1271 *wl) | 188 | int wl1271_cmd_radio_parms(struct wl1271 *wl) |
149 | { | 189 | { |
190 | struct wl1271_nvs_file *nvs = (struct wl1271_nvs_file *)wl->nvs; | ||
150 | struct wl1271_radio_parms_cmd *radio_parms; | 191 | struct wl1271_radio_parms_cmd *radio_parms; |
151 | struct wl1271_ini_general_params *gp = &wl->nvs->general_params; | 192 | struct wl1271_ini_general_params *gp = &nvs->general_params; |
152 | int ret; | 193 | int ret; |
153 | 194 | ||
154 | if (!wl->nvs) | 195 | if (!wl->nvs) |
@@ -161,18 +202,18 @@ int wl1271_cmd_radio_parms(struct wl1271 *wl) | |||
161 | radio_parms->test.id = TEST_CMD_INI_FILE_RADIO_PARAM; | 202 | radio_parms->test.id = TEST_CMD_INI_FILE_RADIO_PARAM; |
162 | 203 | ||
163 | /* 2.4GHz parameters */ | 204 | /* 2.4GHz parameters */ |
164 | memcpy(&radio_parms->static_params_2, &wl->nvs->stat_radio_params_2, | 205 | memcpy(&radio_parms->static_params_2, &nvs->stat_radio_params_2, |
165 | sizeof(struct wl1271_ini_band_params_2)); | 206 | sizeof(struct wl1271_ini_band_params_2)); |
166 | memcpy(&radio_parms->dyn_params_2, | 207 | memcpy(&radio_parms->dyn_params_2, |
167 | &wl->nvs->dyn_radio_params_2[gp->tx_bip_fem_manufacturer].params, | 208 | &nvs->dyn_radio_params_2[gp->tx_bip_fem_manufacturer].params, |
168 | sizeof(struct wl1271_ini_fem_params_2)); | 209 | sizeof(struct wl1271_ini_fem_params_2)); |
169 | 210 | ||
170 | /* 5GHz parameters */ | 211 | /* 5GHz parameters */ |
171 | memcpy(&radio_parms->static_params_5, | 212 | memcpy(&radio_parms->static_params_5, |
172 | &wl->nvs->stat_radio_params_5, | 213 | &nvs->stat_radio_params_5, |
173 | sizeof(struct wl1271_ini_band_params_5)); | 214 | sizeof(struct wl1271_ini_band_params_5)); |
174 | memcpy(&radio_parms->dyn_params_5, | 215 | memcpy(&radio_parms->dyn_params_5, |
175 | &wl->nvs->dyn_radio_params_5[gp->tx_bip_fem_manufacturer].params, | 216 | &nvs->dyn_radio_params_5[gp->tx_bip_fem_manufacturer].params, |
176 | sizeof(struct wl1271_ini_fem_params_5)); | 217 | sizeof(struct wl1271_ini_fem_params_5)); |
177 | 218 | ||
178 | wl1271_dump(DEBUG_CMD, "TEST_CMD_INI_FILE_RADIO_PARAM: ", | 219 | wl1271_dump(DEBUG_CMD, "TEST_CMD_INI_FILE_RADIO_PARAM: ", |
@@ -186,6 +227,50 @@ int wl1271_cmd_radio_parms(struct wl1271 *wl) | |||
186 | return ret; | 227 | return ret; |
187 | } | 228 | } |
188 | 229 | ||
230 | int wl128x_cmd_radio_parms(struct wl1271 *wl) | ||
231 | { | ||
232 | struct wl128x_nvs_file *nvs = (struct wl128x_nvs_file *)wl->nvs; | ||
233 | struct wl128x_radio_parms_cmd *radio_parms; | ||
234 | struct wl128x_ini_general_params *gp = &nvs->general_params; | ||
235 | int ret; | ||
236 | |||
237 | if (!wl->nvs) | ||
238 | return -ENODEV; | ||
239 | |||
240 | radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL); | ||
241 | if (!radio_parms) | ||
242 | return -ENOMEM; | ||
243 | |||
244 | radio_parms->test.id = TEST_CMD_INI_FILE_RADIO_PARAM; | ||
245 | |||
246 | /* 2.4GHz parameters */ | ||
247 | memcpy(&radio_parms->static_params_2, &nvs->stat_radio_params_2, | ||
248 | sizeof(struct wl128x_ini_band_params_2)); | ||
249 | memcpy(&radio_parms->dyn_params_2, | ||
250 | &nvs->dyn_radio_params_2[gp->tx_bip_fem_manufacturer].params, | ||
251 | sizeof(struct wl128x_ini_fem_params_2)); | ||
252 | |||
253 | /* 5GHz parameters */ | ||
254 | memcpy(&radio_parms->static_params_5, | ||
255 | &nvs->stat_radio_params_5, | ||
256 | sizeof(struct wl128x_ini_band_params_5)); | ||
257 | memcpy(&radio_parms->dyn_params_5, | ||
258 | &nvs->dyn_radio_params_5[gp->tx_bip_fem_manufacturer].params, | ||
259 | sizeof(struct wl128x_ini_fem_params_5)); | ||
260 | |||
261 | radio_parms->fem_vendor_and_options = nvs->fem_vendor_and_options; | ||
262 | |||
263 | wl1271_dump(DEBUG_CMD, "TEST_CMD_INI_FILE_RADIO_PARAM: ", | ||
264 | radio_parms, sizeof(*radio_parms)); | ||
265 | |||
266 | ret = wl1271_cmd_test(wl, radio_parms, sizeof(*radio_parms), 0); | ||
267 | if (ret < 0) | ||
268 | wl1271_warning("CMD_INI_FILE_RADIO_PARAM failed"); | ||
269 | |||
270 | kfree(radio_parms); | ||
271 | return ret; | ||
272 | } | ||
273 | |||
189 | int wl1271_cmd_ext_radio_parms(struct wl1271 *wl) | 274 | int wl1271_cmd_ext_radio_parms(struct wl1271 *wl) |
190 | { | 275 | { |
191 | struct wl1271_ext_radio_parms_cmd *ext_radio_parms; | 276 | struct wl1271_ext_radio_parms_cmd *ext_radio_parms; |
@@ -985,7 +1070,7 @@ int wl1271_cmd_start_bss(struct wl1271 *wl) | |||
985 | 1070 | ||
986 | memcpy(cmd->bssid, bss_conf->bssid, ETH_ALEN); | 1071 | memcpy(cmd->bssid, bss_conf->bssid, ETH_ALEN); |
987 | 1072 | ||
988 | cmd->aging_period = cpu_to_le16(WL1271_AP_DEF_INACTIV_SEC); | 1073 | cmd->aging_period = cpu_to_le16(wl->conf.tx.ap_aging_period); |
989 | cmd->bss_index = WL1271_AP_BSS_INDEX; | 1074 | cmd->bss_index = WL1271_AP_BSS_INDEX; |
990 | cmd->global_hlid = WL1271_AP_GLOBAL_HLID; | 1075 | cmd->global_hlid = WL1271_AP_GLOBAL_HLID; |
991 | cmd->broadcast_hlid = WL1271_AP_BROADCAST_HLID; | 1076 | cmd->broadcast_hlid = WL1271_AP_BROADCAST_HLID; |