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