aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2009-10-13 05:47:41 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-10-27 16:48:08 -0400
commit45b531a86f93c82d8e390e19a6258111b3627bb0 (patch)
tree8e574f2332a6f91666e5f1830204d624535cbb69
parent8793f9bb19c00b26532e37f1f516e1d9c7bc0476 (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.h2
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_acx.c54
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_acx.h37
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_cmd.c6
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_conf.h187
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_init.c2
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_main.c103
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)
729int wl1271_acx_rate_policies(struct wl1271 *wl, u32 enabled_rates) 729int 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
858struct acx_rate_class { 853struct 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
875struct acx_ac_cfg { 868struct 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
885enum 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
895enum 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
902enum 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
910struct acx_tid_config { 878struct 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
930struct acx_tx_config_options { 895struct 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
264struct 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
315enum 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
324struct 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
365enum {
366 CONF_CHANNEL_TYPE_DCF = 0, /* DC/LEGACY*/
367 CONF_CHANNEL_TYPE_EDCF = 1, /* EDCA*/
368 CONF_CHANNEL_TYPE_HCCA = 2, /* HCCA*/
369};
370
371enum {
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
378enum {
379 CONF_ACK_POLICY_LEGACY = 0,
380 CONF_ACK_POLICY_NO_ACK = 1,
381 CONF_ACK_POLICY_BLOCK = 2,
382};
383
384
385struct 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
394struct 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
258struct conf_drv_settings { 444struct 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