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