xref: /freebsd-src/sys/dev/pms/freebsd/driver/common/lxcommon.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
14e1bc9a0SAchim Leubner /*******************************************************************************
24e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
34e1bc9a0SAchim Leubner *
44e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
54e1bc9a0SAchim Leubner *that the following conditions are met:
64e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
74e1bc9a0SAchim Leubner *following disclaimer.
84e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
94e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
104e1bc9a0SAchim Leubner *with the distribution.
114e1bc9a0SAchim Leubner *
124e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
134e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
144e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
154e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
164e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
174e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
184e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
194e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
204e1bc9a0SAchim Leubner *
214e1bc9a0SAchim Leubner *
224e1bc9a0SAchim Leubner *******************************************************************************/
234e1bc9a0SAchim Leubner /******************************************************************************
244e1bc9a0SAchim Leubner 
254e1bc9a0SAchim Leubner Module Name:
264e1bc9a0SAchim Leubner   lxcommon.h
274e1bc9a0SAchim Leubner Abstract:
284e1bc9a0SAchim Leubner   TISA Initiator/target driver module constant define header file
294e1bc9a0SAchim Leubner Environment:
304e1bc9a0SAchim Leubner   Kernel or loadable module
314e1bc9a0SAchim Leubner 
324e1bc9a0SAchim Leubner ******************************************************************************/
334e1bc9a0SAchim Leubner 
344e1bc9a0SAchim Leubner 
354e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/titypes.h>
364e1bc9a0SAchim Leubner 
374e1bc9a0SAchim Leubner 
384e1bc9a0SAchim Leubner #define LINUX_DMA_MEM_MAX       0x1ffe0   /* 128k - 32, real 128k - 24 */
394e1bc9a0SAchim Leubner #define DEK_MAX_TABLE_ITEMS     DEK_MAX_TABLE_ENTRIES // from tisa/api/titypes.h
404e1bc9a0SAchim Leubner 
414e1bc9a0SAchim Leubner /*
424e1bc9a0SAchim Leubner ** IP address length based on character.
434e1bc9a0SAchim Leubner */
444e1bc9a0SAchim Leubner #ifdef AGTIAPI_IP6_SUPPORT
454e1bc9a0SAchim Leubner #  define IP_ADDR_CHAR_LEN      64
464e1bc9a0SAchim Leubner #else
474e1bc9a0SAchim Leubner #  define IP_ADDR_CHAR_LEN      16
484e1bc9a0SAchim Leubner #endif
494e1bc9a0SAchim Leubner 
504e1bc9a0SAchim Leubner #define MSEC_PER_TICK               (1000/hz)     /* milisecond per tick */
514e1bc9a0SAchim Leubner #define USEC_PER_TICK               (1000000/hz)  /* microsecond per tick */
524e1bc9a0SAchim Leubner #define AGTIAPI_64BIT_ALIGN     8       /* 64 bit environment alignment */
534e1bc9a0SAchim Leubner 
544e1bc9a0SAchim Leubner /*
554e1bc9a0SAchim Leubner ** Max device supported
564e1bc9a0SAchim Leubner */
574e1bc9a0SAchim Leubner #define AGTIAPI_MAX_CARDS           4   /* card supported up to system limit */
584e1bc9a0SAchim Leubner #define AGTIAPI_TOO_MANY_CARDS     -1   /* beyond defined max support */
594e1bc9a0SAchim Leubner #define AGTIAPI_MAX_PORTALS         16   /* max portal per card */
604e1bc9a0SAchim Leubner /* max device per portal */
614e1bc9a0SAchim Leubner 
624e1bc9a0SAchim Leubner /*
634e1bc9a0SAchim Leubner ** Adjustable Parameter Options
644e1bc9a0SAchim Leubner */
654e1bc9a0SAchim Leubner #define AGTIAPI_OPTION_ON       1       /* adjustable parameter available */
664e1bc9a0SAchim Leubner #define AGTIAPI_KEY_MAX         64      /* max number of keys */
674e1bc9a0SAchim Leubner #define AGTIAPI_STRING_MAX      512     /* max length for string */
684e1bc9a0SAchim Leubner #define AGTIAPI_PARAM_MAX       256     /* max number of parameters */
694e1bc9a0SAchim Leubner #ifdef TARGET_DRIVER
704e1bc9a0SAchim Leubner #define AGTIAPI_DMA_MEM_LIST_MAX    4096 /* max number of DMA memory list */
714e1bc9a0SAchim Leubner #define AGTIAPI_CACHE_MEM_LIST_MAX  24  /* max number of CACHE memory list */
724e1bc9a0SAchim Leubner #else /* INITIATOR_DRIVER */
734e1bc9a0SAchim Leubner #define AGTIAPI_DMA_MEM_LIST_MAX    1024 /* max number of DMA memory list */
744e1bc9a0SAchim Leubner #define AGTIAPI_CACHE_MEM_LIST_MAX  1024 /* max number of CACHE memory list */
754e1bc9a0SAchim Leubner #endif
764e1bc9a0SAchim Leubner #ifndef AGTIAPI_DYNAMIC_MAX
774e1bc9a0SAchim Leubner #define AGTIAPI_DYNAMIC_MAX     4096    /* max unreleased dynamic memory */
784e1bc9a0SAchim Leubner #endif
794e1bc9a0SAchim Leubner #define AGTIAPI_LOOP_MAX        4       /* max loop for init process */
804e1bc9a0SAchim Leubner 
814e1bc9a0SAchim Leubner #define AGTIAPI_MAX_NAME        70      // Max string name length
824e1bc9a0SAchim Leubner #define AGTIAPI_MIN_NAME        10      // minimum space for SAS name string
834e1bc9a0SAchim Leubner #define AGTIAPI_MAX_ID          8       // Max string id length
844e1bc9a0SAchim Leubner 
854e1bc9a0SAchim Leubner /*
864e1bc9a0SAchim Leubner ** Card-port status definitions
874e1bc9a0SAchim Leubner */
884e1bc9a0SAchim Leubner #define AGTIAPI_INIT_TIME           0x00000001
894e1bc9a0SAchim Leubner #define AGTIAPI_SOFT_RESET          0x00000002
904e1bc9a0SAchim Leubner #define AGTIAPI_HAD_RESET           0x00000004 // ###
914e1bc9a0SAchim Leubner #define AGTIAPI_DISC_DONE           0x00000008
924e1bc9a0SAchim Leubner #define AGTIAPI_INSTALLED           0x00000010
934e1bc9a0SAchim Leubner #define AGTIAPI_RESET               0x00000020
944e1bc9a0SAchim Leubner #define AGTIAPI_FLAG_UP             0x00000040
954e1bc9a0SAchim Leubner #define AGTIAPI_CB_DONE             0x00000080
964e1bc9a0SAchim Leubner #define AGTIAPI_DISC_COMPLETE       0x00000100
974e1bc9a0SAchim Leubner #define AGTIAPI_IOREGION_REQUESTED  0x00000200
984e1bc9a0SAchim Leubner #define AGTIAPI_IRQ_REQUESTED       0x00000400
994e1bc9a0SAchim Leubner #define AGTIAPI_SCSI_REGISTERED     0x00000800
1004e1bc9a0SAchim Leubner #define AGTIAPI_NAME_SERVER_UP      0x00001000
1014e1bc9a0SAchim Leubner #define AGTIAPI_PORT_INITIALIZED    0x00002000
1024e1bc9a0SAchim Leubner #define AGTIAPI_PORT_LINK_UP        0x00004000
1034e1bc9a0SAchim Leubner #define AGTIAPI_LGN_LINK_UP         0x00008000
1044e1bc9a0SAchim Leubner #define AGTIAPI_PORT_PANIC          0x00010000
1054e1bc9a0SAchim Leubner #define AGTIAPI_RESET_SUCCESS       0x00020000
1064e1bc9a0SAchim Leubner #define AGTIAPI_PORT_START          0x00040000
1074e1bc9a0SAchim Leubner #define AGTIAPI_PORT_STOPPED        0x00080000
1084e1bc9a0SAchim Leubner #define AGTIAPI_PORT_SHUTDOWN       0x00100000
1094e1bc9a0SAchim Leubner #define AGTIAPI_IN_USE              0x00200000
1104e1bc9a0SAchim Leubner #define AGTIAPI_SYS_INTR_ON         0x00400000
1114e1bc9a0SAchim Leubner #define AGTIAPI_PORT_DISC_READY     0x00800000
1124e1bc9a0SAchim Leubner #define AGTIAPI_SIG_DOWN            0x01000000
1134e1bc9a0SAchim Leubner #define AGTIAPI_SIG_UP              0x02000000
1144e1bc9a0SAchim Leubner #define AGTIAPI_TASK                0x04000000
1154e1bc9a0SAchim Leubner #define AGTIAPI_INITIATOR           0x08000000
1164e1bc9a0SAchim Leubner #define AGTIAPI_TARGET              0x10000000
1174e1bc9a0SAchim Leubner #define AGTIAPI_TIMER_ON            0x20000000
1184e1bc9a0SAchim Leubner #define AGTIAPI_SHUT_DOWN           0x40000000
1194e1bc9a0SAchim Leubner /* reserved for ccb flag TASK_MANAGEMENT
1204e1bc9a0SAchim Leubner #define AGTIAPI_RESERVED            0x80000000
1214e1bc9a0SAchim Leubner */
1224e1bc9a0SAchim Leubner #define AGTIAPI_RESET_ALL           0xFFFFFFFF
1234e1bc9a0SAchim Leubner 
1244e1bc9a0SAchim Leubner /*
1254e1bc9a0SAchim Leubner ** PCI defines
1264e1bc9a0SAchim Leubner */
1274e1bc9a0SAchim Leubner #ifndef PCI_VENDOR_ID_HP
1284e1bc9a0SAchim Leubner #define PCI_VENDOR_ID_HP             0x103c
1294e1bc9a0SAchim Leubner #endif
1304e1bc9a0SAchim Leubner 
1314e1bc9a0SAchim Leubner #ifndef PCI_VENDOR_ID_PMC_SIERRA
1324e1bc9a0SAchim Leubner #define PCI_VENDOR_ID_PMC_SIERRA     0x11F8
1334e1bc9a0SAchim Leubner #endif
1344e1bc9a0SAchim Leubner 
1354e1bc9a0SAchim Leubner #ifndef PCI_VENDOR_ID_AGILENT
1364e1bc9a0SAchim Leubner #define PCI_VENDOR_ID_AGILENT        0x15bc
1374e1bc9a0SAchim Leubner #endif
1384e1bc9a0SAchim Leubner 
1394e1bc9a0SAchim Leubner #ifndef PCI_VENDOR_ID_CYCLONE
1404e1bc9a0SAchim Leubner #define PCI_VENDOR_ID_CYCLONE        0x113C
1414e1bc9a0SAchim Leubner #endif
1424e1bc9a0SAchim Leubner 
1434e1bc9a0SAchim Leubner #ifndef PCI_VENDOR_ID_SPCV_FPGA
1444e1bc9a0SAchim Leubner #define PCI_VENDOR_ID_SPCV_FPGA      0x1855
1454e1bc9a0SAchim Leubner #endif
1464e1bc9a0SAchim Leubner 
1474e1bc9a0SAchim Leubner #ifndef PCI_VENDOR_ID_HIALEAH
1484e1bc9a0SAchim Leubner #define PCI_VENDOR_ID_HIALEAH        0x9005
1494e1bc9a0SAchim Leubner #endif
1504e1bc9a0SAchim Leubner 
1514e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HP_TS          0x102a
1524e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HP_TL          0x1028
1534e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HP_XL2         0x1029
1544e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_DX2         0x0100
1554e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_DX2PLUS     0x0101
1564e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_QX2         0x0102
1574e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_QX4         0x0103
1584e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_QE4         0x1200
1594e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_DE4         0x1203
1604e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_XL10        0x0104
1614e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_DX4PLUS     0x0105
1624e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_DIXL        0x0110
1634e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_AG_IDX1        0x050A
1644e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPC        0x8001
1654e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCV       0x8008
1664e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCVE      0x8009
1674e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCVPLUS   0x8018
1684e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCVE_16   0x8019
1694e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_SPCV_FPGA             0xabcd
1704e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCV12G     0x8070
1714e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G    0x8071
1724e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCV12G_16  0x8072
1734e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G_16 0x8073
1744e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HIALEAH_HBA_SPC        0x8081
1754e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HIALEAH_RAID_SPC       0x8091
1764e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HIALEAH_HBA_SPCV       0x8088
1774e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HIALEAH_RAID_SPCV      0x8098
1784e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HIALEAH_HBA_SPCVE      0x8089
1794e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_HIALEAH_RAID_SPCVE     0x8099
1804e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCV       0x8074
1814e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCVE      0x8075
1824e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV      0x8076
1834e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCVE     0x8077
1844e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV_SATA 0x8006
1854e1bc9a0SAchim Leubner 
1864e1bc9a0SAchim Leubner 
1874e1bc9a0SAchim Leubner #define PCI_SUB_VENDOR_ID_HP         PCI_VENDOR_ID_HP
1884e1bc9a0SAchim Leubner #define PCI_SUB_VENDOR_ID_AG         PCI_VENDOR_ID_AGILENT
1894e1bc9a0SAchim Leubner #define PCI_SUB_VENDOR_ID_MASK       0xFFFF
1904e1bc9a0SAchim Leubner #define PCI_SUB_SYSTEM_ID_AG         0x0001
1914e1bc9a0SAchim Leubner #define PCI_BASE_MEM_MASK            (~0x0F)
1924e1bc9a0SAchim Leubner 
1934e1bc9a0SAchim Leubner #define PCI_DEVICE_ID_CYCLONE        0xB555
1944e1bc9a0SAchim Leubner #define PCI_ENABLE_VALUE             0x0157
1954e1bc9a0SAchim Leubner #ifdef PMC_SPC
1964e1bc9a0SAchim Leubner #define PCI_NUMBER_BARS              6
1974e1bc9a0SAchim Leubner #endif
1984e1bc9a0SAchim Leubner #define IOCTL_MN_GET_CARD_INFO          		0x11
1994e1bc9a0SAchim Leubner /*
2004e1bc9a0SAchim Leubner ** Constant defines
2014e1bc9a0SAchim Leubner */
2024e1bc9a0SAchim Leubner #define _08B      8
2034e1bc9a0SAchim Leubner #define _16B     16
2044e1bc9a0SAchim Leubner #define _24B     24
2054e1bc9a0SAchim Leubner #define _32B     32
2064e1bc9a0SAchim Leubner #define _64B     64
2074e1bc9a0SAchim Leubner #define _128B   128
2084e1bc9a0SAchim Leubner #define _256B   256
2094e1bc9a0SAchim Leubner #define _512B   512
2104e1bc9a0SAchim Leubner 
2114e1bc9a0SAchim Leubner #define _1K    1024
2124e1bc9a0SAchim Leubner #define _2K    2048
2134e1bc9a0SAchim Leubner #define _4K    4096
2144e1bc9a0SAchim Leubner #define _128K  (128*(_1K))
2154e1bc9a0SAchim Leubner 
2164e1bc9a0SAchim Leubner // Card property related info.
2174e1bc9a0SAchim Leubner typedef struct _ag_card_id {
2184e1bc9a0SAchim Leubner         U16 vendorId;                   /* pci vendor id */
2194e1bc9a0SAchim Leubner         U16 deviceId;                   /* pci device id */
2204e1bc9a0SAchim Leubner         S32 cardNameIndex;              /* structure index */
2214e1bc9a0SAchim Leubner         U16 membar;                     /* pci memory bar offset */
2224e1bc9a0SAchim Leubner         U16 iobar1;                     /* pci io bar 1 offset */
2234e1bc9a0SAchim Leubner         U16 iobar2;                     /* pci io bar 2 offest */
2244e1bc9a0SAchim Leubner         U16 reg;                        /* pci memory bar number */
2254e1bc9a0SAchim Leubner } ag_card_id_t;
2264e1bc9a0SAchim Leubner 
2274e1bc9a0SAchim Leubner 
2284e1bc9a0SAchim Leubner #define PCI_BASE_ADDRESS_0 PCIR_BAR(0)
2294e1bc9a0SAchim Leubner #define PCI_BASE_ADDRESS_1 PCIR_BAR(1)
2304e1bc9a0SAchim Leubner #define PCI_BASE_ADDRESS_2 PCIR_BAR(2)
2314e1bc9a0SAchim Leubner #define PCI_BASE_ADDRESS_3 PCIR_BAR(3)
2324e1bc9a0SAchim Leubner #define PCI_BASE_ADDRESS_4 PCIR_BAR(4)
2334e1bc9a0SAchim Leubner 
2344e1bc9a0SAchim Leubner 
2354e1bc9a0SAchim Leubner ag_card_id_t ag_card_type[] = {
2364e1bc9a0SAchim Leubner #ifdef AGTIAPI_ISCSI
2374e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENTj, PCI_DEVICE_ID_AG_DIXL, 1,
2384e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_0, 0},
2394e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_IDX1, 2,
2404e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_0, 0},
2414e1bc9a0SAchim Leubner #endif
2424e1bc9a0SAchim Leubner #ifdef AGTIAPI_FC
2434e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_TS, 3,
2444e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, 3},
2454e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_TL, 4,
2464e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, 3},
2474e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_XL2, 5,
2484e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, 3},
2494e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DX2, 6,
2504e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2514e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DX2PLUS, 7,
2524e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2534e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DX4PLUS, 8,
2544e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2554e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_QX2, 9,
2564e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2574e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_QX4, 10,
2584e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2594e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DE4, 11,
2604e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2614e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_QE4, 12,
2624e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2634e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_XL10, 13,
2644e1bc9a0SAchim Leubner     PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
2654e1bc9a0SAchim Leubner #endif
2664e1bc9a0SAchim Leubner #ifdef AGTIAPI_SA
2674e1bc9a0SAchim Leubner #ifdef PMC_SPC
2684e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPC, 14,
2694e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2704e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCV, 15,
2714e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2724e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE, 16,
2734e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2744e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVPLUS, 17,
2754e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2764e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE_16, 18,
2774e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2784e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_SPCV_FPGA, PCI_DEVICE_ID_SPCV_FPGA, 19,
2794e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2804e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCV12G, 20,
2814e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2824e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G, 21,
2834e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2844e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCV12G_16, 22,
2854e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2864e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G_16, 23,
2874e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2884e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_HBA_SPC, 24,
2894e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2904e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_RAID_SPC, 25,
2914e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2924e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_HBA_SPCV, 26,
2934e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2944e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_RAID_SPCV, 27,
2954e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2964e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_HBA_SPCVE, 28,
2974e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
2984e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_RAID_SPCVE, 29,
2994e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
3004e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCV, 30,
3014e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
3024e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCVE, 31,
3034e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
3044e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV, 32,
3054e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
3064e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCVE, 33,
3074e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
3084e1bc9a0SAchim Leubner   {PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV_SATA, 34,
3094e1bc9a0SAchim Leubner    PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
3104e1bc9a0SAchim Leubner 
3114e1bc9a0SAchim Leubner #endif
3124e1bc9a0SAchim Leubner #endif   //AGTIAPI_SA
3134e1bc9a0SAchim Leubner };
3144e1bc9a0SAchim Leubner 
31584ab9074SRyan Libby static char const * const ag_card_names[] = {
3164e1bc9a0SAchim Leubner   "Unknown",
3174e1bc9a0SAchim Leubner   "iSCSI DiXL Card",
3184e1bc9a0SAchim Leubner   "iSCSI iDX1 Card",
3194e1bc9a0SAchim Leubner   "Tachyon TS Fibre Channel Card",
3204e1bc9a0SAchim Leubner   "Tachyon TL Fibre Channel Card",
3214e1bc9a0SAchim Leubner   "Tachyon XL2 Fibre Channel Card",
3224e1bc9a0SAchim Leubner   "Tachyon DX2 Fibre Channel Card",
3234e1bc9a0SAchim Leubner   "Tachyon DX2+ Fibre Channel Card",
3244e1bc9a0SAchim Leubner   "Tachyon DX4+ Fibre Channel Card",
3254e1bc9a0SAchim Leubner   "Tachyon QX2 Fibre Channel Card",
3264e1bc9a0SAchim Leubner   "Tachyon QX4 Fibre Channel Card",
3274e1bc9a0SAchim Leubner   "Tachyon DE4 Fibre Channel Card",
3284e1bc9a0SAchim Leubner   "Tachyon QE4 Fibre Channel Card",
3294e1bc9a0SAchim Leubner   "Tachyon XL10 Fibre Channel Card",
3304e1bc9a0SAchim Leubner #ifdef AGTIAPI_SA
3314e1bc9a0SAchim Leubner #ifdef PMC_SPC
3324e1bc9a0SAchim Leubner   "PMC Sierra SPC SAS-SATA Card",
3334e1bc9a0SAchim Leubner   "PMC Sierra SPC-V SAS-SATA Card",
3344e1bc9a0SAchim Leubner   "PMC Sierra SPC-VE SAS-SATA Card",
3354e1bc9a0SAchim Leubner   "PMC Sierra SPC-V 16 Port SAS-SATA Card",
3364e1bc9a0SAchim Leubner   "PMC Sierra SPC-VE 16 Port SAS-SATA Card",
3374e1bc9a0SAchim Leubner   "PMC Sierra FPGA",
3384e1bc9a0SAchim Leubner   "PMC Sierra SPC-V SAS-SATA Card 12Gig",
3394e1bc9a0SAchim Leubner   "PMC Sierra SPC-VE SAS-SATA Card 12Gig",
3404e1bc9a0SAchim Leubner   "PMC Sierra SPC-V 16 Port SAS-SATA Card 12Gig",
3414e1bc9a0SAchim Leubner   "PMC Sierra SPC-VE 16 Port SAS-SATA Card 12Gig",
3424e1bc9a0SAchim Leubner   "Adaptec Hialeah 4/8 Port SAS-SATA HBA Card 6Gig",
3434e1bc9a0SAchim Leubner   "Adaptec Hialeah 4/8 Port SAS-SATA RAID Card 6Gig",
3444e1bc9a0SAchim Leubner   "Adaptec Hialeah 8/16 Port SAS-SATA HBA Card 6Gig",
3454e1bc9a0SAchim Leubner   "Adaptec Hialeah 8/16 Port SAS-SATA RAID Card 6Gig",
3464e1bc9a0SAchim Leubner   "Adaptec Hialeah 8/16 Port SAS-SATA HBA Encryption Card 6Gig",
3474e1bc9a0SAchim Leubner   "Adaptec Hialeah 8/16 Port SAS-SATA RAID Encryption Card 6Gig",
3484e1bc9a0SAchim Leubner   "Adaptec Delray 8 Port SAS-SATA HBA Card 12Gig",
3494e1bc9a0SAchim Leubner   "Adaptec Delray 8 Port SAS-SATA HBA Encryption Card 12Gig",
3504e1bc9a0SAchim Leubner   "Adaptec Delray 16 Port SAS-SATA HBA Card 12Gig",
3514e1bc9a0SAchim Leubner   "Adaptec Delray 16 Port SAS-SATA HBA Encryption Card 12Gig",
3524e1bc9a0SAchim Leubner   "Adaptec SATA Adapter",
3534e1bc9a0SAchim Leubner 
3544e1bc9a0SAchim Leubner #endif
3554e1bc9a0SAchim Leubner #endif
3564e1bc9a0SAchim Leubner };
3574e1bc9a0SAchim Leubner 
3584e1bc9a0SAchim Leubner 
3594e1bc9a0SAchim Leubner 
3604e1bc9a0SAchim Leubner /*
3614e1bc9a0SAchim Leubner **  Resource Info Structure
3624e1bc9a0SAchim Leubner */
3634e1bc9a0SAchim Leubner typedef struct _ag_resource_info {
3644e1bc9a0SAchim Leubner   tiLoLevelResource_t   tiLoLevelResource;    // Low level resource required
3654e1bc9a0SAchim Leubner   tiInitiatorResource_t tiInitiatorResource;  // Initiator resource required
3664e1bc9a0SAchim Leubner   tiTargetResource_t    tiTargetResource;     // Target resource required
3674e1bc9a0SAchim Leubner   tiTdSharedMem_t       tiSharedMem;          // Shared memory by ti and td
3684e1bc9a0SAchim Leubner } ag_resource_info_t;
3694e1bc9a0SAchim Leubner 
3704e1bc9a0SAchim Leubner 
3714e1bc9a0SAchim Leubner //  DMA memory address pair
3724e1bc9a0SAchim Leubner typedef struct _ag_dma_addr {
3734e1bc9a0SAchim Leubner   void         *dmaVirtAddr;
3744e1bc9a0SAchim Leubner   vm_paddr_t    dmaPhysAddr;
3754e1bc9a0SAchim Leubner   U32           memSize;
3764e1bc9a0SAchim Leubner   bit32         type;
3774e1bc9a0SAchim Leubner   bus_addr_t    nocache_busaddr;
3784e1bc9a0SAchim Leubner   void         *nocache_mem;
3794e1bc9a0SAchim Leubner } ag_dma_addr_t;
3804e1bc9a0SAchim Leubner 
3814e1bc9a0SAchim Leubner 
3824e1bc9a0SAchim Leubner typedef struct _CardInfo
3834e1bc9a0SAchim Leubner {
3844e1bc9a0SAchim Leubner   U32                 pciIOAddrLow;    /* PCI IOBASE lower */
3854e1bc9a0SAchim Leubner   U32                 pciIOAddrUp;     /* PCI IOBASE Upper */
3864e1bc9a0SAchim Leubner   U32_64    	      pciMemBase;      /* PCI MEMBASE, physical */
3874e1bc9a0SAchim Leubner   U32_64    	      pciMemBaseSpc[PCI_NUMBER_BARS]; // PCI MEMBASE, physical
3884e1bc9a0SAchim Leubner   U16	  		 	  deviceId;  // PCI device id
3894e1bc9a0SAchim Leubner   U16	   			  vendorId;  // PCI Vendor id
3904e1bc9a0SAchim Leubner   U32                 busNum;
3914e1bc9a0SAchim Leubner   U32                 deviceNum;
3924e1bc9a0SAchim Leubner }CardInfo_t;
3934e1bc9a0SAchim Leubner 
3944e1bc9a0SAchim Leubner // Card info. for all cards and drivers
3954e1bc9a0SAchim Leubner typedef struct _ag_card_info {
3964e1bc9a0SAchim Leubner   struct mtx         pmIOLock;
3974e1bc9a0SAchim Leubner   device_t           pPCIDev;         // PCI device pointer
3984e1bc9a0SAchim Leubner   void              *pCard;           // pointer to per card data structure
3994e1bc9a0SAchim Leubner   S32                cardNameIndex;
4004e1bc9a0SAchim Leubner   U32                cardID;          // card system ID
4014e1bc9a0SAchim Leubner   U32                cardIdIndex;
4024e1bc9a0SAchim Leubner   U32                pciIOAddrLow;    // PCI IOBASE lower
4034e1bc9a0SAchim Leubner   U32                pciIOAddrUp;     // PCI IOBASE Upper
4044e1bc9a0SAchim Leubner   U32_64             pciMemBase;      // PCI MEMBASE, physical
4054e1bc9a0SAchim Leubner   caddr_t            pciMemVirtAddr;  // PCI MEMBASE, virtual ptr
4064e1bc9a0SAchim Leubner   U32                pciMemSize;      // PCI MEMBASE memory size
4074e1bc9a0SAchim Leubner #ifdef AGTIAPI_SA
4084e1bc9a0SAchim Leubner #ifdef FPGA_CARD
4094e1bc9a0SAchim Leubner   U32_64             pciMemBase0;     // PCI MEMBASE, physical
4104e1bc9a0SAchim Leubner   caddr_t            pciMemVirtAddr0; // PCI MEMBASE, virtual ptr
4114e1bc9a0SAchim Leubner   U32                pciMemSize0;     // PCI MEMBASE memory size
4124e1bc9a0SAchim Leubner #endif
4134e1bc9a0SAchim Leubner #ifdef PMC_SPC
4144e1bc9a0SAchim Leubner   struct resource    *pciMemBaseRscSpc[PCI_NUMBER_BARS];
4154e1bc9a0SAchim Leubner   int                pciMemBaseRIDSpc[PCI_NUMBER_BARS];
4164e1bc9a0SAchim Leubner   U32_64             pciMemBaseSpc[PCI_NUMBER_BARS];  // PCI MEMBASE, physical
4174e1bc9a0SAchim Leubner   caddr_t            pciMemVirtAddrSpc[PCI_NUMBER_BARS];//PCI MEMBASE, virt ptr
4184e1bc9a0SAchim Leubner   U32                pciMemSizeSpc[PCI_NUMBER_BARS]; // PCI MEMBASE memory size
4194e1bc9a0SAchim Leubner #endif
4204e1bc9a0SAchim Leubner #endif
4214e1bc9a0SAchim Leubner   U16                 memBar;
4224e1bc9a0SAchim Leubner   U16                 memReg;
4234e1bc9a0SAchim Leubner   U32                 cacheIndex;
4244e1bc9a0SAchim Leubner   U32                 dmaIndex;
4254e1bc9a0SAchim Leubner   ag_dma_addr_t       tiDmaMem[AGTIAPI_DMA_MEM_LIST_MAX]; // dma addr list
4264e1bc9a0SAchim Leubner 
4274e1bc9a0SAchim Leubner   // all (free and allocated) mem slots
4284e1bc9a0SAchim Leubner   ag_dma_addr_t       dynamicMem[AGTIAPI_DYNAMIC_MAX];
4294e1bc9a0SAchim Leubner 
4304e1bc9a0SAchim Leubner   // ptr to free mem slots
4314e1bc9a0SAchim Leubner   ag_dma_addr_t       *freeDynamicMem[AGTIAPI_DYNAMIC_MAX];
4324e1bc9a0SAchim Leubner 
4334e1bc9a0SAchim Leubner   U16                 topOfFreeDynamicMem; // idx to the first free slot ptr
4344e1bc9a0SAchim Leubner 
4354e1bc9a0SAchim Leubner   void               *tiCachedMem[AGTIAPI_CACHE_MEM_LIST_MAX];// cached mem list
4364e1bc9a0SAchim Leubner   ag_resource_info_t  tiRscInfo;  /* low level resource requirement */
4374e1bc9a0SAchim Leubner   U08                 WWN[AGTIAPI_MAX_NAME];  /* WWN for this card */
4384e1bc9a0SAchim Leubner   U08                 WWNLen;
4394e1bc9a0SAchim Leubner 
4404e1bc9a0SAchim Leubner // #define MAX_MSIX_NUM_VECTOR 64 ##
4414e1bc9a0SAchim Leubner #define MAX_MSIX_NUM_VECTOR 16 // 1 then 16 just for testing;
4424e1bc9a0SAchim Leubner #define MAX_MSIX_NUM_DPC    64 // 16
4434e1bc9a0SAchim Leubner #define MAX_MSIX_NUM_ISR    64 // 16
4444e1bc9a0SAchim Leubner #ifdef SPC_MSIX_INTR
4454e1bc9a0SAchim Leubner 
4464e1bc9a0SAchim Leubner                          // ## use as a map instead of presirq
4474e1bc9a0SAchim Leubner   struct resource   *msix_entries[MAX_MSIX_NUM_VECTOR];
4484e1bc9a0SAchim Leubner #endif
4494e1bc9a0SAchim Leubner   U32                 maxInterruptVectors;
4504e1bc9a0SAchim Leubner } ag_card_info_t;
4514e1bc9a0SAchim Leubner 
4524e1bc9a0SAchim Leubner /*
4534e1bc9a0SAchim Leubner ** Optional Adjustable Parameters Structures.
4544a00a651SPedro F. Giffuni ** Not using pointer structure for easy read and access tree structure.
4554e1bc9a0SAchim Leubner ** In the future if more layer of key tree involved, it might be a good
4564e1bc9a0SAchim Leubner ** idea to change the structure and program.
4574e1bc9a0SAchim Leubner */
4584e1bc9a0SAchim Leubner typedef struct _ag_param_value{
4594e1bc9a0SAchim Leubner   char                   valueName[AGTIAPI_MAX_NAME];
4604e1bc9a0SAchim Leubner   char                   valueString[AGTIAPI_STRING_MAX];
4614e1bc9a0SAchim Leubner   struct _ag_param_value *next;
4624e1bc9a0SAchim Leubner } ag_value_t;
4634e1bc9a0SAchim Leubner 
4644e1bc9a0SAchim Leubner typedef struct _ag_param_key{
4654e1bc9a0SAchim Leubner   char                 keyName[AGTIAPI_MAX_NAME];
4664e1bc9a0SAchim Leubner   ag_value_t           *pValueHead;
4674e1bc9a0SAchim Leubner   ag_value_t           *pValueTail;
4684e1bc9a0SAchim Leubner   struct _ag_param_key *pSubkeyHead;
4694e1bc9a0SAchim Leubner   struct _ag_param_key *pSubkeyTail;
4704e1bc9a0SAchim Leubner   struct _ag_param_key *next;
4714e1bc9a0SAchim Leubner } ag_key_t;
4724e1bc9a0SAchim Leubner 
4734e1bc9a0SAchim Leubner /*
4744e1bc9a0SAchim Leubner **  Portal info data structure
4754e1bc9a0SAchim Leubner */
4764e1bc9a0SAchim Leubner typedef struct _ag_portal_info {
4774e1bc9a0SAchim Leubner   U32               portID;
4784e1bc9a0SAchim Leubner   U32               portStatus;
4794e1bc9a0SAchim Leubner   U32               devTotal;
4804e1bc9a0SAchim Leubner   U32               devPrev;
4814e1bc9a0SAchim Leubner   tiPortInfo_t      tiPortInfo;
4824e1bc9a0SAchim Leubner   tiPortalContext_t tiPortalContext;
4834e1bc9a0SAchim Leubner #ifdef INITIATOR_DRIVER
4844e1bc9a0SAchim Leubner   void              *pDevList[AGTIAPI_HW_LIMIT_DEVICE];
4854e1bc9a0SAchim Leubner #endif
4864e1bc9a0SAchim Leubner } ag_portal_info_t;
4874e1bc9a0SAchim Leubner 
4884e1bc9a0SAchim Leubner #define MAP_TABLE_ENTRY(pC, c, d, l) (pC->encrypt_map +                        \
4894e1bc9a0SAchim Leubner                                      (c * pC->devDiscover * AGTIAPI_MAX_LUN) + \
4904e1bc9a0SAchim Leubner                                      (d * AGTIAPI_MAX_LUN) +                   \
4914e1bc9a0SAchim Leubner                                      (l))
4924e1bc9a0SAchim Leubner 
4934e1bc9a0SAchim Leubner #ifdef  CHAR_DEVICE
4944e1bc9a0SAchim Leubner /*************************************************************************
4954e1bc9a0SAchim Leubner Purpose: Payload Wraper for ioctl commands
4964e1bc9a0SAchim Leubner ***********************************************************************/
4974e1bc9a0SAchim Leubner typedef struct datatosendt{
4984e1bc9a0SAchim Leubner bit32 datasize; //buffer size
4994e1bc9a0SAchim Leubner bit8 *data; //buffer
5004e1bc9a0SAchim Leubner }datatosend;
5014e1bc9a0SAchim Leubner /***********************************************************************/
5024e1bc9a0SAchim Leubner #define AGTIAPI_IOCTL_BASE  'x'
5034e1bc9a0SAchim Leubner #define AGTIAPI_IOCTL    _IOWR(AGTIAPI_IOCTL_BASE, 0,datatosend ) //receiving payload here//
5044e1bc9a0SAchim Leubner #define AGTIAPI_IOCTL_MAX  1
5054e1bc9a0SAchim Leubner #endif
5064e1bc9a0SAchim Leubner 
5074e1bc9a0SAchim Leubner #ifdef AGTIAPI_FLOW_DEBUG
5084e1bc9a0SAchim Leubner #define AGTIAPI_FLOW(format, a...)  printf(format, ## a)
5094e1bc9a0SAchim Leubner #else
5104e1bc9a0SAchim Leubner #define AGTIAPI_FLOW(format, a...)
5114e1bc9a0SAchim Leubner #endif
5124e1bc9a0SAchim Leubner 
5134e1bc9a0SAchim Leubner #ifdef AGTIAPI_DEBUG
5144e1bc9a0SAchim Leubner #define AGTIAPI_PRINTK(format, a...)  printf(format, ## a)
5154e1bc9a0SAchim Leubner #else
5164e1bc9a0SAchim Leubner #define AGTIAPI_PRINTK(format, a...)
5174e1bc9a0SAchim Leubner #endif
5184e1bc9a0SAchim Leubner 
5194e1bc9a0SAchim Leubner #ifdef AGTIAPI_INIT_DEBUG
5204e1bc9a0SAchim Leubner #define AGTIAPI_INIT(format, a...)  printf(format, ## a)
5214e1bc9a0SAchim Leubner /* to avoid losing the logs */
5224e1bc9a0SAchim Leubner #define AGTIAPI_INIT_MDELAY(dly)  mdelay(dly)
5234e1bc9a0SAchim Leubner #else
5244e1bc9a0SAchim Leubner #define AGTIAPI_INIT(format, a...)
5254e1bc9a0SAchim Leubner #define AGTIAPI_INIT_MDELAY(dly)
5264e1bc9a0SAchim Leubner #endif
5274e1bc9a0SAchim Leubner 
5284e1bc9a0SAchim Leubner #ifdef AGTIAPI_INIT2_DEBUG
5294e1bc9a0SAchim Leubner #define AGTIAPI_INIT2(format, a...)  printf(format, ## a)
5304e1bc9a0SAchim Leubner #else
5314e1bc9a0SAchim Leubner #define AGTIAPI_INIT2(format, a...)
5324e1bc9a0SAchim Leubner #endif
5334e1bc9a0SAchim Leubner 
5344e1bc9a0SAchim Leubner #ifdef AGTIAPI_INIT_MEM_DEBUG
5354e1bc9a0SAchim Leubner #define AGTIAPI_INITMEM(format, a...)  printf(format, ## a)
5364e1bc9a0SAchim Leubner #else
5374e1bc9a0SAchim Leubner #define AGTIAPI_INITMEM(format, a...)
5384e1bc9a0SAchim Leubner #endif
5394e1bc9a0SAchim Leubner 
5404e1bc9a0SAchim Leubner #ifdef AGTIAPI_IO_DEBUG
5414e1bc9a0SAchim Leubner #define AGTIAPI_IO(format, a...)       printf(format, ## a)
5424e1bc9a0SAchim Leubner #else
5434e1bc9a0SAchim Leubner #define AGTIAPI_IO(format, a...)
5444e1bc9a0SAchim Leubner #endif
5454e1bc9a0SAchim Leubner 
5464e1bc9a0SAchim Leubner #ifdef AGTIAPI_LOAD_DELAY
5474e1bc9a0SAchim Leubner #define AGTIAPI_INIT_DELAY(delay_time)  \
5484e1bc9a0SAchim Leubner     {  \
5494e1bc9a0SAchim Leubner       agtiapi_DelayMSec(delay_time);  \
5504e1bc9a0SAchim Leubner     }
5514e1bc9a0SAchim Leubner #else
5524e1bc9a0SAchim Leubner #define AGTIAPI_INIT_DELAY(delay_time)
5534e1bc9a0SAchim Leubner #endif
5544e1bc9a0SAchim Leubner 
5554e1bc9a0SAchim Leubner /*
5564e1bc9a0SAchim Leubner  * AGTIAPI_KDB() will be used to drop into kernel debugger
5574e1bc9a0SAchim Leubner  * from driver code if kdb is involved.
5584e1bc9a0SAchim Leubner  */
5594e1bc9a0SAchim Leubner #ifdef AGTIAPI_KDB_ENABLE
5604e1bc9a0SAchim Leubner #define AGTIAPI_KDB()  KDB_ENTER()
5614e1bc9a0SAchim Leubner #else
5624e1bc9a0SAchim Leubner #define AGTIAPI_KDB()
5634e1bc9a0SAchim Leubner #endif
5644e1bc9a0SAchim Leubner 
5654e1bc9a0SAchim Leubner #if (BITS_PER_LONG == 64)
5664e1bc9a0SAchim Leubner //#if 1
5674e1bc9a0SAchim Leubner #define LOW_32_BITS(addr)   (U32)(addr & 0xffffffff)
5684e1bc9a0SAchim Leubner #define HIGH_32_BITS(addr)  (U32)((addr >> 32) & 0xffffffff)
5694e1bc9a0SAchim Leubner #else
5704e1bc9a0SAchim Leubner #define LOW_32_BITS(addr)   (U32)addr
5714e1bc9a0SAchim Leubner #define HIGH_32_BITS(addr)  0
5724e1bc9a0SAchim Leubner #endif
5734e1bc9a0SAchim Leubner 
5744e1bc9a0SAchim Leubner #define AG_SWAP16(data)   (((data<<8) & 0xFF00) | (data>>8))
5754e1bc9a0SAchim Leubner #define AG_SWAP24(data)   (((data<<16) & 0xFF0000) | \
5764e1bc9a0SAchim Leubner                           ((data>>16) & 0xFF) | (data & 0xFF00))
5774e1bc9a0SAchim Leubner #define AG_SWAP32(data)   ((data<<24) | ((data<<8) & 0xFF0000) | \
5784e1bc9a0SAchim Leubner                           ((data>>8) & 0xFF00) | (data>>24))
5794e1bc9a0SAchim Leubner 
5804e1bc9a0SAchim Leubner #define AG_PCI_DEV_INFO(pdev)  ( \
5814e1bc9a0SAchim Leubner   AGTIAPI_PRINTK("vendor id 0x%x device id 0x%x, slot %d, function %d\n", \
5824e1bc9a0SAchim Leubner     pdev->vendor, pdev->device, PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)) \
5834e1bc9a0SAchim Leubner                                )
5844e1bc9a0SAchim Leubner 
5854e1bc9a0SAchim Leubner #define COUNT(arr)  (sizeof(arr) / sizeof(arr[0]))
5864e1bc9a0SAchim Leubner 
5874e1bc9a0SAchim Leubner #define PORTAL_CONTEXT_TO_PORTALDATA(pPortalContext) \
5884e1bc9a0SAchim Leubner   ((ag_portal_data_t *)(((tiPortalContext_t *)pPortalContext)->osData))
5894e1bc9a0SAchim Leubner #define PORTAL_STATUS(pPortalData) (pPortalData->portalInfo.portStatus)
5904e1bc9a0SAchim Leubner 
5914e1bc9a0SAchim Leubner #if (defined(DEFINE_OSTI_PORT_EVENT_IN_IBE)) || \
5924e1bc9a0SAchim Leubner     (defined(DEFINE_OSTI_PORT_EVENT_IN_TFE))
5934e1bc9a0SAchim Leubner #define TIROOT_TO_CARD(ptiRoot) \
5944e1bc9a0SAchim Leubner           ((ag_card_t *)(((appRoot_t *)(ptiRoot->osData))->oscData))
5954e1bc9a0SAchim Leubner #define TIROOT_TO_CARDINFO(ptiRoot) (TIROOT_TO_CARD(ptiRoot)->pCardInfo)
5964e1bc9a0SAchim Leubner #define TIROOT_TO_PCIDEV(ptiRoot) (TIROOT_TO_CARDINFO(ptiRoot)->pPCIDev)
5974e1bc9a0SAchim Leubner #else
5984e1bc9a0SAchim Leubner 
5994e1bc9a0SAchim Leubner #define TIROOT_TO_CARD(ptiRoot)     ((struct agtiapi_softc *)(ptiRoot->osData))
6004e1bc9a0SAchim Leubner #define TIROOT_TO_CARDINFO(ptiRoot) (TIROOT_TO_CARD(ptiRoot)->pCardInfo)
6014e1bc9a0SAchim Leubner #define TIROOT_TO_PCIDEV(ptiRoot)   (TIROOT_TO_CARD(ptiRoot)->my_dev)
6024e1bc9a0SAchim Leubner 
6034e1bc9a0SAchim Leubner #endif
6044e1bc9a0SAchim Leubner 
6054e1bc9a0SAchim Leubner 
6064e1bc9a0SAchim Leubner #define Is_ADP7H(pmsc)		((0x90058088 == (pmsc->VidDid))?1:\
6074e1bc9a0SAchim Leubner 					(0x90058089 == (pmsc->VidDid))?1:0)
6084e1bc9a0SAchim Leubner #define Is_ADP8H(pmsc)		((0x90058074 == (pmsc->VidDid))?1:\
6094e1bc9a0SAchim Leubner 					(0x90058076 == (pmsc->VidDid))?1:0)
6104e1bc9a0SAchim Leubner 
6114e1bc9a0SAchim Leubner 
6124e1bc9a0SAchim Leubner #define __cacheline_aligned __attribute__((__aligned__(CACHE_LINE_SIZE)))
6134e1bc9a0SAchim Leubner 
6144e1bc9a0SAchim Leubner /*
6154e1bc9a0SAchim Leubner ** link data, need to be included at the start (offset 0)
616*17db4b52SGordon Bergling ** of any structures that are to be stored in the link list
6174e1bc9a0SAchim Leubner */
6184e1bc9a0SAchim Leubner typedef struct _LINK_NODE
6194e1bc9a0SAchim Leubner {
6204e1bc9a0SAchim Leubner   struct _LINK_NODE *pNext;
6214e1bc9a0SAchim Leubner   struct _LINK_NODE *pPrev;
6224e1bc9a0SAchim Leubner 
6234e1bc9a0SAchim Leubner   /*
6244e1bc9a0SAchim Leubner   ** for assertion purpose only
6254e1bc9a0SAchim Leubner   */
6264e1bc9a0SAchim Leubner   struct _LINK_NODE * pHead;     // track the link list the link is a member of
6274e1bc9a0SAchim Leubner   void * pad;
6284e1bc9a0SAchim Leubner 
6294e1bc9a0SAchim Leubner } LINK_NODE, * PLINK_NODE __cacheline_aligned;
6304e1bc9a0SAchim Leubner 
6314e1bc9a0SAchim Leubner 
6324e1bc9a0SAchim Leubner /*
6334e1bc9a0SAchim Leubner ** link list basic pointers
6344e1bc9a0SAchim Leubner */
6354e1bc9a0SAchim Leubner typedef struct _LINK_LIST
6364e1bc9a0SAchim Leubner {
6374e1bc9a0SAchim Leubner   PLINK_NODE pHead;
6384e1bc9a0SAchim Leubner   bit32   Count;
6394a00a651SPedro F. Giffuni   LINK_NODE  Head __cacheline_aligned; // always one link to speed up insert&rm
6404e1bc9a0SAchim Leubner } LINK_LIST, * PLINK_LIST __cacheline_aligned;
6414e1bc9a0SAchim Leubner 
6424e1bc9a0SAchim Leubner 
6434e1bc9a0SAchim Leubner /********************************************************************
6444e1bc9a0SAchim Leubner ** MACROS
6454e1bc9a0SAchim Leubner ********************************************************************/
6464e1bc9a0SAchim Leubner /*******************************************************************************
6474e1bc9a0SAchim Leubner **
6484e1bc9a0SAchim Leubner ** MODULE NAME: comListInitialize
6494e1bc9a0SAchim Leubner **
6504e1bc9a0SAchim Leubner ** PURPOSE:     Initialize a link list.
6514e1bc9a0SAchim Leubner **
6524e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST  OUT - Link list definition.
6534e1bc9a0SAchim Leubner **
6544e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
6554e1bc9a0SAchim Leubner **
6564e1bc9a0SAchim Leubner ** ALGORITHM:
6574e1bc9a0SAchim Leubner **
6584e1bc9a0SAchim Leubner *******************************************************************************/
6594e1bc9a0SAchim Leubner #define comListInitialize(pList) {(pList)->pHead        = &((pList)->Head); \
6604e1bc9a0SAchim Leubner                                   (pList)->pHead->pNext = (pList)->pHead;   \
6614e1bc9a0SAchim Leubner                                   (pList)->pHead->pPrev = (pList)->pHead;   \
6624e1bc9a0SAchim Leubner                                   (pList)->Count        = 0;                \
6634e1bc9a0SAchim Leubner                                  }
6644e1bc9a0SAchim Leubner 
6654e1bc9a0SAchim Leubner /*******************************************************************************
6664e1bc9a0SAchim Leubner **
6674e1bc9a0SAchim Leubner ** MODULE NAME: comLinkInitialize
6684e1bc9a0SAchim Leubner **
6694e1bc9a0SAchim Leubner ** PURPOSE:     Initialize a link.
6704e1bc9a0SAchim Leubner **              This function should be used to initialize a new link before it
6714e1bc9a0SAchim Leubner **              is used in the linked list. This will initialize the link so
6724e1bc9a0SAchim Leubner **              the assertion will work
6734e1bc9a0SAchim Leubner **
6744e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_NODE      IN  - Link to be initialized.
6754e1bc9a0SAchim Leubner **
6764e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
6774e1bc9a0SAchim Leubner **
6784e1bc9a0SAchim Leubner ** ALGORITHM:
6794e1bc9a0SAchim Leubner **
6804e1bc9a0SAchim Leubner *******************************************************************************/
6814e1bc9a0SAchim Leubner 
6824e1bc9a0SAchim Leubner #define comLinkInitialize(pLink) { (pLink)->pHead = NULL;    \
6834e1bc9a0SAchim Leubner                                    (pLink)->pNext = NULL;    \
6844e1bc9a0SAchim Leubner                                    (pLink)->pPrev = NULL;    \
6854e1bc9a0SAchim Leubner                                  }
6864e1bc9a0SAchim Leubner 
6874e1bc9a0SAchim Leubner /*******************************************************************************
6884e1bc9a0SAchim Leubner **
6894e1bc9a0SAchim Leubner ** MODULE NAME: comListAdd
6904e1bc9a0SAchim Leubner **
6914e1bc9a0SAchim Leubner ** PURPOSE:     add a link at the tail of the list
6924e1bc9a0SAchim Leubner **
6934e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST OUT - Link list definition.
6944e1bc9a0SAchim Leubner **              PLINK_NODE      IN  - Link to be inserted.
6954e1bc9a0SAchim Leubner **
6964e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
6974e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
6984e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
6994e1bc9a0SAchim Leubner **
7004e1bc9a0SAchim Leubner ** ALGORITHM:
7014e1bc9a0SAchim Leubner **
7024e1bc9a0SAchim Leubner *******************************************************************************/
7034e1bc9a0SAchim Leubner #define comListAdd(pList, pLink) {                                          \
7044e1bc9a0SAchim Leubner                              (pLink)->pNext        = (pList)->pHead;        \
7054e1bc9a0SAchim Leubner                              (pLink)->pPrev        = (pList)->pHead->pPrev; \
7064e1bc9a0SAchim Leubner                              (pLink)->pPrev->pNext = (pLink);               \
7074e1bc9a0SAchim Leubner                              (pList)->pHead->pPrev = (pLink);               \
7084e1bc9a0SAchim Leubner                              (pList)->Count ++;                             \
7094e1bc9a0SAchim Leubner                              (pLink)->pHead = (pList)->pHead;               \
7104e1bc9a0SAchim Leubner                              }
7114e1bc9a0SAchim Leubner 
7124e1bc9a0SAchim Leubner /*******************************************************************************
7134e1bc9a0SAchim Leubner **
7144e1bc9a0SAchim Leubner ** MODULE NAME: comListInsert
7154e1bc9a0SAchim Leubner **
7164e1bc9a0SAchim Leubner ** PURPOSE:     insert a link preceding the given one
7174e1bc9a0SAchim Leubner **
7184e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST OUT - Link list definition.
7194e1bc9a0SAchim Leubner **              PLINK_NODE      IN  - Link to be inserted after.
7204e1bc9a0SAchim Leubner **              PLINK_NODE      IN  - Link to be inserted.
7214e1bc9a0SAchim Leubner **
7224e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
7234e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
7244e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
7254e1bc9a0SAchim Leubner **
7264e1bc9a0SAchim Leubner ** ALGORITHM:
7274e1bc9a0SAchim Leubner **
7284e1bc9a0SAchim Leubner *******************************************************************************/
7294e1bc9a0SAchim Leubner 
7304e1bc9a0SAchim Leubner #define comListInsert(pList, pLink, pNew) {                                 \
7314e1bc9a0SAchim Leubner                                  (pNew)->pNext        = (pLink);            \
7324e1bc9a0SAchim Leubner                                  (pNew)->pPrev        = (pLink)->pPrev;     \
7334e1bc9a0SAchim Leubner                                  (pNew)->pPrev->pNext = (pNew);             \
7344e1bc9a0SAchim Leubner                                  (pLink)->pPrev       = (pNew);             \
7354e1bc9a0SAchim Leubner                                  (pList)->Count ++;                         \
7364e1bc9a0SAchim Leubner                                  (pNew)->pHead = (pList)->pHead;            \
7374e1bc9a0SAchim Leubner                                  }
7384e1bc9a0SAchim Leubner 
7394e1bc9a0SAchim Leubner /*******************************************************************************
7404e1bc9a0SAchim Leubner **
7414e1bc9a0SAchim Leubner ** MODULE NAME: comListRemove
7424e1bc9a0SAchim Leubner **
7434e1bc9a0SAchim Leubner ** PURPOSE:     remove the link from the list.
7444e1bc9a0SAchim Leubner **
7454e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST OUT  - Link list definition.
7464e1bc9a0SAchim Leubner **              PLINK_NODE      IN   - Link to delet from list
7474e1bc9a0SAchim Leubner **
7484e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
7494e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
7504e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
7514e1bc9a0SAchim Leubner **
7524e1bc9a0SAchim Leubner **   !!! No validation is made on the list or the validity of the link
7534e1bc9a0SAchim Leubner **   !!! the caller must make sure that the link is in the list
7544e1bc9a0SAchim Leubner **
7554e1bc9a0SAchim Leubner **
7564e1bc9a0SAchim Leubner ** ALGORITHM:
7574e1bc9a0SAchim Leubner **
7584e1bc9a0SAchim Leubner *******************************************************************************/
7594e1bc9a0SAchim Leubner #define comListRemove(pList, pLink) {                                   \
7604e1bc9a0SAchim Leubner                            (pLink)->pPrev->pNext = (pLink)->pNext;      \
7614e1bc9a0SAchim Leubner                            (pLink)->pNext->pPrev = (pLink)->pPrev;      \
7624e1bc9a0SAchim Leubner                            (pLink)->pHead = NULL;                       \
7634e1bc9a0SAchim Leubner                            (pList)->Count --;                           \
7644e1bc9a0SAchim Leubner                            }
7654e1bc9a0SAchim Leubner 
7664e1bc9a0SAchim Leubner /*******************************************************************************
7674e1bc9a0SAchim Leubner **
7684e1bc9a0SAchim Leubner ** MODULE NAME: comListGetHead
7694e1bc9a0SAchim Leubner **
7704e1bc9a0SAchim Leubner ** PURPOSE:     get the link following the head link.
7714e1bc9a0SAchim Leubner **
7724e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST  OUT - Link list definition.
7734e1bc9a0SAchim Leubner **              RETURNS - PLINK_NODE   the link following the head
7744e1bc9a0SAchim Leubner **                                  NULL if the following link is the head
7754e1bc9a0SAchim Leubner **
7764e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
7774e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
7784e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
7794e1bc9a0SAchim Leubner **
7804e1bc9a0SAchim Leubner ** ALGORITHM:
7814e1bc9a0SAchim Leubner **
7824e1bc9a0SAchim Leubner *******************************************************************************/
7834e1bc9a0SAchim Leubner #define comListGetHead(pList) comListGetNext(pList,(pList)->pHead)
7844e1bc9a0SAchim Leubner 
7854e1bc9a0SAchim Leubner /*******************************************************************************
7864e1bc9a0SAchim Leubner **
7874e1bc9a0SAchim Leubner ** MODULE NAME: comListGetTail
7884e1bc9a0SAchim Leubner **
7894e1bc9a0SAchim Leubner ** PURPOSE:     get the link preceding the tail link.
7904e1bc9a0SAchim Leubner **
7914e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST  OUT - Link list definition.
7924e1bc9a0SAchim Leubner **              RETURNS - PLINK_NODE   the link preceding the head
7934e1bc9a0SAchim Leubner **                                  NULL if the preceding link is the head
7944e1bc9a0SAchim Leubner **
7954e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
7964e1bc9a0SAchim Leubner **
7974e1bc9a0SAchim Leubner ** ALGORITHM:
7984e1bc9a0SAchim Leubner **
7994e1bc9a0SAchim Leubner *******************************************************************************/
8004e1bc9a0SAchim Leubner #define comListGetTail(pList) comListGetPrev((pList), (pList)->pHead)
8014e1bc9a0SAchim Leubner 
8024e1bc9a0SAchim Leubner /*******************************************************************************
8034e1bc9a0SAchim Leubner **
8044e1bc9a0SAchim Leubner ** MODULE NAME: comListGetCount
8054e1bc9a0SAchim Leubner **
8064e1bc9a0SAchim Leubner ** PURPOSE:     get the number of links in the list excluding head and tail.
8074e1bc9a0SAchim Leubner **
8084e1bc9a0SAchim Leubner ** PARAMETERS:  LINK_LIST  OUT - Link list definition.
8094e1bc9a0SAchim Leubner **
8104e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
8114e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
8124e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
8134e1bc9a0SAchim Leubner **
8144e1bc9a0SAchim Leubner ** ALGORITHM:
8154e1bc9a0SAchim Leubner **
8164e1bc9a0SAchim Leubner *******************************************************************************/
8174e1bc9a0SAchim Leubner 
8184e1bc9a0SAchim Leubner #define comListGetCount(pList) ((pList)->Count)
8194e1bc9a0SAchim Leubner 
8204e1bc9a0SAchim Leubner 
8214e1bc9a0SAchim Leubner 
8224e1bc9a0SAchim Leubner /*******************************************************************************
8234e1bc9a0SAchim Leubner **
8244e1bc9a0SAchim Leubner ** MODULE NAME: comListGetNext
8254e1bc9a0SAchim Leubner **
8264e1bc9a0SAchim Leubner ** PURPOSE:     get the next link in the list. (one toward tail)
8274e1bc9a0SAchim Leubner **
8284e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST  OUT - Link list definition.
8294e1bc9a0SAchim Leubner **              PLINK_NODE       IN  - Link to get next to
8304e1bc9a0SAchim Leubner **
8314e1bc9a0SAchim Leubner **           return PLINK  - points to next link
8324e1bc9a0SAchim Leubner **                           NULL if next link is head
8334e1bc9a0SAchim Leubner **
8344e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
8354e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
8364e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
8374e1bc9a0SAchim Leubner **
8384e1bc9a0SAchim Leubner **   !!! No validation is made on the list or the validity of the link
8394e1bc9a0SAchim Leubner **   !!! the caller must make sure that the link is in the list
8404e1bc9a0SAchim Leubner **
8414e1bc9a0SAchim Leubner ** ALGORITHM:
8424e1bc9a0SAchim Leubner **
8434e1bc9a0SAchim Leubner *******************************************************************************/
8444e1bc9a0SAchim Leubner 
8454e1bc9a0SAchim Leubner #define comListGetNext(pList, pLink) (((pLink)->pNext == (pList)->pHead) ?  \
8464e1bc9a0SAchim Leubner                                       NULL : (pLink)->pNext)
8474e1bc9a0SAchim Leubner 
8484e1bc9a0SAchim Leubner 
8494e1bc9a0SAchim Leubner /*******************************************************************************
8504e1bc9a0SAchim Leubner **
8514e1bc9a0SAchim Leubner ** MODULE NAME: comListGetPrev
8524e1bc9a0SAchim Leubner **
8534e1bc9a0SAchim Leubner ** PURPOSE:     get the previous link in the list. (one toward head)
8544e1bc9a0SAchim Leubner **
8554e1bc9a0SAchim Leubner ** PARAMETERS:  PLINK_LIST  OUT - Link list definition.
8564e1bc9a0SAchim Leubner **              PLINK_NODE       IN  - Link to get prev to
8574e1bc9a0SAchim Leubner **
8584e1bc9a0SAchim Leubner **           return PLINK  - points to previous link
8594e1bc9a0SAchim Leubner **                           NULL if previous link is head
8604e1bc9a0SAchim Leubner **
8614e1bc9a0SAchim Leubner ** SIDE EFFECTS & CAVEATS:
8624e1bc9a0SAchim Leubner **   !!! assumes that fcllistInitialize has been called on the linklist
8634e1bc9a0SAchim Leubner **   !!! if not, this function behavior is un-predictable
8644e1bc9a0SAchim Leubner **
8654e1bc9a0SAchim Leubner **   !!! No validation is made on the list or the validity of the link
8664e1bc9a0SAchim Leubner **   !!! the caller must make sure that the link is in the list
8674e1bc9a0SAchim Leubner **
8684e1bc9a0SAchim Leubner ** ALGORITHM:
8694e1bc9a0SAchim Leubner **
8704e1bc9a0SAchim Leubner *******************************************************************************/
8714e1bc9a0SAchim Leubner 
8724e1bc9a0SAchim Leubner /*lint -emacro(613,fiLlistGetPrev) */
8734e1bc9a0SAchim Leubner 
8744e1bc9a0SAchim Leubner #define comListGetPrev(pList, pLink) (((pLink)->pPrev == (pList)->pHead) ?  \
8754e1bc9a0SAchim Leubner                                       NULL : (pLink)->pPrev)
8764e1bc9a0SAchim Leubner 
8774e1bc9a0SAchim Leubner #define AGT_INTERRUPT      IRQF_DISABLED
8784e1bc9a0SAchim Leubner #define AGT_SAMPLE_RANDOM  IRQF_SAMPLE_RANDOM
8794e1bc9a0SAchim Leubner #define AGT_SHIRQ          IRQF_SHARED
8804e1bc9a0SAchim Leubner #define AGT_PROBEIRQ       IRQF_PROBE_SHARED
8814e1bc9a0SAchim Leubner #define AGT_PERCPU         IRQF_PERCPU
8824e1bc9a0SAchim Leubner 
8834e1bc9a0SAchim Leubner 
8844e1bc9a0SAchim Leubner #include "lxproto.h"
8854e1bc9a0SAchim Leubner 
886