1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * This file is provided under a GPLv2 license. When using or 3*4882a593Smuzhiyun * redistributing this file, you may do so under that license. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * GPL LICENSE SUMMARY 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright (C) 2016-2018 T-Platforms JSC All Rights Reserved. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 10*4882a593Smuzhiyun * under the terms and conditions of the GNU General Public License, 11*4882a593Smuzhiyun * version 2, as published by the Free Software Foundation. 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but 14*4882a593Smuzhiyun * WITHOUT ANY WARRANTY; without even the implied warranty of 15*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 16*4882a593Smuzhiyun * Public License for more details. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * You should have received a copy of the GNU General Public License along 19*4882a593Smuzhiyun * with this program; if not, one can be found http://www.gnu.org/licenses/. 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * The full GNU General Public License is included in this distribution in 22*4882a593Smuzhiyun * the file called "COPYING". 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25*4882a593Smuzhiyun * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26*4882a593Smuzhiyun * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 27*4882a593Smuzhiyun * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 28*4882a593Smuzhiyun * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29*4882a593Smuzhiyun * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 30*4882a593Smuzhiyun * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 31*4882a593Smuzhiyun * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 32*4882a593Smuzhiyun * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 34*4882a593Smuzhiyun * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35*4882a593Smuzhiyun * 36*4882a593Smuzhiyun * IDT PCIe-switch NTB Linux driver 37*4882a593Smuzhiyun * 38*4882a593Smuzhiyun * Contact Information: 39*4882a593Smuzhiyun * Serge Semin <fancer.lancer@gmail.com>, <Sergey.Semin@t-platforms.ru> 40*4882a593Smuzhiyun */ 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #ifndef NTB_HW_IDT_H 43*4882a593Smuzhiyun #define NTB_HW_IDT_H 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #include <linux/types.h> 46*4882a593Smuzhiyun #include <linux/pci.h> 47*4882a593Smuzhiyun #include <linux/pci_ids.h> 48*4882a593Smuzhiyun #include <linux/interrupt.h> 49*4882a593Smuzhiyun #include <linux/spinlock.h> 50*4882a593Smuzhiyun #include <linux/mutex.h> 51*4882a593Smuzhiyun #include <linux/ntb.h> 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* 54*4882a593Smuzhiyun * Macro is used to create the struct pci_device_id that matches 55*4882a593Smuzhiyun * the supported IDT PCIe-switches 56*4882a593Smuzhiyun * @devname: Capitalized name of the particular device 57*4882a593Smuzhiyun * @data: Variable passed to the driver of the particular device 58*4882a593Smuzhiyun */ 59*4882a593Smuzhiyun #define IDT_PCI_DEVICE_IDS(devname, data) \ 60*4882a593Smuzhiyun .vendor = PCI_VENDOR_ID_IDT, .device = PCI_DEVICE_ID_IDT_##devname, \ 61*4882a593Smuzhiyun .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \ 62*4882a593Smuzhiyun .class = (PCI_CLASS_BRIDGE_OTHER << 8), .class_mask = (0xFFFF00), \ 63*4882a593Smuzhiyun .driver_data = (kernel_ulong_t)&data 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* 66*4882a593Smuzhiyun * IDT PCIe-switches device IDs 67*4882a593Smuzhiyun */ 68*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES24NT6AG2 0x8091 69*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES32NT8AG2 0x808F 70*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES32NT8BG2 0x8088 71*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES12NT12G2 0x8092 72*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES16NT16G2 0x8090 73*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES24NT24G2 0x808E 74*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES32NT24AG2 0x808C 75*4882a593Smuzhiyun #define PCI_DEVICE_ID_IDT_89HPES32NT24BG2 0x808A 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* 78*4882a593Smuzhiyun * NT-function Configuration Space registers 79*4882a593Smuzhiyun * NOTE 1) The IDT PCIe-switch internal data is little-endian 80*4882a593Smuzhiyun * so it must be taken into account in the driver 81*4882a593Smuzhiyun * internals. 82*4882a593Smuzhiyun * 2) Additionally the registers should be accessed either 83*4882a593Smuzhiyun * with byte-enables corresponding to their native size or 84*4882a593Smuzhiyun * the size of one DWORD 85*4882a593Smuzhiyun * 86*4882a593Smuzhiyun * So to simplify the driver code, there is only DWORD-sized read/write 87*4882a593Smuzhiyun * operations utilized. 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun /* PCI Express Configuration Space */ 90*4882a593Smuzhiyun /* PCI Express command/status register (DWORD) */ 91*4882a593Smuzhiyun #define IDT_NT_PCICMDSTS 0x00004U 92*4882a593Smuzhiyun /* PCI Express Device Capabilities (DWORD) */ 93*4882a593Smuzhiyun #define IDT_NT_PCIEDCAP 0x00044U 94*4882a593Smuzhiyun /* PCI Express Device Control/Status (WORD+WORD) */ 95*4882a593Smuzhiyun #define IDT_NT_PCIEDCTLSTS 0x00048U 96*4882a593Smuzhiyun /* PCI Express Link Capabilities (DWORD) */ 97*4882a593Smuzhiyun #define IDT_NT_PCIELCAP 0x0004CU 98*4882a593Smuzhiyun /* PCI Express Link Control/Status (WORD+WORD) */ 99*4882a593Smuzhiyun #define IDT_NT_PCIELCTLSTS 0x00050U 100*4882a593Smuzhiyun /* PCI Express Device Capabilities 2 (DWORD) */ 101*4882a593Smuzhiyun #define IDT_NT_PCIEDCAP2 0x00064U 102*4882a593Smuzhiyun /* PCI Express Device Control 2 (WORD+WORD) */ 103*4882a593Smuzhiyun #define IDT_NT_PCIEDCTL2 0x00068U 104*4882a593Smuzhiyun /* PCI Power Management Control and Status (DWORD) */ 105*4882a593Smuzhiyun #define IDT_NT_PMCSR 0x000C4U 106*4882a593Smuzhiyun /*==========================================*/ 107*4882a593Smuzhiyun /* IDT Proprietary NT-port-specific registers */ 108*4882a593Smuzhiyun /* NT-function main control registers */ 109*4882a593Smuzhiyun /* NT Endpoint Control (DWORD) */ 110*4882a593Smuzhiyun #define IDT_NT_NTCTL 0x00400U 111*4882a593Smuzhiyun /* NT Endpoint Interrupt Status/Mask (DWORD) */ 112*4882a593Smuzhiyun #define IDT_NT_NTINTSTS 0x00404U 113*4882a593Smuzhiyun #define IDT_NT_NTINTMSK 0x00408U 114*4882a593Smuzhiyun /* NT Endpoint Signal Data (DWORD) */ 115*4882a593Smuzhiyun #define IDT_NT_NTSDATA 0x0040CU 116*4882a593Smuzhiyun /* NT Endpoint Global Signal (DWORD) */ 117*4882a593Smuzhiyun #define IDT_NT_NTGSIGNAL 0x00410U 118*4882a593Smuzhiyun /* Internal Error Reporting Mask 0/1 (DWORD) */ 119*4882a593Smuzhiyun #define IDT_NT_NTIERRORMSK0 0x00414U 120*4882a593Smuzhiyun #define IDT_NT_NTIERRORMSK1 0x00418U 121*4882a593Smuzhiyun /* Doorbel registers */ 122*4882a593Smuzhiyun /* NT Outbound Doorbell Set (DWORD) */ 123*4882a593Smuzhiyun #define IDT_NT_OUTDBELLSET 0x00420U 124*4882a593Smuzhiyun /* NT Inbound Doorbell Status/Mask (DWORD) */ 125*4882a593Smuzhiyun #define IDT_NT_INDBELLSTS 0x00428U 126*4882a593Smuzhiyun #define IDT_NT_INDBELLMSK 0x0042CU 127*4882a593Smuzhiyun /* Message registers */ 128*4882a593Smuzhiyun /* Outbound Message N (DWORD) */ 129*4882a593Smuzhiyun #define IDT_NT_OUTMSG0 0x00430U 130*4882a593Smuzhiyun #define IDT_NT_OUTMSG1 0x00434U 131*4882a593Smuzhiyun #define IDT_NT_OUTMSG2 0x00438U 132*4882a593Smuzhiyun #define IDT_NT_OUTMSG3 0x0043CU 133*4882a593Smuzhiyun /* Inbound Message N (DWORD) */ 134*4882a593Smuzhiyun #define IDT_NT_INMSG0 0x00440U 135*4882a593Smuzhiyun #define IDT_NT_INMSG1 0x00444U 136*4882a593Smuzhiyun #define IDT_NT_INMSG2 0x00448U 137*4882a593Smuzhiyun #define IDT_NT_INMSG3 0x0044CU 138*4882a593Smuzhiyun /* Inbound Message Source N (DWORD) */ 139*4882a593Smuzhiyun #define IDT_NT_INMSGSRC0 0x00450U 140*4882a593Smuzhiyun #define IDT_NT_INMSGSRC1 0x00454U 141*4882a593Smuzhiyun #define IDT_NT_INMSGSRC2 0x00458U 142*4882a593Smuzhiyun #define IDT_NT_INMSGSRC3 0x0045CU 143*4882a593Smuzhiyun /* Message Status (DWORD) */ 144*4882a593Smuzhiyun #define IDT_NT_MSGSTS 0x00460U 145*4882a593Smuzhiyun /* Message Status Mask (DWORD) */ 146*4882a593Smuzhiyun #define IDT_NT_MSGSTSMSK 0x00464U 147*4882a593Smuzhiyun /* BAR-setup registers */ 148*4882a593Smuzhiyun /* BAR N Setup/Limit Address/Lower and Upper Translated Base Address (DWORD) */ 149*4882a593Smuzhiyun #define IDT_NT_BARSETUP0 0x00470U 150*4882a593Smuzhiyun #define IDT_NT_BARLIMIT0 0x00474U 151*4882a593Smuzhiyun #define IDT_NT_BARLTBASE0 0x00478U 152*4882a593Smuzhiyun #define IDT_NT_BARUTBASE0 0x0047CU 153*4882a593Smuzhiyun #define IDT_NT_BARSETUP1 0x00480U 154*4882a593Smuzhiyun #define IDT_NT_BARLIMIT1 0x00484U 155*4882a593Smuzhiyun #define IDT_NT_BARLTBASE1 0x00488U 156*4882a593Smuzhiyun #define IDT_NT_BARUTBASE1 0x0048CU 157*4882a593Smuzhiyun #define IDT_NT_BARSETUP2 0x00490U 158*4882a593Smuzhiyun #define IDT_NT_BARLIMIT2 0x00494U 159*4882a593Smuzhiyun #define IDT_NT_BARLTBASE2 0x00498U 160*4882a593Smuzhiyun #define IDT_NT_BARUTBASE2 0x0049CU 161*4882a593Smuzhiyun #define IDT_NT_BARSETUP3 0x004A0U 162*4882a593Smuzhiyun #define IDT_NT_BARLIMIT3 0x004A4U 163*4882a593Smuzhiyun #define IDT_NT_BARLTBASE3 0x004A8U 164*4882a593Smuzhiyun #define IDT_NT_BARUTBASE3 0x004ACU 165*4882a593Smuzhiyun #define IDT_NT_BARSETUP4 0x004B0U 166*4882a593Smuzhiyun #define IDT_NT_BARLIMIT4 0x004B4U 167*4882a593Smuzhiyun #define IDT_NT_BARLTBASE4 0x004B8U 168*4882a593Smuzhiyun #define IDT_NT_BARUTBASE4 0x004BCU 169*4882a593Smuzhiyun #define IDT_NT_BARSETUP5 0x004C0U 170*4882a593Smuzhiyun #define IDT_NT_BARLIMIT5 0x004C4U 171*4882a593Smuzhiyun #define IDT_NT_BARLTBASE5 0x004C8U 172*4882a593Smuzhiyun #define IDT_NT_BARUTBASE5 0x004CCU 173*4882a593Smuzhiyun /* NT mapping table registers */ 174*4882a593Smuzhiyun /* NT Mapping Table Address/Status/Data (DWORD) */ 175*4882a593Smuzhiyun #define IDT_NT_NTMTBLADDR 0x004D0U 176*4882a593Smuzhiyun #define IDT_NT_NTMTBLSTS 0x004D4U 177*4882a593Smuzhiyun #define IDT_NT_NTMTBLDATA 0x004D8U 178*4882a593Smuzhiyun /* Requester ID (Bus:Device:Function) Capture (DWORD) */ 179*4882a593Smuzhiyun #define IDT_NT_REQIDCAP 0x004DCU 180*4882a593Smuzhiyun /* Memory Windows Lookup table registers */ 181*4882a593Smuzhiyun /* Lookup Table Offset/Lower, Middle and Upper data (DWORD) */ 182*4882a593Smuzhiyun #define IDT_NT_LUTOFFSET 0x004E0U 183*4882a593Smuzhiyun #define IDT_NT_LUTLDATA 0x004E4U 184*4882a593Smuzhiyun #define IDT_NT_LUTMDATA 0x004E8U 185*4882a593Smuzhiyun #define IDT_NT_LUTUDATA 0x004ECU 186*4882a593Smuzhiyun /* NT Endpoint Uncorrectable/Correctable Errors Emulation registers (DWORD) */ 187*4882a593Smuzhiyun #define IDT_NT_NTUEEM 0x004F0U 188*4882a593Smuzhiyun #define IDT_NT_NTCEEM 0x004F4U 189*4882a593Smuzhiyun /* Global Address Space Access/Data registers (DWARD) */ 190*4882a593Smuzhiyun #define IDT_NT_GASAADDR 0x00FF8U 191*4882a593Smuzhiyun #define IDT_NT_GASADATA 0x00FFCU 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* 194*4882a593Smuzhiyun * IDT PCIe-switch Global Configuration and Status registers 195*4882a593Smuzhiyun */ 196*4882a593Smuzhiyun /* Port N Configuration register in global space */ 197*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 198*4882a593Smuzhiyun #define IDT_SW_NTP0_PCIECMDSTS 0x01004U 199*4882a593Smuzhiyun #define IDT_SW_NTP0_PCIELCTLSTS 0x01050U 200*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 201*4882a593Smuzhiyun #define IDT_SW_NTP0_NTCTL 0x01400U 202*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 203*4882a593Smuzhiyun #define IDT_SW_NTP0_BARSETUP0 0x01470U 204*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLIMIT0 0x01474U 205*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLTBASE0 0x01478U 206*4882a593Smuzhiyun #define IDT_SW_NTP0_BARUTBASE0 0x0147CU 207*4882a593Smuzhiyun #define IDT_SW_NTP0_BARSETUP1 0x01480U 208*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLIMIT1 0x01484U 209*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLTBASE1 0x01488U 210*4882a593Smuzhiyun #define IDT_SW_NTP0_BARUTBASE1 0x0148CU 211*4882a593Smuzhiyun #define IDT_SW_NTP0_BARSETUP2 0x01490U 212*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLIMIT2 0x01494U 213*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLTBASE2 0x01498U 214*4882a593Smuzhiyun #define IDT_SW_NTP0_BARUTBASE2 0x0149CU 215*4882a593Smuzhiyun #define IDT_SW_NTP0_BARSETUP3 0x014A0U 216*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLIMIT3 0x014A4U 217*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLTBASE3 0x014A8U 218*4882a593Smuzhiyun #define IDT_SW_NTP0_BARUTBASE3 0x014ACU 219*4882a593Smuzhiyun #define IDT_SW_NTP0_BARSETUP4 0x014B0U 220*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLIMIT4 0x014B4U 221*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLTBASE4 0x014B8U 222*4882a593Smuzhiyun #define IDT_SW_NTP0_BARUTBASE4 0x014BCU 223*4882a593Smuzhiyun #define IDT_SW_NTP0_BARSETUP5 0x014C0U 224*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLIMIT5 0x014C4U 225*4882a593Smuzhiyun #define IDT_SW_NTP0_BARLTBASE5 0x014C8U 226*4882a593Smuzhiyun #define IDT_SW_NTP0_BARUTBASE5 0x014CCU 227*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 228*4882a593Smuzhiyun #define IDT_SW_NTP2_PCIECMDSTS 0x05004U 229*4882a593Smuzhiyun #define IDT_SW_NTP2_PCIELCTLSTS 0x05050U 230*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 231*4882a593Smuzhiyun #define IDT_SW_NTP2_NTCTL 0x05400U 232*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 233*4882a593Smuzhiyun #define IDT_SW_NTP2_BARSETUP0 0x05470U 234*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLIMIT0 0x05474U 235*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLTBASE0 0x05478U 236*4882a593Smuzhiyun #define IDT_SW_NTP2_BARUTBASE0 0x0547CU 237*4882a593Smuzhiyun #define IDT_SW_NTP2_BARSETUP1 0x05480U 238*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLIMIT1 0x05484U 239*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLTBASE1 0x05488U 240*4882a593Smuzhiyun #define IDT_SW_NTP2_BARUTBASE1 0x0548CU 241*4882a593Smuzhiyun #define IDT_SW_NTP2_BARSETUP2 0x05490U 242*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLIMIT2 0x05494U 243*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLTBASE2 0x05498U 244*4882a593Smuzhiyun #define IDT_SW_NTP2_BARUTBASE2 0x0549CU 245*4882a593Smuzhiyun #define IDT_SW_NTP2_BARSETUP3 0x054A0U 246*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLIMIT3 0x054A4U 247*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLTBASE3 0x054A8U 248*4882a593Smuzhiyun #define IDT_SW_NTP2_BARUTBASE3 0x054ACU 249*4882a593Smuzhiyun #define IDT_SW_NTP2_BARSETUP4 0x054B0U 250*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLIMIT4 0x054B4U 251*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLTBASE4 0x054B8U 252*4882a593Smuzhiyun #define IDT_SW_NTP2_BARUTBASE4 0x054BCU 253*4882a593Smuzhiyun #define IDT_SW_NTP2_BARSETUP5 0x054C0U 254*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLIMIT5 0x054C4U 255*4882a593Smuzhiyun #define IDT_SW_NTP2_BARLTBASE5 0x054C8U 256*4882a593Smuzhiyun #define IDT_SW_NTP2_BARUTBASE5 0x054CCU 257*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 258*4882a593Smuzhiyun #define IDT_SW_NTP4_PCIECMDSTS 0x09004U 259*4882a593Smuzhiyun #define IDT_SW_NTP4_PCIELCTLSTS 0x09050U 260*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 261*4882a593Smuzhiyun #define IDT_SW_NTP4_NTCTL 0x09400U 262*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 263*4882a593Smuzhiyun #define IDT_SW_NTP4_BARSETUP0 0x09470U 264*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLIMIT0 0x09474U 265*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLTBASE0 0x09478U 266*4882a593Smuzhiyun #define IDT_SW_NTP4_BARUTBASE0 0x0947CU 267*4882a593Smuzhiyun #define IDT_SW_NTP4_BARSETUP1 0x09480U 268*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLIMIT1 0x09484U 269*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLTBASE1 0x09488U 270*4882a593Smuzhiyun #define IDT_SW_NTP4_BARUTBASE1 0x0948CU 271*4882a593Smuzhiyun #define IDT_SW_NTP4_BARSETUP2 0x09490U 272*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLIMIT2 0x09494U 273*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLTBASE2 0x09498U 274*4882a593Smuzhiyun #define IDT_SW_NTP4_BARUTBASE2 0x0949CU 275*4882a593Smuzhiyun #define IDT_SW_NTP4_BARSETUP3 0x094A0U 276*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLIMIT3 0x094A4U 277*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLTBASE3 0x094A8U 278*4882a593Smuzhiyun #define IDT_SW_NTP4_BARUTBASE3 0x094ACU 279*4882a593Smuzhiyun #define IDT_SW_NTP4_BARSETUP4 0x094B0U 280*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLIMIT4 0x094B4U 281*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLTBASE4 0x094B8U 282*4882a593Smuzhiyun #define IDT_SW_NTP4_BARUTBASE4 0x094BCU 283*4882a593Smuzhiyun #define IDT_SW_NTP4_BARSETUP5 0x094C0U 284*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLIMIT5 0x094C4U 285*4882a593Smuzhiyun #define IDT_SW_NTP4_BARLTBASE5 0x094C8U 286*4882a593Smuzhiyun #define IDT_SW_NTP4_BARUTBASE5 0x094CCU 287*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 288*4882a593Smuzhiyun #define IDT_SW_NTP6_PCIECMDSTS 0x0D004U 289*4882a593Smuzhiyun #define IDT_SW_NTP6_PCIELCTLSTS 0x0D050U 290*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 291*4882a593Smuzhiyun #define IDT_SW_NTP6_NTCTL 0x0D400U 292*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 293*4882a593Smuzhiyun #define IDT_SW_NTP6_BARSETUP0 0x0D470U 294*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLIMIT0 0x0D474U 295*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLTBASE0 0x0D478U 296*4882a593Smuzhiyun #define IDT_SW_NTP6_BARUTBASE0 0x0D47CU 297*4882a593Smuzhiyun #define IDT_SW_NTP6_BARSETUP1 0x0D480U 298*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLIMIT1 0x0D484U 299*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLTBASE1 0x0D488U 300*4882a593Smuzhiyun #define IDT_SW_NTP6_BARUTBASE1 0x0D48CU 301*4882a593Smuzhiyun #define IDT_SW_NTP6_BARSETUP2 0x0D490U 302*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLIMIT2 0x0D494U 303*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLTBASE2 0x0D498U 304*4882a593Smuzhiyun #define IDT_SW_NTP6_BARUTBASE2 0x0D49CU 305*4882a593Smuzhiyun #define IDT_SW_NTP6_BARSETUP3 0x0D4A0U 306*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLIMIT3 0x0D4A4U 307*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLTBASE3 0x0D4A8U 308*4882a593Smuzhiyun #define IDT_SW_NTP6_BARUTBASE3 0x0D4ACU 309*4882a593Smuzhiyun #define IDT_SW_NTP6_BARSETUP4 0x0D4B0U 310*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLIMIT4 0x0D4B4U 311*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLTBASE4 0x0D4B8U 312*4882a593Smuzhiyun #define IDT_SW_NTP6_BARUTBASE4 0x0D4BCU 313*4882a593Smuzhiyun #define IDT_SW_NTP6_BARSETUP5 0x0D4C0U 314*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLIMIT5 0x0D4C4U 315*4882a593Smuzhiyun #define IDT_SW_NTP6_BARLTBASE5 0x0D4C8U 316*4882a593Smuzhiyun #define IDT_SW_NTP6_BARUTBASE5 0x0D4CCU 317*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 318*4882a593Smuzhiyun #define IDT_SW_NTP8_PCIECMDSTS 0x11004U 319*4882a593Smuzhiyun #define IDT_SW_NTP8_PCIELCTLSTS 0x11050U 320*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 321*4882a593Smuzhiyun #define IDT_SW_NTP8_NTCTL 0x11400U 322*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 323*4882a593Smuzhiyun #define IDT_SW_NTP8_BARSETUP0 0x11470U 324*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLIMIT0 0x11474U 325*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLTBASE0 0x11478U 326*4882a593Smuzhiyun #define IDT_SW_NTP8_BARUTBASE0 0x1147CU 327*4882a593Smuzhiyun #define IDT_SW_NTP8_BARSETUP1 0x11480U 328*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLIMIT1 0x11484U 329*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLTBASE1 0x11488U 330*4882a593Smuzhiyun #define IDT_SW_NTP8_BARUTBASE1 0x1148CU 331*4882a593Smuzhiyun #define IDT_SW_NTP8_BARSETUP2 0x11490U 332*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLIMIT2 0x11494U 333*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLTBASE2 0x11498U 334*4882a593Smuzhiyun #define IDT_SW_NTP8_BARUTBASE2 0x1149CU 335*4882a593Smuzhiyun #define IDT_SW_NTP8_BARSETUP3 0x114A0U 336*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLIMIT3 0x114A4U 337*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLTBASE3 0x114A8U 338*4882a593Smuzhiyun #define IDT_SW_NTP8_BARUTBASE3 0x114ACU 339*4882a593Smuzhiyun #define IDT_SW_NTP8_BARSETUP4 0x114B0U 340*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLIMIT4 0x114B4U 341*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLTBASE4 0x114B8U 342*4882a593Smuzhiyun #define IDT_SW_NTP8_BARUTBASE4 0x114BCU 343*4882a593Smuzhiyun #define IDT_SW_NTP8_BARSETUP5 0x114C0U 344*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLIMIT5 0x114C4U 345*4882a593Smuzhiyun #define IDT_SW_NTP8_BARLTBASE5 0x114C8U 346*4882a593Smuzhiyun #define IDT_SW_NTP8_BARUTBASE5 0x114CCU 347*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 348*4882a593Smuzhiyun #define IDT_SW_NTP12_PCIECMDSTS 0x19004U 349*4882a593Smuzhiyun #define IDT_SW_NTP12_PCIELCTLSTS 0x19050U 350*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 351*4882a593Smuzhiyun #define IDT_SW_NTP12_NTCTL 0x19400U 352*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 353*4882a593Smuzhiyun #define IDT_SW_NTP12_BARSETUP0 0x19470U 354*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLIMIT0 0x19474U 355*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLTBASE0 0x19478U 356*4882a593Smuzhiyun #define IDT_SW_NTP12_BARUTBASE0 0x1947CU 357*4882a593Smuzhiyun #define IDT_SW_NTP12_BARSETUP1 0x19480U 358*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLIMIT1 0x19484U 359*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLTBASE1 0x19488U 360*4882a593Smuzhiyun #define IDT_SW_NTP12_BARUTBASE1 0x1948CU 361*4882a593Smuzhiyun #define IDT_SW_NTP12_BARSETUP2 0x19490U 362*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLIMIT2 0x19494U 363*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLTBASE2 0x19498U 364*4882a593Smuzhiyun #define IDT_SW_NTP12_BARUTBASE2 0x1949CU 365*4882a593Smuzhiyun #define IDT_SW_NTP12_BARSETUP3 0x194A0U 366*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLIMIT3 0x194A4U 367*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLTBASE3 0x194A8U 368*4882a593Smuzhiyun #define IDT_SW_NTP12_BARUTBASE3 0x194ACU 369*4882a593Smuzhiyun #define IDT_SW_NTP12_BARSETUP4 0x194B0U 370*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLIMIT4 0x194B4U 371*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLTBASE4 0x194B8U 372*4882a593Smuzhiyun #define IDT_SW_NTP12_BARUTBASE4 0x194BCU 373*4882a593Smuzhiyun #define IDT_SW_NTP12_BARSETUP5 0x194C0U 374*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLIMIT5 0x194C4U 375*4882a593Smuzhiyun #define IDT_SW_NTP12_BARLTBASE5 0x194C8U 376*4882a593Smuzhiyun #define IDT_SW_NTP12_BARUTBASE5 0x194CCU 377*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 378*4882a593Smuzhiyun #define IDT_SW_NTP16_PCIECMDSTS 0x21004U 379*4882a593Smuzhiyun #define IDT_SW_NTP16_PCIELCTLSTS 0x21050U 380*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 381*4882a593Smuzhiyun #define IDT_SW_NTP16_NTCTL 0x21400U 382*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 383*4882a593Smuzhiyun #define IDT_SW_NTP16_BARSETUP0 0x21470U 384*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLIMIT0 0x21474U 385*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLTBASE0 0x21478U 386*4882a593Smuzhiyun #define IDT_SW_NTP16_BARUTBASE0 0x2147CU 387*4882a593Smuzhiyun #define IDT_SW_NTP16_BARSETUP1 0x21480U 388*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLIMIT1 0x21484U 389*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLTBASE1 0x21488U 390*4882a593Smuzhiyun #define IDT_SW_NTP16_BARUTBASE1 0x2148CU 391*4882a593Smuzhiyun #define IDT_SW_NTP16_BARSETUP2 0x21490U 392*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLIMIT2 0x21494U 393*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLTBASE2 0x21498U 394*4882a593Smuzhiyun #define IDT_SW_NTP16_BARUTBASE2 0x2149CU 395*4882a593Smuzhiyun #define IDT_SW_NTP16_BARSETUP3 0x214A0U 396*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLIMIT3 0x214A4U 397*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLTBASE3 0x214A8U 398*4882a593Smuzhiyun #define IDT_SW_NTP16_BARUTBASE3 0x214ACU 399*4882a593Smuzhiyun #define IDT_SW_NTP16_BARSETUP4 0x214B0U 400*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLIMIT4 0x214B4U 401*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLTBASE4 0x214B8U 402*4882a593Smuzhiyun #define IDT_SW_NTP16_BARUTBASE4 0x214BCU 403*4882a593Smuzhiyun #define IDT_SW_NTP16_BARSETUP5 0x214C0U 404*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLIMIT5 0x214C4U 405*4882a593Smuzhiyun #define IDT_SW_NTP16_BARLTBASE5 0x214C8U 406*4882a593Smuzhiyun #define IDT_SW_NTP16_BARUTBASE5 0x214CCU 407*4882a593Smuzhiyun /* PCI Express command/status and link control/status registers (WORD+WORD) */ 408*4882a593Smuzhiyun #define IDT_SW_NTP20_PCIECMDSTS 0x29004U 409*4882a593Smuzhiyun #define IDT_SW_NTP20_PCIELCTLSTS 0x29050U 410*4882a593Smuzhiyun /* NT-function control register (DWORD) */ 411*4882a593Smuzhiyun #define IDT_SW_NTP20_NTCTL 0x29400U 412*4882a593Smuzhiyun /* BAR setup/limit/base address registers (DWORD) */ 413*4882a593Smuzhiyun #define IDT_SW_NTP20_BARSETUP0 0x29470U 414*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLIMIT0 0x29474U 415*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLTBASE0 0x29478U 416*4882a593Smuzhiyun #define IDT_SW_NTP20_BARUTBASE0 0x2947CU 417*4882a593Smuzhiyun #define IDT_SW_NTP20_BARSETUP1 0x29480U 418*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLIMIT1 0x29484U 419*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLTBASE1 0x29488U 420*4882a593Smuzhiyun #define IDT_SW_NTP20_BARUTBASE1 0x2948CU 421*4882a593Smuzhiyun #define IDT_SW_NTP20_BARSETUP2 0x29490U 422*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLIMIT2 0x29494U 423*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLTBASE2 0x29498U 424*4882a593Smuzhiyun #define IDT_SW_NTP20_BARUTBASE2 0x2949CU 425*4882a593Smuzhiyun #define IDT_SW_NTP20_BARSETUP3 0x294A0U 426*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLIMIT3 0x294A4U 427*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLTBASE3 0x294A8U 428*4882a593Smuzhiyun #define IDT_SW_NTP20_BARUTBASE3 0x294ACU 429*4882a593Smuzhiyun #define IDT_SW_NTP20_BARSETUP4 0x294B0U 430*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLIMIT4 0x294B4U 431*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLTBASE4 0x294B8U 432*4882a593Smuzhiyun #define IDT_SW_NTP20_BARUTBASE4 0x294BCU 433*4882a593Smuzhiyun #define IDT_SW_NTP20_BARSETUP5 0x294C0U 434*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLIMIT5 0x294C4U 435*4882a593Smuzhiyun #define IDT_SW_NTP20_BARLTBASE5 0x294C8U 436*4882a593Smuzhiyun #define IDT_SW_NTP20_BARUTBASE5 0x294CCU 437*4882a593Smuzhiyun /* IDT PCIe-switch control register (DWORD) */ 438*4882a593Smuzhiyun #define IDT_SW_CTL 0x3E000U 439*4882a593Smuzhiyun /* Boot Configuration Vector Status (DWORD) */ 440*4882a593Smuzhiyun #define IDT_SW_BCVSTS 0x3E004U 441*4882a593Smuzhiyun /* Port Clocking Mode (DWORD) */ 442*4882a593Smuzhiyun #define IDT_SW_PCLKMODE 0x3E008U 443*4882a593Smuzhiyun /* Reset Drain Delay (DWORD) */ 444*4882a593Smuzhiyun #define IDT_SW_RDRAINDELAY 0x3E080U 445*4882a593Smuzhiyun /* Port Operating Mode Change Drain Delay (DWORD) */ 446*4882a593Smuzhiyun #define IDT_SW_POMCDELAY 0x3E084U 447*4882a593Smuzhiyun /* Side Effect Delay (DWORD) */ 448*4882a593Smuzhiyun #define IDT_SW_SEDELAY 0x3E088U 449*4882a593Smuzhiyun /* Upstream Secondary Bus Reset Delay (DWORD) */ 450*4882a593Smuzhiyun #define IDT_SW_SSBRDELAY 0x3E08CU 451*4882a593Smuzhiyun /* Switch partition N Control/Status/Failover registers */ 452*4882a593Smuzhiyun #define IDT_SW_SWPART0CTL 0x3E100U 453*4882a593Smuzhiyun #define IDT_SW_SWPART0STS 0x3E104U 454*4882a593Smuzhiyun #define IDT_SW_SWPART0FCTL 0x3E108U 455*4882a593Smuzhiyun #define IDT_SW_SWPART1CTL 0x3E120U 456*4882a593Smuzhiyun #define IDT_SW_SWPART1STS 0x3E124U 457*4882a593Smuzhiyun #define IDT_SW_SWPART1FCTL 0x3E128U 458*4882a593Smuzhiyun #define IDT_SW_SWPART2CTL 0x3E140U 459*4882a593Smuzhiyun #define IDT_SW_SWPART2STS 0x3E144U 460*4882a593Smuzhiyun #define IDT_SW_SWPART2FCTL 0x3E148U 461*4882a593Smuzhiyun #define IDT_SW_SWPART3CTL 0x3E160U 462*4882a593Smuzhiyun #define IDT_SW_SWPART3STS 0x3E164U 463*4882a593Smuzhiyun #define IDT_SW_SWPART3FCTL 0x3E168U 464*4882a593Smuzhiyun #define IDT_SW_SWPART4CTL 0x3E180U 465*4882a593Smuzhiyun #define IDT_SW_SWPART4STS 0x3E184U 466*4882a593Smuzhiyun #define IDT_SW_SWPART4FCTL 0x3E188U 467*4882a593Smuzhiyun #define IDT_SW_SWPART5CTL 0x3E1A0U 468*4882a593Smuzhiyun #define IDT_SW_SWPART5STS 0x3E1A4U 469*4882a593Smuzhiyun #define IDT_SW_SWPART5FCTL 0x3E1A8U 470*4882a593Smuzhiyun #define IDT_SW_SWPART6CTL 0x3E1C0U 471*4882a593Smuzhiyun #define IDT_SW_SWPART6STS 0x3E1C4U 472*4882a593Smuzhiyun #define IDT_SW_SWPART6FCTL 0x3E1C8U 473*4882a593Smuzhiyun #define IDT_SW_SWPART7CTL 0x3E1E0U 474*4882a593Smuzhiyun #define IDT_SW_SWPART7STS 0x3E1E4U 475*4882a593Smuzhiyun #define IDT_SW_SWPART7FCTL 0x3E1E8U 476*4882a593Smuzhiyun /* Switch port N control and status registers */ 477*4882a593Smuzhiyun #define IDT_SW_SWPORT0CTL 0x3E200U 478*4882a593Smuzhiyun #define IDT_SW_SWPORT0STS 0x3E204U 479*4882a593Smuzhiyun #define IDT_SW_SWPORT0FCTL 0x3E208U 480*4882a593Smuzhiyun #define IDT_SW_SWPORT2CTL 0x3E240U 481*4882a593Smuzhiyun #define IDT_SW_SWPORT2STS 0x3E244U 482*4882a593Smuzhiyun #define IDT_SW_SWPORT2FCTL 0x3E248U 483*4882a593Smuzhiyun #define IDT_SW_SWPORT4CTL 0x3E280U 484*4882a593Smuzhiyun #define IDT_SW_SWPORT4STS 0x3E284U 485*4882a593Smuzhiyun #define IDT_SW_SWPORT4FCTL 0x3E288U 486*4882a593Smuzhiyun #define IDT_SW_SWPORT6CTL 0x3E2C0U 487*4882a593Smuzhiyun #define IDT_SW_SWPORT6STS 0x3E2C4U 488*4882a593Smuzhiyun #define IDT_SW_SWPORT6FCTL 0x3E2C8U 489*4882a593Smuzhiyun #define IDT_SW_SWPORT8CTL 0x3E300U 490*4882a593Smuzhiyun #define IDT_SW_SWPORT8STS 0x3E304U 491*4882a593Smuzhiyun #define IDT_SW_SWPORT8FCTL 0x3E308U 492*4882a593Smuzhiyun #define IDT_SW_SWPORT12CTL 0x3E380U 493*4882a593Smuzhiyun #define IDT_SW_SWPORT12STS 0x3E384U 494*4882a593Smuzhiyun #define IDT_SW_SWPORT12FCTL 0x3E388U 495*4882a593Smuzhiyun #define IDT_SW_SWPORT16CTL 0x3E400U 496*4882a593Smuzhiyun #define IDT_SW_SWPORT16STS 0x3E404U 497*4882a593Smuzhiyun #define IDT_SW_SWPORT16FCTL 0x3E408U 498*4882a593Smuzhiyun #define IDT_SW_SWPORT20CTL 0x3E480U 499*4882a593Smuzhiyun #define IDT_SW_SWPORT20STS 0x3E484U 500*4882a593Smuzhiyun #define IDT_SW_SWPORT20FCTL 0x3E488U 501*4882a593Smuzhiyun /* Switch Event registers */ 502*4882a593Smuzhiyun /* Switch Event Status/Mask/Partition mask (DWORD) */ 503*4882a593Smuzhiyun #define IDT_SW_SESTS 0x3EC00U 504*4882a593Smuzhiyun #define IDT_SW_SEMSK 0x3EC04U 505*4882a593Smuzhiyun #define IDT_SW_SEPMSK 0x3EC08U 506*4882a593Smuzhiyun /* Switch Event Link Up/Down Status/Mask (DWORD) */ 507*4882a593Smuzhiyun #define IDT_SW_SELINKUPSTS 0x3EC0CU 508*4882a593Smuzhiyun #define IDT_SW_SELINKUPMSK 0x3EC10U 509*4882a593Smuzhiyun #define IDT_SW_SELINKDNSTS 0x3EC14U 510*4882a593Smuzhiyun #define IDT_SW_SELINKDNMSK 0x3EC18U 511*4882a593Smuzhiyun /* Switch Event Fundamental Reset Status/Mask (DWORD) */ 512*4882a593Smuzhiyun #define IDT_SW_SEFRSTSTS 0x3EC1CU 513*4882a593Smuzhiyun #define IDT_SW_SEFRSTMSK 0x3EC20U 514*4882a593Smuzhiyun /* Switch Event Hot Reset Status/Mask (DWORD) */ 515*4882a593Smuzhiyun #define IDT_SW_SEHRSTSTS 0x3EC24U 516*4882a593Smuzhiyun #define IDT_SW_SEHRSTMSK 0x3EC28U 517*4882a593Smuzhiyun /* Switch Event Failover Mask (DWORD) */ 518*4882a593Smuzhiyun #define IDT_SW_SEFOVRMSK 0x3EC2CU 519*4882a593Smuzhiyun /* Switch Event Global Signal Status/Mask (DWORD) */ 520*4882a593Smuzhiyun #define IDT_SW_SEGSIGSTS 0x3EC30U 521*4882a593Smuzhiyun #define IDT_SW_SEGSIGMSK 0x3EC34U 522*4882a593Smuzhiyun /* NT Global Doorbell Status (DWORD) */ 523*4882a593Smuzhiyun #define IDT_SW_GDBELLSTS 0x3EC3CU 524*4882a593Smuzhiyun /* Switch partition N message M control (msgs routing table) (DWORD) */ 525*4882a593Smuzhiyun #define IDT_SW_SWP0MSGCTL0 0x3EE00U 526*4882a593Smuzhiyun #define IDT_SW_SWP1MSGCTL0 0x3EE04U 527*4882a593Smuzhiyun #define IDT_SW_SWP2MSGCTL0 0x3EE08U 528*4882a593Smuzhiyun #define IDT_SW_SWP3MSGCTL0 0x3EE0CU 529*4882a593Smuzhiyun #define IDT_SW_SWP4MSGCTL0 0x3EE10U 530*4882a593Smuzhiyun #define IDT_SW_SWP5MSGCTL0 0x3EE14U 531*4882a593Smuzhiyun #define IDT_SW_SWP6MSGCTL0 0x3EE18U 532*4882a593Smuzhiyun #define IDT_SW_SWP7MSGCTL0 0x3EE1CU 533*4882a593Smuzhiyun #define IDT_SW_SWP0MSGCTL1 0x3EE20U 534*4882a593Smuzhiyun #define IDT_SW_SWP1MSGCTL1 0x3EE24U 535*4882a593Smuzhiyun #define IDT_SW_SWP2MSGCTL1 0x3EE28U 536*4882a593Smuzhiyun #define IDT_SW_SWP3MSGCTL1 0x3EE2CU 537*4882a593Smuzhiyun #define IDT_SW_SWP4MSGCTL1 0x3EE30U 538*4882a593Smuzhiyun #define IDT_SW_SWP5MSGCTL1 0x3EE34U 539*4882a593Smuzhiyun #define IDT_SW_SWP6MSGCTL1 0x3EE38U 540*4882a593Smuzhiyun #define IDT_SW_SWP7MSGCTL1 0x3EE3CU 541*4882a593Smuzhiyun #define IDT_SW_SWP0MSGCTL2 0x3EE40U 542*4882a593Smuzhiyun #define IDT_SW_SWP1MSGCTL2 0x3EE44U 543*4882a593Smuzhiyun #define IDT_SW_SWP2MSGCTL2 0x3EE48U 544*4882a593Smuzhiyun #define IDT_SW_SWP3MSGCTL2 0x3EE4CU 545*4882a593Smuzhiyun #define IDT_SW_SWP4MSGCTL2 0x3EE50U 546*4882a593Smuzhiyun #define IDT_SW_SWP5MSGCTL2 0x3EE54U 547*4882a593Smuzhiyun #define IDT_SW_SWP6MSGCTL2 0x3EE58U 548*4882a593Smuzhiyun #define IDT_SW_SWP7MSGCTL2 0x3EE5CU 549*4882a593Smuzhiyun #define IDT_SW_SWP0MSGCTL3 0x3EE60U 550*4882a593Smuzhiyun #define IDT_SW_SWP1MSGCTL3 0x3EE64U 551*4882a593Smuzhiyun #define IDT_SW_SWP2MSGCTL3 0x3EE68U 552*4882a593Smuzhiyun #define IDT_SW_SWP3MSGCTL3 0x3EE6CU 553*4882a593Smuzhiyun #define IDT_SW_SWP4MSGCTL3 0x3EE70U 554*4882a593Smuzhiyun #define IDT_SW_SWP5MSGCTL3 0x3EE74U 555*4882a593Smuzhiyun #define IDT_SW_SWP6MSGCTL3 0x3EE78U 556*4882a593Smuzhiyun #define IDT_SW_SWP7MSGCTL3 0x3EE7CU 557*4882a593Smuzhiyun /* SMBus Status and Control registers (DWORD) */ 558*4882a593Smuzhiyun #define IDT_SW_SMBUSSTS 0x3F188U 559*4882a593Smuzhiyun #define IDT_SW_SMBUSCTL 0x3F18CU 560*4882a593Smuzhiyun /* Serial EEPROM Interface (DWORD) */ 561*4882a593Smuzhiyun #define IDT_SW_EEPROMINTF 0x3F190U 562*4882a593Smuzhiyun /* MBus I/O Expander Address N (DWORD) */ 563*4882a593Smuzhiyun #define IDT_SW_IOEXPADDR0 0x3F198U 564*4882a593Smuzhiyun #define IDT_SW_IOEXPADDR1 0x3F19CU 565*4882a593Smuzhiyun #define IDT_SW_IOEXPADDR2 0x3F1A0U 566*4882a593Smuzhiyun #define IDT_SW_IOEXPADDR3 0x3F1A4U 567*4882a593Smuzhiyun #define IDT_SW_IOEXPADDR4 0x3F1A8U 568*4882a593Smuzhiyun #define IDT_SW_IOEXPADDR5 0x3F1ACU 569*4882a593Smuzhiyun /* General Purpose Events Control and Status registers (DWORD) */ 570*4882a593Smuzhiyun #define IDT_SW_GPECTL 0x3F1B0U 571*4882a593Smuzhiyun #define IDT_SW_GPESTS 0x3F1B4U 572*4882a593Smuzhiyun /* Temperature sensor Control/Status/Alarm/Adjustment/Slope registers */ 573*4882a593Smuzhiyun #define IDT_SW_TMPCTL 0x3F1D4U 574*4882a593Smuzhiyun #define IDT_SW_TMPSTS 0x3F1D8U 575*4882a593Smuzhiyun #define IDT_SW_TMPALARM 0x3F1DCU 576*4882a593Smuzhiyun #define IDT_SW_TMPADJ 0x3F1E0U 577*4882a593Smuzhiyun #define IDT_SW_TSSLOPE 0x3F1E4U 578*4882a593Smuzhiyun /* SMBus Configuration Block header log (DWORD) */ 579*4882a593Smuzhiyun #define IDT_SW_SMBUSCBHL 0x3F1E8U 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun /* 582*4882a593Smuzhiyun * Common registers related constants 583*4882a593Smuzhiyun * @IDT_REG_ALIGN: Registers alignment used in the driver 584*4882a593Smuzhiyun * @IDT_REG_PCI_MAX: Maximum PCI configuration space register value 585*4882a593Smuzhiyun * @IDT_REG_SW_MAX: Maximum global register value 586*4882a593Smuzhiyun */ 587*4882a593Smuzhiyun #define IDT_REG_ALIGN 4 588*4882a593Smuzhiyun #define IDT_REG_PCI_MAX 0x00FFFU 589*4882a593Smuzhiyun #define IDT_REG_SW_MAX 0x3FFFFU 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun /* 592*4882a593Smuzhiyun * PCICMDSTS register fields related constants 593*4882a593Smuzhiyun * @IDT_PCICMDSTS_IOAE: I/O access enable 594*4882a593Smuzhiyun * @IDT_PCICMDSTS_MAE: Memory access enable 595*4882a593Smuzhiyun * @IDT_PCICMDSTS_BME: Bus master enable 596*4882a593Smuzhiyun */ 597*4882a593Smuzhiyun #define IDT_PCICMDSTS_IOAE 0x00000001U 598*4882a593Smuzhiyun #define IDT_PCICMDSTS_MAE 0x00000002U 599*4882a593Smuzhiyun #define IDT_PCICMDSTS_BME 0x00000004U 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun /* 602*4882a593Smuzhiyun * PCIEDCAP register fields related constants 603*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_MASK: Maximum payload size mask 604*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_FLD: Maximum payload size field offset 605*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_S128: Max supported payload size of 128 bytes 606*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_S256: Max supported payload size of 256 bytes 607*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_S512: Max supported payload size of 512 bytes 608*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_S1024: Max supported payload size of 1024 bytes 609*4882a593Smuzhiyun * @IDT_PCIEDCAP_MPAYLOAD_S2048: Max supported payload size of 2048 bytes 610*4882a593Smuzhiyun */ 611*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_MASK 0x00000007U 612*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_FLD 0 613*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_S128 0x00000000U 614*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_S256 0x00000001U 615*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_S512 0x00000002U 616*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_S1024 0x00000003U 617*4882a593Smuzhiyun #define IDT_PCIEDCAP_MPAYLOAD_S2048 0x00000004U 618*4882a593Smuzhiyun 619*4882a593Smuzhiyun /* 620*4882a593Smuzhiyun * PCIEDCTLSTS registers fields related constants 621*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_MASK: Maximum payload size mask 622*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_FLD: MPS field offset 623*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_S128: Max payload size of 128 bytes 624*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_S256: Max payload size of 256 bytes 625*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_S512: Max payload size of 512 bytes 626*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_S1024: Max payload size of 1024 bytes 627*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_S2048: Max payload size of 2048 bytes 628*4882a593Smuzhiyun * @IDT_PCIEDCTL_MPS_S4096: Max payload size of 4096 bytes 629*4882a593Smuzhiyun */ 630*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_MASK 0x000000E0U 631*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_FLD 5 632*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_S128 0x00000000U 633*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_S256 0x00000020U 634*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_S512 0x00000040U 635*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_S1024 0x00000060U 636*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_S2048 0x00000080U 637*4882a593Smuzhiyun #define IDT_PCIEDCTLSTS_MPS_S4096 0x000000A0U 638*4882a593Smuzhiyun 639*4882a593Smuzhiyun /* 640*4882a593Smuzhiyun * PCIELCAP register fields related constants 641*4882a593Smuzhiyun * @IDT_PCIELCAP_PORTNUM_MASK: Port number field mask 642*4882a593Smuzhiyun * @IDT_PCIELCAP_PORTNUM_FLD: Port number field offset 643*4882a593Smuzhiyun */ 644*4882a593Smuzhiyun #define IDT_PCIELCAP_PORTNUM_MASK 0xFF000000U 645*4882a593Smuzhiyun #define IDT_PCIELCAP_PORTNUM_FLD 24 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun /* 648*4882a593Smuzhiyun * PCIELCTLSTS registers fields related constants 649*4882a593Smuzhiyun * @IDT_PCIELSTS_CLS_MASK: Current link speed mask 650*4882a593Smuzhiyun * @IDT_PCIELSTS_CLS_FLD: Current link speed field offset 651*4882a593Smuzhiyun * @IDT_PCIELSTS_NLW_MASK: Negotiated link width mask 652*4882a593Smuzhiyun * @IDT_PCIELSTS_NLW_FLD: Negotiated link width field offset 653*4882a593Smuzhiyun * @IDT_PCIELSTS_SCLK_COM: Common slot clock configuration 654*4882a593Smuzhiyun */ 655*4882a593Smuzhiyun #define IDT_PCIELCTLSTS_CLS_MASK 0x000F0000U 656*4882a593Smuzhiyun #define IDT_PCIELCTLSTS_CLS_FLD 16 657*4882a593Smuzhiyun #define IDT_PCIELCTLSTS_NLW_MASK 0x03F00000U 658*4882a593Smuzhiyun #define IDT_PCIELCTLSTS_NLW_FLD 20 659*4882a593Smuzhiyun #define IDT_PCIELCTLSTS_SCLK_COM 0x10000000U 660*4882a593Smuzhiyun 661*4882a593Smuzhiyun /* 662*4882a593Smuzhiyun * NTCTL register fields related constants 663*4882a593Smuzhiyun * @IDT_NTCTL_IDPROTDIS: ID Protection check disable (disable MTBL) 664*4882a593Smuzhiyun * @IDT_NTCTL_CPEN: Completion enable 665*4882a593Smuzhiyun * @IDT_NTCTL_RNS: Request no snoop processing (if MTBL disabled) 666*4882a593Smuzhiyun * @IDT_NTCTL_ATP: Address type processing (if MTBL disabled) 667*4882a593Smuzhiyun */ 668*4882a593Smuzhiyun #define IDT_NTCTL_IDPROTDIS 0x00000001U 669*4882a593Smuzhiyun #define IDT_NTCTL_CPEN 0x00000002U 670*4882a593Smuzhiyun #define IDT_NTCTL_RNS 0x00000004U 671*4882a593Smuzhiyun #define IDT_NTCTL_ATP 0x00000008U 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun /* 674*4882a593Smuzhiyun * NTINTSTS register fields related constants 675*4882a593Smuzhiyun * @IDT_NTINTSTS_MSG: Message interrupt bit 676*4882a593Smuzhiyun * @IDT_NTINTSTS_DBELL: Doorbell interrupt bit 677*4882a593Smuzhiyun * @IDT_NTINTSTS_SEVENT: Switch Event interrupt bit 678*4882a593Smuzhiyun * @IDT_NTINTSTS_TMPSENSOR: Temperature sensor interrupt bit 679*4882a593Smuzhiyun */ 680*4882a593Smuzhiyun #define IDT_NTINTSTS_MSG 0x00000001U 681*4882a593Smuzhiyun #define IDT_NTINTSTS_DBELL 0x00000002U 682*4882a593Smuzhiyun #define IDT_NTINTSTS_SEVENT 0x00000008U 683*4882a593Smuzhiyun #define IDT_NTINTSTS_TMPSENSOR 0x00000080U 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun /* 686*4882a593Smuzhiyun * NTINTMSK register fields related constants 687*4882a593Smuzhiyun * @IDT_NTINTMSK_MSG: Message interrupt mask bit 688*4882a593Smuzhiyun * @IDT_NTINTMSK_DBELL: Doorbell interrupt mask bit 689*4882a593Smuzhiyun * @IDT_NTINTMSK_SEVENT: Switch Event interrupt mask bit 690*4882a593Smuzhiyun * @IDT_NTINTMSK_TMPSENSOR: Temperature sensor interrupt mask bit 691*4882a593Smuzhiyun * @IDT_NTINTMSK_ALL: NTB-related interrupts mask 692*4882a593Smuzhiyun */ 693*4882a593Smuzhiyun #define IDT_NTINTMSK_MSG 0x00000001U 694*4882a593Smuzhiyun #define IDT_NTINTMSK_DBELL 0x00000002U 695*4882a593Smuzhiyun #define IDT_NTINTMSK_SEVENT 0x00000008U 696*4882a593Smuzhiyun #define IDT_NTINTMSK_TMPSENSOR 0x00000080U 697*4882a593Smuzhiyun #define IDT_NTINTMSK_ALL \ 698*4882a593Smuzhiyun (IDT_NTINTMSK_MSG | IDT_NTINTMSK_DBELL | IDT_NTINTMSK_SEVENT) 699*4882a593Smuzhiyun 700*4882a593Smuzhiyun /* 701*4882a593Smuzhiyun * NTGSIGNAL register fields related constants 702*4882a593Smuzhiyun * @IDT_NTGSIGNAL_SET: Set global signal of the local partition 703*4882a593Smuzhiyun */ 704*4882a593Smuzhiyun #define IDT_NTGSIGNAL_SET 0x00000001U 705*4882a593Smuzhiyun 706*4882a593Smuzhiyun /* 707*4882a593Smuzhiyun * BARSETUP register fields related constants 708*4882a593Smuzhiyun * @IDT_BARSETUP_TYPE_MASK: Mask of the TYPE field 709*4882a593Smuzhiyun * @IDT_BARSETUP_TYPE_32: 32-bit addressing BAR 710*4882a593Smuzhiyun * @IDT_BARSETUP_TYPE_64: 64-bit addressing BAR 711*4882a593Smuzhiyun * @IDT_BARSETUP_PREF: Value of the BAR prefetchable field 712*4882a593Smuzhiyun * @IDT_BARSETUP_SIZE_MASK: Mask of the SIZE field 713*4882a593Smuzhiyun * @IDT_BARSETUP_SIZE_FLD: SIZE field offset 714*4882a593Smuzhiyun * @IDT_BARSETUP_SIZE_CFG: SIZE field value in case of config space MODE 715*4882a593Smuzhiyun * @IDT_BARSETUP_MODE_CFG: Configuration space BAR mode 716*4882a593Smuzhiyun * @IDT_BARSETUP_ATRAN_MASK: ATRAN field mask 717*4882a593Smuzhiyun * @IDT_BARSETUP_ATRAN_FLD: ATRAN field offset 718*4882a593Smuzhiyun * @IDT_BARSETUP_ATRAN_DIR: Direct address translation memory window 719*4882a593Smuzhiyun * @IDT_BARSETUP_ATRAN_LUT12: 12-entry lookup table 720*4882a593Smuzhiyun * @IDT_BARSETUP_ATRAN_LUT24: 24-entry lookup table 721*4882a593Smuzhiyun * @IDT_BARSETUP_TPART_MASK: TPART field mask 722*4882a593Smuzhiyun * @IDT_BARSETUP_TPART_FLD: TPART field offset 723*4882a593Smuzhiyun * @IDT_BARSETUP_EN: BAR enable bit 724*4882a593Smuzhiyun */ 725*4882a593Smuzhiyun #define IDT_BARSETUP_TYPE_MASK 0x00000006U 726*4882a593Smuzhiyun #define IDT_BARSETUP_TYPE_FLD 0 727*4882a593Smuzhiyun #define IDT_BARSETUP_TYPE_32 0x00000000U 728*4882a593Smuzhiyun #define IDT_BARSETUP_TYPE_64 0x00000004U 729*4882a593Smuzhiyun #define IDT_BARSETUP_PREF 0x00000008U 730*4882a593Smuzhiyun #define IDT_BARSETUP_SIZE_MASK 0x000003F0U 731*4882a593Smuzhiyun #define IDT_BARSETUP_SIZE_FLD 4 732*4882a593Smuzhiyun #define IDT_BARSETUP_SIZE_CFG 0x000000C0U 733*4882a593Smuzhiyun #define IDT_BARSETUP_MODE_CFG 0x00000400U 734*4882a593Smuzhiyun #define IDT_BARSETUP_ATRAN_MASK 0x00001800U 735*4882a593Smuzhiyun #define IDT_BARSETUP_ATRAN_FLD 11 736*4882a593Smuzhiyun #define IDT_BARSETUP_ATRAN_DIR 0x00000000U 737*4882a593Smuzhiyun #define IDT_BARSETUP_ATRAN_LUT12 0x00000800U 738*4882a593Smuzhiyun #define IDT_BARSETUP_ATRAN_LUT24 0x00001000U 739*4882a593Smuzhiyun #define IDT_BARSETUP_TPART_MASK 0x0000E000U 740*4882a593Smuzhiyun #define IDT_BARSETUP_TPART_FLD 13 741*4882a593Smuzhiyun #define IDT_BARSETUP_EN 0x80000000U 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun /* 744*4882a593Smuzhiyun * NTMTBLDATA register fields related constants 745*4882a593Smuzhiyun * @IDT_NTMTBLDATA_VALID: Set the MTBL entry being valid 746*4882a593Smuzhiyun * @IDT_NTMTBLDATA_REQID_MASK: Bus:Device:Function field mask 747*4882a593Smuzhiyun * @IDT_NTMTBLDATA_REQID_FLD: Bus:Device:Function field offset 748*4882a593Smuzhiyun * @IDT_NTMTBLDATA_PART_MASK: Partition field mask 749*4882a593Smuzhiyun * @IDT_NTMTBLDATA_PART_FLD: Partition field offset 750*4882a593Smuzhiyun * @IDT_NTMTBLDATA_ATP_TRANS: Enable AT field translation on request TLPs 751*4882a593Smuzhiyun * @IDT_NTMTBLDATA_CNS_INV: Enable No Snoop attribute inversion of 752*4882a593Smuzhiyun * Completion TLPs 753*4882a593Smuzhiyun * @IDT_NTMTBLDATA_RNS_INV: Enable No Snoop attribute inversion of 754*4882a593Smuzhiyun * Request TLPs 755*4882a593Smuzhiyun */ 756*4882a593Smuzhiyun #define IDT_NTMTBLDATA_VALID 0x00000001U 757*4882a593Smuzhiyun #define IDT_NTMTBLDATA_REQID_MASK 0x0001FFFEU 758*4882a593Smuzhiyun #define IDT_NTMTBLDATA_REQID_FLD 1 759*4882a593Smuzhiyun #define IDT_NTMTBLDATA_PART_MASK 0x000E0000U 760*4882a593Smuzhiyun #define IDT_NTMTBLDATA_PART_FLD 17 761*4882a593Smuzhiyun #define IDT_NTMTBLDATA_ATP_TRANS 0x20000000U 762*4882a593Smuzhiyun #define IDT_NTMTBLDATA_CNS_INV 0x40000000U 763*4882a593Smuzhiyun #define IDT_NTMTBLDATA_RNS_INV 0x80000000U 764*4882a593Smuzhiyun 765*4882a593Smuzhiyun /* 766*4882a593Smuzhiyun * REQIDCAP register fields related constants 767*4882a593Smuzhiyun * @IDT_REQIDCAP_REQID_MASK: Request ID field mask 768*4882a593Smuzhiyun * @IDT_REQIDCAP_REQID_FLD: Request ID field offset 769*4882a593Smuzhiyun */ 770*4882a593Smuzhiyun #define IDT_REQIDCAP_REQID_MASK 0x0000FFFFU 771*4882a593Smuzhiyun #define IDT_REQIDCAP_REQID_FLD 0 772*4882a593Smuzhiyun 773*4882a593Smuzhiyun /* 774*4882a593Smuzhiyun * LUTOFFSET register fields related constants 775*4882a593Smuzhiyun * @IDT_LUTOFFSET_INDEX_MASK: Lookup table index field mask 776*4882a593Smuzhiyun * @IDT_LUTOFFSET_INDEX_FLD: Lookup table index field offset 777*4882a593Smuzhiyun * @IDT_LUTOFFSET_BAR_MASK: Lookup table BAR select field mask 778*4882a593Smuzhiyun * @IDT_LUTOFFSET_BAR_FLD: Lookup table BAR select field offset 779*4882a593Smuzhiyun */ 780*4882a593Smuzhiyun #define IDT_LUTOFFSET_INDEX_MASK 0x0000001FU 781*4882a593Smuzhiyun #define IDT_LUTOFFSET_INDEX_FLD 0 782*4882a593Smuzhiyun #define IDT_LUTOFFSET_BAR_MASK 0x00000700U 783*4882a593Smuzhiyun #define IDT_LUTOFFSET_BAR_FLD 8 784*4882a593Smuzhiyun 785*4882a593Smuzhiyun /* 786*4882a593Smuzhiyun * LUTUDATA register fields related constants 787*4882a593Smuzhiyun * @IDT_LUTUDATA_PART_MASK: Partition field mask 788*4882a593Smuzhiyun * @IDT_LUTUDATA_PART_FLD: Partition field offset 789*4882a593Smuzhiyun * @IDT_LUTUDATA_VALID: Lookup table entry valid bit 790*4882a593Smuzhiyun */ 791*4882a593Smuzhiyun #define IDT_LUTUDATA_PART_MASK 0x0000000FU 792*4882a593Smuzhiyun #define IDT_LUTUDATA_PART_FLD 0 793*4882a593Smuzhiyun #define IDT_LUTUDATA_VALID 0x80000000U 794*4882a593Smuzhiyun 795*4882a593Smuzhiyun /* 796*4882a593Smuzhiyun * SWPARTxSTS register fields related constants 797*4882a593Smuzhiyun * @IDT_SWPARTxSTS_SCI: Switch partition state change initiated 798*4882a593Smuzhiyun * @IDT_SWPARTxSTS_SCC: Switch partition state change completed 799*4882a593Smuzhiyun * @IDT_SWPARTxSTS_STATE_MASK: Switch partition state mask 800*4882a593Smuzhiyun * @IDT_SWPARTxSTS_STATE_FLD: Switch partition state field offset 801*4882a593Smuzhiyun * @IDT_SWPARTxSTS_STATE_DIS: Switch partition disabled 802*4882a593Smuzhiyun * @IDT_SWPARTxSTS_STATE_ACT: Switch partition enabled 803*4882a593Smuzhiyun * @IDT_SWPARTxSTS_STATE_RES: Switch partition in reset 804*4882a593Smuzhiyun * @IDT_SWPARTxSTS_US: Switch partition has upstream port 805*4882a593Smuzhiyun * @IDT_SWPARTxSTS_USID_MASK: Switch partition upstream port ID mask 806*4882a593Smuzhiyun * @IDT_SWPARTxSTS_USID_FLD: Switch partition upstream port ID field offset 807*4882a593Smuzhiyun * @IDT_SWPARTxSTS_NT: Upstream port has NT function 808*4882a593Smuzhiyun * @IDT_SWPARTxSTS_DMA: Upstream port has DMA function 809*4882a593Smuzhiyun */ 810*4882a593Smuzhiyun #define IDT_SWPARTxSTS_SCI 0x00000001U 811*4882a593Smuzhiyun #define IDT_SWPARTxSTS_SCC 0x00000002U 812*4882a593Smuzhiyun #define IDT_SWPARTxSTS_STATE_MASK 0x00000060U 813*4882a593Smuzhiyun #define IDT_SWPARTxSTS_STATE_FLD 5 814*4882a593Smuzhiyun #define IDT_SWPARTxSTS_STATE_DIS 0x00000000U 815*4882a593Smuzhiyun #define IDT_SWPARTxSTS_STATE_ACT 0x00000020U 816*4882a593Smuzhiyun #define IDT_SWPARTxSTS_STATE_RES 0x00000060U 817*4882a593Smuzhiyun #define IDT_SWPARTxSTS_US 0x00000100U 818*4882a593Smuzhiyun #define IDT_SWPARTxSTS_USID_MASK 0x00003E00U 819*4882a593Smuzhiyun #define IDT_SWPARTxSTS_USID_FLD 9 820*4882a593Smuzhiyun #define IDT_SWPARTxSTS_NT 0x00004000U 821*4882a593Smuzhiyun #define IDT_SWPARTxSTS_DMA 0x00008000U 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun /* 824*4882a593Smuzhiyun * SWPORTxSTS register fields related constants 825*4882a593Smuzhiyun * @IDT_SWPORTxSTS_OMCI: Operation mode change initiated 826*4882a593Smuzhiyun * @IDT_SWPORTxSTS_OMCC: Operation mode change completed 827*4882a593Smuzhiyun * @IDT_SWPORTxSTS_LINKUP: Link up status 828*4882a593Smuzhiyun * @IDT_SWPORTxSTS_DS: Port lanes behave as downstream lanes 829*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_MASK: Port mode field mask 830*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_FLD: Port mode field offset 831*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_DIS: Port mode - disabled 832*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_DS: Port mode - downstream switch port 833*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_US: Port mode - upstream switch port 834*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_NT: Port mode - NT function 835*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_USNT: Port mode - upstream switch port with NTB 836*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_UNAT: Port mode - unattached 837*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_USDMA: Port mode - upstream switch port with DMA 838*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_USNTDMA:Port mode - upstream port with NTB and DMA 839*4882a593Smuzhiyun * @IDT_SWPORTxSTS_MODE_NTDMA: Port mode - NT function with DMA 840*4882a593Smuzhiyun * @IDT_SWPORTxSTS_SWPART_MASK: Port partition field mask 841*4882a593Smuzhiyun * @IDT_SWPORTxSTS_SWPART_FLD: Port partition field offset 842*4882a593Smuzhiyun * @IDT_SWPORTxSTS_DEVNUM_MASK: Port device number field mask 843*4882a593Smuzhiyun * @IDT_SWPORTxSTS_DEVNUM_FLD: Port device number field offset 844*4882a593Smuzhiyun */ 845*4882a593Smuzhiyun #define IDT_SWPORTxSTS_OMCI 0x00000001U 846*4882a593Smuzhiyun #define IDT_SWPORTxSTS_OMCC 0x00000002U 847*4882a593Smuzhiyun #define IDT_SWPORTxSTS_LINKUP 0x00000010U 848*4882a593Smuzhiyun #define IDT_SWPORTxSTS_DS 0x00000020U 849*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_MASK 0x000003C0U 850*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_FLD 6 851*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_DIS 0x00000000U 852*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_DS 0x00000040U 853*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_US 0x00000080U 854*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_NT 0x000000C0U 855*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_USNT 0x00000100U 856*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_UNAT 0x00000140U 857*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_USDMA 0x00000180U 858*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_USNTDMA 0x000001C0U 859*4882a593Smuzhiyun #define IDT_SWPORTxSTS_MODE_NTDMA 0x00000200U 860*4882a593Smuzhiyun #define IDT_SWPORTxSTS_SWPART_MASK 0x00001C00U 861*4882a593Smuzhiyun #define IDT_SWPORTxSTS_SWPART_FLD 10 862*4882a593Smuzhiyun #define IDT_SWPORTxSTS_DEVNUM_MASK 0x001F0000U 863*4882a593Smuzhiyun #define IDT_SWPORTxSTS_DEVNUM_FLD 16 864*4882a593Smuzhiyun 865*4882a593Smuzhiyun /* 866*4882a593Smuzhiyun * SEMSK register fields related constants 867*4882a593Smuzhiyun * @IDT_SEMSK_LINKUP: Link Up event mask bit 868*4882a593Smuzhiyun * @IDT_SEMSK_LINKDN: Link Down event mask bit 869*4882a593Smuzhiyun * @IDT_SEMSK_GSIGNAL: Global Signal event mask bit 870*4882a593Smuzhiyun */ 871*4882a593Smuzhiyun #define IDT_SEMSK_LINKUP 0x00000001U 872*4882a593Smuzhiyun #define IDT_SEMSK_LINKDN 0x00000002U 873*4882a593Smuzhiyun #define IDT_SEMSK_GSIGNAL 0x00000020U 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun /* 876*4882a593Smuzhiyun * SWPxMSGCTL register fields related constants 877*4882a593Smuzhiyun * @IDT_SWPxMSGCTL_REG_MASK: Register select field mask 878*4882a593Smuzhiyun * @IDT_SWPxMSGCTL_REG_FLD: Register select field offset 879*4882a593Smuzhiyun * @IDT_SWPxMSGCTL_PART_MASK: Partition select field mask 880*4882a593Smuzhiyun * @IDT_SWPxMSGCTL_PART_FLD: Partition select field offset 881*4882a593Smuzhiyun */ 882*4882a593Smuzhiyun #define IDT_SWPxMSGCTL_REG_MASK 0x00000003U 883*4882a593Smuzhiyun #define IDT_SWPxMSGCTL_REG_FLD 0 884*4882a593Smuzhiyun #define IDT_SWPxMSGCTL_PART_MASK 0x00000070U 885*4882a593Smuzhiyun #define IDT_SWPxMSGCTL_PART_FLD 4 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun /* 888*4882a593Smuzhiyun * TMPCTL register fields related constants 889*4882a593Smuzhiyun * @IDT_TMPCTL_LTH_MASK: Low temperature threshold field mask 890*4882a593Smuzhiyun * @IDT_TMPCTL_LTH_FLD: Low temperature threshold field offset 891*4882a593Smuzhiyun * @IDT_TMPCTL_MTH_MASK: Middle temperature threshold field mask 892*4882a593Smuzhiyun * @IDT_TMPCTL_MTH_FLD: Middle temperature threshold field offset 893*4882a593Smuzhiyun * @IDT_TMPCTL_HTH_MASK: High temperature threshold field mask 894*4882a593Smuzhiyun * @IDT_TMPCTL_HTH_FLD: High temperature threshold field offset 895*4882a593Smuzhiyun * @IDT_TMPCTL_PDOWN: Temperature sensor power down 896*4882a593Smuzhiyun */ 897*4882a593Smuzhiyun #define IDT_TMPCTL_LTH_MASK 0x000000FFU 898*4882a593Smuzhiyun #define IDT_TMPCTL_LTH_FLD 0 899*4882a593Smuzhiyun #define IDT_TMPCTL_MTH_MASK 0x0000FF00U 900*4882a593Smuzhiyun #define IDT_TMPCTL_MTH_FLD 8 901*4882a593Smuzhiyun #define IDT_TMPCTL_HTH_MASK 0x00FF0000U 902*4882a593Smuzhiyun #define IDT_TMPCTL_HTH_FLD 16 903*4882a593Smuzhiyun #define IDT_TMPCTL_PDOWN 0x80000000U 904*4882a593Smuzhiyun 905*4882a593Smuzhiyun /* 906*4882a593Smuzhiyun * TMPSTS register fields related constants 907*4882a593Smuzhiyun * @IDT_TMPSTS_TEMP_MASK: Current temperature field mask 908*4882a593Smuzhiyun * @IDT_TMPSTS_TEMP_FLD: Current temperature field offset 909*4882a593Smuzhiyun * @IDT_TMPSTS_LTEMP_MASK: Lowest temperature field mask 910*4882a593Smuzhiyun * @IDT_TMPSTS_LTEMP_FLD: Lowest temperature field offset 911*4882a593Smuzhiyun * @IDT_TMPSTS_HTEMP_MASK: Highest temperature field mask 912*4882a593Smuzhiyun * @IDT_TMPSTS_HTEMP_FLD: Highest temperature field offset 913*4882a593Smuzhiyun */ 914*4882a593Smuzhiyun #define IDT_TMPSTS_TEMP_MASK 0x000000FFU 915*4882a593Smuzhiyun #define IDT_TMPSTS_TEMP_FLD 0 916*4882a593Smuzhiyun #define IDT_TMPSTS_LTEMP_MASK 0x0000FF00U 917*4882a593Smuzhiyun #define IDT_TMPSTS_LTEMP_FLD 8 918*4882a593Smuzhiyun #define IDT_TMPSTS_HTEMP_MASK 0x00FF0000U 919*4882a593Smuzhiyun #define IDT_TMPSTS_HTEMP_FLD 16 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun /* 922*4882a593Smuzhiyun * TMPALARM register fields related constants 923*4882a593Smuzhiyun * @IDT_TMPALARM_LTEMP_MASK: Lowest temperature field mask 924*4882a593Smuzhiyun * @IDT_TMPALARM_LTEMP_FLD: Lowest temperature field offset 925*4882a593Smuzhiyun * @IDT_TMPALARM_HTEMP_MASK: Highest temperature field mask 926*4882a593Smuzhiyun * @IDT_TMPALARM_HTEMP_FLD: Highest temperature field offset 927*4882a593Smuzhiyun * @IDT_TMPALARM_IRQ_MASK: Alarm IRQ status mask 928*4882a593Smuzhiyun */ 929*4882a593Smuzhiyun #define IDT_TMPALARM_LTEMP_MASK 0x0000FF00U 930*4882a593Smuzhiyun #define IDT_TMPALARM_LTEMP_FLD 8 931*4882a593Smuzhiyun #define IDT_TMPALARM_HTEMP_MASK 0x00FF0000U 932*4882a593Smuzhiyun #define IDT_TMPALARM_HTEMP_FLD 16 933*4882a593Smuzhiyun #define IDT_TMPALARM_IRQ_MASK 0x3F000000U 934*4882a593Smuzhiyun 935*4882a593Smuzhiyun /* 936*4882a593Smuzhiyun * TMPADJ register fields related constants 937*4882a593Smuzhiyun * @IDT_TMPADJ_OFFSET_MASK: Temperature value offset field mask 938*4882a593Smuzhiyun * @IDT_TMPADJ_OFFSET_FLD: Temperature value offset field offset 939*4882a593Smuzhiyun */ 940*4882a593Smuzhiyun #define IDT_TMPADJ_OFFSET_MASK 0x000000FFU 941*4882a593Smuzhiyun #define IDT_TMPADJ_OFFSET_FLD 0 942*4882a593Smuzhiyun 943*4882a593Smuzhiyun /* 944*4882a593Smuzhiyun * Helper macro to get/set the corresponding field value 945*4882a593Smuzhiyun * @GET_FIELD: Retrieve the value of the corresponding field 946*4882a593Smuzhiyun * @SET_FIELD: Set the specified field up 947*4882a593Smuzhiyun * @IS_FLD_SET: Check whether a field is set with value 948*4882a593Smuzhiyun */ 949*4882a593Smuzhiyun #define GET_FIELD(field, data) \ 950*4882a593Smuzhiyun (((u32)(data) & IDT_ ##field## _MASK) >> IDT_ ##field## _FLD) 951*4882a593Smuzhiyun #define SET_FIELD(field, data, value) \ 952*4882a593Smuzhiyun (((u32)(data) & ~IDT_ ##field## _MASK) | \ 953*4882a593Smuzhiyun ((u32)(value) << IDT_ ##field## _FLD)) 954*4882a593Smuzhiyun #define IS_FLD_SET(field, data, value) \ 955*4882a593Smuzhiyun (((u32)(data) & IDT_ ##field## _MASK) == IDT_ ##field## _ ##value) 956*4882a593Smuzhiyun 957*4882a593Smuzhiyun /* 958*4882a593Smuzhiyun * Useful registers masks: 959*4882a593Smuzhiyun * @IDT_DBELL_MASK: Doorbell bits mask 960*4882a593Smuzhiyun * @IDT_OUTMSG_MASK: Out messages status bits mask 961*4882a593Smuzhiyun * @IDT_INMSG_MASK: In messages status bits mask 962*4882a593Smuzhiyun * @IDT_MSG_MASK: Any message status bits mask 963*4882a593Smuzhiyun */ 964*4882a593Smuzhiyun #define IDT_DBELL_MASK ((u32)0xFFFFFFFFU) 965*4882a593Smuzhiyun #define IDT_OUTMSG_MASK ((u32)0x0000000FU) 966*4882a593Smuzhiyun #define IDT_INMSG_MASK ((u32)0x000F0000U) 967*4882a593Smuzhiyun #define IDT_MSG_MASK (IDT_INMSG_MASK | IDT_OUTMSG_MASK) 968*4882a593Smuzhiyun 969*4882a593Smuzhiyun /* 970*4882a593Smuzhiyun * Number of IDT NTB resources: 971*4882a593Smuzhiyun * @IDT_MSG_CNT: Number of Message registers 972*4882a593Smuzhiyun * @IDT_BAR_CNT: Number of BARs of each port 973*4882a593Smuzhiyun * @IDT_MTBL_ENTRY_CNT: Number mapping table entries 974*4882a593Smuzhiyun */ 975*4882a593Smuzhiyun #define IDT_MSG_CNT 4 976*4882a593Smuzhiyun #define IDT_BAR_CNT 6 977*4882a593Smuzhiyun #define IDT_MTBL_ENTRY_CNT 64 978*4882a593Smuzhiyun 979*4882a593Smuzhiyun /* 980*4882a593Smuzhiyun * General IDT PCIe-switch constant 981*4882a593Smuzhiyun * @IDT_MAX_NR_PORTS: Maximum number of ports per IDT PCIe-switch 982*4882a593Smuzhiyun * @IDT_MAX_NR_PARTS: Maximum number of partitions per IDT PCIe-switch 983*4882a593Smuzhiyun * @IDT_MAX_NR_PEERS: Maximum number of NT-peers per IDT PCIe-switch 984*4882a593Smuzhiyun * @IDT_MAX_NR_MWS: Maximum number of Memory Widows 985*4882a593Smuzhiyun * @IDT_PCIE_REGSIZE: Size of the registers in bytes 986*4882a593Smuzhiyun * @IDT_TRANS_ALIGN: Alignment of translated base address 987*4882a593Smuzhiyun * @IDT_DIR_SIZE_ALIGN: Alignment of size setting for direct translated MWs. 988*4882a593Smuzhiyun * Even though the lower 10 bits are reserved, they are 989*4882a593Smuzhiyun * treated by IDT as one's so basically there is no any 990*4882a593Smuzhiyun * alignment of size limit for DIR address translation. 991*4882a593Smuzhiyun */ 992*4882a593Smuzhiyun #define IDT_MAX_NR_PORTS 24 993*4882a593Smuzhiyun #define IDT_MAX_NR_PARTS 8 994*4882a593Smuzhiyun #define IDT_MAX_NR_PEERS 8 995*4882a593Smuzhiyun #define IDT_MAX_NR_MWS 29 996*4882a593Smuzhiyun #define IDT_PCIE_REGSIZE 4 997*4882a593Smuzhiyun #define IDT_TRANS_ALIGN 4 998*4882a593Smuzhiyun #define IDT_DIR_SIZE_ALIGN 1 999*4882a593Smuzhiyun 1000*4882a593Smuzhiyun /* 1001*4882a593Smuzhiyun * IDT PCIe-switch temperature sensor value limits 1002*4882a593Smuzhiyun * @IDT_TEMP_MIN_MDEG: Minimal integer value of temperature 1003*4882a593Smuzhiyun * @IDT_TEMP_MAX_MDEG: Maximal integer value of temperature 1004*4882a593Smuzhiyun * @IDT_TEMP_MIN_OFFSET:Minimal integer value of temperature offset 1005*4882a593Smuzhiyun * @IDT_TEMP_MAX_OFFSET:Maximal integer value of temperature offset 1006*4882a593Smuzhiyun */ 1007*4882a593Smuzhiyun #define IDT_TEMP_MIN_MDEG 0 1008*4882a593Smuzhiyun #define IDT_TEMP_MAX_MDEG 127500 1009*4882a593Smuzhiyun #define IDT_TEMP_MIN_OFFSET -64000 1010*4882a593Smuzhiyun #define IDT_TEMP_MAX_OFFSET 63500 1011*4882a593Smuzhiyun 1012*4882a593Smuzhiyun /* 1013*4882a593Smuzhiyun * Temperature sensor values enumeration 1014*4882a593Smuzhiyun * @IDT_TEMP_CUR: Current temperature 1015*4882a593Smuzhiyun * @IDT_TEMP_LOW: Lowest historical temperature 1016*4882a593Smuzhiyun * @IDT_TEMP_HIGH: Highest historical temperature 1017*4882a593Smuzhiyun * @IDT_TEMP_OFFSET: Current temperature offset 1018*4882a593Smuzhiyun */ 1019*4882a593Smuzhiyun enum idt_temp_val { 1020*4882a593Smuzhiyun IDT_TEMP_CUR, 1021*4882a593Smuzhiyun IDT_TEMP_LOW, 1022*4882a593Smuzhiyun IDT_TEMP_HIGH, 1023*4882a593Smuzhiyun IDT_TEMP_OFFSET 1024*4882a593Smuzhiyun }; 1025*4882a593Smuzhiyun 1026*4882a593Smuzhiyun /* 1027*4882a593Smuzhiyun * IDT Memory Windows type. Depending on the device settings, IDT supports 1028*4882a593Smuzhiyun * Direct Address Translation MW registers and Lookup Table registers 1029*4882a593Smuzhiyun * @IDT_MW_DIR: Direct address translation 1030*4882a593Smuzhiyun * @IDT_MW_LUT12: 12-entry lookup table entry 1031*4882a593Smuzhiyun * @IDT_MW_LUT24: 24-entry lookup table entry 1032*4882a593Smuzhiyun * 1033*4882a593Smuzhiyun * NOTE These values are exactly the same as one of the BARSETUP ATRAN field 1034*4882a593Smuzhiyun */ 1035*4882a593Smuzhiyun enum idt_mw_type { 1036*4882a593Smuzhiyun IDT_MW_DIR = 0x0, 1037*4882a593Smuzhiyun IDT_MW_LUT12 = 0x1, 1038*4882a593Smuzhiyun IDT_MW_LUT24 = 0x2 1039*4882a593Smuzhiyun }; 1040*4882a593Smuzhiyun 1041*4882a593Smuzhiyun /* 1042*4882a593Smuzhiyun * IDT PCIe-switch model private data 1043*4882a593Smuzhiyun * @name: Device name 1044*4882a593Smuzhiyun * @port_cnt: Total number of NT endpoint ports 1045*4882a593Smuzhiyun * @ports: Port ids 1046*4882a593Smuzhiyun */ 1047*4882a593Smuzhiyun struct idt_89hpes_cfg { 1048*4882a593Smuzhiyun char *name; 1049*4882a593Smuzhiyun unsigned char port_cnt; 1050*4882a593Smuzhiyun unsigned char ports[]; 1051*4882a593Smuzhiyun }; 1052*4882a593Smuzhiyun 1053*4882a593Smuzhiyun /* 1054*4882a593Smuzhiyun * Memory window configuration structure 1055*4882a593Smuzhiyun * @type: Type of the memory window (direct address translation or lookup 1056*4882a593Smuzhiyun * table) 1057*4882a593Smuzhiyun * 1058*4882a593Smuzhiyun * @bar: PCIe BAR the memory window referenced to 1059*4882a593Smuzhiyun * @idx: Index of the memory window within the BAR 1060*4882a593Smuzhiyun * 1061*4882a593Smuzhiyun * @addr_align: Alignment of translated address 1062*4882a593Smuzhiyun * @size_align: Alignment of memory window size 1063*4882a593Smuzhiyun * @size_max: Maximum size of memory window 1064*4882a593Smuzhiyun */ 1065*4882a593Smuzhiyun struct idt_mw_cfg { 1066*4882a593Smuzhiyun enum idt_mw_type type; 1067*4882a593Smuzhiyun 1068*4882a593Smuzhiyun unsigned char bar; 1069*4882a593Smuzhiyun unsigned char idx; 1070*4882a593Smuzhiyun 1071*4882a593Smuzhiyun u64 addr_align; 1072*4882a593Smuzhiyun u64 size_align; 1073*4882a593Smuzhiyun u64 size_max; 1074*4882a593Smuzhiyun }; 1075*4882a593Smuzhiyun 1076*4882a593Smuzhiyun /* 1077*4882a593Smuzhiyun * Description structure of peer IDT NT-functions: 1078*4882a593Smuzhiyun * @port: NT-function port 1079*4882a593Smuzhiyun * @part: NT-function partition 1080*4882a593Smuzhiyun * 1081*4882a593Smuzhiyun * @mw_cnt: Number of memory windows supported by NT-function 1082*4882a593Smuzhiyun * @mws: Array of memory windows descriptors 1083*4882a593Smuzhiyun */ 1084*4882a593Smuzhiyun struct idt_ntb_peer { 1085*4882a593Smuzhiyun unsigned char port; 1086*4882a593Smuzhiyun unsigned char part; 1087*4882a593Smuzhiyun 1088*4882a593Smuzhiyun unsigned char mw_cnt; 1089*4882a593Smuzhiyun struct idt_mw_cfg *mws; 1090*4882a593Smuzhiyun }; 1091*4882a593Smuzhiyun 1092*4882a593Smuzhiyun /* 1093*4882a593Smuzhiyun * Description structure of local IDT NT-function: 1094*4882a593Smuzhiyun * @ntb: Linux NTB-device description structure 1095*4882a593Smuzhiyun * @swcfg: Pointer to the structure of local IDT PCIe-switch 1096*4882a593Smuzhiyun * specific cofnfigurations 1097*4882a593Smuzhiyun * 1098*4882a593Smuzhiyun * @port: Local NT-function port 1099*4882a593Smuzhiyun * @part: Local NT-function partition 1100*4882a593Smuzhiyun * 1101*4882a593Smuzhiyun * @peer_cnt: Number of peers with activated NTB-function 1102*4882a593Smuzhiyun * @peers: Array of peers descripting structures 1103*4882a593Smuzhiyun * @port_idx_map: Map of port number -> peer index 1104*4882a593Smuzhiyun * @part_idx_map: Map of partition number -> peer index 1105*4882a593Smuzhiyun * 1106*4882a593Smuzhiyun * @mtbl_lock: Mapping table access lock 1107*4882a593Smuzhiyun * 1108*4882a593Smuzhiyun * @mw_cnt: Number of memory windows supported by NT-function 1109*4882a593Smuzhiyun * @mws: Array of memory windows descriptors 1110*4882a593Smuzhiyun * @lut_lock: Lookup table access lock 1111*4882a593Smuzhiyun * 1112*4882a593Smuzhiyun * @msg_locks: Message registers mapping table lockers 1113*4882a593Smuzhiyun * 1114*4882a593Smuzhiyun * @cfgspc: Virtual address of the memory mapped configuration 1115*4882a593Smuzhiyun * space of the NT-function 1116*4882a593Smuzhiyun * @db_mask_lock: Doorbell mask register lock 1117*4882a593Smuzhiyun * @msg_mask_lock: Message mask register lock 1118*4882a593Smuzhiyun * @gasa_lock: GASA registers access lock 1119*4882a593Smuzhiyun * 1120*4882a593Smuzhiyun * @hwmon_mtx: Temperature sensor interface update mutex 1121*4882a593Smuzhiyun * 1122*4882a593Smuzhiyun * @dbgfs_info: DebugFS info node 1123*4882a593Smuzhiyun */ 1124*4882a593Smuzhiyun struct idt_ntb_dev { 1125*4882a593Smuzhiyun struct ntb_dev ntb; 1126*4882a593Smuzhiyun struct idt_89hpes_cfg *swcfg; 1127*4882a593Smuzhiyun 1128*4882a593Smuzhiyun unsigned char port; 1129*4882a593Smuzhiyun unsigned char part; 1130*4882a593Smuzhiyun 1131*4882a593Smuzhiyun unsigned char peer_cnt; 1132*4882a593Smuzhiyun struct idt_ntb_peer peers[IDT_MAX_NR_PEERS]; 1133*4882a593Smuzhiyun char port_idx_map[IDT_MAX_NR_PORTS]; 1134*4882a593Smuzhiyun char part_idx_map[IDT_MAX_NR_PARTS]; 1135*4882a593Smuzhiyun 1136*4882a593Smuzhiyun spinlock_t mtbl_lock; 1137*4882a593Smuzhiyun 1138*4882a593Smuzhiyun unsigned char mw_cnt; 1139*4882a593Smuzhiyun struct idt_mw_cfg *mws; 1140*4882a593Smuzhiyun spinlock_t lut_lock; 1141*4882a593Smuzhiyun 1142*4882a593Smuzhiyun spinlock_t msg_locks[IDT_MSG_CNT]; 1143*4882a593Smuzhiyun 1144*4882a593Smuzhiyun void __iomem *cfgspc; 1145*4882a593Smuzhiyun spinlock_t db_mask_lock; 1146*4882a593Smuzhiyun spinlock_t msg_mask_lock; 1147*4882a593Smuzhiyun spinlock_t gasa_lock; 1148*4882a593Smuzhiyun 1149*4882a593Smuzhiyun struct mutex hwmon_mtx; 1150*4882a593Smuzhiyun 1151*4882a593Smuzhiyun struct dentry *dbgfs_info; 1152*4882a593Smuzhiyun }; 1153*4882a593Smuzhiyun #define to_ndev_ntb(__ntb) container_of(__ntb, struct idt_ntb_dev, ntb) 1154*4882a593Smuzhiyun 1155*4882a593Smuzhiyun /* 1156*4882a593Smuzhiyun * Descriptor of the IDT PCIe-switch BAR resources 1157*4882a593Smuzhiyun * @setup: BAR setup register 1158*4882a593Smuzhiyun * @limit: BAR limit register 1159*4882a593Smuzhiyun * @ltbase: Lower translated base address 1160*4882a593Smuzhiyun * @utbase: Upper translated base address 1161*4882a593Smuzhiyun */ 1162*4882a593Smuzhiyun struct idt_ntb_bar { 1163*4882a593Smuzhiyun unsigned int setup; 1164*4882a593Smuzhiyun unsigned int limit; 1165*4882a593Smuzhiyun unsigned int ltbase; 1166*4882a593Smuzhiyun unsigned int utbase; 1167*4882a593Smuzhiyun }; 1168*4882a593Smuzhiyun 1169*4882a593Smuzhiyun /* 1170*4882a593Smuzhiyun * Descriptor of the IDT PCIe-switch message resources 1171*4882a593Smuzhiyun * @in: Inbound message register 1172*4882a593Smuzhiyun * @out: Outbound message register 1173*4882a593Smuzhiyun * @src: Source of inbound message register 1174*4882a593Smuzhiyun */ 1175*4882a593Smuzhiyun struct idt_ntb_msg { 1176*4882a593Smuzhiyun unsigned int in; 1177*4882a593Smuzhiyun unsigned int out; 1178*4882a593Smuzhiyun unsigned int src; 1179*4882a593Smuzhiyun }; 1180*4882a593Smuzhiyun 1181*4882a593Smuzhiyun /* 1182*4882a593Smuzhiyun * Descriptor of the IDT PCIe-switch NT-function specific parameters in the 1183*4882a593Smuzhiyun * PCI Configuration Space 1184*4882a593Smuzhiyun * @bars: BARs related registers 1185*4882a593Smuzhiyun * @msgs: Messaging related registers 1186*4882a593Smuzhiyun */ 1187*4882a593Smuzhiyun struct idt_ntb_regs { 1188*4882a593Smuzhiyun struct idt_ntb_bar bars[IDT_BAR_CNT]; 1189*4882a593Smuzhiyun struct idt_ntb_msg msgs[IDT_MSG_CNT]; 1190*4882a593Smuzhiyun }; 1191*4882a593Smuzhiyun 1192*4882a593Smuzhiyun /* 1193*4882a593Smuzhiyun * Descriptor of the IDT PCIe-switch port specific parameters in the 1194*4882a593Smuzhiyun * Global Configuration Space 1195*4882a593Smuzhiyun * @pcicmdsts: PCI command/status register 1196*4882a593Smuzhiyun * @pcielctlsts: PCIe link control/status 1197*4882a593Smuzhiyun * 1198*4882a593Smuzhiyun * @ctl: Port control register 1199*4882a593Smuzhiyun * @sts: Port status register 1200*4882a593Smuzhiyun * 1201*4882a593Smuzhiyun * @bars: BARs related registers 1202*4882a593Smuzhiyun */ 1203*4882a593Smuzhiyun struct idt_ntb_port { 1204*4882a593Smuzhiyun unsigned int pcicmdsts; 1205*4882a593Smuzhiyun unsigned int pcielctlsts; 1206*4882a593Smuzhiyun unsigned int ntctl; 1207*4882a593Smuzhiyun 1208*4882a593Smuzhiyun unsigned int ctl; 1209*4882a593Smuzhiyun unsigned int sts; 1210*4882a593Smuzhiyun 1211*4882a593Smuzhiyun struct idt_ntb_bar bars[IDT_BAR_CNT]; 1212*4882a593Smuzhiyun }; 1213*4882a593Smuzhiyun 1214*4882a593Smuzhiyun /* 1215*4882a593Smuzhiyun * Descriptor of the IDT PCIe-switch partition specific parameters. 1216*4882a593Smuzhiyun * @ctl: Partition control register in the Global Address Space 1217*4882a593Smuzhiyun * @sts: Partition status register in the Global Address Space 1218*4882a593Smuzhiyun * @msgctl: Messages control registers 1219*4882a593Smuzhiyun */ 1220*4882a593Smuzhiyun struct idt_ntb_part { 1221*4882a593Smuzhiyun unsigned int ctl; 1222*4882a593Smuzhiyun unsigned int sts; 1223*4882a593Smuzhiyun unsigned int msgctl[IDT_MSG_CNT]; 1224*4882a593Smuzhiyun }; 1225*4882a593Smuzhiyun 1226*4882a593Smuzhiyun #endif /* NTB_HW_IDT_H */ 1227