ar9300desc.h revision 250003
152419Sjulian/*
252419Sjulian * Copyright (c) 2013 Qualcomm Atheros, Inc.
352419Sjulian *
452419Sjulian * Permission to use, copy, modify, and/or distribute this software for any
552419Sjulian * purpose with or without fee is hereby granted, provided that the above
652419Sjulian * copyright notice and this permission notice appear in all copies.
752419Sjulian *
852419Sjulian * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
952419Sjulian * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1052419Sjulian * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1152419Sjulian * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1252419Sjulian * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1352419Sjulian * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1452419Sjulian * PERFORMANCE OF THIS SOFTWARE.
1552419Sjulian */
1652419Sjulian
1752419Sjulian
1852419Sjulian /* Contains descriptor definitions for Osprey */
1952419Sjulian
2052419Sjulian
2152419Sjulian#ifndef _ATH_AR9300_DESC_H_
2252419Sjulian#define _ATH_AR9300_DESC_H_
2352419Sjulian
2452419Sjulian
2552419Sjulian/* Osprey Status Descriptor. */
2652419Sjulianstruct ar9300_txs {
2752419Sjulian    u_int32_t   ds_info;
2852419Sjulian    u_int32_t   status1;
2952419Sjulian    u_int32_t   status2;
3052419Sjulian    u_int32_t   status3;
3152419Sjulian    u_int32_t   status4;
3252419Sjulian    u_int32_t   status5;
3352419Sjulian    u_int32_t   status6;
3452419Sjulian    u_int32_t   status7;
3552419Sjulian    u_int32_t   status8;
3652419Sjulian};
3752419Sjulian
3852419Sjulianstruct ar9300_rxs {
3952419Sjulian    u_int32_t   ds_info;
4052752Sjulian    u_int32_t   status1;
4152419Sjulian    u_int32_t   status2;
4252419Sjulian    u_int32_t   status3;
4352419Sjulian    u_int32_t   status4;
4452419Sjulian    u_int32_t   status5;
4552419Sjulian    u_int32_t   status6;
4652419Sjulian    u_int32_t   status7;
4752419Sjulian    u_int32_t   status8;
4853997Sarchie    u_int32_t   status9;
4952419Sjulian    u_int32_t   status10;
5052419Sjulian    u_int32_t   status11;
5152419Sjulian};
5252419Sjulian
5353997Sarchie/* Transmit Control Descriptor */
5452419Sjulianstruct ar9300_txc {
5552419Sjulian    u_int32_t   ds_info;   /* descriptor information */
5652419Sjulian    u_int32_t   ds_link;   /* link pointer */
5752419Sjulian    u_int32_t   ds_data0;  /* data pointer to 1st buffer */
5852419Sjulian    u_int32_t   ds_ctl3;   /* DMA control 3  */
5952419Sjulian    u_int32_t   ds_data1;  /* data pointer to 2nd buffer */
6052419Sjulian    u_int32_t   ds_ctl5;   /* DMA control 5  */
6152419Sjulian    u_int32_t   ds_data2;  /* data pointer to 3rd buffer */
6252752Sjulian    u_int32_t   ds_ctl7;   /* DMA control 7  */
6352752Sjulian    u_int32_t   ds_data3;  /* data pointer to 4th buffer */
6452752Sjulian    u_int32_t   ds_ctl9;   /* DMA control 9  */
6552752Sjulian    u_int32_t   ds_ctl10;  /* DMA control 10 */
6652752Sjulian    u_int32_t   ds_ctl11;  /* DMA control 11 */
6752752Sjulian    u_int32_t   ds_ctl12;  /* DMA control 12 */
6852752Sjulian    u_int32_t   ds_ctl13;  /* DMA control 13 */
6952752Sjulian    u_int32_t   ds_ctl14;  /* DMA control 14 */
7052419Sjulian    u_int32_t   ds_ctl15;  /* DMA control 15 */
7153997Sarchie    u_int32_t   ds_ctl16;  /* DMA control 16 */
7253997Sarchie    u_int32_t   ds_ctl17;  /* DMA control 17 */
7353997Sarchie    u_int32_t   ds_ctl18;  /* DMA control 18 */
7453997Sarchie    u_int32_t   ds_ctl19;  /* DMA control 19 */
7553997Sarchie    u_int32_t   ds_ctl20;  /* DMA control 20 */
7653997Sarchie    u_int32_t   ds_ctl21;  /* DMA control 21 */
7753997Sarchie    u_int32_t   ds_ctl22;  /* DMA control 22 */
7853997Sarchie    u_int32_t   ds_pad[9]; /* pad to cache line (128 bytes/32 dwords) */
7953997Sarchie};
8053997Sarchie
8153997Sarchie
8253997Sarchie#define AR9300RXS(_rxs)        ((struct ar9300_rxs *)(_rxs))
8353997Sarchie#define AR9300TXS(_txs)        ((struct ar9300_txs *)(_txs))
8453997Sarchie#define AR9300TXC(_ds)         ((struct ar9300_txc *)(_ds))
8553997Sarchie
8653997Sarchie#define AR9300TXC_CONST(_ds)   ((const struct ar9300_txc *)(_ds))
8753997Sarchie
8853997Sarchie
8953997Sarchie/* ds_info */
9053997Sarchie#define AR_desc_len          0x000000ff
9153997Sarchie#define AR_rx_priority       0x00000100
9253997Sarchie#define AR_tx_qcu_num         0x00000f00
9353997Sarchie#define AR_tx_qcu_num_S       8
9453997Sarchie#define AR_ctrl_stat         0x00004000
9553997Sarchie#define AR_ctrl_stat_S       14
9653997Sarchie#define AR_tx_rx_desc         0x00008000
9753997Sarchie#define AR_tx_rx_desc_S       15
9852419Sjulian#define AR_desc_id           0xffff0000
9952419Sjulian#define AR_desc_id_S         16
10052419Sjulian
10152419Sjulian/***********
10252419Sjulian * TX Desc *
10352419Sjulian ***********/
10452419Sjulian
10552419Sjulian/* ds_ctl3 */
10652419Sjulian/* ds_ctl5 */
10752419Sjulian/* ds_ctl7 */
10852419Sjulian/* ds_ctl9 */
10952419Sjulian#define AR_buf_len           0x0fff0000
11052419Sjulian#define AR_buf_len_S         16
11153913Sarchie
11253997Sarchie/* ds_ctl10 */
11352419Sjulian#define AR_tx_desc_id         0xffff0000
11452419Sjulian#define AR_tx_desc_id_S       16
11552419Sjulian#define AR_tx_ptr_chk_sum      0x0000ffff
11652419Sjulian
11752419Sjulian/* ds_ctl11 */
11852419Sjulian#define AR_frame_len         0x00000fff
11952419Sjulian#define AR_virt_more_frag     0x00001000
12052419Sjulian#define AR_tx_ctl_rsvd00      0x00002000
12152419Sjulian#define AR_low_rx_chain       0x00004000
12252419Sjulian#define AR_tx_clear_retry     0x00008000
12352419Sjulian#define AR_xmit_power0       0x003f0000
12452419Sjulian#define AR_xmit_power0_S     16
12552419Sjulian#define AR_rts_enable        0x00400000
12652419Sjulian#define AR_veol             0x00800000
12752419Sjulian#define AR_clr_dest_mask      0x01000000
12852419Sjulian#define AR_tx_bf0            0x02000000
12952419Sjulian#define AR_tx_bf1            0x04000000
13052419Sjulian#define AR_tx_bf2            0x08000000
13152419Sjulian#define AR_tx_bf3            0x10000000
13252419Sjulian#define	AR_TxBfSteered		0x1e000000			/* for tx_bf*/
13352419Sjulian#define AR_tx_intr_req        0x20000000
13452419Sjulian#define AR_dest_idx_valid     0x40000000
13552419Sjulian#define AR_cts_enable        0x80000000
13652419Sjulian
13752419Sjulian/* ds_ctl12 */
13852419Sjulian#define AR_tx_ctl_rsvd02      0x000001ff
13952419Sjulian#define AR_paprd_chain_mask   0x00000e00
14052419Sjulian#define AR_paprd_chain_mask_S 9
14152419Sjulian#define AR_tx_more           0x00001000
14252419Sjulian#define AR_dest_idx          0x000fe000
14352419Sjulian#define AR_dest_idx_S        13
14452419Sjulian#define AR_frame_type        0x00f00000
14552419Sjulian#define AR_frame_type_S      20
14652419Sjulian#define AR_no_ack            0x01000000
14752419Sjulian#define AR_insert_ts         0x02000000
14852419Sjulian#define AR_corrupt_fcs       0x04000000
14952419Sjulian#define AR_ext_only          0x08000000
15052419Sjulian#define AR_ext_and_ctl        0x10000000
15152419Sjulian#define AR_more_aggr         0x20000000
15252419Sjulian#define AR_is_aggr           0x40000000
15352419Sjulian#define AR_more_rifs         0x80000000
15452419Sjulian#define AR_loc_mode          0x00000100 /* Positioning bit in TX desc */
15552419Sjulian
15652419Sjulian/* ds_ctl13 */
15752419Sjulian#define AR_burst_dur         0x00007fff
15852419Sjulian#define AR_burst_dur_S       0
15952419Sjulian#define AR_dur_update_ena     0x00008000
16052419Sjulian#define AR_xmit_data_tries0   0x000f0000
16152419Sjulian#define AR_xmit_data_tries0_S 16
16252419Sjulian#define AR_xmit_data_tries1   0x00f00000
16352419Sjulian#define AR_xmit_data_tries1_S 20
16452419Sjulian#define AR_xmit_data_tries2   0x0f000000
16552419Sjulian#define AR_xmit_data_tries2_S 24
16652419Sjulian#define AR_xmit_data_tries3   0xf0000000
16752419Sjulian#define AR_xmit_data_tries3_S 28
16852419Sjulian
16952419Sjulian/* ds_ctl14 */
17052419Sjulian#define AR_xmit_rate0        0x000000ff
17152419Sjulian#define AR_xmit_rate0_S      0
17252419Sjulian#define AR_xmit_rate1        0x0000ff00
17352419Sjulian#define AR_xmit_rate1_S      8
17452419Sjulian#define AR_xmit_rate2        0x00ff0000
17552419Sjulian#define AR_xmit_rate2_S      16
17652419Sjulian#define AR_xmit_rate3        0xff000000
17752419Sjulian#define AR_xmit_rate3_S      24
17852419Sjulian
17952419Sjulian/* ds_ctl15 */
18052419Sjulian#define AR_packet_dur0       0x00007fff
18152419Sjulian#define AR_packet_dur0_S     0
18252419Sjulian#define AR_rts_cts_qual0      0x00008000
18352419Sjulian#define AR_packet_dur1       0x7fff0000
18452419Sjulian#define AR_packet_dur1_S     16
18552419Sjulian#define AR_rts_cts_qual1      0x80000000
18652419Sjulian
18752419Sjulian/* ds_ctl16 */
18852419Sjulian#define AR_packet_dur2       0x00007fff
18952419Sjulian#define AR_packet_dur2_S     0
19052419Sjulian#define AR_rts_cts_qual2      0x00008000
19152419Sjulian#define AR_packet_dur3       0x7fff0000
19252419Sjulian#define AR_packet_dur3_S     16
19352419Sjulian#define AR_rts_cts_qual3      0x80000000
19452419Sjulian
19552419Sjulian/* ds_ctl17 */
19652419Sjulian#define AR_aggr_len          0x0000ffff
19752419Sjulian#define AR_aggr_len_S        0
19852419Sjulian#define AR_tx_ctl_rsvd60      0x00030000
19952419Sjulian#define AR_pad_delim         0x03fc0000
20052419Sjulian#define AR_pad_delim_S       18
20152419Sjulian#define AR_encr_type         0x1c000000
20252419Sjulian#define AR_encr_type_S       26
20352419Sjulian#define AR_tx_dc_ap_sta_sel     0x40000000
20452419Sjulian#define AR_tx_ctl_rsvd61      0xc0000000
20552419Sjulian#define AR_calibrating      0x40000000
20652419Sjulian#define AR_ldpc             0x80000000
20752816Sarchie
20852816Sarchie/* ds_ctl18 */
20953648Sarchie#define AR_2040_0           0x00000001
21052816Sarchie#define AR_gi0              0x00000002
21152419Sjulian#define AR_chain_sel0        0x0000001c
21252816Sarchie#define AR_chain_sel0_S      2
21352419Sjulian#define AR_2040_1           0x00000020
21452816Sarchie#define AR_gi1              0x00000040
21552816Sarchie#define AR_chain_sel1        0x00000380
21652816Sarchie#define AR_chain_sel1_S      7
21752816Sarchie#define AR_2040_2           0x00000400
21852419Sjulian#define AR_gi2              0x00000800
21952419Sjulian#define AR_chain_sel2        0x00007000
22052419Sjulian#define AR_chain_sel2_S      12
22152419Sjulian#define AR_2040_3           0x00008000
22252419Sjulian#define AR_gi3              0x00010000
22352419Sjulian#define AR_chain_sel3        0x000e0000
22452419Sjulian#define AR_chain_sel3_S      17
22552419Sjulian#define AR_rts_cts_rate       0x0ff00000
22652419Sjulian#define AR_rts_cts_rate_S     20
22752419Sjulian#define AR_stbc0            0x10000000
22852419Sjulian#define AR_stbc1            0x20000000
22952419Sjulian#define AR_stbc2            0x40000000
23052419Sjulian#define AR_stbc3            0x80000000
23152419Sjulian
23252419Sjulian/* ds_ctl19 */
23352419Sjulian#define AR_tx_ant0           0x00ffffff
23452419Sjulian#define AR_tx_ant_sel0        0x80000000
23552419Sjulian#define	AR_RTS_HTC_TRQ      0x10000000	/* bit 28 for rts_htc_TRQ*/ /*for tx_bf*/
23652419Sjulian#define AR_not_sounding     0x20000000
23752419Sjulian#define AR_ness				0xc0000000
23852419Sjulian#define AR_ness_S			30
23952419Sjulian
24052419Sjulian/* ds_ctl20 */
24152419Sjulian#define AR_tx_ant1           0x00ffffff
24252419Sjulian#define AR_xmit_power1       0x3f000000
24352419Sjulian#define AR_xmit_power1_S     24
24452419Sjulian#define AR_tx_ant_sel1        0x80000000
24552419Sjulian#define AR_ness1			0xc0000000
24652419Sjulian#define AR_ness1_S			30
24752419Sjulian
24852419Sjulian/* ds_ctl21 */
24952419Sjulian#define AR_tx_ant2           0x00ffffff
25052419Sjulian#define AR_xmit_power2       0x3f000000
25152419Sjulian#define AR_xmit_power2_S     24
25252419Sjulian#define AR_tx_ant_sel2        0x80000000
25352419Sjulian#define AR_ness2			0xc0000000
25452419Sjulian#define AR_ness2_S			30
25552419Sjulian
25652419Sjulian/* ds_ctl22 */
25752419Sjulian#define AR_tx_ant3           0x00ffffff
25852419Sjulian#define AR_xmit_power3       0x3f000000
25952419Sjulian#define AR_xmit_power3_S     24
26052419Sjulian#define AR_tx_ant_sel3        0x80000000
26152419Sjulian#define AR_ness3			0xc0000000
26252419Sjulian#define AR_ness3_S			30
26352419Sjulian
26452419Sjulian/*************
26552419Sjulian * TX Status *
26652419Sjulian *************/
26752419Sjulian
26852419Sjulian/* ds_status1 */
26952419Sjulian#define AR_tx_status_rsvd     0x0000ffff
27052419Sjulian
27152419Sjulian/* ds_status2 */
27252419Sjulian#define AR_tx_rssi_ant00      0x000000ff
27352419Sjulian#define AR_tx_rssi_ant00_S    0
27452419Sjulian#define AR_tx_rssi_ant01      0x0000ff00
27552419Sjulian#define AR_tx_rssi_ant01_S    8
27652419Sjulian#define AR_tx_rssi_ant02      0x00ff0000
27752419Sjulian#define AR_tx_rssi_ant02_S    16
27852419Sjulian#define AR_tx_status_rsvd00   0x3f000000
27952419Sjulian#define AR_tx_ba_status       0x40000000
28052419Sjulian#define AR_tx_status_rsvd01   0x80000000
28152419Sjulian
28252419Sjulian/* ds_status3 */
28352419Sjulian#define AR_frm_xmit_ok        0x00000001
28452419Sjulian#define AR_excessive_retries 0x00000002
28552419Sjulian#define AR_fifounderrun     0x00000004
28652419Sjulian#define AR_filtered         0x00000008
28752419Sjulian#define AR_rts_fail_cnt       0x000000f0
28852419Sjulian#define AR_rts_fail_cnt_S     4
28952419Sjulian#define AR_data_fail_cnt      0x00000f00
29052419Sjulian#define AR_data_fail_cnt_S    8
29152419Sjulian#define AR_virt_retry_cnt     0x0000f000
29252419Sjulian#define AR_virt_retry_cnt_S   12
29352419Sjulian#define AR_tx_delim_underrun  0x00010000
29452419Sjulian#define AR_tx_data_underrun   0x00020000
29552419Sjulian#define AR_desc_cfg_err       0x00040000
29652419Sjulian#define AR_tx_timer_expired   0x00080000
29752419Sjulian#define AR_tx_status_rsvd10   0xfff00000
29852419Sjulian
29952419Sjulian/* ds_status7 */
30052419Sjulian#define AR_tx_rssi_ant10      0x000000ff
30152419Sjulian#define AR_tx_rssi_ant10_S    0
30252419Sjulian#define AR_tx_rssi_ant11      0x0000ff00
30352419Sjulian#define AR_tx_rssi_ant11_S    8
30452419Sjulian#define AR_tx_rssi_ant12      0x00ff0000
30552419Sjulian#define AR_tx_rssi_ant12_S    16
30652419Sjulian#define AR_tx_rssi_combined   0xff000000
30752419Sjulian#define AR_tx_rssi_combined_S 24
30852419Sjulian
30952419Sjulian/* ds_status8 */
31052419Sjulian#define AR_tx_done           0x00000001
31152419Sjulian#define AR_seq_num           0x00001ffe
31252419Sjulian#define AR_seq_num_S         1
31352419Sjulian#define AR_tx_status_rsvd80   0x0001e000
31452419Sjulian#define AR_tx_op_exceeded     0x00020000
31552419Sjulian#define AR_tx_status_rsvd81   0x001c0000
31652419Sjulian#define	AR_TXBFStatus		0x001c0000
31752419Sjulian#define	AR_TXBFStatus_S		18
31852419Sjulian#define AR_tx_bf_bw_mismatch 0x00040000
31952419Sjulian#define AR_tx_bf_stream_miss 0x00080000
32052419Sjulian#define AR_final_tx_idx       0x00600000
32152419Sjulian#define AR_final_tx_idx_S     21
32252419Sjulian#define AR_tx_bf_dest_miss   0x00800000
32352419Sjulian#define AR_tx_bf_expired     0x01000000
32452419Sjulian#define AR_power_mgmt        0x02000000
32552419Sjulian#define AR_tx_status_rsvd83   0x0c000000
32652419Sjulian#define AR_tx_tid            0xf0000000
32752419Sjulian#define AR_tx_tid_S          28
32852419Sjulian#define AR_tx_fast_ts        0x08000000 /* 27th bit for locationing */
32952419Sjulian
33053997Sarchie
33153997Sarchie/*************
33253997Sarchie * Rx Status *
33352419Sjulian *************/
33452419Sjulian
33552419Sjulian/* ds_status1 */
33652736Sjulian#define AR_rx_rssi_ant00      0x000000ff
33752419Sjulian#define AR_rx_rssi_ant00_S    0
33852419Sjulian#define AR_rx_rssi_ant01      0x0000ff00
33952736Sjulian#define AR_rx_rssi_ant01_S    8
34052419Sjulian#define AR_rx_rssi_ant02      0x00ff0000
34152419Sjulian#define AR_rx_rssi_ant02_S    16
34252419Sjulian#define AR_rx_rate           0xff000000
34352419Sjulian#define AR_rx_rate_S         24
34452419Sjulian
34552419Sjulian/* ds_status2 */
34652419Sjulian#define AR_data_len          0x00000fff
34752419Sjulian#define AR_rx_more           0x00001000
34852419Sjulian#define AR_num_delim         0x003fc000
34952419Sjulian#define AR_num_delim_S       14
35052419Sjulian#define AR_hw_upload_data     0x00400000
35152419Sjulian#define AR_hw_upload_data_S   22
35252419Sjulian#define AR_rx_status_rsvd10   0xff800000
35352419Sjulian
35452419Sjulian
35552419Sjulian/* ds_status4 */
35652419Sjulian#define AR_gi               0x00000001
35752419Sjulian#define AR_2040             0x00000002
35852419Sjulian#define AR_parallel40       0x00000004
35952419Sjulian#define AR_parallel40_S     2
36052419Sjulian#define AR_rx_stbc           0x00000008
36152419Sjulian#define AR_rx_not_sounding    0x00000010
36252419Sjulian#define AR_rx_ness           0x00000060
36352419Sjulian#define AR_rx_ness_S         5
36452419Sjulian#define AR_hw_upload_data_valid    0x00000080
36552419Sjulian#define AR_hw_upload_data_valid_S  7
36652419Sjulian#define AR_rx_antenna	    0xffffff00
36752419Sjulian#define AR_rx_antenna_S	    8
36852419Sjulian
36952419Sjulian/* ds_status5 */
37052419Sjulian#define AR_rx_rssi_ant10            0x000000ff
37152419Sjulian#define AR_rx_rssi_ant10_S          0
37252419Sjulian#define AR_rx_rssi_ant11            0x0000ff00
37352419Sjulian#define AR_rx_rssi_ant11_S          8
37452419Sjulian#define AR_rx_rssi_ant12            0x00ff0000
37552419Sjulian#define AR_rx_rssi_ant12_S          16
37652419Sjulian#define AR_rx_rssi_combined         0xff000000
37752419Sjulian#define AR_rx_rssi_combined_S       24
37852419Sjulian
37952419Sjulian/* ds_status6 */
38052419Sjulian#define AR_rx_evm0           status6
38152419Sjulian
38252419Sjulian/* ds_status7 */
38352419Sjulian#define AR_rx_evm1           status7
38452419Sjulian
38552419Sjulian/* ds_status8 */
38652419Sjulian#define AR_rx_evm2           status8
38752419Sjulian
38852419Sjulian/* ds_status9 */
38952419Sjulian#define AR_rx_evm3           status9
39052419Sjulian
39152419Sjulian/* ds_status11 */
39252419Sjulian#define AR_rx_done           0x00000001
39352419Sjulian#define AR_rx_frame_ok        0x00000002
39452419Sjulian#define AR_crc_err           0x00000004
39552419Sjulian#define AR_decrypt_crc_err    0x00000008
39652419Sjulian#define AR_phyerr           0x00000010
39752419Sjulian#define AR_michael_err       0x00000020
39852419Sjulian#define AR_pre_delim_crc_err   0x00000040
39952419Sjulian#define AR_apsd_trig         0x00000080
40052419Sjulian#define AR_rx_key_idx_valid    0x00000100
40152419Sjulian#define AR_key_idx           0x0000fe00
40252419Sjulian#define AR_key_idx_S         9
40352419Sjulian#define AR_phy_err_code       0x0000ff00
40452419Sjulian#define AR_phy_err_code_S     8
40552419Sjulian#define AR_rx_more_aggr       0x00010000
40652419Sjulian#define AR_rx_aggr           0x00020000
40752419Sjulian#define AR_post_delim_crc_err  0x00040000
40852419Sjulian#define AR_rx_status_rsvd71   0x01f80000
40952419Sjulian#define AR_hw_upload_data_type 0x06000000
41052419Sjulian#define AR_hw_upload_data_type_S   25
41152419Sjulian#define AR_position_bit      0x08000000 /* positioning bit */
41252419Sjulian#define AR_hi_rx_chain        0x10000000
41352419Sjulian#define AR_rx_first_aggr      0x20000000
41452419Sjulian#define AR_decrypt_busy_err   0x40000000
41552419Sjulian#define AR_key_miss          0x80000000
41652419Sjulian
41752419Sjulian#define TXCTL_OFFSET(ah)      11
41852419Sjulian#define TXCTL_NUMWORDS(ah)    12
41952419Sjulian#define TXSTATUS_OFFSET(ah)   2
42052419Sjulian#define TXSTATUS_NUMWORDS(ah) 7
42152419Sjulian
42252419Sjulian#define RXCTL_OFFSET(ah)      0
42352419Sjulian#define RXCTL_NUMWORDS(ah)    0
42452419Sjulian#define RXSTATUS_OFFSET(ah)   1
42552419Sjulian#define RXSTATUS_NUMWORDS(ah) 11
42652419Sjulian
42752419Sjulian
42852419Sjulian#define TXC_INFO(_qcu) (ATHEROS_VENDOR_ID << AR_desc_id_S) \
42952419Sjulian                        | (1 << AR_tx_rx_desc_S) \
43052419Sjulian                        | (1 << AR_ctrl_stat_S) \
43152419Sjulian                        | (_qcu << AR_tx_qcu_num_S) \
43252419Sjulian                        | (0x17)
43352419Sjulian
43452419Sjulian#define VALID_KEY_TYPES \
43552419Sjulian        ((1 << HAL_KEY_TYPE_CLEAR) | (1 << HAL_KEY_TYPE_WEP)|\
43652419Sjulian         (1 << HAL_KEY_TYPE_AES)   | (1 << HAL_KEY_TYPE_TKIP))
43752419Sjulian#define is_valid_key_type(_t)      ((1 << (_t)) & VALID_KEY_TYPES)
43852419Sjulian
43952419Sjulian#define set_11n_tries(_series, _index) \
44052419Sjulian        (SM((_series)[_index].Tries, AR_xmit_data_tries##_index))
44152419Sjulian
44252419Sjulian#define set_11n_rate(_series, _index) \
44352419Sjulian        (SM((_series)[_index].Rate, AR_xmit_rate##_index))
44452419Sjulian
44552419Sjulian#define set_11n_pkt_dur_rts_cts(_series, _index) \
44652419Sjulian        (SM((_series)[_index].PktDuration, AR_packet_dur##_index) |\
44752419Sjulian         ((_series)[_index].RateFlags & HAL_RATESERIES_RTS_CTS   ?\
44852419Sjulian         AR_rts_cts_qual##_index : 0))
44952419Sjulian
45052419Sjulian#define not_two_stream_rate(_rate) (((_rate) >0x8f) || ((_rate)<0x88))
45152419Sjulian
45252419Sjulian#define set_11n_tx_bf_ldpc( _series) \
45352419Sjulian        ((( not_two_stream_rate((_series)[0].Rate) && (not_two_stream_rate((_series)[1].Rate)|| \
45452419Sjulian        (!(_series)[1].Tries)) && (not_two_stream_rate((_series)[2].Rate)||(!(_series)[2].Tries)) \
45552419Sjulian         && (not_two_stream_rate((_series)[3].Rate)||(!(_series)[3].Tries)))) \
45652419Sjulian        ? AR_ldpc : 0)
45752419Sjulian
45852419Sjulian#define set_11n_rate_flags(_series, _index) \
45952419Sjulian        ((_series)[_index].RateFlags & HAL_RATESERIES_2040 ? AR_2040_##_index : 0) \
46052419Sjulian        |((_series)[_index].RateFlags & HAL_RATESERIES_HALFGI ? AR_gi##_index : 0) \
46152419Sjulian        |((_series)[_index].RateFlags & HAL_RATESERIES_STBC ? AR_stbc##_index : 0) \
46252419Sjulian        |SM((_series)[_index].ch_sel, AR_chain_sel##_index)
46353997Sarchie
46452419Sjulian#define set_11n_tx_power(_index, _txpower) \
46552419Sjulian        SM(_txpower, AR_xmit_power##_index)
46652419Sjulian
46752419Sjulian
46852419Sjulian#define IS_3CHAIN_TX(_ah) (AH9300(_ah)->ah_tx_chainmask == 7)
469/*
470 * Descriptor Access Functions
471 */
472/* XXX valid Tx rates will change for 3 stream support */
473#define VALID_PKT_TYPES \
474        ((1<<HAL_PKT_TYPE_NORMAL)|(1<<HAL_PKT_TYPE_ATIM)|\
475         (1<<HAL_PKT_TYPE_PSPOLL)|(1<<HAL_PKT_TYPE_PROBE_RESP)|\
476         (1<<HAL_PKT_TYPE_BEACON))
477#define is_valid_pkt_type(_t)      ((1<<(_t)) & VALID_PKT_TYPES)
478#define VALID_TX_RATES \
479        ((1<<0x0b)|(1<<0x0f)|(1<<0x0a)|(1<<0x0e)|(1<<0x09)|(1<<0x0d)|\
480         (1<<0x08)|(1<<0x0c)|(1<<0x1b)|(1<<0x1a)|(1<<0x1e)|(1<<0x19)|\
481         (1<<0x1d)|(1<<0x18)|(1<<0x1c))
482#define is_valid_tx_rate(_r)       ((1<<(_r)) & VALID_TX_RATES)
483
484        /* TX common functions */
485
486extern  HAL_BOOL ar9300_update_tx_trig_level(struct ath_hal *,
487        HAL_BOOL IncTrigLevel);
488extern  u_int16_t ar9300_get_tx_trig_level(struct ath_hal *);
489extern  HAL_BOOL ar9300_set_tx_queue_props(struct ath_hal *ah, int q,
490        const HAL_TXQ_INFO *q_info);
491extern  HAL_BOOL ar9300_get_tx_queue_props(struct ath_hal *ah, int q,
492        HAL_TXQ_INFO *q_info);
493extern  int ar9300_setup_tx_queue(struct ath_hal *ah, HAL_TX_QUEUE type,
494        const HAL_TXQ_INFO *q_info);
495extern  HAL_BOOL ar9300_release_tx_queue(struct ath_hal *ah, u_int q);
496extern  HAL_BOOL ar9300_reset_tx_queue(struct ath_hal *ah, u_int q);
497extern  u_int32_t ar9300_get_tx_dp(struct ath_hal *ah, u_int q);
498extern  HAL_BOOL ar9300_set_tx_dp(struct ath_hal *ah, u_int q, u_int32_t txdp);
499extern  HAL_BOOL ar9300_start_tx_dma(struct ath_hal *ah, u_int q);
500extern  u_int32_t ar9300_num_tx_pending(struct ath_hal *ah, u_int q);
501extern  HAL_BOOL ar9300_stop_tx_dma(struct ath_hal *ah, u_int q, u_int timeout);
502extern HAL_BOOL ar9300_stop_tx_dma_indv_que(struct ath_hal *ah, u_int q, u_int timeout);
503extern  HAL_BOOL ar9300_abort_tx_dma(struct ath_hal *ah);
504extern  void ar9300_get_tx_intr_queue(struct ath_hal *ah, u_int32_t *);
505
506extern  void ar9300_tx_req_intr_desc(struct ath_hal *ah, void *ds);
507extern  HAL_BOOL ar9300_fill_tx_desc(struct ath_hal *ah, void *ds, dma_addr_t *buf_addr,
508        u_int32_t *seg_len, u_int desc_id, u_int qcu, HAL_KEY_TYPE key_type, HAL_BOOL first_seg,
509        HAL_BOOL last_seg, const void *ds0);
510extern  void ar9300_set_desc_link(struct ath_hal *, void *ds, u_int32_t link);
511extern  void ar9300_get_desc_link_ptr(struct ath_hal *, void *ds, u_int32_t **link);
512extern  void ar9300_clear_tx_desc_status(struct ath_hal *ah, void *ds);
513#ifdef ATH_SWRETRY
514extern void ar9300_clear_dest_mask(struct ath_hal *ah, void *ds);
515#endif
516extern  HAL_STATUS ar9300_proc_tx_desc(struct ath_hal *ah, void *);
517extern  void ar9300_get_raw_tx_desc(struct ath_hal *ah, u_int32_t *);
518extern  void ar9300_get_tx_rate_code(struct ath_hal *ah, void *, struct ath_tx_status *);
519extern  u_int32_t ar9300_calc_tx_airtime(struct ath_hal *ah, void *, struct ath_tx_status *,
520        HAL_BOOL comp_wastedt, u_int8_t nbad, u_int8_t nframes);
521extern  void ar9300_setup_tx_status_ring(struct ath_hal *ah, void *, u_int32_t , u_int16_t);
522extern void ar9300_set_paprd_tx_desc(struct ath_hal *ah, void *ds, int chain_num);
523HAL_STATUS ar9300_is_tx_done(struct ath_hal *ah);
524extern void ar9300_set_11n_tx_desc(struct ath_hal *ah, void *ds,
525       u_int pkt_len, HAL_PKT_TYPE type, u_int tx_power,
526       u_int key_ix, HAL_KEY_TYPE key_type, u_int flags);
527extern void ar9300_set_rx_chainmask(struct ath_hal *ah, int rxchainmask);
528extern void ar9300_update_loc_ctl_reg(struct ath_hal *ah, int pos_bit);
529
530/* for tx_bf*/
531#define ar9300_set_11n_txbf_cal(ah, ds, cal_pos, code_rate, cec, opt)
532/* for tx_bf*/
533
534extern void ar9300_set_11n_rate_scenario(struct ath_hal *ah, void *ds,
535        void *lastds, u_int dur_update_en, u_int rts_cts_rate, u_int rts_cts_duration, HAL_11N_RATE_SERIES series[],
536       u_int nseries, u_int flags, u_int32_t smartAntenna);
537extern void ar9300_set_11n_aggr_first(struct ath_hal *ah, void *ds,
538       u_int aggr_len);
539extern void ar9300_set_11n_aggr_middle(struct ath_hal *ah, void *ds,
540       u_int num_delims);
541extern void ar9300_set_11n_aggr_last(struct ath_hal *ah, void *ds);
542extern void ar9300_clr_11n_aggr(struct ath_hal *ah, void *ds);
543extern void ar9300_set_11n_burst_duration(struct ath_hal *ah, void *ds,
544       u_int burst_duration);
545extern void ar9300_set_11n_rifs_burst_middle(struct ath_hal *ah, void *ds);
546extern void ar9300_set_11n_rifs_burst_last(struct ath_hal *ah, void *ds);
547extern void ar9300_clr_11n_rifs_burst(struct ath_hal *ah, void *ds);
548extern void ar9300_set_11n_aggr_rifs_burst(struct ath_hal *ah, void *ds);
549extern void ar9300_set_11n_virtual_more_frag(struct ath_hal *ah, void *ds,
550       u_int vmf);
551#ifdef AH_PRIVATE_DIAG
552extern void ar9300__cont_tx_mode(struct ath_hal *ah, void *ds, int mode);
553#endif
554
555	/* RX common functions */
556
557extern  u_int32_t ar9300_get_rx_dp(struct ath_hal *ath, HAL_RX_QUEUE qtype);
558extern  void ar9300_set_rx_dp(struct ath_hal *ah, u_int32_t rxdp, HAL_RX_QUEUE qtype);
559extern  void ar9300_enable_receive(struct ath_hal *ah);
560extern  HAL_BOOL ar9300_stop_dma_receive(struct ath_hal *ah, u_int timeout);
561extern  void ar9300_start_pcu_receive(struct ath_hal *ah, HAL_BOOL is_scanning);
562extern  void ar9300_stop_pcu_receive(struct ath_hal *ah);
563extern  void ar9300_set_multicast_filter(struct ath_hal *ah,
564        u_int32_t filter0, u_int32_t filter1);
565extern  u_int32_t ar9300_get_rx_filter(struct ath_hal *ah);
566extern  void ar9300_set_rx_filter(struct ath_hal *ah, u_int32_t bits);
567extern  HAL_BOOL ar9300_set_rx_sel_evm(struct ath_hal *ah, HAL_BOOL, HAL_BOOL);
568extern	bool ar9300_set_rx_abort(struct ath_hal *ah, HAL_BOOL);
569
570extern  HAL_STATUS ar9300_proc_rx_desc(struct ath_hal *ah,
571        struct ath_desc *, u_int32_t, struct ath_desc *, u_int64_t, struct ath_rx_status *);
572extern  HAL_STATUS ar9300_get_rx_key_idx(struct ath_hal *ah,
573        struct ath_desc *, u_int8_t *, u_int8_t *);
574extern  HAL_STATUS ar9300_proc_rx_desc_fast(struct ath_hal *ah, struct ath_desc *,
575        u_int32_t, struct ath_desc *, struct ath_rx_status *, void *);
576
577extern  void ar9300_promisc_mode(struct ath_hal *ah, HAL_BOOL enable);
578extern  void ar9300_read_pktlog_reg(struct ath_hal *ah, u_int32_t *, u_int32_t *, u_int32_t *, u_int32_t *);
579extern  void ar9300_write_pktlog_reg(struct ath_hal *ah, HAL_BOOL , u_int32_t , u_int32_t , u_int32_t , u_int32_t );
580
581
582#endif
583
584
585
586
587
588
589
590
591
592