162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Copyright (c) 2010-2011 Atheros Communications Inc.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Permission to use, copy, modify, and/or distribute this software for any
562306a36Sopenharmony_ci * purpose with or without fee is hereby granted, provided that the above
662306a36Sopenharmony_ci * copyright notice and this permission notice appear in all copies.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
962306a36Sopenharmony_ci * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1062306a36Sopenharmony_ci * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1162306a36Sopenharmony_ci * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1262306a36Sopenharmony_ci * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1362306a36Sopenharmony_ci * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1462306a36Sopenharmony_ci * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1562306a36Sopenharmony_ci */
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#ifndef AR9003_MAC_H
1862306a36Sopenharmony_ci#define AR9003_MAC_H
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define AR_DescId	0xffff0000
2162306a36Sopenharmony_ci#define AR_DescId_S	16
2262306a36Sopenharmony_ci#define AR_CtrlStat	0x00004000
2362306a36Sopenharmony_ci#define AR_CtrlStat_S	14
2462306a36Sopenharmony_ci#define AR_TxRxDesc	0x00008000
2562306a36Sopenharmony_ci#define AR_TxRxDesc_S	15
2662306a36Sopenharmony_ci#define AR_TxQcuNum	0x00000f00
2762306a36Sopenharmony_ci#define AR_TxQcuNum_S	8
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define AR_BufLen	0x0fff0000
3062306a36Sopenharmony_ci#define AR_BufLen_S	16
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#define AR_TxDescId	0xffff0000
3362306a36Sopenharmony_ci#define AR_TxDescId_S	16
3462306a36Sopenharmony_ci#define AR_TxPtrChkSum	0x0000ffff
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#define AR_LowRxChain	0x00004000
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#define AR_Not_Sounding	0x20000000
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci/* ctl 12 */
4162306a36Sopenharmony_ci#define AR_PAPRDChainMask	0x00000e00
4262306a36Sopenharmony_ci#define AR_PAPRDChainMask_S	9
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#define MAP_ISR_S2_CST          6
4562306a36Sopenharmony_ci#define MAP_ISR_S2_GTT          6
4662306a36Sopenharmony_ci#define MAP_ISR_S2_TIM          3
4762306a36Sopenharmony_ci#define MAP_ISR_S2_CABEND       0
4862306a36Sopenharmony_ci#define MAP_ISR_S2_DTIMSYNC     7
4962306a36Sopenharmony_ci#define MAP_ISR_S2_DTIM         7
5062306a36Sopenharmony_ci#define MAP_ISR_S2_TSFOOR       4
5162306a36Sopenharmony_ci#define MAP_ISR_S2_BB_WATCHDOG  6
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#define AR9003TXC_CONST(_ds) ((const struct ar9003_txc *) _ds)
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistruct ar9003_rxs {
5662306a36Sopenharmony_ci	u32 ds_info;
5762306a36Sopenharmony_ci	u32 status1;
5862306a36Sopenharmony_ci	u32 status2;
5962306a36Sopenharmony_ci	u32 status3;
6062306a36Sopenharmony_ci	u32 status4;
6162306a36Sopenharmony_ci	u32 status5;
6262306a36Sopenharmony_ci	u32 status6;
6362306a36Sopenharmony_ci	u32 status7;
6462306a36Sopenharmony_ci	u32 status8;
6562306a36Sopenharmony_ci	u32 status9;
6662306a36Sopenharmony_ci	u32 status10;
6762306a36Sopenharmony_ci	u32 status11;
6862306a36Sopenharmony_ci} __packed __aligned(4);
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci/* Transmit Control Descriptor */
7162306a36Sopenharmony_cistruct ar9003_txc {
7262306a36Sopenharmony_ci	u32 info;   /* descriptor information */
7362306a36Sopenharmony_ci	u32 link;   /* link pointer */
7462306a36Sopenharmony_ci	u32 data0;  /* data pointer to 1st buffer */
7562306a36Sopenharmony_ci	u32 ctl3;   /* DMA control 3  */
7662306a36Sopenharmony_ci	u32 data1;  /* data pointer to 2nd buffer */
7762306a36Sopenharmony_ci	u32 ctl5;   /* DMA control 5  */
7862306a36Sopenharmony_ci	u32 data2;  /* data pointer to 3rd buffer */
7962306a36Sopenharmony_ci	u32 ctl7;   /* DMA control 7  */
8062306a36Sopenharmony_ci	u32 data3;  /* data pointer to 4th buffer */
8162306a36Sopenharmony_ci	u32 ctl9;   /* DMA control 9  */
8262306a36Sopenharmony_ci	u32 ctl10;  /* DMA control 10 */
8362306a36Sopenharmony_ci	u32 ctl11;  /* DMA control 11 */
8462306a36Sopenharmony_ci	u32 ctl12;  /* DMA control 12 */
8562306a36Sopenharmony_ci	u32 ctl13;  /* DMA control 13 */
8662306a36Sopenharmony_ci	u32 ctl14;  /* DMA control 14 */
8762306a36Sopenharmony_ci	u32 ctl15;  /* DMA control 15 */
8862306a36Sopenharmony_ci	u32 ctl16;  /* DMA control 16 */
8962306a36Sopenharmony_ci	u32 ctl17;  /* DMA control 17 */
9062306a36Sopenharmony_ci	u32 ctl18;  /* DMA control 18 */
9162306a36Sopenharmony_ci	u32 ctl19;  /* DMA control 19 */
9262306a36Sopenharmony_ci	u32 ctl20;  /* DMA control 20 */
9362306a36Sopenharmony_ci	u32 ctl21;  /* DMA control 21 */
9462306a36Sopenharmony_ci	u32 ctl22;  /* DMA control 22 */
9562306a36Sopenharmony_ci	u32 ctl23;  /* DMA control 23 */
9662306a36Sopenharmony_ci	u32 pad[8]; /* pad to cache line (128 bytes/32 dwords) */
9762306a36Sopenharmony_ci} __packed __aligned(4);
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_cistruct ar9003_txs {
10062306a36Sopenharmony_ci	u32 ds_info;
10162306a36Sopenharmony_ci	u32 status1;
10262306a36Sopenharmony_ci	u32 status2;
10362306a36Sopenharmony_ci	u32 status3;
10462306a36Sopenharmony_ci	u32 status4;
10562306a36Sopenharmony_ci	u32 status5;
10662306a36Sopenharmony_ci	u32 status6;
10762306a36Sopenharmony_ci	u32 status7;
10862306a36Sopenharmony_ci	u32 status8;
10962306a36Sopenharmony_ci} __packed __aligned(4);
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_civoid ar9003_hw_attach_mac_ops(struct ath_hw *hw);
11262306a36Sopenharmony_civoid ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size);
11362306a36Sopenharmony_civoid ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
11462306a36Sopenharmony_ci			    enum ath9k_rx_qtype qtype);
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ciint ath9k_hw_process_rxdesc_edma(struct ath_hw *ah,
11762306a36Sopenharmony_ci				 struct ath_rx_status *rxs,
11862306a36Sopenharmony_ci				 void *buf_addr);
11962306a36Sopenharmony_civoid ath9k_hw_reset_txstatus_ring(struct ath_hw *ah);
12062306a36Sopenharmony_civoid ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
12162306a36Sopenharmony_ci			       u32 ts_paddr_start,
12262306a36Sopenharmony_ci			       u16 size);
12362306a36Sopenharmony_ci#endif
124