0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef RT2800MMIO_H
0018 #define RT2800MMIO_H
0019
0020
0021
0022
0023 #define TX_QUEUE_REG_OFFSET 0x10
0024 #define TX_BASE_PTR(__x) (TX_BASE_PTR0 + ((__x) * TX_QUEUE_REG_OFFSET))
0025 #define TX_MAX_CNT(__x) (TX_MAX_CNT0 + ((__x) * TX_QUEUE_REG_OFFSET))
0026 #define TX_CTX_IDX(__x) (TX_CTX_IDX0 + ((__x) * TX_QUEUE_REG_OFFSET))
0027 #define TX_DTX_IDX(__x) (TX_DTX_IDX0 + ((__x) * TX_QUEUE_REG_OFFSET))
0028
0029
0030
0031
0032 #define TXD_DESC_SIZE (4 * sizeof(__le32))
0033 #define RXD_DESC_SIZE (4 * sizeof(__le32))
0034
0035
0036
0037
0038
0039
0040
0041
0042 #define TXD_W0_SD_PTR0 FIELD32(0xffffffff)
0043
0044
0045
0046
0047 #define TXD_W1_SD_LEN1 FIELD32(0x00003fff)
0048 #define TXD_W1_LAST_SEC1 FIELD32(0x00004000)
0049 #define TXD_W1_BURST FIELD32(0x00008000)
0050 #define TXD_W1_SD_LEN0 FIELD32(0x3fff0000)
0051 #define TXD_W1_LAST_SEC0 FIELD32(0x40000000)
0052 #define TXD_W1_DMA_DONE FIELD32(0x80000000)
0053
0054
0055
0056
0057 #define TXD_W2_SD_PTR1 FIELD32(0xffffffff)
0058
0059
0060
0061
0062
0063
0064
0065 #define TXD_W3_WIV FIELD32(0x01000000)
0066 #define TXD_W3_QSEL FIELD32(0x06000000)
0067 #define TXD_W3_TCO FIELD32(0x20000000)
0068 #define TXD_W3_UCO FIELD32(0x40000000)
0069 #define TXD_W3_ICO FIELD32(0x80000000)
0070
0071
0072
0073
0074
0075
0076
0077
0078 #define RXD_W0_SDP0 FIELD32(0xffffffff)
0079
0080
0081
0082
0083 #define RXD_W1_SDL1 FIELD32(0x00003fff)
0084 #define RXD_W1_SDL0 FIELD32(0x3fff0000)
0085 #define RXD_W1_LS0 FIELD32(0x40000000)
0086 #define RXD_W1_DMA_DONE FIELD32(0x80000000)
0087
0088
0089
0090
0091 #define RXD_W2_SDP1 FIELD32(0xffffffff)
0092
0093
0094
0095
0096
0097
0098 #define RXD_W3_BA FIELD32(0x00000001)
0099 #define RXD_W3_DATA FIELD32(0x00000002)
0100 #define RXD_W3_NULLDATA FIELD32(0x00000004)
0101 #define RXD_W3_FRAG FIELD32(0x00000008)
0102 #define RXD_W3_UNICAST_TO_ME FIELD32(0x00000010)
0103 #define RXD_W3_MULTICAST FIELD32(0x00000020)
0104 #define RXD_W3_BROADCAST FIELD32(0x00000040)
0105 #define RXD_W3_MY_BSS FIELD32(0x00000080)
0106 #define RXD_W3_CRC_ERROR FIELD32(0x00000100)
0107 #define RXD_W3_CIPHER_ERROR FIELD32(0x00000600)
0108 #define RXD_W3_AMSDU FIELD32(0x00000800)
0109 #define RXD_W3_HTC FIELD32(0x00001000)
0110 #define RXD_W3_RSSI FIELD32(0x00002000)
0111 #define RXD_W3_L2PAD FIELD32(0x00004000)
0112 #define RXD_W3_AMPDU FIELD32(0x00008000)
0113 #define RXD_W3_DECRYPTED FIELD32(0x00010000)
0114 #define RXD_W3_PLCP_SIGNAL FIELD32(0x00020000)
0115 #define RXD_W3_PLCP_RSSI FIELD32(0x00040000)
0116
0117 unsigned int rt2800mmio_get_dma_done(struct data_queue *queue);
0118
0119
0120 __le32 *rt2800mmio_get_txwi(struct queue_entry *entry);
0121 void rt2800mmio_write_tx_desc(struct queue_entry *entry,
0122 struct txentry_desc *txdesc);
0123
0124
0125 void rt2800mmio_fill_rxdone(struct queue_entry *entry,
0126 struct rxdone_entry_desc *rxdesc);
0127
0128
0129 void rt2800mmio_txstatus_tasklet(struct tasklet_struct *t);
0130 void rt2800mmio_pretbtt_tasklet(struct tasklet_struct *t);
0131 void rt2800mmio_tbtt_tasklet(struct tasklet_struct *t);
0132 void rt2800mmio_rxdone_tasklet(struct tasklet_struct *t);
0133 void rt2800mmio_autowake_tasklet(struct tasklet_struct *t);
0134 irqreturn_t rt2800mmio_interrupt(int irq, void *dev_instance);
0135 void rt2800mmio_toggle_irq(struct rt2x00_dev *rt2x00dev,
0136 enum dev_state state);
0137
0138
0139 void rt2800mmio_start_queue(struct data_queue *queue);
0140 void rt2800mmio_kick_queue(struct data_queue *queue);
0141 void rt2800mmio_flush_queue(struct data_queue *queue, bool drop);
0142 void rt2800mmio_stop_queue(struct data_queue *queue);
0143 void rt2800mmio_queue_init(struct data_queue *queue);
0144
0145
0146 int rt2800mmio_probe_hw(struct rt2x00_dev *rt2x00dev);
0147 bool rt2800mmio_get_entry_state(struct queue_entry *entry);
0148 void rt2800mmio_clear_entry(struct queue_entry *entry);
0149 int rt2800mmio_init_queues(struct rt2x00_dev *rt2x00dev);
0150 int rt2800mmio_init_registers(struct rt2x00_dev *rt2x00dev);
0151
0152
0153 int rt2800mmio_enable_radio(struct rt2x00_dev *rt2x00dev);
0154
0155 #endif