xref: /freebsd/sys/contrib/dev/rtw89/rtw8922ae.c (revision df279a26d3315e7abc9e6f0744137959a4c2fb86)
16d67aabdSBjoern A. Zeeb // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
26d67aabdSBjoern A. Zeeb /* Copyright(c) 2023  Realtek Corporation
36d67aabdSBjoern A. Zeeb  */
46d67aabdSBjoern A. Zeeb 
56d67aabdSBjoern A. Zeeb #include <linux/module.h>
66d67aabdSBjoern A. Zeeb #include <linux/pci.h>
76d67aabdSBjoern A. Zeeb 
86d67aabdSBjoern A. Zeeb #include "pci.h"
96d67aabdSBjoern A. Zeeb #include "reg.h"
106d67aabdSBjoern A. Zeeb #include "rtw8922a.h"
116d67aabdSBjoern A. Zeeb 
12*df279a26SBjoern A. Zeeb static const struct rtw89_pci_ssid_quirk rtw8922a_pci_ssid_quirks[] = {
13*df279a26SBjoern A. Zeeb 	{RTW89_PCI_SSID(PCI_VENDOR_ID_REALTEK, 0x8922, 0x10EC, 0xA891, DELL),
14*df279a26SBjoern A. Zeeb 	 .bitmap = BIT(RTW89_QUIRK_THERMAL_PROT_120C)},
15*df279a26SBjoern A. Zeeb 	{},
16*df279a26SBjoern A. Zeeb };
17*df279a26SBjoern A. Zeeb 
186d67aabdSBjoern A. Zeeb static const struct rtw89_pci_info rtw8922a_pci_info = {
196d67aabdSBjoern A. Zeeb 	.gen_def		= &rtw89_pci_gen_be,
206d67aabdSBjoern A. Zeeb 	.txbd_trunc_mode	= MAC_AX_BD_TRUNC,
216d67aabdSBjoern A. Zeeb 	.rxbd_trunc_mode	= MAC_AX_BD_TRUNC,
226d67aabdSBjoern A. Zeeb 	.rxbd_mode		= MAC_AX_RXBD_PKT,
236d67aabdSBjoern A. Zeeb 	.tag_mode		= MAC_AX_TAG_MULTI,
246d67aabdSBjoern A. Zeeb 	.tx_burst		= MAC_AX_TX_BURST_V1_256B,
256d67aabdSBjoern A. Zeeb 	.rx_burst		= MAC_AX_RX_BURST_V1_128B,
266d67aabdSBjoern A. Zeeb 	.wd_dma_idle_intvl	= MAC_AX_WD_DMA_INTVL_256NS,
276d67aabdSBjoern A. Zeeb 	.wd_dma_act_intvl	= MAC_AX_WD_DMA_INTVL_256NS,
286d67aabdSBjoern A. Zeeb 	.multi_tag_num		= MAC_AX_TAG_NUM_8,
296d67aabdSBjoern A. Zeeb 	.lbc_en			= MAC_AX_PCIE_ENABLE,
306d67aabdSBjoern A. Zeeb 	.lbc_tmr		= MAC_AX_LBC_TMR_2MS,
316d67aabdSBjoern A. Zeeb 	.autok_en		= MAC_AX_PCIE_DISABLE,
326d67aabdSBjoern A. Zeeb 	.io_rcy_en		= MAC_AX_PCIE_ENABLE,
336d67aabdSBjoern A. Zeeb 	.io_rcy_tmr		= MAC_AX_IO_RCY_ANA_TMR_DEF,
346d67aabdSBjoern A. Zeeb 	.rx_ring_eq_is_full	= true,
356d67aabdSBjoern A. Zeeb 	.check_rx_tag		= true,
36*df279a26SBjoern A. Zeeb 	.no_rxbd_fs		= true,
376d67aabdSBjoern A. Zeeb 
386d67aabdSBjoern A. Zeeb 	.init_cfg_reg		= R_BE_HAXI_INIT_CFG1,
396d67aabdSBjoern A. Zeeb 	.txhci_en_bit		= B_BE_TXDMA_EN,
406d67aabdSBjoern A. Zeeb 	.rxhci_en_bit		= B_BE_RXDMA_EN,
416d67aabdSBjoern A. Zeeb 	.rxbd_mode_bit		= B_BE_RXQ_RXBD_MODE_MASK,
426d67aabdSBjoern A. Zeeb 	.exp_ctrl_reg		= R_BE_HAXI_EXP_CTRL_V1,
436d67aabdSBjoern A. Zeeb 	.max_tag_num_mask	= B_BE_MAX_TAG_NUM_MASK,
446d67aabdSBjoern A. Zeeb 	.rxbd_rwptr_clr_reg	= R_BE_RXBD_RWPTR_CLR1_V1,
456d67aabdSBjoern A. Zeeb 	.txbd_rwptr_clr2_reg	= R_BE_TXBD_RWPTR_CLR1,
466d67aabdSBjoern A. Zeeb 	.dma_io_stop		= {R_BE_HAXI_INIT_CFG1, B_BE_STOP_AXI_MST},
476d67aabdSBjoern A. Zeeb 	.dma_stop1		= {R_BE_HAXI_DMA_STOP1, B_BE_TX_STOP1_MASK},
486d67aabdSBjoern A. Zeeb 	.dma_stop2		= {0},
496d67aabdSBjoern A. Zeeb 	.dma_busy1		= {R_BE_HAXI_DMA_BUSY1, DMA_BUSY1_CHECK_BE},
506d67aabdSBjoern A. Zeeb 	.dma_busy2_reg		= 0,
516d67aabdSBjoern A. Zeeb 	.dma_busy3_reg		= R_BE_HAXI_DMA_BUSY1,
526d67aabdSBjoern A. Zeeb 
536d67aabdSBjoern A. Zeeb 	.rpwm_addr		= R_BE_PCIE_HRPWM,
546d67aabdSBjoern A. Zeeb 	.cpwm_addr		= R_BE_PCIE_CRPWM,
556d67aabdSBjoern A. Zeeb 	.mit_addr		= R_BE_PCIE_MIT_CH_EN,
566d67aabdSBjoern A. Zeeb 	.wp_sel_addr		= R_BE_WP_ADDR_H_SEL0_3_V1,
576d67aabdSBjoern A. Zeeb 	.tx_dma_ch_mask		= 0,
586d67aabdSBjoern A. Zeeb 	.bd_idx_addr_low_power	= NULL,
596d67aabdSBjoern A. Zeeb 	.dma_addr_set		= &rtw89_pci_ch_dma_addr_set_be,
606d67aabdSBjoern A. Zeeb 	.bd_ram_table		= NULL,
616d67aabdSBjoern A. Zeeb 
626d67aabdSBjoern A. Zeeb 	.ltr_set		= rtw89_pci_ltr_set_v2,
636d67aabdSBjoern A. Zeeb 	.fill_txaddr_info	= rtw89_pci_fill_txaddr_info_v1,
646d67aabdSBjoern A. Zeeb 	.config_intr_mask	= rtw89_pci_config_intr_mask_v2,
656d67aabdSBjoern A. Zeeb 	.enable_intr		= rtw89_pci_enable_intr_v2,
666d67aabdSBjoern A. Zeeb 	.disable_intr		= rtw89_pci_disable_intr_v2,
676d67aabdSBjoern A. Zeeb 	.recognize_intrs	= rtw89_pci_recognize_intrs_v2,
68*df279a26SBjoern A. Zeeb 
69*df279a26SBjoern A. Zeeb 	.ssid_quirks		= rtw8922a_pci_ssid_quirks,
706d67aabdSBjoern A. Zeeb };
716d67aabdSBjoern A. Zeeb 
726d67aabdSBjoern A. Zeeb static const struct rtw89_driver_info rtw89_8922ae_info = {
736d67aabdSBjoern A. Zeeb 	.chip = &rtw8922a_chip_info,
74*df279a26SBjoern A. Zeeb 	.variant = NULL,
75*df279a26SBjoern A. Zeeb 	.quirks = NULL,
76*df279a26SBjoern A. Zeeb 	.bus = {
77*df279a26SBjoern A. Zeeb 		.pci = &rtw8922a_pci_info,
78*df279a26SBjoern A. Zeeb 	},
79*df279a26SBjoern A. Zeeb };
80*df279a26SBjoern A. Zeeb 
81*df279a26SBjoern A. Zeeb static const struct rtw89_driver_info rtw89_8922ae_vs_info = {
82*df279a26SBjoern A. Zeeb 	.chip = &rtw8922a_chip_info,
83*df279a26SBjoern A. Zeeb 	.variant = &rtw8922ae_vs_variant,
846d67aabdSBjoern A. Zeeb 	.quirks = NULL,
856d67aabdSBjoern A. Zeeb 	.bus = {
866d67aabdSBjoern A. Zeeb 		.pci = &rtw8922a_pci_info,
876d67aabdSBjoern A. Zeeb 	},
886d67aabdSBjoern A. Zeeb };
896d67aabdSBjoern A. Zeeb 
906d67aabdSBjoern A. Zeeb static const struct pci_device_id rtw89_8922ae_id_table[] = {
916d67aabdSBjoern A. Zeeb 	{
926d67aabdSBjoern A. Zeeb 		PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8922),
936d67aabdSBjoern A. Zeeb 		.driver_data = (kernel_ulong_t)&rtw89_8922ae_info,
946d67aabdSBjoern A. Zeeb 	},
95*df279a26SBjoern A. Zeeb 	{
96*df279a26SBjoern A. Zeeb 		PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x892B),
97*df279a26SBjoern A. Zeeb 		.driver_data = (kernel_ulong_t)&rtw89_8922ae_vs_info,
98*df279a26SBjoern A. Zeeb 	},
996d67aabdSBjoern A. Zeeb 	{},
1006d67aabdSBjoern A. Zeeb };
1016d67aabdSBjoern A. Zeeb MODULE_DEVICE_TABLE(pci, rtw89_8922ae_id_table);
1026d67aabdSBjoern A. Zeeb 
1036d67aabdSBjoern A. Zeeb static struct pci_driver rtw89_8922ae_driver = {
1046d67aabdSBjoern A. Zeeb 	.name		= "rtw89_8922ae",
1056d67aabdSBjoern A. Zeeb 	.id_table	= rtw89_8922ae_id_table,
1066d67aabdSBjoern A. Zeeb 	.probe		= rtw89_pci_probe,
1076d67aabdSBjoern A. Zeeb 	.remove		= rtw89_pci_remove,
1086d67aabdSBjoern A. Zeeb 	.driver.pm	= &rtw89_pm_ops_be,
1096d67aabdSBjoern A. Zeeb #if defined(__FreeBSD__)
1106d67aabdSBjoern A. Zeeb 	.bsddriver.name	= KBUILD_MODNAME,
1116d67aabdSBjoern A. Zeeb #endif
1126d67aabdSBjoern A. Zeeb };
1136d67aabdSBjoern A. Zeeb module_pci_driver(rtw89_8922ae_driver);
1146d67aabdSBjoern A. Zeeb 
1156d67aabdSBjoern A. Zeeb MODULE_AUTHOR("Realtek Corporation");
116*df279a26SBjoern A. Zeeb MODULE_DESCRIPTION("Realtek 802.11be wireless 8922AE/8922AE-VS driver");
1176d67aabdSBjoern A. Zeeb MODULE_LICENSE("Dual BSD/GPL");
118