aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/wl12xx/acx.c26
-rw-r--r--drivers/net/wireless/wl12xx/acx.h4
-rw-r--r--drivers/net/wireless/wl12xx/init.c4
-rw-r--r--drivers/net/wireless/wl12xx/main.c6
4 files changed, 27 insertions, 13 deletions
diff --git a/drivers/net/wireless/wl12xx/acx.c b/drivers/net/wireless/wl12xx/acx.c
index 2b5fb3d2df1b..729f72a7b912 100644
--- a/drivers/net/wireless/wl12xx/acx.c
+++ b/drivers/net/wireless/wl12xx/acx.c
@@ -325,12 +325,19 @@ out:
325 return ret; 325 return ret;
326} 326}
327 327
328int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold) 328int wl1271_acx_rts_threshold(struct wl1271 *wl, u32 rts_threshold)
329{ 329{
330 struct acx_rts_threshold *rts; 330 struct acx_rts_threshold *rts;
331 int ret; 331 int ret;
332 332
333 wl1271_debug(DEBUG_ACX, "acx rts threshold"); 333 /*
334 * If the RTS threshold is not configured or out of range, use the
335 * default value.
336 */
337 if (rts_threshold > IEEE80211_MAX_RTS_THRESHOLD)
338 rts_threshold = wl->conf.rx.rts_threshold;
339
340 wl1271_debug(DEBUG_ACX, "acx rts threshold: %d", rts_threshold);
334 341
335 rts = kzalloc(sizeof(*rts), GFP_KERNEL); 342 rts = kzalloc(sizeof(*rts), GFP_KERNEL);
336 if (!rts) { 343 if (!rts) {
@@ -338,7 +345,7 @@ int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold)
338 goto out; 345 goto out;
339 } 346 }
340 347
341 rts->threshold = cpu_to_le16(rts_threshold); 348 rts->threshold = cpu_to_le16((u16)rts_threshold);
342 349
343 ret = wl1271_cmd_configure(wl, DOT11_RTS_THRESHOLD, rts, sizeof(*rts)); 350 ret = wl1271_cmd_configure(wl, DOT11_RTS_THRESHOLD, rts, sizeof(*rts));
344 if (ret < 0) { 351 if (ret < 0) {
@@ -928,12 +935,19 @@ out:
928 return ret; 935 return ret;
929} 936}
930 937
931int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold) 938int wl1271_acx_frag_threshold(struct wl1271 *wl, u32 frag_threshold)
932{ 939{
933 struct acx_frag_threshold *acx; 940 struct acx_frag_threshold *acx;
934 int ret = 0; 941 int ret = 0;
935 942
936 wl1271_debug(DEBUG_ACX, "acx frag threshold"); 943 /*
944 * If the fragmentation is not configured or out of range, use the
945 * default value.
946 */
947 if (frag_threshold > IEEE80211_MAX_FRAG_THRESHOLD)
948 frag_threshold = wl->conf.tx.frag_threshold;
949
950 wl1271_debug(DEBUG_ACX, "acx frag threshold: %d", frag_threshold);
937 951
938 acx = kzalloc(sizeof(*acx), GFP_KERNEL); 952 acx = kzalloc(sizeof(*acx), GFP_KERNEL);
939 953
@@ -942,7 +956,7 @@ int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold)
942 goto out; 956 goto out;
943 } 957 }
944 958
945 acx->frag_threshold = cpu_to_le16(frag_threshold); 959 acx->frag_threshold = cpu_to_le16((u16)frag_threshold);
946 ret = wl1271_cmd_configure(wl, ACX_FRAG_CFG, acx, sizeof(*acx)); 960 ret = wl1271_cmd_configure(wl, ACX_FRAG_CFG, acx, sizeof(*acx));
947 if (ret < 0) { 961 if (ret < 0) {
948 wl1271_warning("Setting of frag threshold failed: %d", ret); 962 wl1271_warning("Setting of frag threshold failed: %d", ret);
diff --git a/drivers/net/wireless/wl12xx/acx.h b/drivers/net/wireless/wl12xx/acx.h
index cd7548dacd59..828367d62668 100644
--- a/drivers/net/wireless/wl12xx/acx.h
+++ b/drivers/net/wireless/wl12xx/acx.h
@@ -1333,7 +1333,7 @@ int wl1271_acx_slot(struct wl1271 *wl, enum acx_slot_type slot_time);
1333int wl1271_acx_group_address_tbl(struct wl1271 *wl, bool enable, 1333int wl1271_acx_group_address_tbl(struct wl1271 *wl, bool enable,
1334 void *mc_list, u32 mc_list_len); 1334 void *mc_list, u32 mc_list_len);
1335int wl1271_acx_service_period_timeout(struct wl1271 *wl); 1335int wl1271_acx_service_period_timeout(struct wl1271 *wl);
1336int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold); 1336int wl1271_acx_rts_threshold(struct wl1271 *wl, u32 rts_threshold);
1337int wl1271_acx_dco_itrim_params(struct wl1271 *wl); 1337int wl1271_acx_dco_itrim_params(struct wl1271 *wl);
1338int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, bool enable_filter); 1338int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, bool enable_filter);
1339int wl1271_acx_beacon_filter_table(struct wl1271 *wl); 1339int wl1271_acx_beacon_filter_table(struct wl1271 *wl);
@@ -1357,7 +1357,7 @@ int wl1271_acx_ac_cfg(struct wl1271 *wl, u8 ac, u8 cw_min, u16 cw_max,
1357int wl1271_acx_tid_cfg(struct wl1271 *wl, u8 queue_id, u8 channel_type, 1357int wl1271_acx_tid_cfg(struct wl1271 *wl, u8 queue_id, u8 channel_type,
1358 u8 tsid, u8 ps_scheme, u8 ack_policy, 1358 u8 tsid, u8 ps_scheme, u8 ack_policy,
1359 u32 apsd_conf0, u32 apsd_conf1); 1359 u32 apsd_conf0, u32 apsd_conf1);
1360int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold); 1360int wl1271_acx_frag_threshold(struct wl1271 *wl, u32 frag_threshold);
1361int wl1271_acx_tx_config_options(struct wl1271 *wl); 1361int wl1271_acx_tx_config_options(struct wl1271 *wl);
1362int wl1271_acx_ap_mem_cfg(struct wl1271 *wl); 1362int wl1271_acx_ap_mem_cfg(struct wl1271 *wl);
1363int wl1271_acx_sta_mem_cfg(struct wl1271 *wl); 1363int wl1271_acx_sta_mem_cfg(struct wl1271 *wl);
diff --git a/drivers/net/wireless/wl12xx/init.c b/drivers/net/wireless/wl12xx/init.c
index 1be656914785..060ca31818eb 100644
--- a/drivers/net/wireless/wl12xx/init.c
+++ b/drivers/net/wireless/wl12xx/init.c
@@ -258,7 +258,7 @@ int wl1271_init_phy_config(struct wl1271 *wl)
258 if (ret < 0) 258 if (ret < 0)
259 return ret; 259 return ret;
260 260
261 ret = wl1271_acx_rts_threshold(wl, wl->conf.rx.rts_threshold); 261 ret = wl1271_acx_rts_threshold(wl, wl->hw->wiphy->rts_threshold);
262 if (ret < 0) 262 if (ret < 0)
263 return ret; 263 return ret;
264 264
@@ -614,7 +614,7 @@ int wl1271_hw_init(struct wl1271 *wl)
614 goto out_free_memmap; 614 goto out_free_memmap;
615 615
616 /* Default fragmentation threshold */ 616 /* Default fragmentation threshold */
617 ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold); 617 ret = wl1271_acx_frag_threshold(wl, wl->hw->wiphy->frag_threshold);
618 if (ret < 0) 618 if (ret < 0)
619 goto out_free_memmap; 619 goto out_free_memmap;
620 620
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index 5f8bb35c6475..81a0c8ed5a4a 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -163,7 +163,7 @@ static struct conf_drv_settings default_conf = {
163 .packet_detection_threshold = 0, 163 .packet_detection_threshold = 0,
164 .ps_poll_timeout = 15, 164 .ps_poll_timeout = 15,
165 .upsd_timeout = 15, 165 .upsd_timeout = 15,
166 .rts_threshold = 2347, 166 .rts_threshold = IEEE80211_MAX_RTS_THRESHOLD,
167 .rx_cca_threshold = 0, 167 .rx_cca_threshold = 0,
168 .irq_blk_threshold = 0xFFFF, 168 .irq_blk_threshold = 0xFFFF,
169 .irq_pkt_threshold = 0, 169 .irq_pkt_threshold = 0,
@@ -2360,7 +2360,7 @@ static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2360 if (ret < 0) 2360 if (ret < 0)
2361 goto out; 2361 goto out;
2362 2362
2363 ret = wl1271_acx_frag_threshold(wl, (u16)value); 2363 ret = wl1271_acx_frag_threshold(wl, value);
2364 if (ret < 0) 2364 if (ret < 0)
2365 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret); 2365 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2366 2366
@@ -2388,7 +2388,7 @@ static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2388 if (ret < 0) 2388 if (ret < 0)
2389 goto out; 2389 goto out;
2390 2390
2391 ret = wl1271_acx_rts_threshold(wl, (u16) value); 2391 ret = wl1271_acx_rts_threshold(wl, value);
2392 if (ret < 0) 2392 if (ret < 0)
2393 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret); 2393 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2394 2394