diff options
author | Juuso Oikarinen <juuso.oikarinen@nokia.com> | 2009-10-13 05:47:41 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-10-27 16:48:08 -0400 |
commit | 45b531a86f93c82d8e390e19a6258111b3627bb0 (patch) | |
tree | 8e574f2332a6f91666e5f1830204d624535cbb69 | |
parent | 8793f9bb19c00b26532e37f1f516e1d9c7bc0476 (diff) |
wl1271: Add config structure for TX path parameters
Add a configuration structure for TX path parameters, and set defalt
configuration values there.
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_acx.c | 54 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_acx.h | 37 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_cmd.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_conf.h | 187 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_init.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_main.c | 103 |
7 files changed, 321 insertions, 70 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271.h b/drivers/net/wireless/wl12xx/wl1271.h index 64a327009f2e..985e8964c2f7 100644 --- a/drivers/net/wireless/wl12xx/wl1271.h +++ b/drivers/net/wireless/wl12xx/wl1271.h | |||
@@ -107,7 +107,7 @@ enum { | |||
107 | CFG_RX_CTL_EN | CFG_RX_BCN_EN | \ | 107 | CFG_RX_CTL_EN | CFG_RX_BCN_EN | \ |
108 | CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN) | 108 | CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN) |
109 | 109 | ||
110 | #define WL1271_DEFAULT_BASIC_RATE_SET (ACX_RATE_MASK_ALL) | 110 | #define WL1271_DEFAULT_BASIC_RATE_SET (CONF_TX_RATE_MASK_ALL) |
111 | 111 | ||
112 | #define WL1271_FW_NAME "wl1271-fw.bin" | 112 | #define WL1271_FW_NAME "wl1271-fw.bin" |
113 | #define WL1271_NVS_NAME "wl1271-nvs.bin" | 113 | #define WL1271_NVS_NAME "wl1271-nvs.bin" |
diff --git a/drivers/net/wireless/wl12xx/wl1271_acx.c b/drivers/net/wireless/wl12xx/wl1271_acx.c index 63aa64618e1b..038203bcf447 100644 --- a/drivers/net/wireless/wl12xx/wl1271_acx.c +++ b/drivers/net/wireless/wl12xx/wl1271_acx.c | |||
@@ -558,7 +558,7 @@ int wl1271_acx_cca_threshold(struct wl1271 *wl) | |||
558 | } | 558 | } |
559 | 559 | ||
560 | detection->rx_cca_threshold = wl->conf.rx.rx_cca_threshold; | 560 | detection->rx_cca_threshold = wl->conf.rx.rx_cca_threshold; |
561 | detection->tx_energy_detection = 0; | 561 | detection->tx_energy_detection = wl->conf.tx.tx_energy_detection; |
562 | 562 | ||
563 | ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD, | 563 | ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD, |
564 | detection, sizeof(*detection)); | 564 | detection, sizeof(*detection)); |
@@ -729,6 +729,7 @@ int wl1271_acx_statistics(struct wl1271 *wl, struct acx_statistics *stats) | |||
729 | int wl1271_acx_rate_policies(struct wl1271 *wl, u32 enabled_rates) | 729 | int wl1271_acx_rate_policies(struct wl1271 *wl, u32 enabled_rates) |
730 | { | 730 | { |
731 | struct acx_rate_policy *acx; | 731 | struct acx_rate_policy *acx; |
732 | struct conf_tx_rate_class *c = &wl->conf.tx.rc_conf; | ||
732 | int ret = 0; | 733 | int ret = 0; |
733 | 734 | ||
734 | wl1271_debug(DEBUG_ACX, "acx rate policies"); | 735 | wl1271_debug(DEBUG_ACX, "acx rate policies"); |
@@ -743,9 +744,9 @@ int wl1271_acx_rate_policies(struct wl1271 *wl, u32 enabled_rates) | |||
743 | /* configure one default (one-size-fits-all) rate class */ | 744 | /* configure one default (one-size-fits-all) rate class */ |
744 | acx->rate_class_cnt = 1; | 745 | acx->rate_class_cnt = 1; |
745 | acx->rate_class[0].enabled_rates = enabled_rates; | 746 | acx->rate_class[0].enabled_rates = enabled_rates; |
746 | acx->rate_class[0].short_retry_limit = ACX_RATE_RETRY_LIMIT; | 747 | acx->rate_class[0].short_retry_limit = c->short_retry_limit; |
747 | acx->rate_class[0].long_retry_limit = ACX_RATE_RETRY_LIMIT; | 748 | acx->rate_class[0].long_retry_limit = c->long_retry_limit; |
748 | acx->rate_class[0].aflags = 0; | 749 | acx->rate_class[0].aflags = c->aflags; |
749 | 750 | ||
750 | ret = wl1271_cmd_configure(wl, ACX_RATE_POLICY, acx, sizeof(*acx)); | 751 | ret = wl1271_cmd_configure(wl, ACX_RATE_POLICY, acx, sizeof(*acx)); |
751 | if (ret < 0) { | 752 | if (ret < 0) { |
@@ -772,22 +773,14 @@ int wl1271_acx_ac_cfg(struct wl1271 *wl) | |||
772 | goto out; | 773 | goto out; |
773 | } | 774 | } |
774 | 775 | ||
775 | /* | 776 | for (i = 0; i < wl->conf.tx.ac_conf_count; i++) { |
776 | * FIXME: Configure each AC with appropriate values (most suitable | 777 | struct conf_tx_ac_category *c = &(wl->conf.tx.ac_conf[i]); |
777 | * values will probably be different for each AC. | 778 | acx->ac = c->ac; |
778 | */ | 779 | acx->cw_min = c->cw_min; |
779 | for (i = 0; i < WL1271_ACX_AC_COUNT; i++) { | 780 | acx->cw_max = c->cw_max; |
780 | acx->ac = i; | 781 | acx->aifsn = c->aifsn; |
781 | |||
782 | /* | ||
783 | * FIXME: The following default values originate from | ||
784 | * the TI reference driver. What do they mean? | ||
785 | */ | ||
786 | acx->cw_min = 15; | ||
787 | acx->cw_max = 63; | ||
788 | acx->aifsn = 3; | ||
789 | acx->reserved = 0; | 782 | acx->reserved = 0; |
790 | acx->tx_op_limit = 0; | 783 | acx->tx_op_limit = c->tx_op_limit; |
791 | 784 | ||
792 | ret = wl1271_cmd_configure(wl, ACX_AC_CFG, acx, sizeof(*acx)); | 785 | ret = wl1271_cmd_configure(wl, ACX_AC_CFG, acx, sizeof(*acx)); |
793 | if (ret < 0) { | 786 | if (ret < 0) { |
@@ -816,12 +809,15 @@ int wl1271_acx_tid_cfg(struct wl1271 *wl) | |||
816 | goto out; | 809 | goto out; |
817 | } | 810 | } |
818 | 811 | ||
819 | /* FIXME: configure each TID with a different AC reference */ | 812 | for (i = 0; i < wl->conf.tx.tid_conf_count; i++) { |
820 | for (i = 0; i < WL1271_ACX_TID_COUNT; i++) { | 813 | struct conf_tx_tid *c = &(wl->conf.tx.tid_conf[i]); |
821 | acx->queue_id = i; | 814 | acx->queue_id = c->queue_id; |
822 | acx->tsid = WL1271_ACX_AC_BE; | 815 | acx->channel_type = c->channel_type; |
823 | acx->ps_scheme = WL1271_ACX_PS_SCHEME_LEGACY; | 816 | acx->tsid = c->tsid; |
824 | acx->ack_policy = WL1271_ACX_ACK_POLICY_LEGACY; | 817 | acx->ps_scheme = c->ps_scheme; |
818 | acx->ack_policy = c->ack_policy; | ||
819 | acx->apsd_conf[0] = c->apsd_conf[0]; | ||
820 | acx->apsd_conf[1] = c->apsd_conf[1]; | ||
825 | 821 | ||
826 | ret = wl1271_cmd_configure(wl, ACX_TID_CFG, acx, sizeof(*acx)); | 822 | ret = wl1271_cmd_configure(wl, ACX_TID_CFG, acx, sizeof(*acx)); |
827 | if (ret < 0) { | 823 | if (ret < 0) { |
@@ -849,7 +845,7 @@ int wl1271_acx_frag_threshold(struct wl1271 *wl) | |||
849 | goto out; | 845 | goto out; |
850 | } | 846 | } |
851 | 847 | ||
852 | acx->frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD; | 848 | acx->frag_threshold = wl->conf.tx.frag_threshold; |
853 | ret = wl1271_cmd_configure(wl, ACX_FRAG_CFG, acx, sizeof(*acx)); | 849 | ret = wl1271_cmd_configure(wl, ACX_FRAG_CFG, acx, sizeof(*acx)); |
854 | if (ret < 0) { | 850 | if (ret < 0) { |
855 | wl1271_warning("Setting of frag threshold failed: %d", ret); | 851 | wl1271_warning("Setting of frag threshold failed: %d", ret); |
@@ -875,8 +871,8 @@ int wl1271_acx_tx_config_options(struct wl1271 *wl) | |||
875 | goto out; | 871 | goto out; |
876 | } | 872 | } |
877 | 873 | ||
878 | acx->tx_compl_timeout = WL1271_ACX_TX_COMPL_TIMEOUT; | 874 | acx->tx_compl_timeout = wl->conf.tx.tx_compl_timeout; |
879 | acx->tx_compl_threshold = WL1271_ACX_TX_COMPL_THRESHOLD; | 875 | acx->tx_compl_threshold = wl->conf.tx.tx_compl_threshold; |
880 | ret = wl1271_cmd_configure(wl, ACX_TX_CONFIG_OPT, acx, sizeof(*acx)); | 876 | ret = wl1271_cmd_configure(wl, ACX_TX_CONFIG_OPT, acx, sizeof(*acx)); |
881 | if (ret < 0) { | 877 | if (ret < 0) { |
882 | wl1271_warning("Setting of tx options failed: %d", ret); | 878 | wl1271_warning("Setting of tx options failed: %d", ret); |
@@ -929,7 +925,7 @@ int wl1271_acx_init_mem_config(struct wl1271 *wl) | |||
929 | return ret; | 925 | return ret; |
930 | 926 | ||
931 | wl->target_mem_map = kzalloc(sizeof(struct wl1271_acx_mem_map), | 927 | wl->target_mem_map = kzalloc(sizeof(struct wl1271_acx_mem_map), |
932 | GFP_KERNEL); | 928 | GFP_KERNEL); |
933 | if (!wl->target_mem_map) { | 929 | if (!wl->target_mem_map) { |
934 | wl1271_error("couldn't allocate target memory map"); | 930 | wl1271_error("couldn't allocate target memory map"); |
935 | return -ENOMEM; | 931 | return -ENOMEM; |
diff --git a/drivers/net/wireless/wl12xx/wl1271_acx.h b/drivers/net/wireless/wl12xx/wl1271_acx.h index 1fbd4e5fcc44..63cddceb39a4 100644 --- a/drivers/net/wireless/wl12xx/wl1271_acx.h +++ b/drivers/net/wireless/wl12xx/wl1271_acx.h | |||
@@ -850,11 +850,6 @@ struct acx_statistics { | |||
850 | struct acx_rxpipe_statistics rxpipe; | 850 | struct acx_rxpipe_statistics rxpipe; |
851 | } __attribute__ ((packed)); | 851 | } __attribute__ ((packed)); |
852 | 852 | ||
853 | #define ACX_MAX_RATE_CLASSES 8 | ||
854 | #define ACX_RATE_MASK_UNSPECIFIED 0 | ||
855 | #define ACX_RATE_MASK_ALL 0x1eff | ||
856 | #define ACX_RATE_RETRY_LIMIT 10 | ||
857 | |||
858 | struct acx_rate_class { | 853 | struct acx_rate_class { |
859 | u32 enabled_rates; | 854 | u32 enabled_rates; |
860 | u8 short_retry_limit; | 855 | u8 short_retry_limit; |
@@ -867,11 +862,9 @@ struct acx_rate_policy { | |||
867 | struct acx_header header; | 862 | struct acx_header header; |
868 | 863 | ||
869 | u32 rate_class_cnt; | 864 | u32 rate_class_cnt; |
870 | struct acx_rate_class rate_class[ACX_MAX_RATE_CLASSES]; | 865 | struct acx_rate_class rate_class[CONF_TX_MAX_RATE_CLASSES]; |
871 | } __attribute__ ((packed)); | 866 | } __attribute__ ((packed)); |
872 | 867 | ||
873 | #define WL1271_ACX_AC_COUNT 4 | ||
874 | |||
875 | struct acx_ac_cfg { | 868 | struct acx_ac_cfg { |
876 | struct acx_header header; | 869 | struct acx_header header; |
877 | u8 ac; | 870 | u8 ac; |
@@ -882,31 +875,6 @@ struct acx_ac_cfg { | |||
882 | u16 tx_op_limit; | 875 | u16 tx_op_limit; |
883 | } __attribute__ ((packed)); | 876 | } __attribute__ ((packed)); |
884 | 877 | ||
885 | enum wl1271_acx_ac { | ||
886 | WL1271_ACX_AC_BE = 0, | ||
887 | WL1271_ACX_AC_BK = 1, | ||
888 | WL1271_ACX_AC_VI = 2, | ||
889 | WL1271_ACX_AC_VO = 3, | ||
890 | WL1271_ACX_AC_CTS2SELF = 4, | ||
891 | WL1271_ACX_AC_ANY_TID = 0x1F, | ||
892 | WL1271_ACX_AC_INVALID = 0xFF, | ||
893 | }; | ||
894 | |||
895 | enum wl1271_acx_ps_scheme { | ||
896 | WL1271_ACX_PS_SCHEME_LEGACY = 0, | ||
897 | WL1271_ACX_PS_SCHEME_UPSD_TRIGGER = 1, | ||
898 | WL1271_ACX_PS_SCHEME_LEGACY_PSPOLL = 2, | ||
899 | WL1271_ACX_PS_SCHEME_SAPSD = 3, | ||
900 | }; | ||
901 | |||
902 | enum wl1271_acx_ack_policy { | ||
903 | WL1271_ACX_ACK_POLICY_LEGACY = 0, | ||
904 | WL1271_ACX_ACK_POLICY_NO_ACK = 1, | ||
905 | WL1271_ACX_ACK_POLICY_BLOCK = 2, | ||
906 | }; | ||
907 | |||
908 | #define WL1271_ACX_TID_COUNT 7 | ||
909 | |||
910 | struct acx_tid_config { | 878 | struct acx_tid_config { |
911 | struct acx_header header; | 879 | struct acx_header header; |
912 | u8 queue_id; | 880 | u8 queue_id; |
@@ -924,9 +892,6 @@ struct acx_frag_threshold { | |||
924 | u8 padding[2]; | 892 | u8 padding[2]; |
925 | } __attribute__ ((packed)); | 893 | } __attribute__ ((packed)); |
926 | 894 | ||
927 | #define WL1271_ACX_TX_COMPL_TIMEOUT 5 | ||
928 | #define WL1271_ACX_TX_COMPL_THRESHOLD 5 | ||
929 | |||
930 | struct acx_tx_config_options { | 895 | struct acx_tx_config_options { |
931 | struct acx_header header; | 896 | struct acx_header header; |
932 | u16 tx_compl_timeout; /* msec */ | 897 | u16 tx_compl_timeout; /* msec */ |
diff --git a/drivers/net/wireless/wl12xx/wl1271_cmd.c b/drivers/net/wireless/wl12xx/wl1271_cmd.c index c7a8a64d18dd..f05bd7797fb7 100644 --- a/drivers/net/wireless/wl12xx/wl1271_cmd.c +++ b/drivers/net/wireless/wl12xx/wl1271_cmd.c | |||
@@ -626,9 +626,9 @@ int wl1271_cmd_template_set(struct wl1271 *wl, u16 template_id, | |||
626 | 626 | ||
627 | cmd->len = cpu_to_le16(buf_len); | 627 | cmd->len = cpu_to_le16(buf_len); |
628 | cmd->template_type = template_id; | 628 | cmd->template_type = template_id; |
629 | cmd->enabled_rates = ACX_RATE_MASK_UNSPECIFIED; | 629 | cmd->enabled_rates = wl->conf.tx.rc_conf.enabled_rates; |
630 | cmd->short_retry_limit = ACX_RATE_RETRY_LIMIT; | 630 | cmd->short_retry_limit = wl->conf.tx.rc_conf.short_retry_limit; |
631 | cmd->long_retry_limit = ACX_RATE_RETRY_LIMIT; | 631 | cmd->long_retry_limit = wl->conf.tx.rc_conf.long_retry_limit; |
632 | 632 | ||
633 | if (buf) | 633 | if (buf) |
634 | memcpy(cmd->template_data, buf, buf_len); | 634 | memcpy(cmd->template_data, buf, buf_len); |
diff --git a/drivers/net/wireless/wl12xx/wl1271_conf.h b/drivers/net/wireless/wl12xx/wl1271_conf.h index 8bf8bff54b59..3c5ce3100e6e 100644 --- a/drivers/net/wireless/wl12xx/wl1271_conf.h +++ b/drivers/net/wireless/wl12xx/wl1271_conf.h | |||
@@ -255,9 +255,196 @@ struct conf_rx_settings { | |||
255 | u8 queue_type; | 255 | u8 queue_type; |
256 | }; | 256 | }; |
257 | 257 | ||
258 | #define CONF_TX_MAX_RATE_CLASSES 8 | ||
259 | |||
260 | #define CONF_TX_RATE_MASK_UNSPECIFIED 0 | ||
261 | #define CONF_TX_RATE_MASK_ALL 0x1eff | ||
262 | #define CONF_TX_RATE_RETRY_LIMIT 10 | ||
263 | |||
264 | struct conf_tx_rate_class { | ||
265 | |||
266 | /* | ||
267 | * The rates enabled for this rate class. | ||
268 | * | ||
269 | * Range: CONF_HW_BIT_RATE_* bit mask | ||
270 | */ | ||
271 | u32 enabled_rates; | ||
272 | |||
273 | /* | ||
274 | * The dot11 short retry limit used for TX retries. | ||
275 | * | ||
276 | * Range: u8 | ||
277 | */ | ||
278 | u8 short_retry_limit; | ||
279 | |||
280 | /* | ||
281 | * The dot11 long retry limit used for TX retries. | ||
282 | * | ||
283 | * Range: u8 | ||
284 | */ | ||
285 | u8 long_retry_limit; | ||
286 | |||
287 | /* | ||
288 | * Flags controlling the attributes of TX transmission. | ||
289 | * | ||
290 | * Range: bit 0: Truncate - when set, FW attempts to send a frame stop | ||
291 | * when the total valid per-rate attempts have | ||
292 | * been exhausted; otherwise transmissions | ||
293 | * will continue at the lowest available rate | ||
294 | * until the appropriate one of the | ||
295 | * short_retry_limit, long_retry_limit, | ||
296 | * dot11_max_transmit_msdu_life_time, or | ||
297 | * max_tx_life_time, is exhausted. | ||
298 | * 1: Preamble Override - indicates if the preamble type | ||
299 | * should be used in TX. | ||
300 | * 2: Preamble Type - the type of the preamble to be used by | ||
301 | * the policy (0 - long preamble, 1 - short preamble. | ||
302 | */ | ||
303 | u8 aflags; | ||
304 | }; | ||
305 | |||
306 | #define CONF_TX_MAX_AC_COUNT 4 | ||
307 | |||
308 | /* Slot number setting to start transmission at PIFS interval */ | ||
309 | #define CONF_TX_AIFS_PIFS 1 | ||
310 | /* Slot number setting to start transmission at DIFS interval normal | ||
311 | * DCF access */ | ||
312 | #define CONF_TX_AIFS_DIFS 2 | ||
313 | |||
314 | |||
315 | enum conf_tx_ac { | ||
316 | CONF_TX_AC_BE = 0, /* best effort / legacy */ | ||
317 | CONF_TX_AC_BK = 1, /* background */ | ||
318 | CONF_TX_AC_VI = 2, /* video */ | ||
319 | CONF_TX_AC_VO = 3, /* voice */ | ||
320 | CONF_TX_AC_CTS2SELF = 4, /* fictious AC, follows AC_VO */ | ||
321 | CONF_TX_AC_ANY_TID = 0x1f | ||
322 | }; | ||
323 | |||
324 | struct conf_tx_ac_category { | ||
325 | /* | ||
326 | * The AC class identifier. | ||
327 | * | ||
328 | * Range: enum conf_tx_ac | ||
329 | */ | ||
330 | u8 ac; | ||
331 | |||
332 | /* | ||
333 | * The contention window minimum size (in slots) for the access | ||
334 | * class. | ||
335 | * | ||
336 | * Range: u8 | ||
337 | */ | ||
338 | u8 cw_min; | ||
339 | |||
340 | /* | ||
341 | * The contention window maximum size (in slots) for the access | ||
342 | * class. | ||
343 | * | ||
344 | * Range: u8 | ||
345 | */ | ||
346 | u16 cw_max; | ||
347 | |||
348 | /* | ||
349 | * The AIF value (in slots) for the access class. | ||
350 | * | ||
351 | * Range: u8 | ||
352 | */ | ||
353 | u8 aifsn; | ||
354 | |||
355 | /* | ||
356 | * The TX Op Limit (in microseconds) for the access class. | ||
357 | * | ||
358 | * Range: u16 | ||
359 | */ | ||
360 | u16 tx_op_limit; | ||
361 | }; | ||
362 | |||
363 | #define CONF_TX_MAX_TID_COUNT 7 | ||
364 | |||
365 | enum { | ||
366 | CONF_CHANNEL_TYPE_DCF = 0, /* DC/LEGACY*/ | ||
367 | CONF_CHANNEL_TYPE_EDCF = 1, /* EDCA*/ | ||
368 | CONF_CHANNEL_TYPE_HCCA = 2, /* HCCA*/ | ||
369 | }; | ||
370 | |||
371 | enum { | ||
372 | CONF_PS_SCHEME_LEGACY = 0, | ||
373 | CONF_PS_SCHEME_UPSD_TRIGGER = 1, | ||
374 | CONF_PS_SCHEME_LEGACY_PSPOLL = 2, | ||
375 | CONF_PS_SCHEME_SAPSD = 3, | ||
376 | }; | ||
377 | |||
378 | enum { | ||
379 | CONF_ACK_POLICY_LEGACY = 0, | ||
380 | CONF_ACK_POLICY_NO_ACK = 1, | ||
381 | CONF_ACK_POLICY_BLOCK = 2, | ||
382 | }; | ||
383 | |||
384 | |||
385 | struct conf_tx_tid { | ||
386 | u8 queue_id; | ||
387 | u8 channel_type; | ||
388 | u8 tsid; | ||
389 | u8 ps_scheme; | ||
390 | u8 ack_policy; | ||
391 | u32 apsd_conf[2]; | ||
392 | }; | ||
393 | |||
394 | struct conf_tx_settings { | ||
395 | /* | ||
396 | * The TX ED value for TELEC Enable/Disable. | ||
397 | * | ||
398 | * Range: 0, 1 | ||
399 | */ | ||
400 | u8 tx_energy_detection; | ||
401 | |||
402 | /* | ||
403 | * Configuration for rate classes for TX (currently only one | ||
404 | * rate class supported.) | ||
405 | */ | ||
406 | struct conf_tx_rate_class rc_conf; | ||
407 | |||
408 | /* | ||
409 | * Configuration for access categories for TX rate control. | ||
410 | */ | ||
411 | u8 ac_conf_count; | ||
412 | struct conf_tx_ac_category ac_conf[CONF_TX_MAX_AC_COUNT]; | ||
413 | |||
414 | /* | ||
415 | * Configuration for TID parameters. | ||
416 | */ | ||
417 | u8 tid_conf_count; | ||
418 | struct conf_tx_tid tid_conf[CONF_TX_MAX_TID_COUNT]; | ||
419 | |||
420 | /* | ||
421 | * The TX fragmentation threshold. | ||
422 | * | ||
423 | * Range: u16 | ||
424 | */ | ||
425 | u16 frag_threshold; | ||
426 | |||
427 | /* | ||
428 | * Max time in msec the FW may delay frame TX-Complete interrupt. | ||
429 | * | ||
430 | * Range: u16 | ||
431 | */ | ||
432 | u16 tx_compl_timeout; | ||
433 | |||
434 | /* | ||
435 | * Completed TX packet count which requires to issue the TX-Complete | ||
436 | * interrupt. | ||
437 | * | ||
438 | * Range: u16 | ||
439 | */ | ||
440 | u16 tx_compl_threshold; | ||
441 | |||
442 | }; | ||
443 | |||
258 | struct conf_drv_settings { | 444 | struct conf_drv_settings { |
259 | struct conf_sg_settings sg; | 445 | struct conf_sg_settings sg; |
260 | struct conf_rx_settings rx; | 446 | struct conf_rx_settings rx; |
447 | struct conf_tx_settings tx; | ||
261 | }; | 448 | }; |
262 | 449 | ||
263 | #endif | 450 | #endif |
diff --git a/drivers/net/wireless/wl12xx/wl1271_init.c b/drivers/net/wireless/wl12xx/wl1271_init.c index 57382631c1ad..a3fc4c97c518 100644 --- a/drivers/net/wireless/wl12xx/wl1271_init.c +++ b/drivers/net/wireless/wl12xx/wl1271_init.c | |||
@@ -382,7 +382,7 @@ int wl1271_hw_init(struct wl1271 *wl) | |||
382 | goto out_free_memmap; | 382 | goto out_free_memmap; |
383 | 383 | ||
384 | /* Configure TX rate classes */ | 384 | /* Configure TX rate classes */ |
385 | ret = wl1271_acx_rate_policies(wl, ACX_RATE_MASK_ALL); | 385 | ret = wl1271_acx_rate_policies(wl, CONF_TX_RATE_MASK_ALL); |
386 | if (ret < 0) | 386 | if (ret < 0) |
387 | goto out_free_memmap; | 387 | goto out_free_memmap; |
388 | 388 | ||
diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c index d04706de7f49..35d0b7efb680 100644 --- a/drivers/net/wireless/wl12xx/wl1271_main.c +++ b/drivers/net/wireless/wl12xx/wl1271_main.c | |||
@@ -73,6 +73,109 @@ static void wl1271_conf_init(struct wl1271 *wl) | |||
73 | .irq_pkt_threshold = USHORT_MAX, | 73 | .irq_pkt_threshold = USHORT_MAX, |
74 | .irq_timeout = 5, | 74 | .irq_timeout = 5, |
75 | .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY, | 75 | .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY, |
76 | }, | ||
77 | .tx = { | ||
78 | .tx_energy_detection = 0, | ||
79 | .rc_conf = { | ||
80 | .enabled_rates = | ||
81 | CONF_TX_RATE_MASK_UNSPECIFIED, | ||
82 | .short_retry_limit = 10, | ||
83 | .long_retry_limit = 10, | ||
84 | .aflags = 0 | ||
85 | }, | ||
86 | .ac_conf_count = 4, | ||
87 | .ac_conf = { | ||
88 | [0] = { | ||
89 | .ac = CONF_TX_AC_BE, | ||
90 | .cw_min = 15, | ||
91 | .cw_max = 63, | ||
92 | .aifsn = 3, | ||
93 | .tx_op_limit = 0, | ||
94 | }, | ||
95 | [1] = { | ||
96 | .ac = CONF_TX_AC_BK, | ||
97 | .cw_min = 15, | ||
98 | .cw_max = 63, | ||
99 | .aifsn = 7, | ||
100 | .tx_op_limit = 0, | ||
101 | }, | ||
102 | [2] = { | ||
103 | .ac = CONF_TX_AC_VI, | ||
104 | .cw_min = 15, | ||
105 | .cw_max = 63, | ||
106 | .aifsn = CONF_TX_AIFS_PIFS, | ||
107 | .tx_op_limit = 3008, | ||
108 | }, | ||
109 | [3] = { | ||
110 | .ac = CONF_TX_AC_VO, | ||
111 | .cw_min = 15, | ||
112 | .cw_max = 63, | ||
113 | .aifsn = CONF_TX_AIFS_PIFS, | ||
114 | .tx_op_limit = 1504, | ||
115 | }, | ||
116 | }, | ||
117 | .tid_conf_count = 7, | ||
118 | .tid_conf = { | ||
119 | [0] = { | ||
120 | .queue_id = 0, | ||
121 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
122 | .tsid = CONF_TX_AC_BE, | ||
123 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
124 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
125 | .apsd_conf = {0, 0}, | ||
126 | }, | ||
127 | [1] = { | ||
128 | .queue_id = 1, | ||
129 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
130 | .tsid = CONF_TX_AC_BE, | ||
131 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
132 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
133 | .apsd_conf = {0, 0}, | ||
134 | }, | ||
135 | [2] = { | ||
136 | .queue_id = 2, | ||
137 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
138 | .tsid = CONF_TX_AC_BE, | ||
139 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
140 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
141 | .apsd_conf = {0, 0}, | ||
142 | }, | ||
143 | [3] = { | ||
144 | .queue_id = 3, | ||
145 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
146 | .tsid = CONF_TX_AC_BE, | ||
147 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
148 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
149 | .apsd_conf = {0, 0}, | ||
150 | }, | ||
151 | [4] = { | ||
152 | .queue_id = 4, | ||
153 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
154 | .tsid = CONF_TX_AC_BE, | ||
155 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
156 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
157 | .apsd_conf = {0, 0}, | ||
158 | }, | ||
159 | [5] = { | ||
160 | .queue_id = 5, | ||
161 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
162 | .tsid = CONF_TX_AC_BE, | ||
163 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
164 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
165 | .apsd_conf = {0, 0}, | ||
166 | }, | ||
167 | [6] = { | ||
168 | .queue_id = 6, | ||
169 | .channel_type = CONF_CHANNEL_TYPE_DCF, | ||
170 | .tsid = CONF_TX_AC_BE, | ||
171 | .ps_scheme = CONF_PS_SCHEME_LEGACY, | ||
172 | .ack_policy = CONF_ACK_POLICY_LEGACY, | ||
173 | .apsd_conf = {0, 0}, | ||
174 | } | ||
175 | }, | ||
176 | .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD, | ||
177 | .tx_compl_timeout = 5, | ||
178 | .tx_compl_threshold = 5 | ||
76 | } | 179 | } |
77 | }; | 180 | }; |
78 | 181 | ||