xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852bs/phl/hal_g6/mac/mac_ax/_sdio.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /** @file */
2 /******************************************************************************
3  *
4  * Copyright(c) 2019 Realtek Corporation. All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of version 2 of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  ******************************************************************************/
16 
17 #ifndef _MAC_AX_SDIO_H_
18 #define _MAC_AX_SDIO_H_
19 
20 #include "../type.h"
21 #include "pwr.h"
22 
23 #if MAC_AX_SDIO_SUPPORT
24 /* SDIO CMD address mapping */
25 #define SDIO_8BYTE_LEN_MASK	0x0FFF
26 #define SDIO_4BYTE_LEN_MASK	0x03FF
27 #define SDIO_LOCAL_MSK		0x00000FFF
28 #define SDIO_LOCAL_SHIFT	0x00001000
29 #define	WLAN_IOREG_MSK		0xFFFE0000
30 
31 /* IO Bus domain address mapping */
32 #define SDIO_LOCAL_BASE		0x80000000
33 #define WLAN_IOREG_BASE		0x00000000
34 #define SDIO_TX_BASE		0x00010000
35 
36 #define SDIO_CMD_ADDR_TXFF_SHIFT	12
37 #define SDIO_CMD_ADDR_TXFF_0	0
38 #define SDIO_CMD_ADDR_TXFF_1	1
39 #define SDIO_CMD_ADDR_TXFF_2	2
40 #define SDIO_CMD_ADDR_TXFF_3	3
41 #define SDIO_CMD_ADDR_TXFF_4	4
42 #define SDIO_CMD_ADDR_TXFF_5	5
43 #define SDIO_CMD_ADDR_TXFF_6	6
44 #define SDIO_CMD_ADDR_TXFF_7	7
45 #define SDIO_CMD_ADDR_TXFF_8	8
46 #define SDIO_CMD_ADDR_TXFF_9	9
47 #define SDIO_CMD_ADDR_TXFF_10	10
48 #define SDIO_CMD_ADDR_TXFF_11	11
49 #define SDIO_CMD_ADDR_TXFF_12	12
50 #define SDIO_CMD_ADDR_RXFF	0x1F00
51 
52 #define SDIO_REG_LOCAL		0
53 #define SDIO_REG_WLAN_REG	1
54 #define SDIO_REG_WLAN_PLTFM	2
55 
56 #define SDIO_PWR_ON		0
57 #define SDIO_PWR_OFF		1
58 
59 #define SDIO_WAIT_CNT		50
60 
61 #define SDIO_LOCAL_REG_START		0x1000
62 #define SDIO_LOCAL_REG_END		0x1F00
63 #define SDIO_LOCAL_REG_END_PATCH	0x2000
64 #define SDIO_WLAN_REG_END		0x1FFFF
65 #define SDIO_WLAN_REG_END_PATCH		0xFFFF
66 
67 #define SDIO_BYTE_MODE_SIZE_MAX 512
68 #define CMAC_CLK_ALLEN 0xFFFFFFFF
69 #define SDIO_DEFAULT_AGG_NUM	0x40
70 
71 /**
72  * @struct mac_sdio_tbl
73  * @brief mac_sdio_tbl
74  *
75  * @var mac_sdio_tbl::lock
76  * Please Place Description here.
77  */
78 struct mac_sdio_tbl {
79 	mac_ax_mutex lock;
80 };
81 
82 /**
83  * @struct mac_sdio_ch_thr
84  * @brief mac_sdio_ch_thr
85  *
86  * @var mac_sdio_ch_thr::thr
87  * Please Place Description here.
88  * @var mac_sdio_ch_thr::intrpt_en
89  * Please Place Description here.
90  * @var mac_sdio_ch_thr::wp_sh
91  * Please Place Description here.
92  * @var mac_sdio_ch_thr::wp_msk
93  * Please Place Description here.
94  * @var mac_sdio_ch_thr::wd_sh
95  * Please Place Description here.
96  * @var mac_sdio_ch_thr::wd_msk
97  * Please Place Description here.
98  */
99 struct mac_sdio_ch_thr {
100 	u16 thr;
101 	u32 intrpt_en;
102 	u8 wp_sh;
103 	u16 wp_msk;
104 	u8 wd_sh;
105 	u16 wd_msk;
106 };
107 
108 /**
109  * @enum sdio_io_size
110  *
111  * @brief sdio_io_size
112  *
113  * @var sdio_io_size::SDIO_IO_BYTE
114  * Please Place Description here.
115  * @var sdio_io_size::SDIO_IO_WORD
116  * Please Place Description here.
117  * @var sdio_io_size::SDIO_IO_DWORD
118  * Please Place Description here.
119  * @var sdio_io_size::SDIO_IO_LAST
120  * Please Place Description here.
121  * @var sdio_io_size::SDIO_IO_MAX
122  * Please Place Description here.
123  * @var sdio_io_size::SDIO_IO_INVALID
124  * Please Place Description here.
125  */
126 enum sdio_io_size {
127 	SDIO_IO_BYTE,
128 	SDIO_IO_WORD,
129 	SDIO_IO_DWORD,
130 
131 	/* keep last */
132 	SDIO_IO_LAST,
133 	SDIO_IO_MAX = SDIO_IO_LAST,
134 	SDIO_IO_INVALID = SDIO_IO_LAST,
135 };
136 
137 /**
138  * @enum sdio_tx_byte_cnt
139  *
140  * @brief sdio_tx_byte_cnt
141  *
142  * @var sdio_tx_byte_cnt::SDIO_IO_BYTE
143  * Please Place Description here.
144  * @var sdio_tx_byte_cnt::SDIO_IO_WORD
145  * Please Place Description here.
146  */
147 enum sdio_tx_byte_cnt {
148 	SDIO_TX_AGG_8_BYTE_CNT,
149 	SDIO_TX_DUMMY_4_BYTE_CNT,
150 };
151 
152 /**
153  * @addtogroup HCI
154  * @{
155  * @addtogroup BasicIO
156  * @{
157  */
158 /**
159  * @brief reg_read8_sdio
160  *
161  * @param *adapter
162  * @param addr
163  * @return Please Place Description here.
164  * @retval u8
165  */
166 u8 reg_read8_sdio(struct mac_ax_adapter *adapter, u32 addr);
167 /**
168  * @}
169  * @}
170  */
171 
172 /**
173  * @addtogroup HCI
174  * @{
175  * @addtogroup BasicIO
176  * @{
177  */
178 /**
179  * @brief reg_write8_sdio
180  *
181  * @param *adapter
182  * @param addr
183  * @param val
184  * @return Please Place Description here.
185  * @retval void
186  */
187 void reg_write8_sdio(struct mac_ax_adapter *adapter, u32 addr, u8 val);
188 /**
189  * @}
190  * @}
191  */
192 
193 /**
194  * @addtogroup HCI
195  * @{
196  * @addtogroup BasicIO
197  * @{
198  */
199 /**
200  * @brief reg_read16_sdio
201  *
202  * @param *adapter
203  * @param addr
204  * @return Please Place Description here.
205  * @retval u16
206  */
207 u16 reg_read16_sdio(struct mac_ax_adapter *adapter, u32 addr);
208 /**
209  * @}
210  * @}
211  */
212 
213 /**
214  * @addtogroup HCI
215  * @{
216  * @addtogroup BasicIO
217  * @{
218  */
219 /**
220  * @brief reg_write16_sdio
221  *
222  * @param *adapter
223  * @param addr
224  * @param val
225  * @return Please Place Description here.
226  * @retval void
227  */
228 void reg_write16_sdio(struct mac_ax_adapter *adapter, u32 addr, u16 val);
229 /**
230  * @}
231  * @}
232  */
233 
234 /**
235  * @addtogroup HCI
236  * @{
237  * @addtogroup BasicIO
238  * @{
239  */
240 
241 /**
242  * @brief reg_read32_sdio
243  *
244  * @param *adapter
245  * @param addr
246  * @return Please Place Description here.
247  * @retval u32
248  */
249 u32 reg_read32_sdio(struct mac_ax_adapter *adapter, u32 addr);
250 /**
251  * @}
252  * @}
253  */
254 
255 /**
256  * @addtogroup HCI
257  * @{
258  * @addtogroup BasicIO
259  * @{
260  */
261 /**
262  * @brief reg_write32_sdio
263  *
264  * @param *adapter
265  * @param addr
266  * @param val
267  * @return Please Place Description here.
268  * @retval void
269  */
270 void reg_write32_sdio(struct mac_ax_adapter *adapter, u32 addr, u32 val);
271 /**
272  * @}
273  * @}
274  */
275 
276 /**
277  * @addtogroup HCI
278  * @{
279  * @addtogroup SDIO
280  * @{
281  */
282 /**
283  * @brief reg_read_n_sdio
284  *
285  * @param *adapter
286  * @param adr
287  * @param size
288  * @param *val
289  * @return Please Place Description here.
290  * @retval u32
291  */
292 u32 reg_read_n_sdio(struct mac_ax_adapter *adapter, u32 adr, u32 size, u8 *val);
293 /**
294  * @}
295  * @}
296  */
297 
298 /**
299  * @addtogroup HCI
300  * @{
301  * @addtogroup SDIO
302  * @{
303  */
304 
305 /**
306  * @brief tx_allow_sdio
307  *
308  * @param *adapter
309  * @param *info
310  * @return Please Place Description here.
311  * @retval u32
312  */
313 u32 tx_allow_sdio(struct mac_ax_adapter *adapter,
314 		  struct mac_ax_sdio_tx_info *info);
315 /**
316  * @}
317  * @}
318  */
319 
320 /**
321  * @addtogroup HCI
322  * @{
323  * @addtogroup SDIO
324  * @{
325  */
326 
327 /**
328  * @brief tx_cmd_addr_sdio
329  *
330  * @param *adapter
331  * @param *info
332  * @param *cmd_addr
333  * @return Please Place Description here.
334  * @retval u32
335  */
336 u32 tx_cmd_addr_sdio(struct mac_ax_adapter *adapter,
337 		     struct mac_ax_sdio_tx_info *info, u32 *cmd_addr);
338 /**
339  * @}
340  * @}
341  */
342 
343 /**
344  * @addtogroup HCI
345  * @{
346  * @addtogroup SDIO
347  * @{
348  */
349 
350 /**
351  * @brief sdio_pre_init
352  *
353  * @param *adapter
354  * @param *param
355  * @return Please Place Description here.
356  * @retval u32
357  */
358 u32 sdio_pre_init(struct mac_ax_adapter *adapter, void *param);
359 /**
360  * @}
361  * @}
362  */
363 
364 /**
365  * @addtogroup HCI
366  * @{
367  * @addtogroup SDIO
368  * @{
369  */
370 
371 /**
372  * @brief sdio_init
373  *
374  * @param *adapter
375  * @param *param
376  * @return Please Place Description here.
377  * @retval u32
378  */
379 u32 sdio_init(struct mac_ax_adapter *adapter, void *param);
380 /**
381  * @}
382  * @}
383  */
384 
385 /**
386  * @addtogroup HCI
387  * @{
388  * @addtogroup SDIO
389  * @{
390  */
391 
392 /**
393  * @brief sdio_deinit
394  *
395  * @param *adapter
396  * @param *param
397  * @return Please Place Description here.
398  * @retval u32
399  */
400 u32 sdio_deinit(struct mac_ax_adapter *adapter, void *param);
401 /**
402  * @}
403  * @}
404  */
405 
406 /**
407  * @addtogroup HCI
408  * @{
409  * @addtogroup SDIO
410  * @{
411  */
412 
413 /**
414  * @brief r_indir_sdio
415  *
416  * @param *adapter
417  * @param adr
418  * @param size
419  * @return Please Place Description here.
420  * @retval u32
421  */
422 
423 u32 r_indir_sdio(struct mac_ax_adapter *adapter, u32 adr,
424 		 enum sdio_io_size size);
425 /**
426  * @}
427  * @}
428  */
429 
430 /**
431  * @addtogroup HCI
432  * @{
433  * @addtogroup SDIO
434  * @{
435  */
436 
437 /**
438  * @brief w_indir_sdio
439  *
440  * @param *adapter
441  * @param adr
442  * @param val
443  * @param size
444  * @return Please Place Description here.
445  * @retval void
446  */
447 void w_indir_sdio(struct mac_ax_adapter *adapter, u32 adr, u32 val,
448 		  enum sdio_io_size size);
449 /**
450  * @}
451  * @}
452  */
453 
454 /**
455  * @addtogroup HCI
456  * @{
457  * @addtogroup SDIO
458  * @{
459  */
460 
461 /**
462  * @brief set_info_sdio
463  *
464  * @param *adapter
465  * @param *info
466  * @return Please Place Description here.
467  * @retval u32
468  */
469 u32 set_info_sdio(struct mac_ax_adapter *adapter,
470 		  struct mac_ax_sdio_info *info);
471 /**
472  * @}
473  * @}
474  */
475 
476 /**
477  * @addtogroup HCI
478  * @{
479  * @addtogroup SDIO
480  * @{
481  */
482 
483 /**
484  * @brief tx_mode_cfg_sdio
485  *
486  * @param *adapter
487  * @param mode
488  * @return Please Place Description here.
489  * @retval u32
490  */
491 u32 tx_mode_cfg_sdio(struct mac_ax_adapter *adapter,
492 		     enum mac_ax_sdio_tx_mode mode);
493 /**
494  * @}
495  * @}
496  */
497 
498 /**
499  * @addtogroup HCI
500  * @{
501  * @addtogroup SDIO
502  * @{
503  */
504 
505 /**
506  * @brief rx_agg_cfg_sdio
507  *
508  * @param *adapter
509  * @param *cfg
510  * @return Please Place Description here.
511  * @retval void
512  */
513 void rx_agg_cfg_sdio(struct mac_ax_adapter *adapter,
514 		     struct mac_ax_rx_agg_cfg *cfg);
515 /**
516  * @}
517  * @}
518  */
519 
520 /**
521  * @addtogroup HCI
522  * @{
523  * @addtogroup SDIO
524  * @{
525  */
526 
527 /**
528  * @brief tx_agg_cfg_sdio
529  *
530  * @param *adapter
531  * @param *cfg
532  * @return Please Place Description here.
533  * @retval u32
534  */
535 u32 tx_agg_cfg_sdio(struct mac_ax_adapter *adapter,
536 		    struct mac_ax_sdio_txagg_cfg *cfg);
537 /**
538  * @}
539  * @}
540  */
541 
542 /**
543  * @addtogroup HCI
544  * @{
545  * @addtogroup SDIO
546  * @{
547  */
548 
549 /**
550  * @brief aval_page_cfg_sdio
551  *
552  * @param *adapter
553  * @param *cfg
554  * @return Please Place Description here.
555  * @retval void
556  */
557 void aval_page_cfg_sdio(struct mac_ax_adapter *adapter,
558 			struct mac_ax_aval_page_cfg *cfg);
559 /**
560  * @}
561  * @}
562  */
563 
564 /**
565  * @addtogroup HCI
566  * @{
567  * @addtogroup SDIO
568  * @{
569  */
570 
571 /**
572  * @brief leave_suspend_sdio
573  *
574  * @param *adapter
575  * @return Please Place Description here.
576  * @retval u32
577  */
578 u32 leave_suspend_sdio(struct mac_ax_adapter *adapter);
579 /**
580  * @}
581  * @}
582  */
583 
584 /**
585  * @addtogroup HCI
586  * @{
587  * @addtogroup SDIO
588  * @{
589  */
590 
591 /**
592  * @brief get_int_latency_sdio
593  *
594  * @param *adapter
595  * @return Please Place Description here.
596  * @retval u32
597  */
598 u32 get_int_latency_sdio(struct mac_ax_adapter *adapter);
599 /**
600  * @}
601  * @}
602  */
603 
604 /**
605  * @addtogroup HCI
606  * @{
607  * @addtogroup SDIO
608  * @{
609  */
610 
611 /**
612  * @brief get_clk_cnt_sdio
613  *
614  * @param *adapter
615  * @param *cnt
616  * @return Please Place Description here.
617  * @retval u32
618  */
619 u32 get_clk_cnt_sdio(struct mac_ax_adapter *adapter, u32 *cnt);
620 /**
621  * @}
622  * @}
623  */
624 
625 /**
626  * @addtogroup HCI
627  * @{
628  * @addtogroup SDIO
629  * @{
630  */
631 
632 /**
633  * @brief set_wt_cfg_sdio
634  *
635  * @param *adapter
636  * @param en
637  * @return Please Place Description here.
638  * @retval u32
639  */
640 u32 set_wt_cfg_sdio(struct mac_ax_adapter *adapter, u8 en);
641 /**
642  * @}
643  * @}
644  */
645 
646 /**
647  * @addtogroup HCI
648  * @{
649  * @addtogroup SDIO
650  * @{
651  */
652 
653 /**
654  * @brief set_clk_mon_sdio
655  *
656  * @param *adapter
657  * @param *cfg
658  * @return Please Place Description here.
659  * @retval u32
660  */
661 u32 set_clk_mon_sdio(struct mac_ax_adapter *adapter,
662 		     struct mac_ax_sdio_clk_mon_cfg *cfg);
663 /**
664  * @}
665  * @}
666  */
667 
668 /**
669  * @addtogroup HCI
670  * @{
671  * @addtogroup SDIO
672  * @{
673  */
674 
675 /**
676  * @brief sdio_tbl_init
677  *
678  * @param *adapter
679  * @return Please Place Description here.
680  * @retval u32
681  */
682 u32 sdio_tbl_init(struct mac_ax_adapter *adapter);
683 /**
684  * @}
685  * @}
686  */
687 
688 /**
689  * @addtogroup HCI
690  * @{
691  * @addtogroup SDIO
692  * @{
693  */
694 
695 /**
696  * @brief sdio_tbl_exit
697  *
698  * @param *adapter
699  * @return Please Place Description here.
700  * @retval u32
701  */
702 u32 sdio_tbl_exit(struct mac_ax_adapter *adapter);
703 /**
704  * @}
705  * @}
706  */
707 
708 /**
709  * @addtogroup HCI
710  * @{
711  * @addtogroup SDIO
712  * @{
713  */
714 
715 /**
716  * @brief sdio_pwr_switch
717  *
718  * @param *vadapter
719  * @param pre_switch
720  * @param on
721  * @return Please Place Description here.
722  * @retval u32
723  */
724 u32 sdio_pwr_switch(void *vadapter,
725 		    u8 pre_switch, u8 on);
726 /**
727  * @}
728  * @}
729  */
730 
731 /**
732  * @brief sdio_pwr_switch
733  *
734  * @param *vadapter
735  * @param mac_ax_wow_ctrl
736  * @return Please Place Description here.
737  * @retval u32
738  */
739 u32 set_sdio_wowlan(struct mac_ax_adapter *adapter, enum mac_ax_wow_ctrl w_c);
740 /**
741  * @}
742  * @}
743  */
744 
745 /**
746  * @brief sdio_get_txagg_num
747  *
748  * @param *adapter
749  * @param band
750  * @return Please Place Description here.
751  * @retval u32
752  */
753 u32 sdio_get_txagg_num(struct mac_ax_adapter *adapter, u8 band);
754 /**
755  * @}
756  * @}
757  */
758 
759 /**
760  * @brief sdio_autok_counter_avg
761  *
762  * @param *adapter
763  * @return Please Place Description here.
764  * @retval u32
765  */
766 u32 sdio_autok_counter_avg(struct mac_ax_adapter *adapter);
767 /**
768  * @}
769  * @}
770  */
771 
772 /**
773  * @addtogroup HCI
774  * @{
775  * @addtogroup SDIO
776  * @{
777  */
778 
779 /**
780  * @brief dbcc_hci_ctrl_sdio
781  *
782  * @param *adapter
783  * @param *info
784  * @return Please Place Description here.
785  * @retval u32
786  */
787 u32 dbcc_hci_ctrl_sdio(struct mac_ax_adapter *adapter,
788 		       struct mac_ax_dbcc_hci_ctrl *info);
789 /**
790  * @}
791  * @}
792  */
793 #endif /*MAC_AX_SDIO_SUPPORT*/
794 #endif
795