xref: /OK3568_Linux_fs/kernel/drivers/ntb/hw/idt/ntb_hw_idt.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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