#include <dev/pms/RefTisa/tisa/api/titypes.h>
#define LINUX_DMA_MEM_MAX 0x1ffe0
#define DEK_MAX_TABLE_ITEMS DEK_MAX_TABLE_ENTRIES
#ifdef AGTIAPI_IP6_SUPPORT
# define IP_ADDR_CHAR_LEN 64
#else
# define IP_ADDR_CHAR_LEN 16
#endif
#define MSEC_PER_TICK (1000/hz)
#define USEC_PER_TICK (1000000/hz)
#define AGTIAPI_64BIT_ALIGN 8
#define AGTIAPI_MAX_CARDS 4
#define AGTIAPI_TOO_MANY_CARDS -1
#define AGTIAPI_MAX_PORTALS 16
#define AGTIAPI_OPTION_ON 1
#define AGTIAPI_KEY_MAX 64
#define AGTIAPI_STRING_MAX 512
#define AGTIAPI_PARAM_MAX 256
#ifdef TARGET_DRIVER
#define AGTIAPI_DMA_MEM_LIST_MAX 4096
#define AGTIAPI_CACHE_MEM_LIST_MAX 24
#else
#define AGTIAPI_DMA_MEM_LIST_MAX 1024
#define AGTIAPI_CACHE_MEM_LIST_MAX 1024
#endif
#ifndef AGTIAPI_DYNAMIC_MAX
#define AGTIAPI_DYNAMIC_MAX 4096
#endif
#define AGTIAPI_LOOP_MAX 4
#define AGTIAPI_MAX_NAME 70
#define AGTIAPI_MIN_NAME 10
#define AGTIAPI_MAX_ID 8
#define AGTIAPI_INIT_TIME 0x00000001
#define AGTIAPI_SOFT_RESET 0x00000002
#define AGTIAPI_HAD_RESET 0x00000004
#define AGTIAPI_DISC_DONE 0x00000008
#define AGTIAPI_INSTALLED 0x00000010
#define AGTIAPI_RESET 0x00000020
#define AGTIAPI_FLAG_UP 0x00000040
#define AGTIAPI_CB_DONE 0x00000080
#define AGTIAPI_DISC_COMPLETE 0x00000100
#define AGTIAPI_IOREGION_REQUESTED 0x00000200
#define AGTIAPI_IRQ_REQUESTED 0x00000400
#define AGTIAPI_SCSI_REGISTERED 0x00000800
#define AGTIAPI_NAME_SERVER_UP 0x00001000
#define AGTIAPI_PORT_INITIALIZED 0x00002000
#define AGTIAPI_PORT_LINK_UP 0x00004000
#define AGTIAPI_LGN_LINK_UP 0x00008000
#define AGTIAPI_PORT_PANIC 0x00010000
#define AGTIAPI_RESET_SUCCESS 0x00020000
#define AGTIAPI_PORT_START 0x00040000
#define AGTIAPI_PORT_STOPPED 0x00080000
#define AGTIAPI_PORT_SHUTDOWN 0x00100000
#define AGTIAPI_IN_USE 0x00200000
#define AGTIAPI_SYS_INTR_ON 0x00400000
#define AGTIAPI_PORT_DISC_READY 0x00800000
#define AGTIAPI_SIG_DOWN 0x01000000
#define AGTIAPI_SIG_UP 0x02000000
#define AGTIAPI_TASK 0x04000000
#define AGTIAPI_INITIATOR 0x08000000
#define AGTIAPI_TARGET 0x10000000
#define AGTIAPI_TIMER_ON 0x20000000
#define AGTIAPI_SHUT_DOWN 0x40000000
#define AGTIAPI_RESET_ALL 0xFFFFFFFF
#ifndef PCI_VENDOR_ID_HP
#define PCI_VENDOR_ID_HP 0x103c
#endif
#ifndef PCI_VENDOR_ID_PMC_SIERRA
#define PCI_VENDOR_ID_PMC_SIERRA 0x11F8
#endif
#ifndef PCI_VENDOR_ID_AGILENT
#define PCI_VENDOR_ID_AGILENT 0x15bc
#endif
#ifndef PCI_VENDOR_ID_CYCLONE
#define PCI_VENDOR_ID_CYCLONE 0x113C
#endif
#ifndef PCI_VENDOR_ID_SPCV_FPGA
#define PCI_VENDOR_ID_SPCV_FPGA 0x1855
#endif
#ifndef PCI_VENDOR_ID_HIALEAH
#define PCI_VENDOR_ID_HIALEAH 0x9005
#endif
#define PCI_DEVICE_ID_HP_TS 0x102a
#define PCI_DEVICE_ID_HP_TL 0x1028
#define PCI_DEVICE_ID_HP_XL2 0x1029
#define PCI_DEVICE_ID_AG_DX2 0x0100
#define PCI_DEVICE_ID_AG_DX2PLUS 0x0101
#define PCI_DEVICE_ID_AG_QX2 0x0102
#define PCI_DEVICE_ID_AG_QX4 0x0103
#define PCI_DEVICE_ID_AG_QE4 0x1200
#define PCI_DEVICE_ID_AG_DE4 0x1203
#define PCI_DEVICE_ID_AG_XL10 0x0104
#define PCI_DEVICE_ID_AG_DX4PLUS 0x0105
#define PCI_DEVICE_ID_AG_DIXL 0x0110
#define PCI_DEVICE_ID_AG_IDX1 0x050A
#define PCI_DEVICE_ID_PMC_SIERRA_SPC 0x8001
#define PCI_DEVICE_ID_PMC_SIERRA_SPCV 0x8008
#define PCI_DEVICE_ID_PMC_SIERRA_SPCVE 0x8009
#define PCI_DEVICE_ID_PMC_SIERRA_SPCVPLUS 0x8018
#define PCI_DEVICE_ID_PMC_SIERRA_SPCVE_16 0x8019
#define PCI_DEVICE_ID_SPCV_FPGA 0xabcd
#define PCI_DEVICE_ID_PMC_SIERRA_SPCV12G 0x8070
#define PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G 0x8071
#define PCI_DEVICE_ID_PMC_SIERRA_SPCV12G_16 0x8072
#define PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G_16 0x8073
#define PCI_DEVICE_ID_HIALEAH_HBA_SPC 0x8081
#define PCI_DEVICE_ID_HIALEAH_RAID_SPC 0x8091
#define PCI_DEVICE_ID_HIALEAH_HBA_SPCV 0x8088
#define PCI_DEVICE_ID_HIALEAH_RAID_SPCV 0x8098
#define PCI_DEVICE_ID_HIALEAH_HBA_SPCVE 0x8089
#define PCI_DEVICE_ID_HIALEAH_RAID_SPCVE 0x8099
#define PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCV 0x8074
#define PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCVE 0x8075
#define PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV 0x8076
#define PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCVE 0x8077
#define PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV_SATA 0x8006
#define PCI_SUB_VENDOR_ID_HP PCI_VENDOR_ID_HP
#define PCI_SUB_VENDOR_ID_AG PCI_VENDOR_ID_AGILENT
#define PCI_SUB_VENDOR_ID_MASK 0xFFFF
#define PCI_SUB_SYSTEM_ID_AG 0x0001
#define PCI_BASE_MEM_MASK (~0x0F)
#define PCI_DEVICE_ID_CYCLONE 0xB555
#define PCI_ENABLE_VALUE 0x0157
#ifdef PMC_SPC
#define PCI_NUMBER_BARS 6
#endif
#define IOCTL_MN_GET_CARD_INFO 0x11
#define _08B 8
#define _16B 16
#define _24B 24
#define _32B 32
#define _64B 64
#define _128B 128
#define _256B 256
#define _512B 512
#define _1K 1024
#define _2K 2048
#define _4K 4096
#define _128K (128*(_1K))
typedef struct _ag_card_id {
U16 vendorId;
U16 deviceId;
S32 cardNameIndex;
U16 membar;
U16 iobar1;
U16 iobar2;
U16 reg;
} ag_card_id_t;
#define PCI_BASE_ADDRESS_0 PCIR_BAR(0)
#define PCI_BASE_ADDRESS_1 PCIR_BAR(1)
#define PCI_BASE_ADDRESS_2 PCIR_BAR(2)
#define PCI_BASE_ADDRESS_3 PCIR_BAR(3)
#define PCI_BASE_ADDRESS_4 PCIR_BAR(4)
ag_card_id_t ag_card_type[] = {
#ifdef AGTIAPI_ISCSI
{PCI_VENDOR_ID_AGILENTj, PCI_DEVICE_ID_AG_DIXL, 1,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_0, 0},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_IDX1, 2,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_0, 0},
#endif
#ifdef AGTIAPI_FC
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_TS, 3,
PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, 3},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_TL, 4,
PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, 3},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_XL2, 5,
PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, 3},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DX2, 6,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DX2PLUS, 7,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DX4PLUS, 8,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_QX2, 9,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_QX4, 10,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_DE4, 11,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_QE4, 12,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
{PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_AG_XL10, 13,
PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 4},
#endif
#ifdef AGTIAPI_SA
#ifdef PMC_SPC
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPC, 14,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCV, 15,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE, 16,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVPLUS, 17,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE_16, 18,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_SPCV_FPGA, PCI_DEVICE_ID_SPCV_FPGA, 19,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCV12G, 20,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G, 21,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCV12G_16, 22,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_PMC_SIERRA, PCI_DEVICE_ID_PMC_SIERRA_SPCVE12G_16, 23,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_HBA_SPC, 24,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_RAID_SPC, 25,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_HBA_SPCV, 26,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_RAID_SPCV, 27,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_HBA_SPCVE, 28,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_HIALEAH_RAID_SPCVE, 29,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCV, 30,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_8PORTS_SPCVE, 31,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV, 32,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCVE, 33,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
{PCI_VENDOR_ID_HIALEAH, PCI_DEVICE_ID_DELRAY_HBA_16PORTS_SPCV_SATA, 34,
PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, 0},
#endif
#endif
};
static char const * const ag_card_names[] = {
"Unknown",
"iSCSI DiXL Card",
"iSCSI iDX1 Card",
"Tachyon TS Fibre Channel Card",
"Tachyon TL Fibre Channel Card",
"Tachyon XL2 Fibre Channel Card",
"Tachyon DX2 Fibre Channel Card",
"Tachyon DX2+ Fibre Channel Card",
"Tachyon DX4+ Fibre Channel Card",
"Tachyon QX2 Fibre Channel Card",
"Tachyon QX4 Fibre Channel Card",
"Tachyon DE4 Fibre Channel Card",
"Tachyon QE4 Fibre Channel Card",
"Tachyon XL10 Fibre Channel Card",
#ifdef AGTIAPI_SA
#ifdef PMC_SPC
"PMC Sierra SPC SAS-SATA Card",
"PMC Sierra SPC-V SAS-SATA Card",
"PMC Sierra SPC-VE SAS-SATA Card",
"PMC Sierra SPC-V 16 Port SAS-SATA Card",
"PMC Sierra SPC-VE 16 Port SAS-SATA Card",
"PMC Sierra FPGA",
"PMC Sierra SPC-V SAS-SATA Card 12Gig",
"PMC Sierra SPC-VE SAS-SATA Card 12Gig",
"PMC Sierra SPC-V 16 Port SAS-SATA Card 12Gig",
"PMC Sierra SPC-VE 16 Port SAS-SATA Card 12Gig",
"Adaptec Hialeah 4/8 Port SAS-SATA HBA Card 6Gig",
"Adaptec Hialeah 4/8 Port SAS-SATA RAID Card 6Gig",
"Adaptec Hialeah 8/16 Port SAS-SATA HBA Card 6Gig",
"Adaptec Hialeah 8/16 Port SAS-SATA RAID Card 6Gig",
"Adaptec Hialeah 8/16 Port SAS-SATA HBA Encryption Card 6Gig",
"Adaptec Hialeah 8/16 Port SAS-SATA RAID Encryption Card 6Gig",
"Adaptec Delray 8 Port SAS-SATA HBA Card 12Gig",
"Adaptec Delray 8 Port SAS-SATA HBA Encryption Card 12Gig",
"Adaptec Delray 16 Port SAS-SATA HBA Card 12Gig",
"Adaptec Delray 16 Port SAS-SATA HBA Encryption Card 12Gig",
"Adaptec SATA Adapter",
#endif
#endif
};
typedef struct _ag_resource_info {
tiLoLevelResource_t tiLoLevelResource;
tiInitiatorResource_t tiInitiatorResource;
tiTargetResource_t tiTargetResource;
tiTdSharedMem_t tiSharedMem;
} ag_resource_info_t;
typedef struct _ag_dma_addr {
void *dmaVirtAddr;
vm_paddr_t dmaPhysAddr;
U32 memSize;
bit32 type;
bus_addr_t nocache_busaddr;
void *nocache_mem;
} ag_dma_addr_t;
typedef struct _CardInfo
{
U32 pciIOAddrLow;
U32 pciIOAddrUp;
U32_64 pciMemBase;
U32_64 pciMemBaseSpc[PCI_NUMBER_BARS];
U16 deviceId;
U16 vendorId;
U32 busNum;
U32 deviceNum;
}CardInfo_t;
typedef struct _ag_card_info {
struct mtx pmIOLock;
device_t pPCIDev;
void *pCard;
S32 cardNameIndex;
U32 cardID;
U32 cardIdIndex;
U32 pciIOAddrLow;
U32 pciIOAddrUp;
U32_64 pciMemBase;
caddr_t pciMemVirtAddr;
U32 pciMemSize;
#ifdef AGTIAPI_SA
#ifdef FPGA_CARD
U32_64 pciMemBase0;
caddr_t pciMemVirtAddr0;
U32 pciMemSize0;
#endif
#ifdef PMC_SPC
struct resource *pciMemBaseRscSpc[PCI_NUMBER_BARS];
int pciMemBaseRIDSpc[PCI_NUMBER_BARS];
U32_64 pciMemBaseSpc[PCI_NUMBER_BARS];
caddr_t pciMemVirtAddrSpc[PCI_NUMBER_BARS];
U32 pciMemSizeSpc[PCI_NUMBER_BARS];
#endif
#endif
U16 memBar;
U16 memReg;
U32 cacheIndex;
U32 dmaIndex;
ag_dma_addr_t tiDmaMem[AGTIAPI_DMA_MEM_LIST_MAX];
ag_dma_addr_t dynamicMem[AGTIAPI_DYNAMIC_MAX];
ag_dma_addr_t *freeDynamicMem[AGTIAPI_DYNAMIC_MAX];
U16 topOfFreeDynamicMem;
void *tiCachedMem[AGTIAPI_CACHE_MEM_LIST_MAX];
ag_resource_info_t tiRscInfo;
U08 WWN[AGTIAPI_MAX_NAME];
U08 WWNLen;
#define MAX_MSIX_NUM_VECTOR 16
#define MAX_MSIX_NUM_DPC 64
#define MAX_MSIX_NUM_ISR 64
#ifdef SPC_MSIX_INTR
struct resource *msix_entries[MAX_MSIX_NUM_VECTOR];
#endif
U32 maxInterruptVectors;
} ag_card_info_t;
typedef struct _ag_param_value{
char valueName[AGTIAPI_MAX_NAME];
char valueString[AGTIAPI_STRING_MAX];
struct _ag_param_value *next;
} ag_value_t;
typedef struct _ag_param_key{
char keyName[AGTIAPI_MAX_NAME];
ag_value_t *pValueHead;
ag_value_t *pValueTail;
struct _ag_param_key *pSubkeyHead;
struct _ag_param_key *pSubkeyTail;
struct _ag_param_key *next;
} ag_key_t;
typedef struct _ag_portal_info {
U32 portID;
U32 portStatus;
U32 devTotal;
U32 devPrev;
tiPortInfo_t tiPortInfo;
tiPortalContext_t tiPortalContext;
#ifdef INITIATOR_DRIVER
void *pDevList[AGTIAPI_HW_LIMIT_DEVICE];
#endif
} ag_portal_info_t;
#define MAP_TABLE_ENTRY(pC, c, d, l) (pC->encrypt_map + \
(c * pC->devDiscover * AGTIAPI_MAX_LUN) + \
(d * AGTIAPI_MAX_LUN) + \
(l))
#ifdef CHAR_DEVICE
typedef struct datatosendt{
bit32 datasize;
bit8 *data;
}datatosend;
#define AGTIAPI_IOCTL_BASE 'x'
#define AGTIAPI_IOCTL _IOWR(AGTIAPI_IOCTL_BASE, 0,datatosend )
#define AGTIAPI_IOCTL_MAX 1
#endif
#ifdef AGTIAPI_FLOW_DEBUG
#define AGTIAPI_FLOW(format, a...) printf(format, ## a)
#else
#define AGTIAPI_FLOW(format, a...)
#endif
#ifdef AGTIAPI_DEBUG
#define AGTIAPI_PRINTK(format, a...) printf(format, ## a)
#else
#define AGTIAPI_PRINTK(format, a...)
#endif
#ifdef AGTIAPI_INIT_DEBUG
#define AGTIAPI_INIT(format, a...) printf(format, ## a)
#define AGTIAPI_INIT_MDELAY(dly) mdelay(dly)
#else
#define AGTIAPI_INIT(format, a...)
#define AGTIAPI_INIT_MDELAY(dly)
#endif
#ifdef AGTIAPI_INIT2_DEBUG
#define AGTIAPI_INIT2(format, a...) printf(format, ## a)
#else
#define AGTIAPI_INIT2(format, a...)
#endif
#ifdef AGTIAPI_INIT_MEM_DEBUG
#define AGTIAPI_INITMEM(format, a...) printf(format, ## a)
#else
#define AGTIAPI_INITMEM(format, a...)
#endif
#ifdef AGTIAPI_IO_DEBUG
#define AGTIAPI_IO(format, a...) printf(format, ## a)
#else
#define AGTIAPI_IO(format, a...)
#endif
#ifdef AGTIAPI_LOAD_DELAY
#define AGTIAPI_INIT_DELAY(delay_time) \
{ \
agtiapi_DelayMSec(delay_time); \
}
#else
#define AGTIAPI_INIT_DELAY(delay_time)
#endif
#ifdef AGTIAPI_KDB_ENABLE
#define AGTIAPI_KDB() KDB_ENTER()
#else
#define AGTIAPI_KDB()
#endif
#if (BITS_PER_LONG == 64)
#define LOW_32_BITS(addr) (U32)(addr & 0xffffffff)
#define HIGH_32_BITS(addr) (U32)((addr >> 32) & 0xffffffff)
#else
#define LOW_32_BITS(addr) (U32)addr
#define HIGH_32_BITS(addr) 0
#endif
#define AG_SWAP16(data) (((data<<8) & 0xFF00) | (data>>8))
#define AG_SWAP24(data) (((data<<16) & 0xFF0000) | \
((data>>16) & 0xFF) | (data & 0xFF00))
#define AG_SWAP32(data) ((data<<24) | ((data<<8) & 0xFF0000) | \
((data>>8) & 0xFF00) | (data>>24))
#define AG_PCI_DEV_INFO(pdev) ( \
AGTIAPI_PRINTK("vendor id 0x%x device id 0x%x, slot %d, function %d\n", \
pdev->vendor, pdev->device, PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)) \
)
#define COUNT(arr) (sizeof(arr) / sizeof(arr[0]))
#define PORTAL_CONTEXT_TO_PORTALDATA(pPortalContext) \
((ag_portal_data_t *)(((tiPortalContext_t *)pPortalContext)->osData))
#define PORTAL_STATUS(pPortalData) (pPortalData->portalInfo.portStatus)
#if (defined(DEFINE_OSTI_PORT_EVENT_IN_IBE)) || \
(defined(DEFINE_OSTI_PORT_EVENT_IN_TFE))
#define TIROOT_TO_CARD(ptiRoot) \
((ag_card_t *)(((appRoot_t *)(ptiRoot->osData))->oscData))
#define TIROOT_TO_CARDINFO(ptiRoot) (TIROOT_TO_CARD(ptiRoot)->pCardInfo)
#define TIROOT_TO_PCIDEV(ptiRoot) (TIROOT_TO_CARDINFO(ptiRoot)->pPCIDev)
#else
#define TIROOT_TO_CARD(ptiRoot) ((struct agtiapi_softc *)(ptiRoot->osData))
#define TIROOT_TO_CARDINFO(ptiRoot) (TIROOT_TO_CARD(ptiRoot)->pCardInfo)
#define TIROOT_TO_PCIDEV(ptiRoot) (TIROOT_TO_CARD(ptiRoot)->my_dev)
#endif
#define Is_ADP7H(pmsc) ((0x90058088 == (pmsc->VidDid))?1:\
(0x90058089 == (pmsc->VidDid))?1:0)
#define Is_ADP8H(pmsc) ((0x90058074 == (pmsc->VidDid))?1:\
(0x90058076 == (pmsc->VidDid))?1:0)
#define __cacheline_aligned __attribute__((__aligned__(CACHE_LINE_SIZE)))
typedef struct _LINK_NODE
{
struct _LINK_NODE *pNext;
struct _LINK_NODE *pPrev;
struct _LINK_NODE * pHead;
void * pad;
} LINK_NODE, * PLINK_NODE __cacheline_aligned;
typedef struct _LINK_LIST
{
PLINK_NODE pHead;
bit32 Count;
LINK_NODE Head __cacheline_aligned;
} LINK_LIST, * PLINK_LIST __cacheline_aligned;
#define comListInitialize(pList) {(pList)->pHead = &((pList)->Head); \
(pList)->pHead->pNext = (pList)->pHead; \
(pList)->pHead->pPrev = (pList)->pHead; \
(pList)->Count = 0; \
}
#define comLinkInitialize(pLink) { (pLink)->pHead = NULL; \
(pLink)->pNext = NULL; \
(pLink)->pPrev = NULL; \
}
#define comListAdd(pList, pLink) { \
(pLink)->pNext = (pList)->pHead; \
(pLink)->pPrev = (pList)->pHead->pPrev; \
(pLink)->pPrev->pNext = (pLink); \
(pList)->pHead->pPrev = (pLink); \
(pList)->Count ++; \
(pLink)->pHead = (pList)->pHead; \
}
#define comListInsert(pList, pLink, pNew) { \
(pNew)->pNext = (pLink); \
(pNew)->pPrev = (pLink)->pPrev; \
(pNew)->pPrev->pNext = (pNew); \
(pLink)->pPrev = (pNew); \
(pList)->Count ++; \
(pNew)->pHead = (pList)->pHead; \
}
#define comListRemove(pList, pLink) { \
(pLink)->pPrev->pNext = (pLink)->pNext; \
(pLink)->pNext->pPrev = (pLink)->pPrev; \
(pLink)->pHead = NULL; \
(pList)->Count --; \
}
#define comListGetHead(pList) comListGetNext(pList,(pList)->pHead)
#define comListGetTail(pList) comListGetPrev((pList), (pList)->pHead)
#define comListGetCount(pList) ((pList)->Count)
#define comListGetNext(pList, pLink) (((pLink)->pNext == (pList)->pHead) ? \
NULL : (pLink)->pNext)
#define comListGetPrev(pList, pLink) (((pLink)->pPrev == (pList)->pHead) ? \
NULL : (pLink)->pPrev)
#define AGT_INTERRUPT IRQF_DISABLED
#define AGT_SAMPLE_RANDOM IRQF_SAMPLE_RANDOM
#define AGT_SHIRQ IRQF_SHARED
#define AGT_PROBEIRQ IRQF_PROBE_SHARED
#define AGT_PERCPU IRQF_PERCPU
#include "lxproto.h"