Quelle ntb_hw_idt.h
Sprache: C
/*
* This file is provided under a GPLv2 license . When using or
* redistributing this file , you may do so under that license .
*
* GPL LICENSE SUMMARY
*
* Copyright ( C ) 2016 - 2018 T - Platforms JSC All Rights Reserved .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU General
* Public License for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , one can be found http : //www.gnu.org/licenses/.
*
* The full GNU General Public License is included in this distribution in
* the file called " COPYING " .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
* LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* IDT PCIe - switch NTB Linux driver
*
* Contact Information :
* Serge Semin < fancer . lancer @ gmail . com > , < Sergey . Semin @ t - platforms . ru >
*/
#ifndef NTB_HW_IDT_H
#define NTB_HW_IDT_H
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/pci_ids.h>
#include <linux/interrupt.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/ntb.h>
/*
* Macro is used to create the struct pci_device_id that matches
* the supported IDT PCIe - switches
* @ devname : Capitalized name of the particular device
* @ data : Variable passed to the driver of the particular device
*/
#define IDT_PCI_DEVICE_IDS(devname, data) \
.vendor = PCI_VENDOR_ID_IDT, .device = PCI_DEVICE_ID_IDT_## devname, \
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \
.class = (PCI_CLASS_BRIDGE_OTHER << 8 ), .class_mask = (0 xFFFF00), \
.driver_data = (kernel_ulong_t)&data
/*
* IDT PCIe - switches device IDs
*/
#define PCI_DEVICE_ID_IDT_89HPES24NT6AG2 0 x8091
#define PCI_DEVICE_ID_IDT_89HPES32NT8AG2 0 x808F
#define PCI_DEVICE_ID_IDT_89HPES32NT8BG2 0 x8088
#define PCI_DEVICE_ID_IDT_89HPES12NT12G2 0 x8092
#define PCI_DEVICE_ID_IDT_89HPES16NT16G2 0 x8090
#define PCI_DEVICE_ID_IDT_89HPES24NT24G2 0 x808E
#define PCI_DEVICE_ID_IDT_89HPES32NT24AG2 0 x808C
#define PCI_DEVICE_ID_IDT_89HPES32NT24BG2 0 x808A
/*
* NT - function Configuration Space registers
* NOTE 1 ) The IDT PCIe - switch internal data is little - endian
* so it must be taken into account in the driver
* internals .
* 2 ) Additionally the registers should be accessed either
* with byte - enables corresponding to their native size or
* the size of one DWORD
*
* So to simplify the driver code , there is only DWORD - sized read / write
* operations utilized .
*/
/* PCI Express Configuration Space */
/* PCI Express command/status register (DWORD) */
#define IDT_NT_PCICMDSTS 0 x00004U
/* PCI Express Device Capabilities (DWORD) */
#define IDT_NT_PCIEDCAP 0 x00044U
/* PCI Express Device Control/Status (WORD+WORD) */
#define IDT_NT_PCIEDCTLSTS 0 x00048U
/* PCI Express Link Capabilities (DWORD) */
#define IDT_NT_PCIELCAP 0 x0004CU
/* PCI Express Link Control/Status (WORD+WORD) */
#define IDT_NT_PCIELCTLSTS 0 x00050U
/* PCI Express Device Capabilities 2 (DWORD) */
#define IDT_NT_PCIEDCAP2 0 x00064U
/* PCI Express Device Control 2 (WORD+WORD) */
#define IDT_NT_PCIEDCTL2 0 x00068U
/* PCI Power Management Control and Status (DWORD) */
#define IDT_NT_PMCSR 0 x000C4U
/*==========================================*/
/* IDT Proprietary NT-port-specific registers */
/* NT-function main control registers */
/* NT Endpoint Control (DWORD) */
#define IDT_NT_NTCTL 0 x00400U
/* NT Endpoint Interrupt Status/Mask (DWORD) */
#define IDT_NT_NTINTSTS 0 x00404U
#define IDT_NT_NTINTMSK 0 x00408U
/* NT Endpoint Signal Data (DWORD) */
#define IDT_NT_NTSDATA 0 x0040CU
/* NT Endpoint Global Signal (DWORD) */
#define IDT_NT_NTGSIGNAL 0 x00410U
/* Internal Error Reporting Mask 0/1 (DWORD) */
#define IDT_NT_NTIERRORMSK0 0 x00414U
#define IDT_NT_NTIERRORMSK1 0 x00418U
/* Doorbel registers */
/* NT Outbound Doorbell Set (DWORD) */
#define IDT_NT_OUTDBELLSET 0 x00420U
/* NT Inbound Doorbell Status/Mask (DWORD) */
#define IDT_NT_INDBELLSTS 0 x00428U
#define IDT_NT_INDBELLMSK 0 x0042CU
/* Message registers */
/* Outbound Message N (DWORD) */
#define IDT_NT_OUTMSG0 0 x00430U
#define IDT_NT_OUTMSG1 0 x00434U
#define IDT_NT_OUTMSG2 0 x00438U
#define IDT_NT_OUTMSG3 0 x0043CU
/* Inbound Message N (DWORD) */
#define IDT_NT_INMSG0 0 x00440U
#define IDT_NT_INMSG1 0 x00444U
#define IDT_NT_INMSG2 0 x00448U
#define IDT_NT_INMSG3 0 x0044CU
/* Inbound Message Source N (DWORD) */
#define IDT_NT_INMSGSRC0 0 x00450U
#define IDT_NT_INMSGSRC1 0 x00454U
#define IDT_NT_INMSGSRC2 0 x00458U
#define IDT_NT_INMSGSRC3 0 x0045CU
/* Message Status (DWORD) */
#define IDT_NT_MSGSTS 0 x00460U
/* Message Status Mask (DWORD) */
#define IDT_NT_MSGSTSMSK 0 x00464U
/* BAR-setup registers */
/* BAR N Setup/Limit Address/Lower and Upper Translated Base Address (DWORD) */
#define IDT_NT_BARSETUP0 0 x00470U
#define IDT_NT_BARLIMIT0 0 x00474U
#define IDT_NT_BARLTBASE0 0 x00478U
#define IDT_NT_BARUTBASE0 0 x0047CU
#define IDT_NT_BARSETUP1 0 x00480U
#define IDT_NT_BARLIMIT1 0 x00484U
#define IDT_NT_BARLTBASE1 0 x00488U
#define IDT_NT_BARUTBASE1 0 x0048CU
#define IDT_NT_BARSETUP2 0 x00490U
#define IDT_NT_BARLIMIT2 0 x00494U
#define IDT_NT_BARLTBASE2 0 x00498U
#define IDT_NT_BARUTBASE2 0 x0049CU
#define IDT_NT_BARSETUP3 0 x004A0U
#define IDT_NT_BARLIMIT3 0 x004A4U
#define IDT_NT_BARLTBASE3 0 x004A8U
#define IDT_NT_BARUTBASE3 0 x004ACU
#define IDT_NT_BARSETUP4 0 x004B0U
#define IDT_NT_BARLIMIT4 0 x004B4U
#define IDT_NT_BARLTBASE4 0 x004B8U
#define IDT_NT_BARUTBASE4 0 x004BCU
#define IDT_NT_BARSETUP5 0 x004C0U
#define IDT_NT_BARLIMIT5 0 x004C4U
#define IDT_NT_BARLTBASE5 0 x004C8U
#define IDT_NT_BARUTBASE5 0 x004CCU
/* NT mapping table registers */
/* NT Mapping Table Address/Status/Data (DWORD) */
#define IDT_NT_NTMTBLADDR 0 x004D0U
#define IDT_NT_NTMTBLSTS 0 x004D4U
#define IDT_NT_NTMTBLDATA 0 x004D8U
/* Requester ID (Bus:Device:Function) Capture (DWORD) */
#define IDT_NT_REQIDCAP 0 x004DCU
/* Memory Windows Lookup table registers */
/* Lookup Table Offset/Lower, Middle and Upper data (DWORD) */
#define IDT_NT_LUTOFFSET 0 x004E0U
#define IDT_NT_LUTLDATA 0 x004E4U
#define IDT_NT_LUTMDATA 0 x004E8U
#define IDT_NT_LUTUDATA 0 x004ECU
/* NT Endpoint Uncorrectable/Correctable Errors Emulation registers (DWORD) */
#define IDT_NT_NTUEEM 0 x004F0U
#define IDT_NT_NTCEEM 0 x004F4U
/* Global Address Space Access/Data registers (DWARD) */
#define IDT_NT_GASAADDR 0 x00FF8U
#define IDT_NT_GASADATA 0 x00FFCU
/*
* IDT PCIe - switch Global Configuration and Status registers
*/
/* Port N Configuration register in global space */
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP0_PCIECMDSTS 0 x01004U
#define IDT_SW_NTP0_PCIELCTLSTS 0 x01050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP0_NTCTL 0 x01400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP0_BARSETUP0 0 x01470U
#define IDT_SW_NTP0_BARLIMIT0 0 x01474U
#define IDT_SW_NTP0_BARLTBASE0 0 x01478U
#define IDT_SW_NTP0_BARUTBASE0 0 x0147CU
#define IDT_SW_NTP0_BARSETUP1 0 x01480U
#define IDT_SW_NTP0_BARLIMIT1 0 x01484U
#define IDT_SW_NTP0_BARLTBASE1 0 x01488U
#define IDT_SW_NTP0_BARUTBASE1 0 x0148CU
#define IDT_SW_NTP0_BARSETUP2 0 x01490U
#define IDT_SW_NTP0_BARLIMIT2 0 x01494U
#define IDT_SW_NTP0_BARLTBASE2 0 x01498U
#define IDT_SW_NTP0_BARUTBASE2 0 x0149CU
#define IDT_SW_NTP0_BARSETUP3 0 x014A0U
#define IDT_SW_NTP0_BARLIMIT3 0 x014A4U
#define IDT_SW_NTP0_BARLTBASE3 0 x014A8U
#define IDT_SW_NTP0_BARUTBASE3 0 x014ACU
#define IDT_SW_NTP0_BARSETUP4 0 x014B0U
#define IDT_SW_NTP0_BARLIMIT4 0 x014B4U
#define IDT_SW_NTP0_BARLTBASE4 0 x014B8U
#define IDT_SW_NTP0_BARUTBASE4 0 x014BCU
#define IDT_SW_NTP0_BARSETUP5 0 x014C0U
#define IDT_SW_NTP0_BARLIMIT5 0 x014C4U
#define IDT_SW_NTP0_BARLTBASE5 0 x014C8U
#define IDT_SW_NTP0_BARUTBASE5 0 x014CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP2_PCIECMDSTS 0 x05004U
#define IDT_SW_NTP2_PCIELCTLSTS 0 x05050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP2_NTCTL 0 x05400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP2_BARSETUP0 0 x05470U
#define IDT_SW_NTP2_BARLIMIT0 0 x05474U
#define IDT_SW_NTP2_BARLTBASE0 0 x05478U
#define IDT_SW_NTP2_BARUTBASE0 0 x0547CU
#define IDT_SW_NTP2_BARSETUP1 0 x05480U
#define IDT_SW_NTP2_BARLIMIT1 0 x05484U
#define IDT_SW_NTP2_BARLTBASE1 0 x05488U
#define IDT_SW_NTP2_BARUTBASE1 0 x0548CU
#define IDT_SW_NTP2_BARSETUP2 0 x05490U
#define IDT_SW_NTP2_BARLIMIT2 0 x05494U
#define IDT_SW_NTP2_BARLTBASE2 0 x05498U
#define IDT_SW_NTP2_BARUTBASE2 0 x0549CU
#define IDT_SW_NTP2_BARSETUP3 0 x054A0U
#define IDT_SW_NTP2_BARLIMIT3 0 x054A4U
#define IDT_SW_NTP2_BARLTBASE3 0 x054A8U
#define IDT_SW_NTP2_BARUTBASE3 0 x054ACU
#define IDT_SW_NTP2_BARSETUP4 0 x054B0U
#define IDT_SW_NTP2_BARLIMIT4 0 x054B4U
#define IDT_SW_NTP2_BARLTBASE4 0 x054B8U
#define IDT_SW_NTP2_BARUTBASE4 0 x054BCU
#define IDT_SW_NTP2_BARSETUP5 0 x054C0U
#define IDT_SW_NTP2_BARLIMIT5 0 x054C4U
#define IDT_SW_NTP2_BARLTBASE5 0 x054C8U
#define IDT_SW_NTP2_BARUTBASE5 0 x054CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP4_PCIECMDSTS 0 x09004U
#define IDT_SW_NTP4_PCIELCTLSTS 0 x09050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP4_NTCTL 0 x09400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP4_BARSETUP0 0 x09470U
#define IDT_SW_NTP4_BARLIMIT0 0 x09474U
#define IDT_SW_NTP4_BARLTBASE0 0 x09478U
#define IDT_SW_NTP4_BARUTBASE0 0 x0947CU
#define IDT_SW_NTP4_BARSETUP1 0 x09480U
#define IDT_SW_NTP4_BARLIMIT1 0 x09484U
#define IDT_SW_NTP4_BARLTBASE1 0 x09488U
#define IDT_SW_NTP4_BARUTBASE1 0 x0948CU
#define IDT_SW_NTP4_BARSETUP2 0 x09490U
#define IDT_SW_NTP4_BARLIMIT2 0 x09494U
#define IDT_SW_NTP4_BARLTBASE2 0 x09498U
#define IDT_SW_NTP4_BARUTBASE2 0 x0949CU
#define IDT_SW_NTP4_BARSETUP3 0 x094A0U
#define IDT_SW_NTP4_BARLIMIT3 0 x094A4U
#define IDT_SW_NTP4_BARLTBASE3 0 x094A8U
#define IDT_SW_NTP4_BARUTBASE3 0 x094ACU
#define IDT_SW_NTP4_BARSETUP4 0 x094B0U
#define IDT_SW_NTP4_BARLIMIT4 0 x094B4U
#define IDT_SW_NTP4_BARLTBASE4 0 x094B8U
#define IDT_SW_NTP4_BARUTBASE4 0 x094BCU
#define IDT_SW_NTP4_BARSETUP5 0 x094C0U
#define IDT_SW_NTP4_BARLIMIT5 0 x094C4U
#define IDT_SW_NTP4_BARLTBASE5 0 x094C8U
#define IDT_SW_NTP4_BARUTBASE5 0 x094CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP6_PCIECMDSTS 0 x0D004U
#define IDT_SW_NTP6_PCIELCTLSTS 0 x0D050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP6_NTCTL 0 x0D400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP6_BARSETUP0 0 x0D470U
#define IDT_SW_NTP6_BARLIMIT0 0 x0D474U
#define IDT_SW_NTP6_BARLTBASE0 0 x0D478U
#define IDT_SW_NTP6_BARUTBASE0 0 x0D47CU
#define IDT_SW_NTP6_BARSETUP1 0 x0D480U
#define IDT_SW_NTP6_BARLIMIT1 0 x0D484U
#define IDT_SW_NTP6_BARLTBASE1 0 x0D488U
#define IDT_SW_NTP6_BARUTBASE1 0 x0D48CU
#define IDT_SW_NTP6_BARSETUP2 0 x0D490U
#define IDT_SW_NTP6_BARLIMIT2 0 x0D494U
#define IDT_SW_NTP6_BARLTBASE2 0 x0D498U
#define IDT_SW_NTP6_BARUTBASE2 0 x0D49CU
#define IDT_SW_NTP6_BARSETUP3 0 x0D4A0U
#define IDT_SW_NTP6_BARLIMIT3 0 x0D4A4U
#define IDT_SW_NTP6_BARLTBASE3 0 x0D4A8U
#define IDT_SW_NTP6_BARUTBASE3 0 x0D4ACU
#define IDT_SW_NTP6_BARSETUP4 0 x0D4B0U
#define IDT_SW_NTP6_BARLIMIT4 0 x0D4B4U
#define IDT_SW_NTP6_BARLTBASE4 0 x0D4B8U
#define IDT_SW_NTP6_BARUTBASE4 0 x0D4BCU
#define IDT_SW_NTP6_BARSETUP5 0 x0D4C0U
#define IDT_SW_NTP6_BARLIMIT5 0 x0D4C4U
#define IDT_SW_NTP6_BARLTBASE5 0 x0D4C8U
#define IDT_SW_NTP6_BARUTBASE5 0 x0D4CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP8_PCIECMDSTS 0 x11004U
#define IDT_SW_NTP8_PCIELCTLSTS 0 x11050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP8_NTCTL 0 x11400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP8_BARSETUP0 0 x11470U
#define IDT_SW_NTP8_BARLIMIT0 0 x11474U
#define IDT_SW_NTP8_BARLTBASE0 0 x11478U
#define IDT_SW_NTP8_BARUTBASE0 0 x1147CU
#define IDT_SW_NTP8_BARSETUP1 0 x11480U
#define IDT_SW_NTP8_BARLIMIT1 0 x11484U
#define IDT_SW_NTP8_BARLTBASE1 0 x11488U
#define IDT_SW_NTP8_BARUTBASE1 0 x1148CU
#define IDT_SW_NTP8_BARSETUP2 0 x11490U
#define IDT_SW_NTP8_BARLIMIT2 0 x11494U
#define IDT_SW_NTP8_BARLTBASE2 0 x11498U
#define IDT_SW_NTP8_BARUTBASE2 0 x1149CU
#define IDT_SW_NTP8_BARSETUP3 0 x114A0U
#define IDT_SW_NTP8_BARLIMIT3 0 x114A4U
#define IDT_SW_NTP8_BARLTBASE3 0 x114A8U
#define IDT_SW_NTP8_BARUTBASE3 0 x114ACU
#define IDT_SW_NTP8_BARSETUP4 0 x114B0U
#define IDT_SW_NTP8_BARLIMIT4 0 x114B4U
#define IDT_SW_NTP8_BARLTBASE4 0 x114B8U
#define IDT_SW_NTP8_BARUTBASE4 0 x114BCU
#define IDT_SW_NTP8_BARSETUP5 0 x114C0U
#define IDT_SW_NTP8_BARLIMIT5 0 x114C4U
#define IDT_SW_NTP8_BARLTBASE5 0 x114C8U
#define IDT_SW_NTP8_BARUTBASE5 0 x114CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP12_PCIECMDSTS 0 x19004U
#define IDT_SW_NTP12_PCIELCTLSTS 0 x19050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP12_NTCTL 0 x19400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP12_BARSETUP0 0 x19470U
#define IDT_SW_NTP12_BARLIMIT0 0 x19474U
#define IDT_SW_NTP12_BARLTBASE0 0 x19478U
#define IDT_SW_NTP12_BARUTBASE0 0 x1947CU
#define IDT_SW_NTP12_BARSETUP1 0 x19480U
#define IDT_SW_NTP12_BARLIMIT1 0 x19484U
#define IDT_SW_NTP12_BARLTBASE1 0 x19488U
#define IDT_SW_NTP12_BARUTBASE1 0 x1948CU
#define IDT_SW_NTP12_BARSETUP2 0 x19490U
#define IDT_SW_NTP12_BARLIMIT2 0 x19494U
#define IDT_SW_NTP12_BARLTBASE2 0 x19498U
#define IDT_SW_NTP12_BARUTBASE2 0 x1949CU
#define IDT_SW_NTP12_BARSETUP3 0 x194A0U
#define IDT_SW_NTP12_BARLIMIT3 0 x194A4U
#define IDT_SW_NTP12_BARLTBASE3 0 x194A8U
#define IDT_SW_NTP12_BARUTBASE3 0 x194ACU
#define IDT_SW_NTP12_BARSETUP4 0 x194B0U
#define IDT_SW_NTP12_BARLIMIT4 0 x194B4U
#define IDT_SW_NTP12_BARLTBASE4 0 x194B8U
#define IDT_SW_NTP12_BARUTBASE4 0 x194BCU
#define IDT_SW_NTP12_BARSETUP5 0 x194C0U
#define IDT_SW_NTP12_BARLIMIT5 0 x194C4U
#define IDT_SW_NTP12_BARLTBASE5 0 x194C8U
#define IDT_SW_NTP12_BARUTBASE5 0 x194CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP16_PCIECMDSTS 0 x21004U
#define IDT_SW_NTP16_PCIELCTLSTS 0 x21050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP16_NTCTL 0 x21400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP16_BARSETUP0 0 x21470U
#define IDT_SW_NTP16_BARLIMIT0 0 x21474U
#define IDT_SW_NTP16_BARLTBASE0 0 x21478U
#define IDT_SW_NTP16_BARUTBASE0 0 x2147CU
#define IDT_SW_NTP16_BARSETUP1 0 x21480U
#define IDT_SW_NTP16_BARLIMIT1 0 x21484U
#define IDT_SW_NTP16_BARLTBASE1 0 x21488U
#define IDT_SW_NTP16_BARUTBASE1 0 x2148CU
#define IDT_SW_NTP16_BARSETUP2 0 x21490U
#define IDT_SW_NTP16_BARLIMIT2 0 x21494U
#define IDT_SW_NTP16_BARLTBASE2 0 x21498U
#define IDT_SW_NTP16_BARUTBASE2 0 x2149CU
#define IDT_SW_NTP16_BARSETUP3 0 x214A0U
#define IDT_SW_NTP16_BARLIMIT3 0 x214A4U
#define IDT_SW_NTP16_BARLTBASE3 0 x214A8U
#define IDT_SW_NTP16_BARUTBASE3 0 x214ACU
#define IDT_SW_NTP16_BARSETUP4 0 x214B0U
#define IDT_SW_NTP16_BARLIMIT4 0 x214B4U
#define IDT_SW_NTP16_BARLTBASE4 0 x214B8U
#define IDT_SW_NTP16_BARUTBASE4 0 x214BCU
#define IDT_SW_NTP16_BARSETUP5 0 x214C0U
#define IDT_SW_NTP16_BARLIMIT5 0 x214C4U
#define IDT_SW_NTP16_BARLTBASE5 0 x214C8U
#define IDT_SW_NTP16_BARUTBASE5 0 x214CCU
/* PCI Express command/status and link control/status registers (WORD+WORD) */
#define IDT_SW_NTP20_PCIECMDSTS 0 x29004U
#define IDT_SW_NTP20_PCIELCTLSTS 0 x29050U
/* NT-function control register (DWORD) */
#define IDT_SW_NTP20_NTCTL 0 x29400U
/* BAR setup/limit/base address registers (DWORD) */
#define IDT_SW_NTP20_BARSETUP0 0 x29470U
#define IDT_SW_NTP20_BARLIMIT0 0 x29474U
#define IDT_SW_NTP20_BARLTBASE0 0 x29478U
#define IDT_SW_NTP20_BARUTBASE0 0 x2947CU
#define IDT_SW_NTP20_BARSETUP1 0 x29480U
#define IDT_SW_NTP20_BARLIMIT1 0 x29484U
#define IDT_SW_NTP20_BARLTBASE1 0 x29488U
#define IDT_SW_NTP20_BARUTBASE1 0 x2948CU
#define IDT_SW_NTP20_BARSETUP2 0 x29490U
#define IDT_SW_NTP20_BARLIMIT2 0 x29494U
#define IDT_SW_NTP20_BARLTBASE2 0 x29498U
#define IDT_SW_NTP20_BARUTBASE2 0 x2949CU
#define IDT_SW_NTP20_BARSETUP3 0 x294A0U
#define IDT_SW_NTP20_BARLIMIT3 0 x294A4U
#define IDT_SW_NTP20_BARLTBASE3 0 x294A8U
#define IDT_SW_NTP20_BARUTBASE3 0 x294ACU
#define IDT_SW_NTP20_BARSETUP4 0 x294B0U
#define IDT_SW_NTP20_BARLIMIT4 0 x294B4U
#define IDT_SW_NTP20_BARLTBASE4 0 x294B8U
#define IDT_SW_NTP20_BARUTBASE4 0 x294BCU
#define IDT_SW_NTP20_BARSETUP5 0 x294C0U
#define IDT_SW_NTP20_BARLIMIT5 0 x294C4U
#define IDT_SW_NTP20_BARLTBASE5 0 x294C8U
#define IDT_SW_NTP20_BARUTBASE5 0 x294CCU
/* IDT PCIe-switch control register (DWORD) */
#define IDT_SW_CTL 0 x3E000U
/* Boot Configuration Vector Status (DWORD) */
#define IDT_SW_BCVSTS 0 x3E004U
/* Port Clocking Mode (DWORD) */
#define IDT_SW_PCLKMODE 0 x3E008U
/* Reset Drain Delay (DWORD) */
#define IDT_SW_RDRAINDELAY 0 x3E080U
/* Port Operating Mode Change Drain Delay (DWORD) */
#define IDT_SW_POMCDELAY 0 x3E084U
/* Side Effect Delay (DWORD) */
#define IDT_SW_SEDELAY 0 x3E088U
/* Upstream Secondary Bus Reset Delay (DWORD) */
#define IDT_SW_SSBRDELAY 0 x3E08CU
/* Switch partition N Control/Status/Failover registers */
#define IDT_SW_SWPART0CTL 0 x3E100U
#define IDT_SW_SWPART0STS 0 x3E104U
#define IDT_SW_SWPART0FCTL 0 x3E108U
#define IDT_SW_SWPART1CTL 0 x3E120U
#define IDT_SW_SWPART1STS 0 x3E124U
#define IDT_SW_SWPART1FCTL 0 x3E128U
#define IDT_SW_SWPART2CTL 0 x3E140U
#define IDT_SW_SWPART2STS 0 x3E144U
#define IDT_SW_SWPART2FCTL 0 x3E148U
#define IDT_SW_SWPART3CTL 0 x3E160U
#define IDT_SW_SWPART3STS 0 x3E164U
#define IDT_SW_SWPART3FCTL 0 x3E168U
#define IDT_SW_SWPART4CTL 0 x3E180U
#define IDT_SW_SWPART4STS 0 x3E184U
#define IDT_SW_SWPART4FCTL 0 x3E188U
#define IDT_SW_SWPART5CTL 0 x3E1A0U
#define IDT_SW_SWPART5STS 0 x3E1A4U
#define IDT_SW_SWPART5FCTL 0 x3E1A8U
#define IDT_SW_SWPART6CTL 0 x3E1C0U
#define IDT_SW_SWPART6STS 0 x3E1C4U
#define IDT_SW_SWPART6FCTL 0 x3E1C8U
#define IDT_SW_SWPART7CTL 0 x3E1E0U
#define IDT_SW_SWPART7STS 0 x3E1E4U
#define IDT_SW_SWPART7FCTL 0 x3E1E8U
/* Switch port N control and status registers */
#define IDT_SW_SWPORT0CTL 0 x3E200U
#define IDT_SW_SWPORT0STS 0 x3E204U
#define IDT_SW_SWPORT0FCTL 0 x3E208U
#define IDT_SW_SWPORT2CTL 0 x3E240U
#define IDT_SW_SWPORT2STS 0 x3E244U
#define IDT_SW_SWPORT2FCTL 0 x3E248U
#define IDT_SW_SWPORT4CTL 0 x3E280U
#define IDT_SW_SWPORT4STS 0 x3E284U
#define IDT_SW_SWPORT4FCTL 0 x3E288U
#define IDT_SW_SWPORT6CTL 0 x3E2C0U
#define IDT_SW_SWPORT6STS 0 x3E2C4U
#define IDT_SW_SWPORT6FCTL 0 x3E2C8U
#define IDT_SW_SWPORT8CTL 0 x3E300U
#define IDT_SW_SWPORT8STS 0 x3E304U
#define IDT_SW_SWPORT8FCTL 0 x3E308U
#define IDT_SW_SWPORT12CTL 0 x3E380U
#define IDT_SW_SWPORT12STS 0 x3E384U
#define IDT_SW_SWPORT12FCTL 0 x3E388U
#define IDT_SW_SWPORT16CTL 0 x3E400U
#define IDT_SW_SWPORT16STS 0 x3E404U
#define IDT_SW_SWPORT16FCTL 0 x3E408U
#define IDT_SW_SWPORT20CTL 0 x3E480U
#define IDT_SW_SWPORT20STS 0 x3E484U
#define IDT_SW_SWPORT20FCTL 0 x3E488U
/* Switch Event registers */
/* Switch Event Status/Mask/Partition mask (DWORD) */
#define IDT_SW_SESTS 0 x3EC00U
#define IDT_SW_SEMSK 0 x3EC04U
#define IDT_SW_SEPMSK 0 x3EC08U
/* Switch Event Link Up/Down Status/Mask (DWORD) */
#define IDT_SW_SELINKUPSTS 0 x3EC0CU
#define IDT_SW_SELINKUPMSK 0 x3EC10U
#define IDT_SW_SELINKDNSTS 0 x3EC14U
#define IDT_SW_SELINKDNMSK 0 x3EC18U
/* Switch Event Fundamental Reset Status/Mask (DWORD) */
#define IDT_SW_SEFRSTSTS 0 x3EC1CU
#define IDT_SW_SEFRSTMSK 0 x3EC20U
/* Switch Event Hot Reset Status/Mask (DWORD) */
#define IDT_SW_SEHRSTSTS 0 x3EC24U
#define IDT_SW_SEHRSTMSK 0 x3EC28U
/* Switch Event Failover Mask (DWORD) */
#define IDT_SW_SEFOVRMSK 0 x3EC2CU
/* Switch Event Global Signal Status/Mask (DWORD) */
#define IDT_SW_SEGSIGSTS 0 x3EC30U
#define IDT_SW_SEGSIGMSK 0 x3EC34U
/* NT Global Doorbell Status (DWORD) */
#define IDT_SW_GDBELLSTS 0 x3EC3CU
/* Switch partition N message M control (msgs routing table) (DWORD) */
#define IDT_SW_SWP0MSGCTL0 0 x3EE00U
#define IDT_SW_SWP1MSGCTL0 0 x3EE04U
#define IDT_SW_SWP2MSGCTL0 0 x3EE08U
#define IDT_SW_SWP3MSGCTL0 0 x3EE0CU
#define IDT_SW_SWP4MSGCTL0 0 x3EE10U
#define IDT_SW_SWP5MSGCTL0 0 x3EE14U
#define IDT_SW_SWP6MSGCTL0 0 x3EE18U
#define IDT_SW_SWP7MSGCTL0 0 x3EE1CU
#define IDT_SW_SWP0MSGCTL1 0 x3EE20U
#define IDT_SW_SWP1MSGCTL1 0 x3EE24U
#define IDT_SW_SWP2MSGCTL1 0 x3EE28U
#define IDT_SW_SWP3MSGCTL1 0 x3EE2CU
#define IDT_SW_SWP4MSGCTL1 0 x3EE30U
#define IDT_SW_SWP5MSGCTL1 0 x3EE34U
#define IDT_SW_SWP6MSGCTL1 0 x3EE38U
#define IDT_SW_SWP7MSGCTL1 0 x3EE3CU
#define IDT_SW_SWP0MSGCTL2 0 x3EE40U
#define IDT_SW_SWP1MSGCTL2 0 x3EE44U
#define IDT_SW_SWP2MSGCTL2 0 x3EE48U
#define IDT_SW_SWP3MSGCTL2 0 x3EE4CU
#define IDT_SW_SWP4MSGCTL2 0 x3EE50U
#define IDT_SW_SWP5MSGCTL2 0 x3EE54U
#define IDT_SW_SWP6MSGCTL2 0 x3EE58U
#define IDT_SW_SWP7MSGCTL2 0 x3EE5CU
#define IDT_SW_SWP0MSGCTL3 0 x3EE60U
#define IDT_SW_SWP1MSGCTL3 0 x3EE64U
#define IDT_SW_SWP2MSGCTL3 0 x3EE68U
#define IDT_SW_SWP3MSGCTL3 0 x3EE6CU
#define IDT_SW_SWP4MSGCTL3 0 x3EE70U
#define IDT_SW_SWP5MSGCTL3 0 x3EE74U
#define IDT_SW_SWP6MSGCTL3 0 x3EE78U
#define IDT_SW_SWP7MSGCTL3 0 x3EE7CU
/* SMBus Status and Control registers (DWORD) */
#define IDT_SW_SMBUSSTS 0 x3F188U
#define IDT_SW_SMBUSCTL 0 x3F18CU
/* Serial EEPROM Interface (DWORD) */
#define IDT_SW_EEPROMINTF 0 x3F190U
/* MBus I/O Expander Address N (DWORD) */
#define IDT_SW_IOEXPADDR0 0 x3F198U
#define IDT_SW_IOEXPADDR1 0 x3F19CU
#define IDT_SW_IOEXPADDR2 0 x3F1A0U
#define IDT_SW_IOEXPADDR3 0 x3F1A4U
#define IDT_SW_IOEXPADDR4 0 x3F1A8U
#define IDT_SW_IOEXPADDR5 0 x3F1ACU
/* General Purpose Events Control and Status registers (DWORD) */
#define IDT_SW_GPECTL 0 x3F1B0U
#define IDT_SW_GPESTS 0 x3F1B4U
/* Temperature sensor Control/Status/Alarm/Adjustment/Slope registers */
#define IDT_SW_TMPCTL 0 x3F1D4U
#define IDT_SW_TMPSTS 0 x3F1D8U
#define IDT_SW_TMPALARM 0 x3F1DCU
#define IDT_SW_TMPADJ 0 x3F1E0U
#define IDT_SW_TSSLOPE 0 x3F1E4U
/* SMBus Configuration Block header log (DWORD) */
#define IDT_SW_SMBUSCBHL 0 x3F1E8U
/*
* Common registers related constants
* @ IDT_REG_ALIGN : Registers alignment used in the driver
* @ IDT_REG_PCI_MAX : Maximum PCI configuration space register value
* @ IDT_REG_SW_MAX : Maximum global register value
*/
#define IDT_REG_ALIGN 4
#define IDT_REG_PCI_MAX 0 x00FFFU
#define IDT_REG_SW_MAX 0 x3FFFFU
/*
* PCICMDSTS register fields related constants
* @ IDT_PCICMDSTS_IOAE : I / O access enable
* @ IDT_PCICMDSTS_MAE : Memory access enable
* @ IDT_PCICMDSTS_BME : Bus master enable
*/
#define IDT_PCICMDSTS_IOAE 0 x00000001U
#define IDT_PCICMDSTS_MAE 0 x00000002U
#define IDT_PCICMDSTS_BME 0 x00000004U
/*
* PCIEDCAP register fields related constants
* @ IDT_PCIEDCAP_MPAYLOAD_MASK : Maximum payload size mask
* @ IDT_PCIEDCAP_MPAYLOAD_FLD : Maximum payload size field offset
* @ IDT_PCIEDCAP_MPAYLOAD_S128 : Max supported payload size of 128 bytes
* @ IDT_PCIEDCAP_MPAYLOAD_S256 : Max supported payload size of 256 bytes
* @ IDT_PCIEDCAP_MPAYLOAD_S512 : Max supported payload size of 512 bytes
* @ IDT_PCIEDCAP_MPAYLOAD_S1024 : Max supported payload size of 1024 bytes
* @ IDT_PCIEDCAP_MPAYLOAD_S2048 : Max supported payload size of 2048 bytes
*/
#define IDT_PCIEDCAP_MPAYLOAD_MASK 0 x00000007U
#define IDT_PCIEDCAP_MPAYLOAD_FLD 0
#define IDT_PCIEDCAP_MPAYLOAD_S128 0 x00000000U
#define IDT_PCIEDCAP_MPAYLOAD_S256 0 x00000001U
#define IDT_PCIEDCAP_MPAYLOAD_S512 0 x00000002U
#define IDT_PCIEDCAP_MPAYLOAD_S1024 0 x00000003U
#define IDT_PCIEDCAP_MPAYLOAD_S2048 0 x00000004U
/*
* PCIEDCTLSTS registers fields related constants
* @ IDT_PCIEDCTL_MPS_MASK : Maximum payload size mask
* @ IDT_PCIEDCTL_MPS_FLD : MPS field offset
* @ IDT_PCIEDCTL_MPS_S128 : Max payload size of 128 bytes
* @ IDT_PCIEDCTL_MPS_S256 : Max payload size of 256 bytes
* @ IDT_PCIEDCTL_MPS_S512 : Max payload size of 512 bytes
* @ IDT_PCIEDCTL_MPS_S1024 : Max payload size of 1024 bytes
* @ IDT_PCIEDCTL_MPS_S2048 : Max payload size of 2048 bytes
* @ IDT_PCIEDCTL_MPS_S4096 : Max payload size of 4096 bytes
*/
#define IDT_PCIEDCTLSTS_MPS_MASK 0 x000000E0U
#define IDT_PCIEDCTLSTS_MPS_FLD 5
#define IDT_PCIEDCTLSTS_MPS_S128 0 x00000000U
#define IDT_PCIEDCTLSTS_MPS_S256 0 x00000020U
#define IDT_PCIEDCTLSTS_MPS_S512 0 x00000040U
#define IDT_PCIEDCTLSTS_MPS_S1024 0 x00000060U
#define IDT_PCIEDCTLSTS_MPS_S2048 0 x00000080U
#define IDT_PCIEDCTLSTS_MPS_S4096 0 x000000A0U
/*
* PCIELCAP register fields related constants
* @ IDT_PCIELCAP_PORTNUM_MASK : Port number field mask
* @ IDT_PCIELCAP_PORTNUM_FLD : Port number field offset
*/
#define IDT_PCIELCAP_PORTNUM_MASK 0 xFF000000U
#define IDT_PCIELCAP_PORTNUM_FLD 24
/*
* PCIELCTLSTS registers fields related constants
* @ IDT_PCIELSTS_CLS_MASK : Current link speed mask
* @ IDT_PCIELSTS_CLS_FLD : Current link speed field offset
* @ IDT_PCIELSTS_NLW_MASK : Negotiated link width mask
* @ IDT_PCIELSTS_NLW_FLD : Negotiated link width field offset
* @ IDT_PCIELSTS_SCLK_COM : Common slot clock configuration
*/
#define IDT_PCIELCTLSTS_CLS_MASK 0 x000F0000U
#define IDT_PCIELCTLSTS_CLS_FLD 16
#define IDT_PCIELCTLSTS_NLW_MASK 0 x03F00000U
#define IDT_PCIELCTLSTS_NLW_FLD 20
#define IDT_PCIELCTLSTS_SCLK_COM 0 x10000000U
/*
* NTCTL register fields related constants
* @ IDT_NTCTL_IDPROTDIS : ID Protection check disable ( disable MTBL )
* @ IDT_NTCTL_CPEN : Completion enable
* @ IDT_NTCTL_RNS : Request no snoop processing ( if MTBL disabled )
* @ IDT_NTCTL_ATP : Address type processing ( if MTBL disabled )
*/
#define IDT_NTCTL_IDPROTDIS 0 x00000001U
#define IDT_NTCTL_CPEN 0 x00000002U
#define IDT_NTCTL_RNS 0 x00000004U
#define IDT_NTCTL_ATP 0 x00000008U
/*
* NTINTSTS register fields related constants
* @ IDT_NTINTSTS_MSG : Message interrupt bit
* @ IDT_NTINTSTS_DBELL : Doorbell interrupt bit
* @ IDT_NTINTSTS_SEVENT : Switch Event interrupt bit
* @ IDT_NTINTSTS_TMPSENSOR : Temperature sensor interrupt bit
*/
#define IDT_NTINTSTS_MSG 0 x00000001U
#define IDT_NTINTSTS_DBELL 0 x00000002U
#define IDT_NTINTSTS_SEVENT 0 x00000008U
#define IDT_NTINTSTS_TMPSENSOR 0 x00000080U
/*
* NTINTMSK register fields related constants
* @ IDT_NTINTMSK_MSG : Message interrupt mask bit
* @ IDT_NTINTMSK_DBELL : Doorbell interrupt mask bit
* @ IDT_NTINTMSK_SEVENT : Switch Event interrupt mask bit
* @ IDT_NTINTMSK_TMPSENSOR : Temperature sensor interrupt mask bit
* @ IDT_NTINTMSK_ALL : NTB - related interrupts mask
*/
#define IDT_NTINTMSK_MSG 0 x00000001U
#define IDT_NTINTMSK_DBELL 0 x00000002U
#define IDT_NTINTMSK_SEVENT 0 x00000008U
#define IDT_NTINTMSK_TMPSENSOR 0 x00000080U
#define IDT_NTINTMSK_ALL \
(IDT_NTINTMSK_MSG | IDT_NTINTMSK_DBELL | IDT_NTINTMSK_SEVENT)
/*
* NTGSIGNAL register fields related constants
* @ IDT_NTGSIGNAL_SET : Set global signal of the local partition
*/
#define IDT_NTGSIGNAL_SET 0 x00000001U
/*
* BARSETUP register fields related constants
* @ IDT_BARSETUP_TYPE_MASK : Mask of the TYPE field
* @ IDT_BARSETUP_TYPE_32 : 32 - bit addressing BAR
* @ IDT_BARSETUP_TYPE_64 : 64 - bit addressing BAR
* @ IDT_BARSETUP_PREF : Value of the BAR prefetchable field
* @ IDT_BARSETUP_SIZE_MASK : Mask of the SIZE field
* @ IDT_BARSETUP_SIZE_FLD : SIZE field offset
* @ IDT_BARSETUP_SIZE_CFG : SIZE field value in case of config space MODE
* @ IDT_BARSETUP_MODE_CFG : Configuration space BAR mode
* @ IDT_BARSETUP_ATRAN_MASK : ATRAN field mask
* @ IDT_BARSETUP_ATRAN_FLD : ATRAN field offset
* @ IDT_BARSETUP_ATRAN_DIR : Direct address translation memory window
* @ IDT_BARSETUP_ATRAN_LUT12 : 12 - entry lookup table
* @ IDT_BARSETUP_ATRAN_LUT24 : 24 - entry lookup table
* @ IDT_BARSETUP_TPART_MASK : TPART field mask
* @ IDT_BARSETUP_TPART_FLD : TPART field offset
* @ IDT_BARSETUP_EN : BAR enable bit
*/
#define IDT_BARSETUP_TYPE_MASK 0 x00000006U
#define IDT_BARSETUP_TYPE_FLD 0
#define IDT_BARSETUP_TYPE_32 0 x00000000U
#define IDT_BARSETUP_TYPE_64 0 x00000004U
#define IDT_BARSETUP_PREF 0 x00000008U
#define IDT_BARSETUP_SIZE_MASK 0 x000003F0U
#define IDT_BARSETUP_SIZE_FLD 4
#define IDT_BARSETUP_SIZE_CFG 0 x000000C0U
#define IDT_BARSETUP_MODE_CFG 0 x00000400U
#define IDT_BARSETUP_ATRAN_MASK 0 x00001800U
#define IDT_BARSETUP_ATRAN_FLD 11
#define IDT_BARSETUP_ATRAN_DIR 0 x00000000U
#define IDT_BARSETUP_ATRAN_LUT12 0 x00000800U
#define IDT_BARSETUP_ATRAN_LUT24 0 x00001000U
#define IDT_BARSETUP_TPART_MASK 0 x0000E000U
#define IDT_BARSETUP_TPART_FLD 13
#define IDT_BARSETUP_EN 0 x80000000U
/*
* NTMTBLDATA register fields related constants
* @ IDT_NTMTBLDATA_VALID : Set the MTBL entry being valid
* @ IDT_NTMTBLDATA_REQID_MASK : Bus : Device : Function field mask
* @ IDT_NTMTBLDATA_REQID_FLD : Bus : Device : Function field offset
* @ IDT_NTMTBLDATA_PART_MASK : Partition field mask
* @ IDT_NTMTBLDATA_PART_FLD : Partition field offset
* @ IDT_NTMTBLDATA_ATP_TRANS : Enable AT field translation on request TLPs
* @ IDT_NTMTBLDATA_CNS_INV : Enable No Snoop attribute inversion of
* Completion TLPs
* @ IDT_NTMTBLDATA_RNS_INV : Enable No Snoop attribute inversion of
* Request TLPs
*/
#define IDT_NTMTBLDATA_VALID 0 x00000001U
#define IDT_NTMTBLDATA_REQID_MASK 0 x0001FFFEU
#define IDT_NTMTBLDATA_REQID_FLD 1
#define IDT_NTMTBLDATA_PART_MASK 0 x000E0000U
#define IDT_NTMTBLDATA_PART_FLD 17
#define IDT_NTMTBLDATA_ATP_TRANS 0 x20000000U
#define IDT_NTMTBLDATA_CNS_INV 0 x40000000U
#define IDT_NTMTBLDATA_RNS_INV 0 x80000000U
/*
* REQIDCAP register fields related constants
* @ IDT_REQIDCAP_REQID_MASK : Request ID field mask
* @ IDT_REQIDCAP_REQID_FLD : Request ID field offset
*/
#define IDT_REQIDCAP_REQID_MASK 0 x0000FFFFU
#define IDT_REQIDCAP_REQID_FLD 0
/*
* LUTOFFSET register fields related constants
* @ IDT_LUTOFFSET_INDEX_MASK : Lookup table index field mask
* @ IDT_LUTOFFSET_INDEX_FLD : Lookup table index field offset
* @ IDT_LUTOFFSET_BAR_MASK : Lookup table BAR select field mask
* @ IDT_LUTOFFSET_BAR_FLD : Lookup table BAR select field offset
*/
#define IDT_LUTOFFSET_INDEX_MASK 0 x0000001FU
#define IDT_LUTOFFSET_INDEX_FLD 0
#define IDT_LUTOFFSET_BAR_MASK 0 x00000700U
#define IDT_LUTOFFSET_BAR_FLD 8
/*
* LUTUDATA register fields related constants
* @ IDT_LUTUDATA_PART_MASK : Partition field mask
* @ IDT_LUTUDATA_PART_FLD : Partition field offset
* @ IDT_LUTUDATA_VALID : Lookup table entry valid bit
*/
#define IDT_LUTUDATA_PART_MASK 0 x0000000FU
#define IDT_LUTUDATA_PART_FLD 0
#define IDT_LUTUDATA_VALID 0 x80000000U
/*
* SWPARTxSTS register fields related constants
* @ IDT_SWPARTxSTS_SCI : Switch partition state change initiated
* @ IDT_SWPARTxSTS_SCC : Switch partition state change completed
* @ IDT_SWPARTxSTS_STATE_MASK : Switch partition state mask
* @ IDT_SWPARTxSTS_STATE_FLD : Switch partition state field offset
* @ IDT_SWPARTxSTS_STATE_DIS : Switch partition disabled
* @ IDT_SWPARTxSTS_STATE_ACT : Switch partition enabled
* @ IDT_SWPARTxSTS_STATE_RES : Switch partition in reset
* @ IDT_SWPARTxSTS_US : Switch partition has upstream port
* @ IDT_SWPARTxSTS_USID_MASK : Switch partition upstream port ID mask
* @ IDT_SWPARTxSTS_USID_FLD : Switch partition upstream port ID field offset
* @ IDT_SWPARTxSTS_NT : Upstream port has NT function
* @ IDT_SWPARTxSTS_DMA : Upstream port has DMA function
*/
#define IDT_SWPARTxSTS_SCI 0 x00000001U
#define IDT_SWPARTxSTS_SCC 0 x00000002U
#define IDT_SWPARTxSTS_STATE_MASK 0 x00000060U
#define IDT_SWPARTxSTS_STATE_FLD 5
#define IDT_SWPARTxSTS_STATE_DIS 0 x00000000U
#define IDT_SWPARTxSTS_STATE_ACT 0 x00000020U
#define IDT_SWPARTxSTS_STATE_RES 0 x00000060U
#define IDT_SWPARTxSTS_US 0 x00000100U
#define IDT_SWPARTxSTS_USID_MASK 0 x00003E00U
#define IDT_SWPARTxSTS_USID_FLD 9
#define IDT_SWPARTxSTS_NT 0 x00004000U
#define IDT_SWPARTxSTS_DMA 0 x00008000U
/*
* SWPORTxSTS register fields related constants
* @ IDT_SWPORTxSTS_OMCI : Operation mode change initiated
* @ IDT_SWPORTxSTS_OMCC : Operation mode change completed
* @ IDT_SWPORTxSTS_LINKUP : Link up status
* @ IDT_SWPORTxSTS_DS : Port lanes behave as downstream lanes
* @ IDT_SWPORTxSTS_MODE_MASK : Port mode field mask
* @ IDT_SWPORTxSTS_MODE_FLD : Port mode field offset
* @ IDT_SWPORTxSTS_MODE_DIS : Port mode - disabled
* @ IDT_SWPORTxSTS_MODE_DS : Port mode - downstream switch port
* @ IDT_SWPORTxSTS_MODE_US : Port mode - upstream switch port
* @ IDT_SWPORTxSTS_MODE_NT : Port mode - NT function
* @ IDT_SWPORTxSTS_MODE_USNT : Port mode - upstream switch port with NTB
* @ IDT_SWPORTxSTS_MODE_UNAT : Port mode - unattached
* @ IDT_SWPORTxSTS_MODE_USDMA : Port mode - upstream switch port with DMA
* @ IDT_SWPORTxSTS_MODE_USNTDMA : Port mode - upstream port with NTB and DMA
* @ IDT_SWPORTxSTS_MODE_NTDMA : Port mode - NT function with DMA
* @ IDT_SWPORTxSTS_SWPART_MASK : Port partition field mask
* @ IDT_SWPORTxSTS_SWPART_FLD : Port partition field offset
* @ IDT_SWPORTxSTS_DEVNUM_MASK : Port device number field mask
* @ IDT_SWPORTxSTS_DEVNUM_FLD : Port device number field offset
*/
#define IDT_SWPORTxSTS_OMCI 0 x00000001U
#define IDT_SWPORTxSTS_OMCC 0 x00000002U
#define IDT_SWPORTxSTS_LINKUP 0 x00000010U
#define IDT_SWPORTxSTS_DS 0 x00000020U
#define IDT_SWPORTxSTS_MODE_MASK 0 x000003C0U
#define IDT_SWPORTxSTS_MODE_FLD 6
#define IDT_SWPORTxSTS_MODE_DIS 0 x00000000U
#define IDT_SWPORTxSTS_MODE_DS 0 x00000040U
#define IDT_SWPORTxSTS_MODE_US 0 x00000080U
#define IDT_SWPORTxSTS_MODE_NT 0 x000000C0U
#define IDT_SWPORTxSTS_MODE_USNT 0 x00000100U
#define IDT_SWPORTxSTS_MODE_UNAT 0 x00000140U
#define IDT_SWPORTxSTS_MODE_USDMA 0 x00000180U
#define IDT_SWPORTxSTS_MODE_USNTDMA 0 x000001C0U
#define IDT_SWPORTxSTS_MODE_NTDMA 0 x00000200U
#define IDT_SWPORTxSTS_SWPART_MASK 0 x00001C00U
#define IDT_SWPORTxSTS_SWPART_FLD 10
#define IDT_SWPORTxSTS_DEVNUM_MASK 0 x001F0000U
#define IDT_SWPORTxSTS_DEVNUM_FLD 16
/*
* SEMSK register fields related constants
* @ IDT_SEMSK_LINKUP : Link Up event mask bit
* @ IDT_SEMSK_LINKDN : Link Down event mask bit
* @ IDT_SEMSK_GSIGNAL : Global Signal event mask bit
*/
#define IDT_SEMSK_LINKUP 0 x00000001U
#define IDT_SEMSK_LINKDN 0 x00000002U
#define IDT_SEMSK_GSIGNAL 0 x00000020U
/*
* SWPxMSGCTL register fields related constants
* @ IDT_SWPxMSGCTL_REG_MASK : Register select field mask
* @ IDT_SWPxMSGCTL_REG_FLD : Register select field offset
* @ IDT_SWPxMSGCTL_PART_MASK : Partition select field mask
* @ IDT_SWPxMSGCTL_PART_FLD : Partition select field offset
*/
#define IDT_SWPxMSGCTL_REG_MASK 0 x00000003U
#define IDT_SWPxMSGCTL_REG_FLD 0
#define IDT_SWPxMSGCTL_PART_MASK 0 x00000070U
#define IDT_SWPxMSGCTL_PART_FLD 4
/*
* TMPCTL register fields related constants
* @ IDT_TMPCTL_LTH_MASK : Low temperature threshold field mask
* @ IDT_TMPCTL_LTH_FLD : Low temperature threshold field offset
* @ IDT_TMPCTL_MTH_MASK : Middle temperature threshold field mask
* @ IDT_TMPCTL_MTH_FLD : Middle temperature threshold field offset
* @ IDT_TMPCTL_HTH_MASK : High temperature threshold field mask
* @ IDT_TMPCTL_HTH_FLD : High temperature threshold field offset
* @ IDT_TMPCTL_PDOWN : Temperature sensor power down
*/
#define IDT_TMPCTL_LTH_MASK 0 x000000FFU
#define IDT_TMPCTL_LTH_FLD 0
#define IDT_TMPCTL_MTH_MASK 0 x0000FF00U
#define IDT_TMPCTL_MTH_FLD 8
#define IDT_TMPCTL_HTH_MASK 0 x00FF0000U
#define IDT_TMPCTL_HTH_FLD 16
#define IDT_TMPCTL_PDOWN 0 x80000000U
/*
* TMPSTS register fields related constants
* @ IDT_TMPSTS_TEMP_MASK : Current temperature field mask
* @ IDT_TMPSTS_TEMP_FLD : Current temperature field offset
* @ IDT_TMPSTS_LTEMP_MASK : Lowest temperature field mask
* @ IDT_TMPSTS_LTEMP_FLD : Lowest temperature field offset
* @ IDT_TMPSTS_HTEMP_MASK : Highest temperature field mask
* @ IDT_TMPSTS_HTEMP_FLD : Highest temperature field offset
*/
#define IDT_TMPSTS_TEMP_MASK 0 x000000FFU
#define IDT_TMPSTS_TEMP_FLD 0
#define IDT_TMPSTS_LTEMP_MASK 0 x0000FF00U
#define IDT_TMPSTS_LTEMP_FLD 8
#define IDT_TMPSTS_HTEMP_MASK 0 x00FF0000U
#define IDT_TMPSTS_HTEMP_FLD 16
/*
* TMPALARM register fields related constants
* @ IDT_TMPALARM_LTEMP_MASK : Lowest temperature field mask
* @ IDT_TMPALARM_LTEMP_FLD : Lowest temperature field offset
* @ IDT_TMPALARM_HTEMP_MASK : Highest temperature field mask
* @ IDT_TMPALARM_HTEMP_FLD : Highest temperature field offset
* @ IDT_TMPALARM_IRQ_MASK : Alarm IRQ status mask
*/
#define IDT_TMPALARM_LTEMP_MASK 0 x0000FF00U
#define IDT_TMPALARM_LTEMP_FLD 8
#define IDT_TMPALARM_HTEMP_MASK 0 x00FF0000U
#define IDT_TMPALARM_HTEMP_FLD 16
#define IDT_TMPALARM_IRQ_MASK 0 x3F000000U
/*
* TMPADJ register fields related constants
* @ IDT_TMPADJ_OFFSET_MASK : Temperature value offset field mask
* @ IDT_TMPADJ_OFFSET_FLD : Temperature value offset field offset
*/
#define IDT_TMPADJ_OFFSET_MASK 0 x000000FFU
#define IDT_TMPADJ_OFFSET_FLD 0
/*
* Helper macro to get / set the corresponding field value
* @ GET_FIELD : Retrieve the value of the corresponding field
* @ SET_FIELD : Set the specified field up
* @ IS_FLD_SET : Check whether a field is set with value
*/
#define GET_FIELD(field, data) \
(((u32)(data) & IDT_ ## field## _MASK) >> IDT_ ## field## _FLD)
#define SET_FIELD(field, data, value) \
(((u32)(data) & ~IDT_ ## field## _MASK) | \
((u32)(value) << IDT_ ## field## _FLD))
#define IS_FLD_SET(field, data, value) \
(((u32)(data) & IDT_ ## field## _MASK) == IDT_ ## field## _ ## value)
/*
* Useful registers masks :
* @ IDT_DBELL_MASK : Doorbell bits mask
* @ IDT_OUTMSG_MASK : Out messages status bits mask
* @ IDT_INMSG_MASK : In messages status bits mask
* @ IDT_MSG_MASK : Any message status bits mask
*/
#define IDT_DBELL_MASK ((u32)0 xFFFFFFFFU)
#define IDT_OUTMSG_MASK ((u32)0 x0000000FU)
#define IDT_INMSG_MASK ((u32)0 x000F0000U)
#define IDT_MSG_MASK (IDT_INMSG_MASK | IDT_OUTMSG_MASK)
/*
* Number of IDT NTB resources :
* @ IDT_MSG_CNT : Number of Message registers
* @ IDT_BAR_CNT : Number of BARs of each port
* @ IDT_MTBL_ENTRY_CNT : Number mapping table entries
*/
#define IDT_MSG_CNT 4
#define IDT_BAR_CNT 6
#define IDT_MTBL_ENTRY_CNT 64
/*
* General IDT PCIe - switch constant
* @ IDT_MAX_NR_PORTS : Maximum number of ports per IDT PCIe - switch
* @ IDT_MAX_NR_PARTS : Maximum number of partitions per IDT PCIe - switch
* @ IDT_MAX_NR_PEERS : Maximum number of NT - peers per IDT PCIe - switch
* @ IDT_MAX_NR_MWS : Maximum number of Memory Widows
* @ IDT_PCIE_REGSIZE : Size of the registers in bytes
* @ IDT_TRANS_ALIGN : Alignment of translated base address
* @ IDT_DIR_SIZE_ALIGN : Alignment of size setting for direct translated MWs .
* Even though the lower 10 bits are reserved , they are
* treated by IDT as one ' s so basically there is no any
* alignment of size limit for DIR address translation .
*/
#define IDT_MAX_NR_PORTS 24
#define IDT_MAX_NR_PARTS 8
#define IDT_MAX_NR_PEERS 8
#define IDT_MAX_NR_MWS 29
#define IDT_PCIE_REGSIZE 4
#define IDT_TRANS_ALIGN 4
#define IDT_DIR_SIZE_ALIGN 1
/*
* IDT PCIe - switch temperature sensor value limits
* @ IDT_TEMP_MIN_MDEG : Minimal integer value of temperature
* @ IDT_TEMP_MAX_MDEG : Maximal integer value of temperature
* @ IDT_TEMP_MIN_OFFSET : Minimal integer value of temperature offset
* @ IDT_TEMP_MAX_OFFSET : Maximal integer value of temperature offset
*/
#define IDT_TEMP_MIN_MDEG 0
#define IDT_TEMP_MAX_MDEG 127500
#define IDT_TEMP_MIN_OFFSET -64000
#define IDT_TEMP_MAX_OFFSET 63500
/*
* Temperature sensor values enumeration
* @ IDT_TEMP_CUR : Current temperature
* @ IDT_TEMP_LOW : Lowest historical temperature
* @ IDT_TEMP_HIGH : Highest historical temperature
* @ IDT_TEMP_OFFSET : Current temperature offset
*/
enum idt_temp_val {
IDT_TEMP_CUR,
IDT_TEMP_LOW,
IDT_TEMP_HIGH,
IDT_TEMP_OFFSET
};
/*
* IDT Memory Windows type . Depending on the device settings , IDT supports
* Direct Address Translation MW registers and Lookup Table registers
* @ IDT_MW_DIR : Direct address translation
* @ IDT_MW_LUT12 : 12 - entry lookup table entry
* @ IDT_MW_LUT24 : 24 - entry lookup table entry
*
* NOTE These values are exactly the same as one of the BARSETUP ATRAN field
*/
enum idt_mw_type {
IDT_MW_DIR = 0 x0,
IDT_MW_LUT12 = 0 x1,
IDT_MW_LUT24 = 0 x2
};
/*
* IDT PCIe - switch model private data
* @ name : Device name
* @ port_cnt : Total number of NT endpoint ports
* @ ports : Port ids
*/
struct idt_89hpes_cfg {
char *name;
unsigned char port_cnt;
unsigned char ports[];
};
/*
* Memory window configuration structure
* @ type : Type of the memory window ( direct address translation or lookup
* table )
*
* @ bar : PCIe BAR the memory window referenced to
* @ idx : Index of the memory window within the BAR
*
* @ addr_align : Alignment of translated address
* @ size_align : Alignment of memory window size
* @ size_max : Maximum size of memory window
*/
struct idt_mw_cfg {
enum idt_mw_type type;
unsigned char bar;
unsigned char idx;
u64 addr_align;
u64 size_align;
u64 size_max;
};
/*
* Description structure of peer IDT NT - functions :
* @ port : NT - function port
* @ part : NT - function partition
*
* @ mw_cnt : Number of memory windows supported by NT - function
* @ mws : Array of memory windows descriptors
*/
struct idt_ntb_peer {
unsigned char port;
unsigned char part;
unsigned char mw_cnt;
struct idt_mw_cfg *mws;
};
/*
* Description structure of local IDT NT - function :
* @ ntb : Linux NTB - device description structure
* @ swcfg : Pointer to the structure of local IDT PCIe - switch
* specific cofnfigurations
*
* @ port : Local NT - function port
* @ part : Local NT - function partition
*
* @ peer_cnt : Number of peers with activated NTB - function
* @ peers : Array of peers descripting structures
* @ port_idx_map : Map of port number - > peer index
* @ part_idx_map : Map of partition number - > peer index
*
* @ mtbl_lock : Mapping table access lock
*
* @ mw_cnt : Number of memory windows supported by NT - function
* @ mws : Array of memory windows descriptors
* @ lut_lock : Lookup table access lock
*
* @ msg_locks : Message registers mapping table lockers
*
* @ cfgspc : Virtual address of the memory mapped configuration
* space of the NT - function
* @ db_mask_lock : Doorbell mask register lock
* @ msg_mask_lock : Message mask register lock
* @ gasa_lock : GASA registers access lock
*
* @ hwmon_mtx : Temperature sensor interface update mutex
*
* @ dbgfs_info : DebugFS info node
*/
struct idt_ntb_dev {
struct ntb_dev ntb;
struct idt_89hpes_cfg *swcfg;
unsigned char port;
unsigned char part;
unsigned char peer_cnt;
struct idt_ntb_peer peers[IDT_MAX_NR_PEERS];
char port_idx_map[IDT_MAX_NR_PORTS];
char part_idx_map[IDT_MAX_NR_PARTS];
spinlock_t mtbl_lock;
unsigned char mw_cnt;
struct idt_mw_cfg *mws;
spinlock_t lut_lock;
spinlock_t msg_locks[IDT_MSG_CNT];
void __iomem *cfgspc;
spinlock_t db_mask_lock;
spinlock_t msg_mask_lock;
spinlock_t gasa_lock;
struct mutex hwmon_mtx;
struct dentry *dbgfs_info;
};
#define to_ndev_ntb(__ntb) container_of(__ntb, struct idt_ntb_dev, ntb)
/*
* Descriptor of the IDT PCIe - switch BAR resources
* @ setup : BAR setup register
* @ limit : BAR limit register
* @ ltbase : Lower translated base address
* @ utbase : Upper translated base address
*/
struct idt_ntb_bar {
unsigned int setup;
unsigned int limit;
unsigned int ltbase;
unsigned int utbase;
};
/*
* Descriptor of the IDT PCIe - switch message resources
* @ in : Inbound message register
* @ out : Outbound message register
* @ src : Source of inbound message register
*/
struct idt_ntb_msg {
unsigned int in;
unsigned int out;
unsigned int src;
};
/*
* Descriptor of the IDT PCIe - switch NT - function specific parameters in the
* PCI Configuration Space
* @ bars : BARs related registers
* @ msgs : Messaging related registers
*/
struct idt_ntb_regs {
struct idt_ntb_bar bars[IDT_BAR_CNT];
struct idt_ntb_msg msgs[IDT_MSG_CNT];
};
/*
* Descriptor of the IDT PCIe - switch port specific parameters in the
* Global Configuration Space
* @ pcicmdsts : PCI command / status register
* @ pcielctlsts : PCIe link control / status
*
* @ ctl : Port control register
* @ sts : Port status register
*
* @ bars : BARs related registers
*/
struct idt_ntb_port {
unsigned int pcicmdsts;
unsigned int pcielctlsts;
unsigned int ntctl;
unsigned int ctl;
unsigned int sts;
struct idt_ntb_bar bars[IDT_BAR_CNT];
};
/*
* Descriptor of the IDT PCIe - switch partition specific parameters .
* @ ctl : Partition control register in the Global Address Space
* @ sts : Partition status register in the Global Address Space
* @ msgctl : Messages control registers
*/
struct idt_ntb_part {
unsigned int ctl;
unsigned int sts;
unsigned int msgctl[IDT_MSG_CNT];
};
#endif /* NTB_HW_IDT_H */
Messung V0.5 in Prozent C=96 H=95 G=95
¤ Dauer der Verarbeitung: 0.38 Sekunden
¤
*© Formatika GbR, Deutschland
2026-10-11
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=1127926
#Domains=2039723