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