aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/wl12xx/cmd.c')
-rw-r--r--drivers/net/wireless/wl12xx/cmd.c99
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:
110int wl1271_cmd_general_parms(struct wl1271 *wl) 110int 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
144out:
145 kfree(gen_parms);
146 return ret;
147}
148
149int 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
148int wl1271_cmd_radio_parms(struct wl1271 *wl) 188int 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
230int 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
189int wl1271_cmd_ext_radio_parms(struct wl1271 *wl) 274int 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;