diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath9k/core.h | 275 |
1 files changed, 130 insertions, 145 deletions
diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h index 903bd4624c6e..e294c1b8ddb5 100644 --- a/drivers/net/wireless/ath9k/core.h +++ b/drivers/net/wireless/ath9k/core.h | |||
@@ -51,24 +51,24 @@ struct ath_node; | |||
51 | 51 | ||
52 | /* Macro to expand scalars to 64-bit objects */ | 52 | /* Macro to expand scalars to 64-bit objects */ |
53 | 53 | ||
54 | #define ito64(x) (sizeof(x) == 8) ? \ | 54 | #define ito64(x) (sizeof(x) == 8) ? \ |
55 | (((unsigned long long int)(x)) & (0xff)) : \ | 55 | (((unsigned long long int)(x)) & (0xff)) : \ |
56 | (sizeof(x) == 16) ? \ | 56 | (sizeof(x) == 16) ? \ |
57 | (((unsigned long long int)(x)) & 0xffff) : \ | 57 | (((unsigned long long int)(x)) & 0xffff) : \ |
58 | ((sizeof(x) == 32) ? \ | 58 | ((sizeof(x) == 32) ? \ |
59 | (((unsigned long long int)(x)) & 0xffffffff) : \ | 59 | (((unsigned long long int)(x)) & 0xffffffff) : \ |
60 | (unsigned long long int)(x)) | 60 | (unsigned long long int)(x)) |
61 | 61 | ||
62 | /* increment with wrap-around */ | 62 | /* increment with wrap-around */ |
63 | #define INCR(_l, _sz) do { \ | 63 | #define INCR(_l, _sz) do { \ |
64 | (_l)++; \ | 64 | (_l)++; \ |
65 | (_l) &= ((_sz) - 1); \ | 65 | (_l) &= ((_sz) - 1); \ |
66 | } while (0) | 66 | } while (0) |
67 | 67 | ||
68 | /* decrement with wrap-around */ | 68 | /* decrement with wrap-around */ |
69 | #define DECR(_l, _sz) do { \ | 69 | #define DECR(_l, _sz) do { \ |
70 | (_l)--; \ | 70 | (_l)--; \ |
71 | (_l) &= ((_sz) - 1); \ | 71 | (_l) &= ((_sz) - 1); \ |
72 | } while (0) | 72 | } while (0) |
73 | 73 | ||
74 | #define A_MAX(a, b) ((a) > (b) ? (a) : (b)) | 74 | #define A_MAX(a, b) ((a) > (b) ? (a) : (b)) |
@@ -136,12 +136,11 @@ enum ATH_DEBUG { | |||
136 | /* Per-instance load-time (note: NOT run-time) configurations | 136 | /* Per-instance load-time (note: NOT run-time) configurations |
137 | * for Atheros Device */ | 137 | * for Atheros Device */ |
138 | struct ath_config { | 138 | struct ath_config { |
139 | u32 ath_aggr_prot; | 139 | u32 ath_aggr_prot; |
140 | u16 txpowlimit; | 140 | u16 txpowlimit; |
141 | u16 txpowlimit_override; | 141 | u16 txpowlimit_override; |
142 | u8 cabqReadytime; /* Cabq Readytime % */ | 142 | u8 cabqReadytime; /* Cabq Readytime % */ |
143 | u8 swBeaconProcess; /* Process received beacons | 143 | u8 swBeaconProcess; /* Process received beacons in SW (vs HW) */ |
144 | in SW (vs HW) */ | ||
145 | }; | 144 | }; |
146 | 145 | ||
147 | /***********************/ | 146 | /***********************/ |
@@ -161,12 +160,12 @@ struct ath_config { | |||
161 | #define ATH_CHAINMASK_SEL_DOWN_RSSI_THRES 35 | 160 | #define ATH_CHAINMASK_SEL_DOWN_RSSI_THRES 35 |
162 | /* Struct to store the chainmask select related info */ | 161 | /* Struct to store the chainmask select related info */ |
163 | struct ath_chainmask_sel { | 162 | struct ath_chainmask_sel { |
164 | struct timer_list timer; | 163 | struct timer_list timer; |
165 | int cur_tx_mask; /* user configured or 3x3 */ | 164 | int cur_tx_mask; /* user configured or 3x3 */ |
166 | int cur_rx_mask; /* user configured or 3x3 */ | 165 | int cur_rx_mask; /* user configured or 3x3 */ |
167 | int tx_avgrssi; | 166 | int tx_avgrssi; |
168 | u8 switch_allowed:1, /* timer will set this */ | 167 | u8 switch_allowed:1, /* timer will set this */ |
169 | cm_sel_enabled:1; | 168 | cm_sel_enabled : 1; |
170 | }; | 169 | }; |
171 | 170 | ||
172 | int ath_chainmask_sel_logic(struct ath_softc *sc, struct ath_node *an); | 171 | int ath_chainmask_sel_logic(struct ath_softc *sc, struct ath_node *an); |
@@ -192,8 +191,8 @@ chains is due to FF aggregation in the driver. */ | |||
192 | 191 | ||
193 | struct ath_buf_state { | 192 | struct ath_buf_state { |
194 | int bfs_nframes; /* # frames in aggregate */ | 193 | int bfs_nframes; /* # frames in aggregate */ |
195 | u16 bfs_al; /* length of aggregate */ | 194 | u16 bfs_al; /* length of aggregate */ |
196 | u16 bfs_frmlen; /* length of frame */ | 195 | u16 bfs_frmlen; /* length of frame */ |
197 | int bfs_seqno; /* sequence number */ | 196 | int bfs_seqno; /* sequence number */ |
198 | int bfs_tidno; /* tid of this frame */ | 197 | int bfs_tidno; /* tid of this frame */ |
199 | int bfs_retries; /* current retries */ | 198 | int bfs_retries; /* current retries */ |
@@ -205,7 +204,7 @@ struct ath_buf_state { | |||
205 | u8 bfs_isretried:1; /* is retried */ | 204 | u8 bfs_isretried:1; /* is retried */ |
206 | u8 bfs_isxretried:1; /* is excessive retried */ | 205 | u8 bfs_isxretried:1; /* is excessive retried */ |
207 | u8 bfs_shpreamble:1; /* is short preamble */ | 206 | u8 bfs_shpreamble:1; /* is short preamble */ |
208 | u8 bfs_isbar:1; /* is a BAR */ | 207 | u8 bfs_isbar:1; /* is a BAR */ |
209 | u8 bfs_ispspoll:1; /* is a PS-Poll */ | 208 | u8 bfs_ispspoll:1; /* is a PS-Poll */ |
210 | u8 bfs_aggrburst:1; /* is a aggr burst */ | 209 | u8 bfs_aggrburst:1; /* is a aggr burst */ |
211 | u8 bfs_calcairtime:1; /* requests airtime be calculated | 210 | u8 bfs_calcairtime:1; /* requests airtime be calculated |
@@ -247,7 +246,7 @@ struct ath_buf { | |||
247 | struct list_head list; | 246 | struct list_head list; |
248 | struct list_head *last; | 247 | struct list_head *last; |
249 | struct ath_buf *bf_lastbf; /* last buf of this unit (a frame or | 248 | struct ath_buf *bf_lastbf; /* last buf of this unit (a frame or |
250 | an aggregate) */ | 249 | an aggregate) */ |
251 | struct ath_buf *bf_lastfrm; /* last buf of this frame */ | 250 | struct ath_buf *bf_lastfrm; /* last buf of this frame */ |
252 | struct ath_buf *bf_next; /* next subframe in the aggregate */ | 251 | struct ath_buf *bf_next; /* next subframe in the aggregate */ |
253 | struct ath_buf *bf_rifslast; /* last buf for RIFS burst */ | 252 | struct ath_buf *bf_rifslast; /* last buf for RIFS burst */ |
@@ -257,7 +256,7 @@ struct ath_buf { | |||
257 | dma_addr_t bf_daddr; /* physical addr of desc */ | 256 | dma_addr_t bf_daddr; /* physical addr of desc */ |
258 | dma_addr_t bf_buf_addr; /* physical addr of data buffer */ | 257 | dma_addr_t bf_buf_addr; /* physical addr of data buffer */ |
259 | u32 bf_status; | 258 | u32 bf_status; |
260 | u16 bf_flags; /* tx descriptor flags */ | 259 | u16 bf_flags; /* tx descriptor flags */ |
261 | struct ath_buf_state bf_state; /* buffer state */ | 260 | struct ath_buf_state bf_state; /* buffer state */ |
262 | dma_addr_t bf_dmacontext; | 261 | dma_addr_t bf_dmacontext; |
263 | }; | 262 | }; |
@@ -331,8 +330,8 @@ struct ath_recv_status { | |||
331 | int8_t rssictl[ATH_MAX_ANTENNA]; /* RSSI (noise floor ajusted) */ | 330 | int8_t rssictl[ATH_MAX_ANTENNA]; /* RSSI (noise floor ajusted) */ |
332 | int8_t rssiextn[ATH_MAX_ANTENNA]; /* RSSI (noise floor ajusted) */ | 331 | int8_t rssiextn[ATH_MAX_ANTENNA]; /* RSSI (noise floor ajusted) */ |
333 | int8_t abs_rssi; /* absolute RSSI */ | 332 | int8_t abs_rssi; /* absolute RSSI */ |
334 | u8 rateieee; /* data rate received (IEEE rate code) */ | 333 | u8 rateieee; /* data rate received (IEEE rate code) */ |
335 | u8 ratecode; /* phy rate code */ | 334 | u8 ratecode; /* phy rate code */ |
336 | int rateKbps; /* data rate received (Kbps) */ | 335 | int rateKbps; /* data rate received (Kbps) */ |
337 | int antenna; /* rx antenna */ | 336 | int antenna; /* rx antenna */ |
338 | int flags; /* status of associated skb */ | 337 | int flags; /* status of associated skb */ |
@@ -351,28 +350,28 @@ struct ath_recv_status { | |||
351 | }; | 350 | }; |
352 | 351 | ||
353 | struct ath_rxbuf { | 352 | struct ath_rxbuf { |
354 | struct sk_buff *rx_wbuf; /* buffer */ | 353 | struct sk_buff *rx_wbuf; |
355 | unsigned long rx_time; /* system time when received */ | 354 | unsigned long rx_time; /* system time when received */ |
356 | struct ath_recv_status rx_status; /* cached rx status */ | 355 | struct ath_recv_status rx_status; /* cached rx status */ |
357 | }; | 356 | }; |
358 | 357 | ||
359 | /* Per-TID aggregate receiver state for a node */ | 358 | /* Per-TID aggregate receiver state for a node */ |
360 | struct ath_arx_tid { | 359 | struct ath_arx_tid { |
361 | struct ath_node *an; /* parent ath node */ | 360 | struct ath_node *an; |
362 | struct ath_rxbuf *rxbuf; /* re-ordering buffer */ | 361 | struct ath_rxbuf *rxbuf; /* re-ordering buffer */ |
363 | struct timer_list timer; | 362 | struct timer_list timer; |
364 | spinlock_t tidlock; /* lock to protect this TID structure */ | 363 | spinlock_t tidlock; |
365 | int baw_head; /* seq_next at head */ | 364 | int baw_head; /* seq_next at head */ |
366 | int baw_tail; /* tail of block-ack window */ | 365 | int baw_tail; /* tail of block-ack window */ |
367 | int seq_reset; /* need to reset start sequence */ | 366 | int seq_reset; /* need to reset start sequence */ |
368 | int addba_exchangecomplete; | 367 | int addba_exchangecomplete; |
369 | u16 seq_next; /* next expected sequence */ | 368 | u16 seq_next; /* next expected sequence */ |
370 | u16 baw_size; /* block-ack window size */ | 369 | u16 baw_size; /* block-ack window size */ |
371 | }; | 370 | }; |
372 | 371 | ||
373 | /* Per-node receiver aggregate state */ | 372 | /* Per-node receiver aggregate state */ |
374 | struct ath_arx { | 373 | struct ath_arx { |
375 | struct ath_arx_tid tid[WME_NUM_TID]; | 374 | struct ath_arx_tid tid[WME_NUM_TID]; |
376 | }; | 375 | }; |
377 | 376 | ||
378 | int ath_startrecv(struct ath_softc *sc); | 377 | int ath_startrecv(struct ath_softc *sc); |
@@ -444,96 +443,95 @@ enum ATH_SM_PWRSAV{ | |||
444 | * hardware queue). | 443 | * hardware queue). |
445 | */ | 444 | */ |
446 | struct ath_txq { | 445 | struct ath_txq { |
447 | u32 axq_qnum; /* hardware q number */ | 446 | u32 axq_qnum; /* hardware q number */ |
448 | u32 *axq_link; /* link ptr in last TX desc */ | 447 | u32 *axq_link; /* link ptr in last TX desc */ |
449 | struct list_head axq_q; /* transmit queue */ | 448 | struct list_head axq_q; /* transmit queue */ |
450 | spinlock_t axq_lock; /* lock on q and link */ | 449 | spinlock_t axq_lock; |
451 | unsigned long axq_lockflags; /* intr state when must cli */ | 450 | unsigned long axq_lockflags; /* intr state when must cli */ |
452 | u32 axq_depth; /* queue depth */ | 451 | u32 axq_depth; /* queue depth */ |
453 | u8 axq_aggr_depth; /* aggregates queued */ | 452 | u8 axq_aggr_depth; /* aggregates queued */ |
454 | u32 axq_totalqueued;/* total ever queued */ | 453 | u32 axq_totalqueued; /* total ever queued */ |
455 | u32 axq_intrcnt; /* count to determine | 454 | |
456 | if descriptor should generate | 455 | /* count to determine if descriptor should generate int on this txq. */ |
457 | int on this txq. */ | 456 | u32 axq_intrcnt; |
458 | bool stopped; /* Is mac80211 queue | 457 | |
459 | stopped ? */ | 458 | bool stopped; /* Is mac80211 queue stopped ? */ |
460 | /* State for patching up CTS when bursting */ | 459 | struct ath_buf *axq_linkbuf; /* virtual addr of last buffer*/ |
461 | struct ath_buf *axq_linkbuf; /* virtual addr of last buffer*/ | 460 | |
462 | struct ath_desc *axq_lastdsWithCTS; /* first desc of the | 461 | /* first desc of the last descriptor that contains CTS */ |
463 | last descriptor that contains CTS */ | 462 | struct ath_desc *axq_lastdsWithCTS; |
464 | struct ath_desc *axq_gatingds; /* final desc of the gating desc | 463 | |
465 | * that determines whether lastdsWithCTS has | 464 | /* final desc of the gating desc that determines whether |
466 | * been DMA'ed or not */ | 465 | lastdsWithCTS has been DMA'ed or not */ |
467 | struct list_head axq_acq; | 466 | struct ath_desc *axq_gatingds; |
467 | |||
468 | struct list_head axq_acq; | ||
468 | }; | 469 | }; |
469 | 470 | ||
470 | /* per TID aggregate tx state for a destination */ | 471 | /* per TID aggregate tx state for a destination */ |
471 | struct ath_atx_tid { | 472 | struct ath_atx_tid { |
472 | struct list_head list; /* round-robin tid entry */ | 473 | struct list_head list; /* round-robin tid entry */ |
473 | struct list_head buf_q; /* pending buffers */ | 474 | struct list_head buf_q; /* pending buffers */ |
474 | struct ath_node *an; /* parent node structure */ | 475 | struct ath_node *an; |
475 | struct ath_atx_ac *ac; /* parent access category */ | 476 | struct ath_atx_ac *ac; |
476 | struct ath_buf *tx_buf[ATH_TID_MAX_BUFS];/* active tx frames */ | 477 | struct ath_buf *tx_buf[ATH_TID_MAX_BUFS]; /* active tx frames */ |
477 | u16 seq_start; /* starting seq of BA window */ | 478 | u16 seq_start; |
478 | u16 seq_next; /* next seq to be used */ | 479 | u16 seq_next; |
479 | u16 baw_size; /* BA window size */ | 480 | u16 baw_size; |
480 | int tidno; /* TID number */ | 481 | int tidno; |
481 | int baw_head; /* first un-acked tx buffer */ | 482 | int baw_head; /* first un-acked tx buffer */ |
482 | int baw_tail; /* next unused tx buffer slot */ | 483 | int baw_tail; /* next unused tx buffer slot */ |
483 | int sched; /* TID is scheduled */ | 484 | int sched; |
484 | int paused; /* TID is paused */ | 485 | int paused; |
485 | int cleanup_inprogress; /* aggr of this TID is | 486 | int cleanup_inprogress; |
486 | being teared down */ | 487 | u32 addba_exchangecomplete:1; |
487 | u32 addba_exchangecomplete:1; /* ADDBA state */ | 488 | int32_t addba_exchangeinprogress; |
488 | int32_t addba_exchangeinprogress; | 489 | int addba_exchangeattempts; |
489 | int addba_exchangeattempts; | ||
490 | }; | 490 | }; |
491 | 491 | ||
492 | /* per access-category aggregate tx state for a destination */ | 492 | /* per access-category aggregate tx state for a destination */ |
493 | struct ath_atx_ac { | 493 | struct ath_atx_ac { |
494 | int sched; /* dest-ac is scheduled */ | 494 | int sched; /* dest-ac is scheduled */ |
495 | int qnum; /* H/W queue number associated | 495 | int qnum; /* H/W queue number associated |
496 | with this AC */ | 496 | with this AC */ |
497 | struct list_head list; /* round-robin txq entry */ | 497 | struct list_head list; /* round-robin txq entry */ |
498 | struct list_head tid_q; /* queue of TIDs with buffers */ | 498 | struct list_head tid_q; /* queue of TIDs with buffers */ |
499 | }; | 499 | }; |
500 | 500 | ||
501 | /* per dest tx state */ | 501 | /* per dest tx state */ |
502 | struct ath_atx { | 502 | struct ath_atx { |
503 | struct ath_atx_tid tid[WME_NUM_TID]; | 503 | struct ath_atx_tid tid[WME_NUM_TID]; |
504 | struct ath_atx_ac ac[WME_NUM_AC]; | 504 | struct ath_atx_ac ac[WME_NUM_AC]; |
505 | }; | 505 | }; |
506 | 506 | ||
507 | /* per-frame tx control block */ | 507 | /* per-frame tx control block */ |
508 | struct ath_tx_control { | 508 | struct ath_tx_control { |
509 | struct ath_node *an; /* destination to sent to */ | 509 | struct ath_node *an; |
510 | int if_id; /* only valid for cab traffic */ | 510 | int if_id; |
511 | int qnum; /* h/w queue number */ | 511 | int qnum; |
512 | u32 ht:1; /* if it can be transmitted using HT */ | 512 | u32 ht:1; |
513 | u32 ps:1; /* if one or more stations are in PS mode */ | 513 | u32 ps:1; |
514 | u32 use_minrate:1; /* if this frame should transmitted using | 514 | u32 use_minrate:1; |
515 | minimum rate */ | 515 | enum ath9k_pkt_type atype; |
516 | enum ath9k_pkt_type atype; /* Atheros packet type */ | 516 | enum ath9k_key_type keytype; |
517 | enum ath9k_key_type keytype; /* key type */ | 517 | u32 flags; |
518 | u32 flags; /* HAL flags */ | 518 | u16 seqno; |
519 | u16 seqno; /* sequence number */ | 519 | u16 tidno; |
520 | u16 tidno; /* tid number */ | 520 | u16 txpower; |
521 | u16 txpower; /* transmit power */ | 521 | u16 frmlen; |
522 | u16 frmlen; /* frame length */ | 522 | u32 keyix; |
523 | u32 keyix; /* key index */ | 523 | int min_rate; |
524 | int min_rate; /* minimum rate */ | 524 | int mcast_rate; |
525 | int mcast_rate; /* multicast rate */ | 525 | u16 nextfraglen; |
526 | u16 nextfraglen; /* next fragment length */ | 526 | struct ath_softc *dev; |
527 | /* below is set only by ath_dev */ | ||
528 | struct ath_softc *dev; /* device handle */ | ||
529 | dma_addr_t dmacontext; | 527 | dma_addr_t dmacontext; |
530 | }; | 528 | }; |
531 | 529 | ||
532 | /* per frame tx status block */ | 530 | /* per frame tx status block */ |
533 | struct ath_xmit_status { | 531 | struct ath_xmit_status { |
534 | int retries; /* number of retries to successufully | 532 | int retries; /* number of retries to successufully |
535 | transmit this frame */ | 533 | transmit this frame */ |
536 | int flags; /* status of transmit */ | 534 | int flags; /* status of transmit */ |
537 | #define ATH_TX_ERROR 0x01 | 535 | #define ATH_TX_ERROR 0x01 |
538 | #define ATH_TX_XRETRY 0x02 | 536 | #define ATH_TX_XRETRY 0x02 |
539 | #define ATH_TX_BAR 0x04 | 537 | #define ATH_TX_BAR 0x04 |
@@ -647,20 +645,20 @@ struct aggr_rifs_param { | |||
647 | 645 | ||
648 | /* Per-node aggregation state */ | 646 | /* Per-node aggregation state */ |
649 | struct ath_node_aggr { | 647 | struct ath_node_aggr { |
650 | struct ath_atx tx; /* node transmit state */ | 648 | struct ath_atx tx; /* node transmit state */ |
651 | struct ath_arx rx; /* node receive state */ | 649 | struct ath_arx rx; /* node receive state */ |
652 | }; | 650 | }; |
653 | 651 | ||
654 | /* driver-specific node state */ | 652 | /* driver-specific node state */ |
655 | struct ath_node { | 653 | struct ath_node { |
656 | struct list_head list; | 654 | struct list_head list; |
657 | struct ath_softc *an_sc; /* back pointer */ | 655 | struct ath_softc *an_sc; |
658 | atomic_t an_refcnt; | 656 | atomic_t an_refcnt; |
659 | struct ath_chainmask_sel an_chainmask_sel; | 657 | struct ath_chainmask_sel an_chainmask_sel; |
660 | struct ath_node_aggr an_aggr; /* A-MPDU aggregation state */ | 658 | struct ath_node_aggr an_aggr; |
661 | u8 an_smmode; /* SM Power save mode */ | 659 | u8 an_smmode; /* SM Power save mode */ |
662 | u8 an_flags; | 660 | u8 an_flags; |
663 | u8 an_addr[ETH_ALEN]; | 661 | u8 an_addr[ETH_ALEN]; |
664 | }; | 662 | }; |
665 | 663 | ||
666 | void ath_tx_resume_tid(struct ath_softc *sc, | 664 | void ath_tx_resume_tid(struct ath_softc *sc, |
@@ -754,15 +752,6 @@ int ath_update_beacon(struct ath_softc *sc, | |||
754 | /* VAPs */ | 752 | /* VAPs */ |
755 | /********/ | 753 | /********/ |
756 | 754 | ||
757 | #define ATH_IF_HW_OFF 0x0001 /* hardware state needs to turn off */ | ||
758 | #define ATH_IF_HW_ON 0x0002 /* hardware state needs to turn on */ | ||
759 | /* STA only: the associated AP is HT capable */ | ||
760 | #define ATH_IF_HT 0x0004 | ||
761 | /* AP/IBSS only: current BSS has privacy on */ | ||
762 | #define ATH_IF_PRIVACY 0x0008 | ||
763 | #define ATH_IF_BEACON_ENABLE 0x0010 /* AP/IBSS only: enable beacon */ | ||
764 | #define ATH_IF_BEACON_SYNC 0x0020 /* IBSS only: need to sync beacon */ | ||
765 | |||
766 | /* | 755 | /* |
767 | * Define the scheme that we select MAC address for multiple | 756 | * Define the scheme that we select MAC address for multiple |
768 | * BSS on the same radio. The very first VAP will just use the MAC | 757 | * BSS on the same radio. The very first VAP will just use the MAC |
@@ -782,19 +771,15 @@ struct ath_vap_config { | |||
782 | 771 | ||
783 | /* driver-specific vap state */ | 772 | /* driver-specific vap state */ |
784 | struct ath_vap { | 773 | struct ath_vap { |
785 | struct ieee80211_vif *av_if_data; /* interface(vap) | 774 | struct ieee80211_vif *av_if_data; |
786 | instance from 802.11 protocal layer */ | 775 | enum ath9k_opmode av_opmode; /* VAP operational mode */ |
787 | enum ath9k_opmode av_opmode; /* VAP operational mode */ | 776 | struct ath_buf *av_bcbuf; /* beacon buffer */ |
788 | struct ath_buf *av_bcbuf; /* beacon buffer */ | 777 | struct ath_beacon_offset av_boff; /* dynamic update state */ |
789 | struct ath_beacon_offset av_boff; /* dynamic update state */ | 778 | struct ath_tx_control av_btxctl; /* txctl information for beacon */ |
790 | struct ath_tx_control av_btxctl; /* tx control information | 779 | int av_bslot; /* beacon slot index */ |
791 | for beacon */ | 780 | struct ath_txq av_mcastq; /* multicast transmit queue */ |
792 | int av_bslot; /* beacon slot index */ | 781 | struct ath_vap_config av_config;/* vap configuration parameters*/ |
793 | struct ath_txq av_mcastq; /* multicast | 782 | struct ath_rate_node *rc_node; |
794 | transmit queue */ | ||
795 | struct ath_vap_config av_config; /* vap configuration | ||
796 | parameters from 802.11 protocol layer*/ | ||
797 | struct ath_rate_node *rc_node; | ||
798 | }; | 783 | }; |
799 | 784 | ||
800 | int ath_vap_attach(struct ath_softc *sc, | 785 | int ath_vap_attach(struct ath_softc *sc, |