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