aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRamon Fried <rfried@codeaurora.org>2018-03-11 08:01:18 -0400
committerKalle Valo <kvalo@codeaurora.org>2018-03-26 11:26:31 -0400
commite5d04670904ffe21591573e1aa76a0158f939241 (patch)
tree98b174574f1dde227da97fa102a8a548dcfb0852
parent6ced7958168fa77bdf9cca2ee8c7dcef5965a5cf (diff)
wcn36xx: calculate DXE default channel values
DXE channel defaults used hardcoded magic values. Added bit definitions of the control register and calculate this values in compilation for clarity. Signed-off-by: Ramon Fried <rfried@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r--drivers/net/wireless/ath/wcn36xx/dxe.h104
1 files changed, 99 insertions, 5 deletions
diff --git a/drivers/net/wireless/ath/wcn36xx/dxe.h b/drivers/net/wireless/ath/wcn36xx/dxe.h
index 73a14953920d..feb3cb7ee81f 100644
--- a/drivers/net/wireless/ath/wcn36xx/dxe.h
+++ b/drivers/net/wireless/ath/wcn36xx/dxe.h
@@ -140,12 +140,106 @@ H2H_TEST_RX_TX = DMA2
140#define WCN36XX_DXE_WQ_RX_L 0xB 140#define WCN36XX_DXE_WQ_RX_L 0xB
141#define WCN36XX_DXE_WQ_RX_H 0x4 141#define WCN36XX_DXE_WQ_RX_H 0x4
142 142
143/* TODO This must calculated properly but not hardcoded */ 143/* Channel enable or restart */
144#define WCN36xx_DXE_CH_CTRL_EN BIT(0)
145/* End of packet bit */
146#define WCN36xx_DXE_CH_CTRL_EOP BIT(3)
147/* BD Handling bit */
148#define WCN36xx_DXE_CH_CTRL_BDH BIT(4)
149/* Source is queue */
150#define WCN36xx_DXE_CH_CTRL_SIQ BIT(5)
151/* Destination is queue */
152#define WCN36xx_DXE_CH_CTRL_DIQ BIT(6)
153/* Pointer descriptor is queue */
154#define WCN36xx_DXE_CH_CTRL_PIQ BIT(7)
155/* Relase PDU when done */
156#define WCN36xx_DXE_CH_CTRL_PDU_REL BIT(8)
157/* Stop channel processing */
158#define WCN36xx_DXE_CH_CTRL_STOP BIT(16)
159/* Enable external descriptor interrupt */
160#define WCN36xx_DXE_CH_CTRL_INE_ED BIT(17)
161/* Enable channel interrupt on errors */
162#define WCN36xx_DXE_CH_CTRL_INE_ERR BIT(18)
163/* Enable Channel interrupt when done */
164#define WCN36xx_DXE_CH_CTRL_INE_DONE BIT(19)
165/* External descriptor enable */
166#define WCN36xx_DXE_CH_CTRL_EDEN BIT(20)
167/* Wait for valid bit */
168#define WCN36xx_DXE_CH_CTRL_EDVEN BIT(21)
169/* Endianness is little endian*/
170#define WCN36xx_DXE_CH_CTRL_ENDIANNESS BIT(26)
171/* Abort transfer */
172#define WCN36xx_DXE_CH_CTRL_ABORT BIT(27)
173/* Long descriptor format */
174#define WCN36xx_DXE_CH_CTRL_DFMT BIT(28)
175/* Endian byte swap enable */
176#define WCN36xx_DXE_CH_CTRL_SWAP BIT(31)
177
178/* Transfer type */
179#define WCN36xx_DXE_CH_CTRL_XTYPE_SHIFT 1
180#define WCN36xx_DXE_CH_CTRL_XTYPE_MASK GENMASK(2, WCN36xx_DXE_CH_CTRL_XTYPE_SHIFT)
181#define WCN36xx_DXE_CH_CTRL_XTYPE_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_XTYPE_SHIFT)
182
183/* Channel BMU Threshold select */
184#define WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SHIFT 9
185#define WCN36xx_DXE_CH_CTRL_BTHLD_SEL_MASK GENMASK(12, WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SHIFT)
186#define WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SHIFT)
187
188/* Channel Priority */
189#define WCN36xx_DXE_CH_CTRL_PRIO_SHIFT 13
190#define WCN36xx_DXE_CH_CTRL_PRIO_MASK GENMASK(15, WCN36xx_DXE_CH_CTRL_PRIO_SHIFT)
191#define WCN36xx_DXE_CH_CTRL_PRIO_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_PRIO_SHIFT)
192
193/* Counter select */
194#define WCN36xx_DXE_CH_CTRL_SEL_SHIFT 22
195#define WCN36xx_DXE_CH_CTRL_SEL_MASK GENMASK(25, WCN36xx_DXE_CH_CTRL_SEL_SHIFT)
196#define WCN36xx_DXE_CH_CTRL_SEL_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_SEL_SHIFT)
197
198/* Channel BD template index */
199#define WCN36xx_DXE_CH_CTRL_BDT_IDX_SHIFT 29
200#define WCN36xx_DXE_CH_CTRL_BDT_IDX_MASK GENMASK(30, WCN36xx_DXE_CH_CTRL_BDT_IDX_SHIFT)
201#define WCN36xx_DXE_CH_CTRL_BDT_IDX_SET(x) ((x) << WCN36xx_DXE_CH_CTRL_BDT_IDX_SHIFT)
202
144/* DXE default control register values */ 203/* DXE default control register values */
145#define WCN36XX_DXE_CH_DEFAULT_CTL_RX_L 0x847EAD2F 204#define WCN36XX_DXE_CH_DEFAULT_CTL_RX_L (WCN36xx_DXE_CH_CTRL_EN | \
146#define WCN36XX_DXE_CH_DEFAULT_CTL_RX_H 0x84FED12F 205 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_B2H) | \
147#define WCN36XX_DXE_CH_DEFAULT_CTL_TX_H 0x853ECF4D 206 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_SIQ | \
148#define WCN36XX_DXE_CH_DEFAULT_CTL_TX_L 0x843e8b4d 207 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(6) | \
208 WCN36xx_DXE_CH_CTRL_PRIO_SET(5) | WCN36xx_DXE_CH_CTRL_INE_ED | \
209 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
210 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
211 WCN36xx_DXE_CH_CTRL_SEL_SET(1) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
212 WCN36xx_DXE_CH_CTRL_SWAP)
213
214#define WCN36XX_DXE_CH_DEFAULT_CTL_RX_H (WCN36xx_DXE_CH_CTRL_EN | \
215 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_B2H) | \
216 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_SIQ | \
217 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(8) | \
218 WCN36xx_DXE_CH_CTRL_PRIO_SET(6) | WCN36xx_DXE_CH_CTRL_INE_ED | \
219 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
220 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
221 WCN36xx_DXE_CH_CTRL_SEL_SET(3) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
222 WCN36xx_DXE_CH_CTRL_SWAP)
223
224#define WCN36XX_DXE_CH_DEFAULT_CTL_TX_H (WCN36xx_DXE_CH_CTRL_EN | \
225 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
226 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_DIQ | \
227 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(7) | \
228 WCN36xx_DXE_CH_CTRL_PRIO_SET(6) | WCN36xx_DXE_CH_CTRL_INE_ED | \
229 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
230 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
231 WCN36xx_DXE_CH_CTRL_SEL_SET(4) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
232 WCN36xx_DXE_CH_CTRL_SWAP)
233
234#define WCN36XX_DXE_CH_DEFAULT_CTL_TX_L (WCN36xx_DXE_CH_CTRL_EN | \
235 WCN36xx_DXE_CH_CTRL_XTYPE_SET(WCN36xx_DXE_XTYPE_H2B) | \
236 WCN36xx_DXE_CH_CTRL_EOP | WCN36xx_DXE_CH_CTRL_DIQ | \
237 WCN36xx_DXE_CH_CTRL_PDU_REL | WCN36xx_DXE_CH_CTRL_BTHLD_SEL_SET(5) | \
238 WCN36xx_DXE_CH_CTRL_PRIO_SET(4) | WCN36xx_DXE_CH_CTRL_INE_ED | \
239 WCN36xx_DXE_CH_CTRL_INE_ERR | WCN36xx_DXE_CH_CTRL_INE_DONE | \
240 WCN36xx_DXE_CH_CTRL_EDEN | WCN36xx_DXE_CH_CTRL_EDVEN | \
241 WCN36xx_DXE_CH_CTRL_SEL_SET(0) | WCN36xx_DXE_CH_CTRL_ENDIANNESS | \
242 WCN36xx_DXE_CH_CTRL_SWAP)
149 243
150/* Common DXE registers */ 244/* Common DXE registers */
151#define WCN36XX_DXE_MEM_CSR (WCN36XX_DXE_MEM_REG + 0x00) 245#define WCN36XX_DXE_MEM_CSR (WCN36XX_DXE_MEM_REG + 0x00)