Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
0002 /* Copyright(c) 2020  Realtek Corporation
0003  */
0004 
0005 #ifndef __RTW89_PCI_H__
0006 #define __RTW89_PCI_H__
0007 
0008 #include "txrx.h"
0009 
0010 #define MDIO_PG0_G1 0
0011 #define MDIO_PG1_G1 1
0012 #define MDIO_PG0_G2 2
0013 #define MDIO_PG1_G2 3
0014 #define RAC_ANA10           0x10
0015 #define RAC_REG_REV2            0x1B
0016 #define BAC_CMU_EN_DLY_MASK     GENMASK(15, 12)
0017 #define PCIE_DPHY_DLY_25US      0x1
0018 #define RAC_ANA19           0x19
0019 #define RAC_ANA1F           0x1F
0020 #define RAC_ANA24           0x24
0021 #define B_AX_DEGLITCH           GENMASK(11, 8)
0022 #define RAC_ANA26           0x26
0023 #define B_AX_RXEN           GENMASK(15, 14)
0024 #define RAC_CTRL_PPR_V1         0x30
0025 #define B_AX_CLK_CALIB_EN       BIT(12)
0026 #define B_AX_CALIB_EN           BIT(13)
0027 #define B_AX_DIV            GENMASK(15, 14)
0028 #define RAC_SET_PPR_V1          0x31
0029 
0030 #define R_AX_DBI_FLAG           0x1090
0031 #define B_AX_DBI_RFLAG          BIT(17)
0032 #define B_AX_DBI_WFLAG          BIT(16)
0033 #define B_AX_DBI_WREN_MSK       GENMASK(15, 12)
0034 #define B_AX_DBI_ADDR_MSK       GENMASK(11, 2)
0035 #define R_AX_DBI_WDATA          0x1094
0036 #define R_AX_DBI_RDATA          0x1098
0037 
0038 #define R_AX_MDIO_WDATA         0x10A4
0039 #define R_AX_MDIO_RDATA         0x10A6
0040 
0041 #define R_AX_PCIE_PS_CTRL_V1        0x3008
0042 #define B_AX_CMAC_EXIT_L1_EN        BIT(7)
0043 #define B_AX_DMAC0_EXIT_L1_EN       BIT(6)
0044 #define B_AX_SEL_XFER_PENDING       BIT(3)
0045 #define B_AX_SEL_REQ_ENTR_L1        BIT(2)
0046 #define B_AX_SEL_REQ_EXIT_L1        BIT(0)
0047 
0048 #define R_AX_PCIE_BG_CLR        0x303C
0049 #define B_AX_BG_CLR_ASYNC_M3        BIT(4)
0050 
0051 #define R_AX_PCIE_IO_RCY_M1 0x3100
0052 #define B_AX_PCIE_IO_RCY_P_M1 BIT(5)
0053 #define B_AX_PCIE_IO_RCY_WDT_P_M1 BIT(4)
0054 #define B_AX_PCIE_IO_RCY_WDT_MODE_M1 BIT(3)
0055 #define B_AX_PCIE_IO_RCY_TRIG_M1 BIT(0)
0056 
0057 #define R_AX_PCIE_WDT_TIMER_M1 0x3104
0058 #define B_AX_PCIE_WDT_TIMER_M1_MASK GENMASK(31, 0)
0059 
0060 #define R_AX_PCIE_IO_RCY_M2 0x310C
0061 #define B_AX_PCIE_IO_RCY_P_M2 BIT(5)
0062 #define B_AX_PCIE_IO_RCY_WDT_P_M2 BIT(4)
0063 #define B_AX_PCIE_IO_RCY_WDT_MODE_M2 BIT(3)
0064 #define B_AX_PCIE_IO_RCY_TRIG_M2 BIT(0)
0065 
0066 #define R_AX_PCIE_WDT_TIMER_M2 0x3110
0067 #define B_AX_PCIE_WDT_TIMER_M2_MASK GENMASK(31, 0)
0068 
0069 #define R_AX_PCIE_IO_RCY_E0 0x3118
0070 #define B_AX_PCIE_IO_RCY_P_E0 BIT(5)
0071 #define B_AX_PCIE_IO_RCY_WDT_P_E0 BIT(4)
0072 #define B_AX_PCIE_IO_RCY_WDT_MODE_E0 BIT(3)
0073 #define B_AX_PCIE_IO_RCY_TRIG_E0 BIT(0)
0074 
0075 #define R_AX_PCIE_WDT_TIMER_E0 0x311C
0076 #define B_AX_PCIE_WDT_TIMER_E0_MASK GENMASK(31, 0)
0077 
0078 #define R_AX_PCIE_IO_RCY_S1 0x3124
0079 #define B_AX_PCIE_IO_RCY_RP_S1 BIT(7)
0080 #define B_AX_PCIE_IO_RCY_WP_S1 BIT(6)
0081 #define B_AX_PCIE_IO_RCY_WDT_RP_S1 BIT(5)
0082 #define B_AX_PCIE_IO_RCY_WDT_WP_S1 BIT(4)
0083 #define B_AX_PCIE_IO_RCY_WDT_MODE_S1 BIT(3)
0084 #define B_AX_PCIE_IO_RCY_RTRIG_S1 BIT(1)
0085 #define B_AX_PCIE_IO_RCY_WTRIG_S1 BIT(0)
0086 
0087 #define R_AX_PCIE_WDT_TIMER_S1 0x3128
0088 #define B_AX_PCIE_WDT_TIMER_S1_MASK GENMASK(31, 0)
0089 
0090 #define R_RAC_DIRECT_OFFSET_G1 0x3800
0091 #define R_RAC_DIRECT_OFFSET_G2 0x3880
0092 
0093 #define RTW89_PCI_WR_RETRY_CNT      20
0094 
0095 /* Interrupts */
0096 #define R_AX_HIMR0 0x01A0
0097 #define B_AX_WDT_TIMEOUT_INT_EN BIT(22)
0098 #define B_AX_HALT_C2H_INT_EN BIT(21)
0099 #define R_AX_HISR0 0x01A4
0100 
0101 #define R_AX_HIMR1 0x01A8
0102 #define B_AX_GPIO18_INT_EN BIT(2)
0103 #define B_AX_GPIO17_INT_EN BIT(1)
0104 #define B_AX_GPIO16_INT_EN BIT(0)
0105 
0106 #define R_AX_HISR1 0x01AC
0107 #define B_AX_GPIO18_INT BIT(2)
0108 #define B_AX_GPIO17_INT BIT(1)
0109 #define B_AX_GPIO16_INT BIT(0)
0110 
0111 #define R_AX_MDIO_CFG           0x10A0
0112 #define B_AX_MDIO_PHY_ADDR_MASK     GENMASK(13, 12)
0113 #define B_AX_MDIO_RFLAG         BIT(9)
0114 #define B_AX_MDIO_WFLAG         BIT(8)
0115 #define B_AX_MDIO_ADDR_MASK     GENMASK(4, 0)
0116 
0117 #define R_AX_PCIE_HIMR00    0x10B0
0118 #define R_AX_HAXI_HIMR00 0x10B0
0119 #define B_AX_HC00ISR_IND_INT_EN     BIT(27)
0120 #define B_AX_HD1ISR_IND_INT_EN      BIT(26)
0121 #define B_AX_HD0ISR_IND_INT_EN      BIT(25)
0122 #define B_AX_HS0ISR_IND_INT_EN      BIT(24)
0123 #define B_AX_RETRAIN_INT_EN     BIT(21)
0124 #define B_AX_RPQBD_FULL_INT_EN      BIT(20)
0125 #define B_AX_RDU_INT_EN         BIT(19)
0126 #define B_AX_RXDMA_STUCK_INT_EN     BIT(18)
0127 #define B_AX_TXDMA_STUCK_INT_EN     BIT(17)
0128 #define B_AX_PCIE_HOTRST_INT_EN     BIT(16)
0129 #define B_AX_PCIE_FLR_INT_EN        BIT(15)
0130 #define B_AX_PCIE_PERST_INT_EN      BIT(14)
0131 #define B_AX_TXDMA_CH12_INT_EN      BIT(13)
0132 #define B_AX_TXDMA_CH9_INT_EN       BIT(12)
0133 #define B_AX_TXDMA_CH8_INT_EN       BIT(11)
0134 #define B_AX_TXDMA_ACH7_INT_EN      BIT(10)
0135 #define B_AX_TXDMA_ACH6_INT_EN      BIT(9)
0136 #define B_AX_TXDMA_ACH5_INT_EN      BIT(8)
0137 #define B_AX_TXDMA_ACH4_INT_EN      BIT(7)
0138 #define B_AX_TXDMA_ACH3_INT_EN      BIT(6)
0139 #define B_AX_TXDMA_ACH2_INT_EN      BIT(5)
0140 #define B_AX_TXDMA_ACH1_INT_EN      BIT(4)
0141 #define B_AX_TXDMA_ACH0_INT_EN      BIT(3)
0142 #define B_AX_RPQDMA_INT_EN      BIT(2)
0143 #define B_AX_RXP1DMA_INT_EN     BIT(1)
0144 #define B_AX_RXDMA_INT_EN       BIT(0)
0145 
0146 #define R_AX_PCIE_HISR00    0x10B4
0147 #define R_AX_HAXI_HISR00 0x10B4
0148 #define B_AX_HC00ISR_IND_INT        BIT(27)
0149 #define B_AX_HD1ISR_IND_INT     BIT(26)
0150 #define B_AX_HD0ISR_IND_INT     BIT(25)
0151 #define B_AX_HS0ISR_IND_INT     BIT(24)
0152 #define B_AX_RETRAIN_INT        BIT(21)
0153 #define B_AX_RPQBD_FULL_INT     BIT(20)
0154 #define B_AX_RDU_INT            BIT(19)
0155 #define B_AX_RXDMA_STUCK_INT        BIT(18)
0156 #define B_AX_TXDMA_STUCK_INT        BIT(17)
0157 #define B_AX_PCIE_HOTRST_INT        BIT(16)
0158 #define B_AX_PCIE_FLR_INT       BIT(15)
0159 #define B_AX_PCIE_PERST_INT     BIT(14)
0160 #define B_AX_TXDMA_CH12_INT     BIT(13)
0161 #define B_AX_TXDMA_CH9_INT      BIT(12)
0162 #define B_AX_TXDMA_CH8_INT      BIT(11)
0163 #define B_AX_TXDMA_ACH7_INT     BIT(10)
0164 #define B_AX_TXDMA_ACH6_INT     BIT(9)
0165 #define B_AX_TXDMA_ACH5_INT     BIT(8)
0166 #define B_AX_TXDMA_ACH4_INT     BIT(7)
0167 #define B_AX_TXDMA_ACH3_INT     BIT(6)
0168 #define B_AX_TXDMA_ACH2_INT     BIT(5)
0169 #define B_AX_TXDMA_ACH1_INT     BIT(4)
0170 #define B_AX_TXDMA_ACH0_INT     BIT(3)
0171 #define B_AX_RPQDMA_INT         BIT(2)
0172 #define B_AX_RXP1DMA_INT        BIT(1)
0173 #define B_AX_RXDMA_INT          BIT(0)
0174 
0175 #define R_AX_HAXI_HIMR10 0x11E0
0176 #define B_AX_TXDMA_CH11_INT_EN_V1 BIT(1)
0177 #define B_AX_TXDMA_CH10_INT_EN_V1 BIT(0)
0178 
0179 #define R_AX_PCIE_HIMR10    0x13B0
0180 #define B_AX_HC10ISR_IND_INT_EN     BIT(28)
0181 #define B_AX_TXDMA_CH11_INT_EN      BIT(12)
0182 #define B_AX_TXDMA_CH10_INT_EN      BIT(11)
0183 
0184 #define R_AX_PCIE_HISR10    0x13B4
0185 #define B_AX_HC10ISR_IND_INT        BIT(28)
0186 #define B_AX_TXDMA_CH11_INT     BIT(12)
0187 #define B_AX_TXDMA_CH10_INT     BIT(11)
0188 
0189 #define R_AX_PCIE_HIMR00_V1 0x30B0
0190 #define B_AX_HCI_AXIDMA_INT_EN BIT(29)
0191 #define B_AX_HC00ISR_IND_INT_EN_V1 BIT(28)
0192 #define B_AX_HD1ISR_IND_INT_EN_V1 BIT(27)
0193 #define B_AX_HD0ISR_IND_INT_EN_V1 BIT(26)
0194 #define B_AX_HS1ISR_IND_INT_EN BIT(25)
0195 #define B_AX_PCIE_DBG_STE_INT_EN BIT(13)
0196 
0197 #define R_AX_PCIE_HISR00_V1 0x30B4
0198 #define B_AX_HCI_AXIDMA_INT BIT(29)
0199 #define B_AX_HC00ISR_IND_INT_V1 BIT(28)
0200 #define B_AX_HD1ISR_IND_INT_V1 BIT(27)
0201 #define B_AX_HD0ISR_IND_INT_V1 BIT(26)
0202 #define B_AX_HS1ISR_IND_INT BIT(25)
0203 #define B_AX_PCIE_DBG_STE_INT BIT(13)
0204 
0205 /* TX/RX */
0206 #define R_AX_DRV_FW_HSK_0   0x01B0
0207 #define R_AX_DRV_FW_HSK_1   0x01B4
0208 #define R_AX_DRV_FW_HSK_2   0x01B8
0209 #define R_AX_DRV_FW_HSK_3   0x01BC
0210 #define R_AX_DRV_FW_HSK_4   0x01C0
0211 #define R_AX_DRV_FW_HSK_5   0x01C4
0212 #define R_AX_DRV_FW_HSK_6   0x01C8
0213 #define R_AX_DRV_FW_HSK_7   0x01CC
0214 
0215 #define R_AX_RXQ_RXBD_IDX   0x1050
0216 #define R_AX_RPQ_RXBD_IDX   0x1054
0217 #define R_AX_ACH0_TXBD_IDX  0x1058
0218 #define R_AX_ACH1_TXBD_IDX  0x105C
0219 #define R_AX_ACH2_TXBD_IDX  0x1060
0220 #define R_AX_ACH3_TXBD_IDX  0x1064
0221 #define R_AX_ACH4_TXBD_IDX  0x1068
0222 #define R_AX_ACH5_TXBD_IDX  0x106C
0223 #define R_AX_ACH6_TXBD_IDX  0x1070
0224 #define R_AX_ACH7_TXBD_IDX  0x1074
0225 #define R_AX_CH8_TXBD_IDX   0x1078 /* Management Queue band 0 */
0226 #define R_AX_CH9_TXBD_IDX   0x107C /* HI Queue band 0 */
0227 #define R_AX_CH10_TXBD_IDX  0x137C /* Management Queue band 1 */
0228 #define R_AX_CH11_TXBD_IDX  0x1380 /* HI Queue band 1 */
0229 #define R_AX_CH12_TXBD_IDX  0x1080 /* FWCMD Queue */
0230 #define R_AX_CH10_TXBD_IDX_V1   0x11D0
0231 #define R_AX_CH11_TXBD_IDX_V1   0x11D4
0232 #define R_AX_RXQ_RXBD_IDX_V1    0x1218
0233 #define R_AX_RPQ_RXBD_IDX_V1    0x121C
0234 #define TXBD_HW_IDX_MASK    GENMASK(27, 16)
0235 #define TXBD_HOST_IDX_MASK  GENMASK(11, 0)
0236 
0237 #define R_AX_ACH0_TXBD_DESA_L   0x1110
0238 #define R_AX_ACH0_TXBD_DESA_H   0x1114
0239 #define R_AX_ACH1_TXBD_DESA_L   0x1118
0240 #define R_AX_ACH1_TXBD_DESA_H   0x111C
0241 #define R_AX_ACH2_TXBD_DESA_L   0x1120
0242 #define R_AX_ACH2_TXBD_DESA_H   0x1124
0243 #define R_AX_ACH3_TXBD_DESA_L   0x1128
0244 #define R_AX_ACH3_TXBD_DESA_H   0x112C
0245 #define R_AX_ACH4_TXBD_DESA_L   0x1130
0246 #define R_AX_ACH4_TXBD_DESA_H   0x1134
0247 #define R_AX_ACH5_TXBD_DESA_L   0x1138
0248 #define R_AX_ACH5_TXBD_DESA_H   0x113C
0249 #define R_AX_ACH6_TXBD_DESA_L   0x1140
0250 #define R_AX_ACH6_TXBD_DESA_H   0x1144
0251 #define R_AX_ACH7_TXBD_DESA_L   0x1148
0252 #define R_AX_ACH7_TXBD_DESA_H   0x114C
0253 #define R_AX_CH8_TXBD_DESA_L    0x1150
0254 #define R_AX_CH8_TXBD_DESA_H    0x1154
0255 #define R_AX_CH9_TXBD_DESA_L    0x1158
0256 #define R_AX_CH9_TXBD_DESA_H    0x115C
0257 #define R_AX_CH10_TXBD_DESA_L   0x1358
0258 #define R_AX_CH10_TXBD_DESA_H   0x135C
0259 #define R_AX_CH11_TXBD_DESA_L   0x1360
0260 #define R_AX_CH11_TXBD_DESA_H   0x1364
0261 #define R_AX_CH12_TXBD_DESA_L   0x1160
0262 #define R_AX_CH12_TXBD_DESA_H   0x1164
0263 #define R_AX_RXQ_RXBD_DESA_L    0x1100
0264 #define R_AX_RXQ_RXBD_DESA_H    0x1104
0265 #define R_AX_RPQ_RXBD_DESA_L    0x1108
0266 #define R_AX_RPQ_RXBD_DESA_H    0x110C
0267 #define R_AX_RXQ_RXBD_DESA_L_V1 0x1220
0268 #define R_AX_RXQ_RXBD_DESA_H_V1 0x1224
0269 #define R_AX_RPQ_RXBD_DESA_L_V1 0x1228
0270 #define R_AX_RPQ_RXBD_DESA_H_V1 0x122C
0271 #define R_AX_ACH0_TXBD_DESA_L_V1 0x1230
0272 #define R_AX_ACH0_TXBD_DESA_H_V1 0x1234
0273 #define R_AX_ACH1_TXBD_DESA_L_V1 0x1238
0274 #define R_AX_ACH1_TXBD_DESA_H_V1 0x123C
0275 #define R_AX_ACH2_TXBD_DESA_L_V1 0x1240
0276 #define R_AX_ACH2_TXBD_DESA_H_V1 0x1244
0277 #define R_AX_ACH3_TXBD_DESA_L_V1 0x1248
0278 #define R_AX_ACH3_TXBD_DESA_H_V1 0x124C
0279 #define R_AX_ACH4_TXBD_DESA_L_V1 0x1250
0280 #define R_AX_ACH4_TXBD_DESA_H_V1 0x1254
0281 #define R_AX_ACH5_TXBD_DESA_L_V1 0x1258
0282 #define R_AX_ACH5_TXBD_DESA_H_V1 0x125C
0283 #define R_AX_ACH6_TXBD_DESA_L_V1 0x1260
0284 #define R_AX_ACH6_TXBD_DESA_H_V1 0x1264
0285 #define R_AX_ACH7_TXBD_DESA_L_V1 0x1268
0286 #define R_AX_ACH7_TXBD_DESA_H_V1 0x126C
0287 #define R_AX_CH8_TXBD_DESA_L_V1 0x1270
0288 #define R_AX_CH8_TXBD_DESA_H_V1 0x1274
0289 #define R_AX_CH9_TXBD_DESA_L_V1 0x1278
0290 #define R_AX_CH9_TXBD_DESA_H_V1 0x127C
0291 #define R_AX_CH12_TXBD_DESA_L_V1 0x1280
0292 #define R_AX_CH12_TXBD_DESA_H_V1 0x1284
0293 #define R_AX_CH10_TXBD_DESA_L_V1 0x1458
0294 #define R_AX_CH10_TXBD_DESA_H_V1 0x145C
0295 #define R_AX_CH11_TXBD_DESA_L_V1 0x1460
0296 #define R_AX_CH11_TXBD_DESA_H_V1 0x1464
0297 #define B_AX_DESC_NUM_MSK       GENMASK(11, 0)
0298 
0299 #define R_AX_RXQ_RXBD_NUM   0x1020
0300 #define R_AX_RPQ_RXBD_NUM   0x1022
0301 #define R_AX_ACH0_TXBD_NUM  0x1024
0302 #define R_AX_ACH1_TXBD_NUM  0x1026
0303 #define R_AX_ACH2_TXBD_NUM  0x1028
0304 #define R_AX_ACH3_TXBD_NUM  0x102A
0305 #define R_AX_ACH4_TXBD_NUM  0x102C
0306 #define R_AX_ACH5_TXBD_NUM  0x102E
0307 #define R_AX_ACH6_TXBD_NUM  0x1030
0308 #define R_AX_ACH7_TXBD_NUM  0x1032
0309 #define R_AX_CH8_TXBD_NUM   0x1034
0310 #define R_AX_CH9_TXBD_NUM   0x1036
0311 #define R_AX_CH10_TXBD_NUM  0x1338
0312 #define R_AX_CH11_TXBD_NUM  0x133A
0313 #define R_AX_CH12_TXBD_NUM  0x1038
0314 #define R_AX_RXQ_RXBD_NUM_V1    0x1210
0315 #define R_AX_RPQ_RXBD_NUM_V1    0x1212
0316 #define R_AX_CH10_TXBD_NUM_V1   0x1438
0317 #define R_AX_CH11_TXBD_NUM_V1   0x143A
0318 
0319 #define R_AX_ACH0_BDRAM_CTRL    0x1200
0320 #define R_AX_ACH1_BDRAM_CTRL    0x1204
0321 #define R_AX_ACH2_BDRAM_CTRL    0x1208
0322 #define R_AX_ACH3_BDRAM_CTRL    0x120C
0323 #define R_AX_ACH4_BDRAM_CTRL    0x1210
0324 #define R_AX_ACH5_BDRAM_CTRL    0x1214
0325 #define R_AX_ACH6_BDRAM_CTRL    0x1218
0326 #define R_AX_ACH7_BDRAM_CTRL    0x121C
0327 #define R_AX_CH8_BDRAM_CTRL 0x1220
0328 #define R_AX_CH9_BDRAM_CTRL 0x1224
0329 #define R_AX_CH10_BDRAM_CTRL    0x1320
0330 #define R_AX_CH11_BDRAM_CTRL    0x1324
0331 #define R_AX_CH12_BDRAM_CTRL    0x1228
0332 #define R_AX_ACH0_BDRAM_CTRL_V1 0x1300
0333 #define R_AX_ACH1_BDRAM_CTRL_V1 0x1304
0334 #define R_AX_ACH2_BDRAM_CTRL_V1 0x1308
0335 #define R_AX_ACH3_BDRAM_CTRL_V1 0x130C
0336 #define R_AX_ACH4_BDRAM_CTRL_V1 0x1310
0337 #define R_AX_ACH5_BDRAM_CTRL_V1 0x1314
0338 #define R_AX_ACH6_BDRAM_CTRL_V1 0x1318
0339 #define R_AX_ACH7_BDRAM_CTRL_V1 0x131C
0340 #define R_AX_CH8_BDRAM_CTRL_V1 0x1320
0341 #define R_AX_CH9_BDRAM_CTRL_V1 0x1324
0342 #define R_AX_CH12_BDRAM_CTRL_V1 0x1328
0343 #define R_AX_CH10_BDRAM_CTRL_V1 0x1420
0344 #define R_AX_CH11_BDRAM_CTRL_V1 0x1424
0345 #define BDRAM_SIDX_MASK     GENMASK(7, 0)
0346 #define BDRAM_MAX_MASK      GENMASK(15, 8)
0347 #define BDRAM_MIN_MASK      GENMASK(23, 16)
0348 
0349 #define R_AX_PCIE_INIT_CFG1 0x1000
0350 #define B_AX_PCIE_RXRST_KEEP_REG    BIT(23)
0351 #define B_AX_PCIE_TXRST_KEEP_REG    BIT(22)
0352 #define B_AX_PCIE_PERST_KEEP_REG    BIT(21)
0353 #define B_AX_PCIE_FLR_KEEP_REG      BIT(20)
0354 #define B_AX_PCIE_TRAIN_KEEP_REG    BIT(19)
0355 #define B_AX_RXBD_MODE          BIT(18)
0356 #define B_AX_PCIE_MAX_RXDMA_MASK    GENMASK(16, 14)
0357 #define B_AX_RXHCI_EN           BIT(13)
0358 #define B_AX_LATENCY_CONTROL        BIT(12)
0359 #define B_AX_TXHCI_EN           BIT(11)
0360 #define B_AX_PCIE_MAX_TXDMA_MASK    GENMASK(10, 8)
0361 #define B_AX_TX_TRUNC_MODE      BIT(5)
0362 #define B_AX_RX_TRUNC_MODE      BIT(4)
0363 #define B_AX_RST_BDRAM          BIT(3)
0364 #define B_AX_DIS_RXDMA_PRE      BIT(2)
0365 
0366 #define R_AX_TXDMA_ADDR_H   0x10F0
0367 #define R_AX_RXDMA_ADDR_H   0x10F4
0368 
0369 #define R_AX_PCIE_DMA_STOP1 0x1010
0370 #define B_AX_STOP_PCIEIO        BIT(20)
0371 #define B_AX_STOP_WPDMA         BIT(19)
0372 #define B_AX_STOP_CH12          BIT(18)
0373 #define B_AX_STOP_CH9           BIT(17)
0374 #define B_AX_STOP_CH8           BIT(16)
0375 #define B_AX_STOP_ACH7          BIT(15)
0376 #define B_AX_STOP_ACH6          BIT(14)
0377 #define B_AX_STOP_ACH5          BIT(13)
0378 #define B_AX_STOP_ACH4          BIT(12)
0379 #define B_AX_STOP_ACH3          BIT(11)
0380 #define B_AX_STOP_ACH2          BIT(10)
0381 #define B_AX_STOP_ACH1          BIT(9)
0382 #define B_AX_STOP_ACH0          BIT(8)
0383 #define B_AX_STOP_RPQ           BIT(1)
0384 #define B_AX_STOP_RXQ           BIT(0)
0385 #define B_AX_TX_STOP1_ALL       GENMASK(18, 8)
0386 
0387 #define R_AX_PCIE_DMA_STOP2 0x1310
0388 #define B_AX_STOP_CH11          BIT(1)
0389 #define B_AX_STOP_CH10          BIT(0)
0390 #define B_AX_TX_STOP2_ALL       GENMASK(1, 0)
0391 
0392 #define R_AX_TXBD_RWPTR_CLR1    0x1014
0393 #define B_AX_CLR_CH12_IDX       BIT(10)
0394 #define B_AX_CLR_CH9_IDX        BIT(9)
0395 #define B_AX_CLR_CH8_IDX        BIT(8)
0396 #define B_AX_CLR_ACH7_IDX       BIT(7)
0397 #define B_AX_CLR_ACH6_IDX       BIT(6)
0398 #define B_AX_CLR_ACH5_IDX       BIT(5)
0399 #define B_AX_CLR_ACH4_IDX       BIT(4)
0400 #define B_AX_CLR_ACH3_IDX       BIT(3)
0401 #define B_AX_CLR_ACH2_IDX       BIT(2)
0402 #define B_AX_CLR_ACH1_IDX       BIT(1)
0403 #define B_AX_CLR_ACH0_IDX       BIT(0)
0404 #define B_AX_TXBD_CLR1_ALL      GENMASK(10, 0)
0405 
0406 #define R_AX_RXBD_RWPTR_CLR 0x1018
0407 #define B_AX_CLR_RPQ_IDX        BIT(1)
0408 #define B_AX_CLR_RXQ_IDX        BIT(0)
0409 #define B_AX_RXBD_CLR_ALL       GENMASK(1, 0)
0410 
0411 #define R_AX_TXBD_RWPTR_CLR2    0x1314
0412 #define B_AX_CLR_CH11_IDX       BIT(1)
0413 #define B_AX_CLR_CH10_IDX       BIT(0)
0414 #define B_AX_TXBD_CLR2_ALL      GENMASK(1, 0)
0415 
0416 #define R_AX_PCIE_DMA_BUSY1 0x101C
0417 #define B_AX_PCIEIO_RX_BUSY     BIT(22)
0418 #define B_AX_PCIEIO_TX_BUSY     BIT(21)
0419 #define B_AX_PCIEIO_BUSY        BIT(20)
0420 #define B_AX_WPDMA_BUSY         BIT(19)
0421 #define B_AX_CH12_BUSY          BIT(18)
0422 #define B_AX_CH9_BUSY           BIT(17)
0423 #define B_AX_CH8_BUSY           BIT(16)
0424 #define B_AX_ACH7_BUSY          BIT(15)
0425 #define B_AX_ACH6_BUSY          BIT(14)
0426 #define B_AX_ACH5_BUSY          BIT(13)
0427 #define B_AX_ACH4_BUSY          BIT(12)
0428 #define B_AX_ACH3_BUSY          BIT(11)
0429 #define B_AX_ACH2_BUSY          BIT(10)
0430 #define B_AX_ACH1_BUSY          BIT(9)
0431 #define B_AX_ACH0_BUSY          BIT(8)
0432 #define B_AX_RPQ_BUSY           BIT(1)
0433 #define B_AX_RXQ_BUSY           BIT(0)
0434 
0435 #define R_AX_PCIE_DMA_BUSY2 0x131C
0436 #define B_AX_CH11_BUSY          BIT(1)
0437 #define B_AX_CH10_BUSY          BIT(0)
0438 
0439 /* Configure */
0440 #define R_AX_PCIE_INIT_CFG2     0x1004
0441 #define B_AX_WD_ITVL_IDLE       GENMASK(27, 24)
0442 #define B_AX_WD_ITVL_ACT        GENMASK(19, 16)
0443 #define B_AX_PCIE_RX_APPLEN_MASK    GENMASK(13, 0)
0444 
0445 #define R_AX_PCIE_PS_CTRL       0x1008
0446 #define B_AX_L1OFF_PWR_OFF_EN       BIT(5)
0447 
0448 #define R_AX_INT_MIT_RX         0x10D4
0449 #define B_AX_RXMIT_RXP2_SEL     BIT(19)
0450 #define B_AX_RXMIT_RXP1_SEL     BIT(18)
0451 #define B_AX_RXTIMER_UNIT_MASK      GENMASK(17, 16)
0452 #define AX_RXTIMER_UNIT_64US        0
0453 #define AX_RXTIMER_UNIT_128US       1
0454 #define AX_RXTIMER_UNIT_256US       2
0455 #define AX_RXTIMER_UNIT_512US       3
0456 #define B_AX_RXCOUNTER_MATCH_MASK   GENMASK(15, 8)
0457 #define B_AX_RXTIMER_MATCH_MASK     GENMASK(7, 0)
0458 
0459 #define R_AX_DBG_ERR_FLAG       0x11C4
0460 #define B_AX_PCIE_RPQ_FULL      BIT(29)
0461 #define B_AX_PCIE_RXQ_FULL      BIT(28)
0462 #define B_AX_CPL_STATUS_MASK        GENMASK(27, 25)
0463 #define B_AX_RX_STUCK           BIT(22)
0464 #define B_AX_TX_STUCK           BIT(21)
0465 #define B_AX_PCIEDBG_TXERR0     BIT(16)
0466 #define B_AX_PCIE_RXP1_ERR0     BIT(4)
0467 #define B_AX_PCIE_TXBD_LEN0     BIT(1)
0468 #define B_AX_PCIE_TXBD_4KBOUD_LENERR    BIT(0)
0469 
0470 #define R_AX_TXBD_RWPTR_CLR2_V1     0x11C4
0471 #define B_AX_CLR_CH11_IDX       BIT(1)
0472 #define B_AX_CLR_CH10_IDX       BIT(0)
0473 
0474 #define R_AX_LBC_WATCHDOG       0x11D8
0475 #define B_AX_LBC_TIMER          GENMASK(7, 4)
0476 #define B_AX_LBC_FLAG           BIT(1)
0477 #define B_AX_LBC_EN         BIT(0)
0478 
0479 #define R_AX_RXBD_RWPTR_CLR_V1      0x1200
0480 #define B_AX_CLR_RPQ_IDX        BIT(1)
0481 #define B_AX_CLR_RXQ_IDX        BIT(0)
0482 
0483 #define R_AX_HAXI_EXP_CTRL      0x1204
0484 #define B_AX_MAX_TAG_NUM_V1_MASK    GENMASK(2, 0)
0485 
0486 #define R_AX_PCIE_EXP_CTRL      0x13F0
0487 #define B_AX_EN_CHKDSC_NO_RX_STUCK  BIT(20)
0488 #define B_AX_MAX_TAG_NUM        GENMASK(18, 16)
0489 #define B_AX_SIC_EN_FORCE_CLKREQ    BIT(4)
0490 
0491 #define R_AX_PCIE_RX_PREF_ADV       0x13F4
0492 #define B_AX_RXDMA_PREF_ADV_EN      BIT(0)
0493 
0494 #define R_AX_PCIE_HRPWM_V1      0x30C0
0495 #define R_AX_PCIE_CRPWM         0x30C4
0496 
0497 #define RTW89_PCI_TXBD_NUM_MAX      256
0498 #define RTW89_PCI_RXBD_NUM_MAX      256
0499 #define RTW89_PCI_TXWD_NUM_MAX      512
0500 #define RTW89_PCI_TXWD_PAGE_SIZE    128
0501 #define RTW89_PCI_ADDRINFO_MAX      4
0502 #define RTW89_PCI_RX_BUF_SIZE       11460
0503 
0504 #define RTW89_PCI_POLL_BDRAM_RST_CNT    100
0505 #define RTW89_PCI_MULTITAG      8
0506 
0507 /* PCIE CFG register */
0508 #define RTW89_PCIE_ASPM_CTRL        0x070F
0509 #define RTW89_L1DLY_MASK        GENMASK(5, 3)
0510 #define RTW89_L0DLY_MASK        GENMASK(2, 0)
0511 #define RTW89_PCIE_TIMER_CTRL       0x0718
0512 #define RTW89_PCIE_BIT_L1SUB        BIT(5)
0513 #define RTW89_PCIE_L1_CTRL      0x0719
0514 #define RTW89_PCIE_BIT_CLK      BIT(4)
0515 #define RTW89_PCIE_BIT_L1       BIT(3)
0516 #define RTW89_PCIE_CLK_CTRL     0x0725
0517 #define RTW89_PCIE_RST_MSTATE       0x0B48
0518 #define RTW89_PCIE_BIT_CFG_RST_MSTATE   BIT(0)
0519 #define RTW89_PCIE_PHY_RATE     0x82
0520 #define RTW89_PCIE_PHY_RATE_MASK    GENMASK(1, 0)
0521 #define INTF_INTGRA_MINREF_V1   90
0522 #define INTF_INTGRA_HOSTREF_V1  100
0523 
0524 enum rtw89_pcie_phy {
0525     PCIE_PHY_GEN1,
0526     PCIE_PHY_GEN2,
0527     PCIE_PHY_GEN1_UNDEFINE = 0x7F,
0528 };
0529 
0530 enum mac_ax_func_sw {
0531     MAC_AX_FUNC_DIS,
0532     MAC_AX_FUNC_EN,
0533 };
0534 
0535 enum rtw89_pcie_l0sdly {
0536     PCIE_L0SDLY_1US = 0,
0537     PCIE_L0SDLY_2US = 1,
0538     PCIE_L0SDLY_3US = 2,
0539     PCIE_L0SDLY_4US = 3,
0540     PCIE_L0SDLY_5US = 4,
0541     PCIE_L0SDLY_6US = 5,
0542     PCIE_L0SDLY_7US = 6,
0543 };
0544 
0545 enum rtw89_pcie_l1dly {
0546     PCIE_L1DLY_16US = 4,
0547     PCIE_L1DLY_32US = 5,
0548     PCIE_L1DLY_64US = 6,
0549     PCIE_L1DLY_HW_INFI = 7,
0550 };
0551 
0552 enum rtw89_pcie_clkdly_hw {
0553     PCIE_CLKDLY_HW_0 = 0,
0554     PCIE_CLKDLY_HW_30US = 0x1,
0555     PCIE_CLKDLY_HW_50US = 0x2,
0556     PCIE_CLKDLY_HW_100US = 0x3,
0557     PCIE_CLKDLY_HW_150US = 0x4,
0558     PCIE_CLKDLY_HW_200US = 0x5,
0559 };
0560 
0561 enum mac_ax_bd_trunc_mode {
0562     MAC_AX_BD_NORM,
0563     MAC_AX_BD_TRUNC,
0564     MAC_AX_BD_DEF = 0xFE
0565 };
0566 
0567 enum mac_ax_rxbd_mode {
0568     MAC_AX_RXBD_PKT,
0569     MAC_AX_RXBD_SEP,
0570     MAC_AX_RXBD_DEF = 0xFE
0571 };
0572 
0573 enum mac_ax_tag_mode {
0574     MAC_AX_TAG_SGL,
0575     MAC_AX_TAG_MULTI,
0576     MAC_AX_TAG_DEF = 0xFE
0577 };
0578 
0579 enum mac_ax_tx_burst {
0580     MAC_AX_TX_BURST_16B = 0,
0581     MAC_AX_TX_BURST_32B = 1,
0582     MAC_AX_TX_BURST_64B = 2,
0583     MAC_AX_TX_BURST_V1_64B = 0,
0584     MAC_AX_TX_BURST_128B = 3,
0585     MAC_AX_TX_BURST_V1_128B = 1,
0586     MAC_AX_TX_BURST_256B = 4,
0587     MAC_AX_TX_BURST_V1_256B = 2,
0588     MAC_AX_TX_BURST_512B = 5,
0589     MAC_AX_TX_BURST_1024B = 6,
0590     MAC_AX_TX_BURST_2048B = 7,
0591     MAC_AX_TX_BURST_DEF = 0xFE
0592 };
0593 
0594 enum mac_ax_rx_burst {
0595     MAC_AX_RX_BURST_16B = 0,
0596     MAC_AX_RX_BURST_32B = 1,
0597     MAC_AX_RX_BURST_64B = 2,
0598     MAC_AX_RX_BURST_V1_64B = 0,
0599     MAC_AX_RX_BURST_128B = 3,
0600     MAC_AX_RX_BURST_V1_128B = 1,
0601     MAC_AX_RX_BURST_V1_256B = 0,
0602     MAC_AX_RX_BURST_DEF = 0xFE
0603 };
0604 
0605 enum mac_ax_wd_dma_intvl {
0606     MAC_AX_WD_DMA_INTVL_0S,
0607     MAC_AX_WD_DMA_INTVL_256NS,
0608     MAC_AX_WD_DMA_INTVL_512NS,
0609     MAC_AX_WD_DMA_INTVL_768NS,
0610     MAC_AX_WD_DMA_INTVL_1US,
0611     MAC_AX_WD_DMA_INTVL_1_5US,
0612     MAC_AX_WD_DMA_INTVL_2US,
0613     MAC_AX_WD_DMA_INTVL_4US,
0614     MAC_AX_WD_DMA_INTVL_8US,
0615     MAC_AX_WD_DMA_INTVL_16US,
0616     MAC_AX_WD_DMA_INTVL_DEF = 0xFE
0617 };
0618 
0619 enum mac_ax_multi_tag_num {
0620     MAC_AX_TAG_NUM_1,
0621     MAC_AX_TAG_NUM_2,
0622     MAC_AX_TAG_NUM_3,
0623     MAC_AX_TAG_NUM_4,
0624     MAC_AX_TAG_NUM_5,
0625     MAC_AX_TAG_NUM_6,
0626     MAC_AX_TAG_NUM_7,
0627     MAC_AX_TAG_NUM_8,
0628     MAC_AX_TAG_NUM_DEF = 0xFE
0629 };
0630 
0631 enum mac_ax_lbc_tmr {
0632     MAC_AX_LBC_TMR_8US = 0,
0633     MAC_AX_LBC_TMR_16US,
0634     MAC_AX_LBC_TMR_32US,
0635     MAC_AX_LBC_TMR_64US,
0636     MAC_AX_LBC_TMR_128US,
0637     MAC_AX_LBC_TMR_256US,
0638     MAC_AX_LBC_TMR_512US,
0639     MAC_AX_LBC_TMR_1MS,
0640     MAC_AX_LBC_TMR_2MS,
0641     MAC_AX_LBC_TMR_4MS,
0642     MAC_AX_LBC_TMR_8MS,
0643     MAC_AX_LBC_TMR_DEF = 0xFE
0644 };
0645 
0646 enum mac_ax_pcie_func_ctrl {
0647     MAC_AX_PCIE_DISABLE = 0,
0648     MAC_AX_PCIE_ENABLE = 1,
0649     MAC_AX_PCIE_DEFAULT = 0xFE,
0650     MAC_AX_PCIE_IGNORE = 0xFF
0651 };
0652 
0653 enum mac_ax_io_rcy_tmr {
0654     MAC_AX_IO_RCY_ANA_TMR_2MS = 24000,
0655     MAC_AX_IO_RCY_ANA_TMR_4MS = 48000,
0656     MAC_AX_IO_RCY_ANA_TMR_6MS = 72000,
0657     MAC_AX_IO_RCY_ANA_TMR_DEF = 0xFE
0658 };
0659 
0660 enum rtw89_pci_intr_mask_cfg {
0661     RTW89_PCI_INTR_MASK_RESET,
0662     RTW89_PCI_INTR_MASK_NORMAL,
0663     RTW89_PCI_INTR_MASK_LOW_POWER,
0664     RTW89_PCI_INTR_MASK_RECOVERY_START,
0665     RTW89_PCI_INTR_MASK_RECOVERY_COMPLETE,
0666 };
0667 
0668 struct rtw89_pci_isrs;
0669 struct rtw89_pci;
0670 
0671 struct rtw89_pci_bd_idx_addr {
0672     u32 tx_bd_addrs[RTW89_TXCH_NUM];
0673     u32 rx_bd_addrs[RTW89_RXCH_NUM];
0674 };
0675 
0676 struct rtw89_pci_ch_dma_addr {
0677     u32 num;
0678     u32 idx;
0679     u32 bdram;
0680     u32 desa_l;
0681     u32 desa_h;
0682 };
0683 
0684 struct rtw89_pci_ch_dma_addr_set {
0685     struct rtw89_pci_ch_dma_addr tx[RTW89_TXCH_NUM];
0686     struct rtw89_pci_ch_dma_addr rx[RTW89_RXCH_NUM];
0687 };
0688 
0689 struct rtw89_pci_info {
0690     enum mac_ax_bd_trunc_mode txbd_trunc_mode;
0691     enum mac_ax_bd_trunc_mode rxbd_trunc_mode;
0692     enum mac_ax_rxbd_mode rxbd_mode;
0693     enum mac_ax_tag_mode tag_mode;
0694     enum mac_ax_tx_burst tx_burst;
0695     enum mac_ax_rx_burst rx_burst;
0696     enum mac_ax_wd_dma_intvl wd_dma_idle_intvl;
0697     enum mac_ax_wd_dma_intvl wd_dma_act_intvl;
0698     enum mac_ax_multi_tag_num multi_tag_num;
0699     enum mac_ax_pcie_func_ctrl lbc_en;
0700     enum mac_ax_lbc_tmr lbc_tmr;
0701     enum mac_ax_pcie_func_ctrl autok_en;
0702     enum mac_ax_pcie_func_ctrl io_rcy_en;
0703     enum mac_ax_io_rcy_tmr io_rcy_tmr;
0704 
0705     u32 init_cfg_reg;
0706     u32 txhci_en_bit;
0707     u32 rxhci_en_bit;
0708     u32 rxbd_mode_bit;
0709     u32 exp_ctrl_reg;
0710     u32 max_tag_num_mask;
0711     u32 rxbd_rwptr_clr_reg;
0712     u32 txbd_rwptr_clr2_reg;
0713     u32 dma_stop1_reg;
0714     u32 dma_stop2_reg;
0715     u32 dma_busy1_reg;
0716     u32 dma_busy2_reg;
0717     u32 dma_busy3_reg;
0718 
0719     u32 rpwm_addr;
0720     u32 cpwm_addr;
0721     const struct rtw89_pci_bd_idx_addr *bd_idx_addr_low_power;
0722     const struct rtw89_pci_ch_dma_addr_set *dma_addr_set;
0723 
0724     int (*ltr_set)(struct rtw89_dev *rtwdev, bool en);
0725     u32 (*fill_txaddr_info)(struct rtw89_dev *rtwdev,
0726                 void *txaddr_info_addr, u32 total_len,
0727                 dma_addr_t dma, u8 *add_info_nr);
0728     void (*config_intr_mask)(struct rtw89_dev *rtwdev);
0729     void (*enable_intr)(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci);
0730     void (*disable_intr)(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci);
0731     void (*recognize_intrs)(struct rtw89_dev *rtwdev,
0732                 struct rtw89_pci *rtwpci,
0733                 struct rtw89_pci_isrs *isrs);
0734 };
0735 
0736 struct rtw89_pci_bd_ram {
0737     u8 start_idx;
0738     u8 max_num;
0739     u8 min_num;
0740 };
0741 
0742 struct rtw89_pci_tx_data {
0743     dma_addr_t dma;
0744 };
0745 
0746 struct rtw89_pci_rx_info {
0747     dma_addr_t dma;
0748     u32 fs:1, ls:1, tag:11, len:14;
0749 };
0750 
0751 #define RTW89_PCI_TXBD_OPTION_LS    BIT(14)
0752 
0753 struct rtw89_pci_tx_bd_32 {
0754     __le16 length;
0755     __le16 option;
0756     __le32 dma;
0757 } __packed;
0758 
0759 #define RTW89_PCI_TXWP_VALID        BIT(15)
0760 
0761 struct rtw89_pci_tx_wp_info {
0762     __le16 seq0;
0763     __le16 seq1;
0764     __le16 seq2;
0765     __le16 seq3;
0766 } __packed;
0767 
0768 #define RTW89_PCI_ADDR_MSDU_LS      BIT(15)
0769 #define RTW89_PCI_ADDR_LS       BIT(14)
0770 #define RTW89_PCI_ADDR_HIGH(a)      (((a) << 6) & GENMASK(13, 6))
0771 #define RTW89_PCI_ADDR_NUM(x)       ((x) & GENMASK(5, 0))
0772 
0773 struct rtw89_pci_tx_addr_info_32 {
0774     __le16 length;
0775     __le16 option;
0776     __le32 dma;
0777 } __packed;
0778 
0779 #define RTW89_TXADDR_INFO_NR_V1     10
0780 
0781 struct rtw89_pci_tx_addr_info_32_v1 {
0782     __le16 length_opt;
0783 #define B_PCIADDR_LEN_V1_MASK       GENMASK(10, 0)
0784 #define B_PCIADDR_HIGH_SEL_V1_MASK  GENMASK(14, 11)
0785 #define B_PCIADDR_LS_V1_MASK        BIT(15)
0786 #define TXADDR_INFO_LENTHG_V1_MAX   ALIGN_DOWN(BIT(11) - 1, 4)
0787     __le16 dma_low_lsb;
0788     __le16 dma_low_msb;
0789 } __packed;
0790 
0791 #define RTW89_PCI_RPP_POLLUTED      BIT(31)
0792 #define RTW89_PCI_RPP_SEQ       GENMASK(30, 16)
0793 #define RTW89_PCI_RPP_TX_STATUS     GENMASK(15, 13)
0794 #define RTW89_TX_DONE           0x0
0795 #define RTW89_TX_RETRY_LIMIT        0x1
0796 #define RTW89_TX_LIFE_TIME      0x2
0797 #define RTW89_TX_MACID_DROP     0x3
0798 #define RTW89_PCI_RPP_QSEL      GENMASK(12, 8)
0799 #define RTW89_PCI_RPP_MACID     GENMASK(7, 0)
0800 
0801 struct rtw89_pci_rpp_fmt {
0802     __le32 dword;
0803 } __packed;
0804 
0805 struct rtw89_pci_rx_bd_32 {
0806     __le16 buf_size;
0807     __le16 rsvd;
0808     __le32 dma;
0809 } __packed;
0810 
0811 #define RTW89_PCI_RXBD_FS       BIT(15)
0812 #define RTW89_PCI_RXBD_LS       BIT(14)
0813 #define RTW89_PCI_RXBD_WRITE_SIZE   GENMASK(13, 0)
0814 #define RTW89_PCI_RXBD_TAG      GENMASK(28, 16)
0815 
0816 struct rtw89_pci_rxbd_info {
0817     __le32 dword;
0818 };
0819 
0820 struct rtw89_pci_tx_wd {
0821     struct list_head list;
0822     struct sk_buff_head queue;
0823 
0824     void *vaddr;
0825     dma_addr_t paddr;
0826     u32 len;
0827     u32 seq;
0828 };
0829 
0830 struct rtw89_pci_dma_ring {
0831     void *head;
0832     u8 desc_size;
0833     dma_addr_t dma;
0834 
0835     struct rtw89_pci_ch_dma_addr addr;
0836 
0837     u32 len;
0838     u32 wp; /* host idx */
0839     u32 rp; /* hw idx */
0840 };
0841 
0842 struct rtw89_pci_tx_wd_ring {
0843     void *head;
0844     dma_addr_t dma;
0845 
0846     struct rtw89_pci_tx_wd pages[RTW89_PCI_TXWD_NUM_MAX];
0847     struct list_head free_pages;
0848 
0849     u32 page_size;
0850     u32 page_num;
0851     u32 curr_num;
0852 };
0853 
0854 #define RTW89_RX_TAG_MAX        0x1fff
0855 
0856 struct rtw89_pci_tx_ring {
0857     struct rtw89_pci_tx_wd_ring wd_ring;
0858     struct rtw89_pci_dma_ring bd_ring;
0859     struct list_head busy_pages;
0860     u8 txch;
0861     bool dma_enabled;
0862     u16 tag; /* range from 0x0001 ~ 0x1fff */
0863 
0864     u64 tx_cnt;
0865     u64 tx_acked;
0866     u64 tx_retry_lmt;
0867     u64 tx_life_time;
0868     u64 tx_mac_id_drop;
0869 };
0870 
0871 struct rtw89_pci_rx_ring {
0872     struct rtw89_pci_dma_ring bd_ring;
0873     struct sk_buff *buf[RTW89_PCI_RXBD_NUM_MAX];
0874     u32 buf_sz;
0875     struct sk_buff *diliver_skb;
0876     struct rtw89_rx_desc_info diliver_desc;
0877 };
0878 
0879 struct rtw89_pci_isrs {
0880     u32 ind_isrs;
0881     u32 halt_c2h_isrs;
0882     u32 isrs[2];
0883 };
0884 
0885 struct rtw89_pci {
0886     struct pci_dev *pdev;
0887 
0888     /* protect HW irq related registers */
0889     spinlock_t irq_lock;
0890     /* protect TRX resources (exclude RXQ) */
0891     spinlock_t trx_lock;
0892     bool running;
0893     bool low_power;
0894     bool under_recovery;
0895     struct rtw89_pci_tx_ring tx_rings[RTW89_TXCH_NUM];
0896     struct rtw89_pci_rx_ring rx_rings[RTW89_RXCH_NUM];
0897     struct sk_buff_head h2c_queue;
0898     struct sk_buff_head h2c_release_queue;
0899     DECLARE_BITMAP(kick_map, RTW89_TXCH_NUM);
0900 
0901     u32 ind_intrs;
0902     u32 halt_c2h_intrs;
0903     u32 intrs[2];
0904     void __iomem *mmap;
0905 };
0906 
0907 static inline struct rtw89_pci_rx_info *RTW89_PCI_RX_SKB_CB(struct sk_buff *skb)
0908 {
0909     struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
0910 
0911     BUILD_BUG_ON(sizeof(struct rtw89_pci_tx_data) >
0912              sizeof(info->status.status_driver_data));
0913 
0914     return (struct rtw89_pci_rx_info *)skb->cb;
0915 }
0916 
0917 static inline struct rtw89_pci_rx_bd_32 *
0918 RTW89_PCI_RX_BD(struct rtw89_pci_rx_ring *rx_ring, u32 idx)
0919 {
0920     struct rtw89_pci_dma_ring *bd_ring = &rx_ring->bd_ring;
0921     u8 *head = bd_ring->head;
0922     u32 desc_size = bd_ring->desc_size;
0923     u32 offset = idx * desc_size;
0924 
0925     return (struct rtw89_pci_rx_bd_32 *)(head + offset);
0926 }
0927 
0928 static inline void
0929 rtw89_pci_rxbd_increase(struct rtw89_pci_rx_ring *rx_ring, u32 cnt)
0930 {
0931     struct rtw89_pci_dma_ring *bd_ring = &rx_ring->bd_ring;
0932 
0933     bd_ring->wp += cnt;
0934 
0935     if (bd_ring->wp >= bd_ring->len)
0936         bd_ring->wp -= bd_ring->len;
0937 }
0938 
0939 static inline struct rtw89_pci_tx_data *RTW89_PCI_TX_SKB_CB(struct sk_buff *skb)
0940 {
0941     struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
0942 
0943     return (struct rtw89_pci_tx_data *)info->status.status_driver_data;
0944 }
0945 
0946 static inline struct rtw89_pci_tx_bd_32 *
0947 rtw89_pci_get_next_txbd(struct rtw89_pci_tx_ring *tx_ring)
0948 {
0949     struct rtw89_pci_dma_ring *bd_ring = &tx_ring->bd_ring;
0950     struct rtw89_pci_tx_bd_32 *tx_bd, *head;
0951 
0952     head = bd_ring->head;
0953     tx_bd = head + bd_ring->wp;
0954 
0955     return tx_bd;
0956 }
0957 
0958 static inline struct rtw89_pci_tx_wd *
0959 rtw89_pci_dequeue_txwd(struct rtw89_pci_tx_ring *tx_ring)
0960 {
0961     struct rtw89_pci_tx_wd_ring *wd_ring = &tx_ring->wd_ring;
0962     struct rtw89_pci_tx_wd *txwd;
0963 
0964     txwd = list_first_entry_or_null(&wd_ring->free_pages,
0965                     struct rtw89_pci_tx_wd, list);
0966     if (!txwd)
0967         return NULL;
0968 
0969     list_del_init(&txwd->list);
0970     txwd->len = 0;
0971     wd_ring->curr_num--;
0972 
0973     return txwd;
0974 }
0975 
0976 static inline void
0977 rtw89_pci_enqueue_txwd(struct rtw89_pci_tx_ring *tx_ring,
0978                struct rtw89_pci_tx_wd *txwd)
0979 {
0980     struct rtw89_pci_tx_wd_ring *wd_ring = &tx_ring->wd_ring;
0981 
0982     memset(txwd->vaddr, 0, wd_ring->page_size);
0983     list_add_tail(&txwd->list, &wd_ring->free_pages);
0984     wd_ring->curr_num++;
0985 }
0986 
0987 static inline bool rtw89_pci_ltr_is_err_reg_val(u32 val)
0988 {
0989     return val == 0xffffffff || val == 0xeaeaeaea;
0990 }
0991 
0992 extern const struct dev_pm_ops rtw89_pm_ops;
0993 extern const struct rtw89_pci_ch_dma_addr_set rtw89_pci_ch_dma_addr_set;
0994 extern const struct rtw89_pci_ch_dma_addr_set rtw89_pci_ch_dma_addr_set_v1;
0995 
0996 struct pci_device_id;
0997 
0998 int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id);
0999 void rtw89_pci_remove(struct pci_dev *pdev);
1000 int rtw89_pci_ltr_set(struct rtw89_dev *rtwdev, bool en);
1001 int rtw89_pci_ltr_set_v1(struct rtw89_dev *rtwdev, bool en);
1002 u32 rtw89_pci_fill_txaddr_info(struct rtw89_dev *rtwdev,
1003                    void *txaddr_info_addr, u32 total_len,
1004                    dma_addr_t dma, u8 *add_info_nr);
1005 u32 rtw89_pci_fill_txaddr_info_v1(struct rtw89_dev *rtwdev,
1006                   void *txaddr_info_addr, u32 total_len,
1007                   dma_addr_t dma, u8 *add_info_nr);
1008 void rtw89_pci_config_intr_mask(struct rtw89_dev *rtwdev);
1009 void rtw89_pci_config_intr_mask_v1(struct rtw89_dev *rtwdev);
1010 void rtw89_pci_enable_intr(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci);
1011 void rtw89_pci_disable_intr(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci);
1012 void rtw89_pci_enable_intr_v1(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci);
1013 void rtw89_pci_disable_intr_v1(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci);
1014 void rtw89_pci_recognize_intrs(struct rtw89_dev *rtwdev,
1015                    struct rtw89_pci *rtwpci,
1016                    struct rtw89_pci_isrs *isrs);
1017 void rtw89_pci_recognize_intrs_v1(struct rtw89_dev *rtwdev,
1018                   struct rtw89_pci *rtwpci,
1019                   struct rtw89_pci_isrs *isrs);
1020 
1021 static inline
1022 u32 rtw89_chip_fill_txaddr_info(struct rtw89_dev *rtwdev,
1023                 void *txaddr_info_addr, u32 total_len,
1024                 dma_addr_t dma, u8 *add_info_nr)
1025 {
1026     const struct rtw89_pci_info *info = rtwdev->pci_info;
1027 
1028     return info->fill_txaddr_info(rtwdev, txaddr_info_addr, total_len,
1029                       dma, add_info_nr);
1030 }
1031 
1032 static inline void rtw89_chip_config_intr_mask(struct rtw89_dev *rtwdev,
1033                            enum rtw89_pci_intr_mask_cfg cfg)
1034 {
1035     struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
1036     const struct rtw89_pci_info *info = rtwdev->pci_info;
1037 
1038     switch (cfg) {
1039     default:
1040     case RTW89_PCI_INTR_MASK_RESET:
1041         rtwpci->low_power = false;
1042         rtwpci->under_recovery = false;
1043         break;
1044     case RTW89_PCI_INTR_MASK_NORMAL:
1045         rtwpci->low_power = false;
1046         break;
1047     case RTW89_PCI_INTR_MASK_LOW_POWER:
1048         rtwpci->low_power = true;
1049         break;
1050     case RTW89_PCI_INTR_MASK_RECOVERY_START:
1051         rtwpci->under_recovery = true;
1052         break;
1053     case RTW89_PCI_INTR_MASK_RECOVERY_COMPLETE:
1054         rtwpci->under_recovery = false;
1055         break;
1056     }
1057 
1058     rtw89_debug(rtwdev, RTW89_DBG_HCI,
1059             "Configure PCI interrupt mask mode low_power=%d under_recovery=%d\n",
1060             rtwpci->low_power, rtwpci->under_recovery);
1061 
1062     info->config_intr_mask(rtwdev);
1063 }
1064 
1065 static inline
1066 void rtw89_chip_enable_intr(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci)
1067 {
1068     const struct rtw89_pci_info *info = rtwdev->pci_info;
1069 
1070     info->enable_intr(rtwdev, rtwpci);
1071 }
1072 
1073 static inline
1074 void rtw89_chip_disable_intr(struct rtw89_dev *rtwdev, struct rtw89_pci *rtwpci)
1075 {
1076     const struct rtw89_pci_info *info = rtwdev->pci_info;
1077 
1078     info->disable_intr(rtwdev, rtwpci);
1079 }
1080 
1081 static inline
1082 void rtw89_chip_recognize_intrs(struct rtw89_dev *rtwdev,
1083                 struct rtw89_pci *rtwpci,
1084                 struct rtw89_pci_isrs *isrs)
1085 {
1086     const struct rtw89_pci_info *info = rtwdev->pci_info;
1087 
1088     info->recognize_intrs(rtwdev, rtwpci, isrs);
1089 }
1090 
1091 #endif