You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1062 lines
37 KiB
1062 lines
37 KiB
#ifndef __PLX_TYPES_H
|
|
#define __PLX_TYPES_H
|
|
|
|
/*******************************************************************************
|
|
* Copyright 2019-2020 Broadcom Inc.
|
|
* Copyright 2013-2018 Avago Technologies
|
|
* Copyright (c) 2009 to 2012 PLX Technology Inc. All rights reserved.
|
|
*
|
|
* This software is available to you under a choice of one of two
|
|
* licenses. You may choose to be licensed under the terms of the GNU
|
|
* General Public License (GPL) Version 2, available from the file
|
|
* COPYING in the main directorY of this source tree, or the
|
|
* BSD license below:
|
|
*
|
|
* Redistribution and use in source and binary forms, with or
|
|
* without modification, are permitted provided that the following
|
|
* conditions are met:
|
|
*
|
|
* - Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer.
|
|
*
|
|
* - Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials
|
|
* provided with the distribution.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
*
|
|
* File Name:
|
|
*
|
|
* PlxTypes.h
|
|
*
|
|
* Description:
|
|
*
|
|
* This file includes SDK types and definitions
|
|
*
|
|
* Revision:
|
|
*
|
|
* 01-01-20 : PCI/PCIe SDK v8.10
|
|
*
|
|
******************************************************************************/
|
|
|
|
|
|
#include "Plx.h"
|
|
#include "PlxDefCk.h"
|
|
#include "PlxStat.h"
|
|
#include "PciTypes.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
// Set structure packing for consistentcy in kernel/user levels & save current
|
|
#pragma pack( push, 4 )
|
|
|
|
|
|
|
|
|
|
/******************************************
|
|
* Definitions for Code Portability
|
|
******************************************/
|
|
// Memory set and copy
|
|
#if !defined(PLX_MSWINDOWS)
|
|
#define RtlZeroMemory(pDest, count) memset((pDest), 0, (count))
|
|
#define RtlCopyMemory(pDest, pSrc, count) memcpy((pDest), (pSrc), (count))
|
|
#define RtlFillMemory(pDest, count, value) memset((pDest), (value), (count))
|
|
#endif
|
|
|
|
// Count number of bits of supplied data type
|
|
#define PLX_BYTE_TO_BIT_COUNT( bytes ) ((bytes) * 8)
|
|
|
|
// Convert pointer to an integer
|
|
#define PLX_PTR_TO_INT( ptr ) ((PLX_UINT_PTR)(ptr))
|
|
|
|
// Convert integer to a pointer
|
|
#define PLX_INT_TO_PTR( intval ) ((VOID*)(PLX_UINT_PTR)(intval))
|
|
|
|
// Macros that guarantee correct endian format regardless of CPU platform
|
|
#if defined(PLX_BIG_ENDIAN)
|
|
#define PLX_LE_DATA_32(value) EndianSwap32( (value) )
|
|
#define PLX_BE_DATA_32(value) (value)
|
|
#else
|
|
#define PLX_LE_DATA_32(value) (value)
|
|
#define PLX_BE_DATA_32(value) EndianSwap32( (value) )
|
|
#endif
|
|
|
|
// Macros to support portable type casting on BE/LE platforms
|
|
#if defined(PLX_BIG_ENDIAN)
|
|
#define PLX_64_HIGH_32(value) ((U32)((U64)value))
|
|
#define PLX_64_LOW_32(value) ((U32)(((U64)value) >> 32))
|
|
|
|
#define PLX_CAST_64_TO_8_PTR( ptr64 ) (U8*) ((U8*)PLX_INT_TO_PTR(ptr64) + (7 * sizeof(U8)))
|
|
#define PLX_CAST_64_TO_16_PTR( ptr64 ) (U16*)((U8*)PLX_INT_TO_PTR(ptr64) + (6 * sizeof(U8)))
|
|
#define PLX_CAST_64_TO_32_PTR( ptr64 ) (U32*)((U8*)PLX_INT_TO_PTR(ptr64) + sizeof(U32))
|
|
|
|
#define PLX_LE_U32_BIT( pos ) ((U32)(1 << (31 - (pos))))
|
|
#else
|
|
#define PLX_64_HIGH_32( value ) ((U32)(((U64)value) >> 32))
|
|
#define PLX_64_LOW_32( value ) ((U32)((U64)value))
|
|
|
|
#define PLX_CAST_64_TO_8_PTR( ptr64 ) (U8*) PLX_INT_TO_PTR(ptr64)
|
|
#define PLX_CAST_64_TO_16_PTR( ptr64 ) (U16*)PLX_INT_TO_PTR(ptr64)
|
|
#define PLX_CAST_64_TO_32_PTR( ptr64 ) (U32*)PLX_INT_TO_PTR(ptr64)
|
|
|
|
#define PLX_LE_U32_BIT( pos ) ((U32)(1 << (pos)))
|
|
#endif
|
|
|
|
|
|
|
|
/******************************************
|
|
* Miscellaneous definitions
|
|
******************************************/
|
|
#if !defined(VOID)
|
|
typedef void VOID;
|
|
#endif
|
|
|
|
// Linux actypes.h contains conflicting definition for BOOLEAN
|
|
#if (!defined(PLX_MSWINDOWS)) || defined(PLX_VXD_DRIVER)
|
|
#if !defined(BOOLEAN) && !defined(__ACTYPES_H__)
|
|
typedef S8 BOOLEAN;
|
|
#endif
|
|
#endif
|
|
|
|
#if !defined(PLX_MSWINDOWS)
|
|
#if !defined(BOOL)
|
|
typedef S8 BOOL;
|
|
#endif
|
|
#endif
|
|
|
|
#if !defined(NULL)
|
|
#define NULL ((VOID *) 0x0)
|
|
#endif
|
|
|
|
#if !defined(TRUE)
|
|
#define TRUE 1
|
|
#endif
|
|
|
|
#if !defined(FALSE)
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
// Min/Max
|
|
#define PEX_MIN(v1,v2) ( (v1) < (v2) ? (v1) : (v2) )
|
|
#define PEX_MAX(v1,v2) ( (v1) > (v2) ? (v1) : (v2) )
|
|
|
|
// Round up/down based on power of 2
|
|
#define PEX_P2_ROUND_UP( val, align ) ( ((val) + ((align) - 1)) & ~(align - 1) )
|
|
#define PEX_P2_ROUND_DOWN( val, align ) ( (val) & ~((align) - 1) )
|
|
|
|
// Calculate time difference between 2 timeb structures
|
|
#define PLX_DIFF_TIMEB(time1,time0) ( ((double)((time1).time - (time0).time)) + \
|
|
(((double)(time1).millitm - (time0).millitm) / 1000) )
|
|
|
|
#if defined(PLX_MSWINDOWS)
|
|
#define PLX_TIMEOUT_INFINITE INFINITE
|
|
#define PLX_MEM_POOL_TAG '_XLP' // "PLX_" tag for driver mem alloc
|
|
#elif defined(PLX_LINUX) || defined(PLX_LINUX_DRIVER)
|
|
#define PLX_TIMEOUT_INFINITE MAX_SCHEDULE_TIMEOUT
|
|
|
|
/*********************************************************
|
|
* Convert milliseconds to jiffies. The following
|
|
* formula is used:
|
|
*
|
|
* ms * HZ
|
|
* jiffies = ---------
|
|
* 1,000
|
|
*
|
|
* where: HZ = System-defined clock ticks per second
|
|
* ms = Timeout in milliseconds
|
|
* jiffies = Number of HZ's per second
|
|
********************************************************/
|
|
#define Plx_ms_to_jiffies( ms ) ( ((ms) * HZ) / 1000 )
|
|
#define Plx_jiffies_to_ms( jiff ) ( ((jiff) * 1000) / HZ )
|
|
#endif
|
|
|
|
|
|
|
|
/******************************************
|
|
* Definitions for Generic Bitmasks
|
|
******************************************/
|
|
/// Declare a generic bitmask variable with arbitrary size (auto-aligns to 32-bit multiple)
|
|
#define PEX_BITMASK_T(Name,Bits) U32 (Name)[ ((Bits) + 31) / 32 ]
|
|
|
|
// Set a bit in generic bitmask variable
|
|
#define PEX_BITMASK_SET(Mask,Bit) ( (Mask)[ (Bit) / 32 ] |= ((U32)1 << ((Bit) % 32)) )
|
|
|
|
// Set all bits in generic bitmask variable
|
|
#define PEX_BITMASK_SET_ALL(Mask) memset( (Mask), 0xFF, sizeof((Mask)) )
|
|
|
|
// Clear a bit in generic bitmask variable
|
|
#define PEX_BITMASK_CLEAR(Mask,Bit) ( (Mask)[ (Bit) / 32 ] &= ~((U32)1 << ((Bit) % 32)) )
|
|
|
|
// Clear all bits in generic bitmask variable
|
|
#define PEX_BITMASK_CLEAR_ALL(Mask) memset( (Mask), 0, sizeof((Mask)) )
|
|
|
|
// Returns 32-bit DW port mask at provided DW index
|
|
#define PEX_BITMASK_GET_DW(Mask,Idx) ((Mask)[Idx])
|
|
|
|
// Sets 32-bit DW port mask at provided DW index
|
|
#define PEX_BITMASK_SET_DW(Mask,Idx,Val) ((Mask)[Idx] = (Val))
|
|
|
|
// Copies one mask to another
|
|
#define PEX_BITMASK_COPY(Src,Dest) memcpy( (Dest), (Src), sizeof((Dest)) )
|
|
|
|
// Test whether a specific bit is set in generic bitmask variable
|
|
#define PEX_BITMASK_TEST(Mask,Bit) ( ((Mask)[ (Bit) / 32 ] & ((U32)1 << ((Bit) % 32))) != 0 )
|
|
|
|
// Test whether any bit is set in generic bitmask variable
|
|
#define PEX_BITMASK_TEST_ANY(Mask) __PEX_BITMASK_TEST_ANY( (Mask), sizeof( (Mask) ) )
|
|
|
|
// Helper function for PEX_BITMASK_TEST_ANY macro
|
|
static __inline U8 __PEX_BITMASK_TEST_ANY( U32 *PtrBitMask, U32 ByteSize )
|
|
{
|
|
U32 idx = 0;
|
|
|
|
while ( idx < (ByteSize / sizeof(U32)) )
|
|
{
|
|
if (PtrBitMask[ idx ] != 0)
|
|
{
|
|
return TRUE;
|
|
}
|
|
idx++;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
// Return the count of set bits in a mask
|
|
#define PEX_BITMASK_GET_SET_COUNT(Mask) __PEX_BITMASK_GET_SET_COUNT( (Mask), sizeof( (Mask) ) )
|
|
|
|
// Helper function for PEX_BITMASK_GET_SET_COUNT macro
|
|
static __inline U32 __PEX_BITMASK_GET_SET_COUNT( U32 *PtrBitMask, U32 ByteSize )
|
|
{
|
|
U32 bit = 0;
|
|
U32 bitCount = 0;
|
|
|
|
while (bit < (ByteSize * 8))
|
|
{
|
|
bitCount += PEX_BITMASK_TEST( PtrBitMask, bit );
|
|
bit++;
|
|
}
|
|
return bitCount;
|
|
}
|
|
|
|
|
|
|
|
/******************************************
|
|
* PLX-specific types & structures
|
|
******************************************/
|
|
// Mode PLX API uses to access device
|
|
typedef enum _PLX_API_MODE
|
|
{
|
|
PLX_API_MODE_PCI, // Device accessed via PLX driver over PCI/PCIe
|
|
PLX_API_MODE_I2C_AARDVARK, // Device accessed via Aardvark I2C USB
|
|
PLX_API_MODE_MDIO_SPLICE, // Device accessed via Splice MDIO USB
|
|
PLX_API_MODE_SDB, // Device accessed via Serial Debug Port
|
|
PLX_API_MODE_TCP // Device accessed via TCP/IP
|
|
} PLX_API_MODE;
|
|
|
|
|
|
// Supported UART cable connections for SDB
|
|
typedef enum _SDB_UART_CABLE
|
|
{
|
|
SDB_UART_CABLE_DEFAULT = 0, // Default connection
|
|
SDB_UART_CABLE_UART = 1, // Standard COMx connection
|
|
SDB_UART_CABLE_USB = 2 // USB-to-serial cable
|
|
} SDB_UART_CABLE;
|
|
|
|
|
|
// Baud rates supported by SDB
|
|
typedef enum _SDB_BAUD_RATE
|
|
{
|
|
SDB_BAUD_RATE_DEFAULT = 0, // Default rate
|
|
SDB_BAUD_RATE_19200 = 1, // 19,200 BAUD
|
|
SDB_BAUD_RATE_115200 = 2 // 115,200 BAUD
|
|
} SDB_BAUD_RATE;
|
|
|
|
|
|
// Access Size Type
|
|
typedef enum _PLX_ACCESS_TYPE
|
|
{
|
|
BitSize8,
|
|
BitSize16,
|
|
BitSize32,
|
|
BitSize64
|
|
} PLX_ACCESS_TYPE;
|
|
|
|
|
|
// PLX chip families
|
|
typedef enum _PLX_CHIP_FAMILY
|
|
{
|
|
PLX_FAMILY_NONE = 0,
|
|
PLX_FAMILY_UNKNOWN,
|
|
PLX_FAMILY_BRIDGE_P2L, // 9000 series & 8311
|
|
PLX_FAMILY_BRIDGE_PCI_P2P, // 6000 series
|
|
PLX_FAMILY_BRIDGE_PCIE_P2P, // 8111,8112,8114
|
|
PLX_FAMILY_ALTAIR, // 8525,8533,8547,8548
|
|
PLX_FAMILY_ALTAIR_XL, // 8505,8509
|
|
PLX_FAMILY_VEGA, // 8516,8524,8532
|
|
PLX_FAMILY_VEGA_LITE, // 8508,8512,8517,8518
|
|
PLX_FAMILY_DENEB, // 8612,8616,8624,8632,8647,8648
|
|
PLX_FAMILY_SIRIUS, // 8604,8606,8608,8609,8613,8614,8615
|
|
// 8617,8618,8619
|
|
PLX_FAMILY_CYGNUS, // 8625,8636,8649,8664,8680,8696
|
|
PLX_FAMILY_SCOUT, // 8700
|
|
PLX_FAMILY_DRACO_1, // 8712,8716,8724,8732,8747,8748,8749
|
|
PLX_FAMILY_DRACO_2, // 8713,8717,8725,8733 + [Draco 1 rev BA]
|
|
PLX_FAMILY_MIRA, // 2380,3380,3382,8603,8605
|
|
PLX_FAMILY_CAPELLA_1, // 8714,8718,8734,8750,8764,8780,8796
|
|
PLX_FAMILY_CAPELLA_2, // 9712,9716,9733,9749,9750,9765,9781,9797
|
|
PLX_FAMILY_ATLAS, // C010,C011,C012
|
|
PLX_FAMILY_LAST_ENTRY // -- Must be final entry --
|
|
} PLX_CHIP_FAMILY;
|
|
|
|
|
|
// PLX chip configured mode
|
|
typedef enum _PLX_CHIP_MODE
|
|
{
|
|
PLX_CHIP_MODE_UNKNOWN,
|
|
PLX_CHIP_MODE_STANDARD, // Standard switch fan-out mode
|
|
PLX_CHIP_MODE_STD_LEGACY_NT, // Standard mode with NT but no parent DS P2P
|
|
PLX_CHIP_MODE_STD_NT_DS_P2P, // Standard mode with NT & parent DS P2P
|
|
PLX_CHIP_MODE_VIRT_SW, // Virtual Switch (VS) mode
|
|
PLX_CHIP_MODE_FABRIC, // PCIe fabric mode
|
|
PLX_CHIP_MODE_ROOT_COMPLEX, // RC mode
|
|
PLX_CHIP_MODE_LEGACY_ADAPTER // MIRA legacy adapter mode
|
|
} PLX_CHIP_MODE;
|
|
|
|
|
|
// PLX port flags for mask
|
|
typedef enum _PLX_FLAG_PORT
|
|
{
|
|
// Flags for special port/device types
|
|
PLX_FLAG_PORT_NT_LINK_0 = 178, // Bit for NT Link port 0
|
|
PLX_FLAG_PORT_NT_LINK_1 = 179, // Bit for NT Link port 1
|
|
PLX_FLAG_PORT_NT_VIRTUAL_0 = 180, // Bit for NT Virtual port 0
|
|
PLX_FLAG_PORT_NT_VIRTUAL_1 = 181, // Bit for NT Virtual port 1
|
|
PLX_FLAG_PORT_NT_DS_P2P = 182, // Bit for NT DS P2P port (Virtual)
|
|
PLX_FLAG_PORT_DMA_RAM = 183, // Bit for DMA RAM
|
|
PLX_FLAG_PORT_DMA_0 = 184, // Bit for DMA channel 3
|
|
PLX_FLAG_PORT_DMA_1 = 185, // Bit for DMA channel 2
|
|
PLX_FLAG_PORT_DMA_2 = 186, // Bit for DMA channel 1
|
|
PLX_FLAG_PORT_DMA_3 = 187, // Bit for DMA ch 0 or Func 1 (all 4 ch)
|
|
PLX_FLAG_PORT_PCIE_TO_USB = 188, // Bit for PCIe-to-USB P2P or Root Port
|
|
PLX_FLAG_PORT_USB = 189, // Bit for USB Host/Bridge
|
|
PLX_FLAG_PORT_ALUT_0 = 190, // Bit for ALUT RAM arrays 0
|
|
PLX_FLAG_PORT_ALUT_1 = 191, // Bit for ALUT RAM arrays 1
|
|
PLX_FLAG_PORT_ALUT_2 = 192, // Bit for ALUT RAM arrays 2
|
|
PLX_FLAG_PORT_ALUT_3 = 193, // Bit for ALUT RAM arrays 3
|
|
PLX_FLAG_PORT_STN_REGS_S0 = 194, // Bit for VS or Fabric mode station 0 specific regs
|
|
PLX_FLAG_PORT_STN_REGS_S1 = 195, // Bit for VS or Fabric mode station 1 specific regs
|
|
PLX_FLAG_PORT_STN_REGS_S2 = 196, // Bit for VS or Fabric mode station 2 specific regs
|
|
PLX_FLAG_PORT_STN_REGS_S3 = 197, // Bit for VS or Fabric mode station 3 specific regs
|
|
PLX_FLAG_PORT_STN_REGS_S4 = 198, // Bit for VS or Fabric mode station 4 specific regs
|
|
PLX_FLAG_PORT_STN_REGS_S5 = 199, // Bit for VS or Fabric mode station 5 specific regs
|
|
PLX_FLAG_PORT_MAX = 200, // Bit for highest possible standard port
|
|
|
|
// Flags for internal fan out ports & endpoints
|
|
PLX_FLAG_PORT_INT_MGMT = 253, // Internal Management port (iSSW)
|
|
PLX_FLAG_PORT_INT_DS_0 = 224, // Internal DS 0
|
|
PLX_FLAG_PORT_INT_DS_4 = 225, // Internal DS 4
|
|
PLX_FLAG_PORT_INT_DS_8 = 226, // Internal DS 8
|
|
PLX_FLAG_PORT_INT_DS_12 = 227, // Internal DS 12
|
|
PLX_FLAG_PORT_INT_UP_0 = 232, // Internal UP 0
|
|
PLX_FLAG_PORT_INT_UP_4 = 233, // Internal UP 4
|
|
PLX_FLAG_PORT_INT_UP_8 = 234, // Internal UP 8
|
|
PLX_FLAG_PORT_INT_UP_12 = 235, // Internal UP 12
|
|
PLX_FLAG_PORT_GEP = 251, // GEP
|
|
PLX_FLAG_PORT_GEP_DS = 255, // GEP parent DS
|
|
PLX_FLAG_PORT_MPT0 = 247, // MPT0
|
|
PLX_FLAG_PORT_MPT1 = 248, // MPT1
|
|
PLX_FLAG_PORT_MPT2 = 249, // MPT2
|
|
PLX_FLAG_PORT_MPT3 = 250 // MPT3
|
|
} PLX_FLAG_PORT;
|
|
|
|
|
|
// Generic states used internally by PLX software
|
|
typedef enum _PLX_STATE
|
|
{
|
|
PLX_STATE_OK,
|
|
PLX_STATE_NO_CHANGE,
|
|
PLX_STATE_WORKING,
|
|
PLX_STATE_ERROR,
|
|
PLX_STATE_ENABLED,
|
|
PLX_STATE_DISABLED,
|
|
PLX_STATE_UNINITIALIZED,
|
|
PLX_STATE_INITIALIZING,
|
|
PLX_STATE_INITIALIZED,
|
|
PLX_STATE_IDLE,
|
|
PLX_STATE_BUSY,
|
|
PLX_STATE_STARTED,
|
|
PLX_STATE_STARTING,
|
|
PLX_STATE_STOPPED,
|
|
PLX_STATE_STOPPING,
|
|
PLX_STATE_CANCELED,
|
|
PLX_STATE_DELETED,
|
|
PLX_STATE_MARKED_FOR_DELETE,
|
|
PLX_STATE_OK_TO_DELETE,
|
|
PLX_STATE_TRIGGERED,
|
|
PLX_STATE_PENDING,
|
|
PLX_STATE_WAITING,
|
|
PLX_STATE_TIMEOUT,
|
|
PLX_STATE_REQUESTING,
|
|
PLX_STATE_REQUESTED,
|
|
PLX_STATE_ACCEPTING,
|
|
PLX_STATE_ACCEPTED,
|
|
PLX_STATE_REJECTED,
|
|
PLX_STATE_COMPLETING,
|
|
PLX_STATE_COMPLETED,
|
|
PLX_STATE_CONNECTING,
|
|
PLX_STATE_CONNECTED,
|
|
PLX_STATE_DISCONNECTING,
|
|
PLX_STATE_DISCONNECTED
|
|
} PLX_STATE;
|
|
|
|
|
|
// BAR flags
|
|
typedef enum _PLX_BAR_FLAG
|
|
{
|
|
PLX_BAR_FLAG_MEM = (1 << 0),
|
|
PLX_BAR_FLAG_IO = (1 << 1),
|
|
PLX_BAR_FLAG_BELOW_1MB = (1 << 2),
|
|
PLX_BAR_FLAG_32_BIT = (1 << 3),
|
|
PLX_BAR_FLAG_64_BIT = (1 << 4),
|
|
PLX_BAR_FLAG_PREFETCHABLE = (1 << 5),
|
|
PLX_BAR_FLAG_UPPER_32 = (1 << 6),
|
|
PLX_BAR_FLAG_PROBED = (1 << 7)
|
|
} PLX_BAR_FLAG;
|
|
|
|
|
|
// EEPROM status
|
|
typedef enum _PLX_EEPROM_STATUS
|
|
{
|
|
PLX_EEPROM_STATUS_NONE = 0, // Not present
|
|
PLX_EEPROM_STATUS_VALID = 1, // Present with valid data
|
|
PLX_EEPROM_STATUS_INVALID_DATA = 2, // Present w/invalid data or CRC error
|
|
PLX_EEPROM_STATUS_BLANK = PLX_EEPROM_STATUS_INVALID_DATA,
|
|
PLX_EEPROM_STATUS_CRC_ERROR = PLX_EEPROM_STATUS_INVALID_DATA
|
|
} PLX_EEPROM_STATUS;
|
|
|
|
|
|
// EEPROM port numbers
|
|
typedef enum _PLX_EEPROM_PORT
|
|
{
|
|
PLX_EEPROM_PORT_NONE = 0,
|
|
PLX_EEPROM_PORT_NT_VIRT_0 = 254,
|
|
PLX_EEPROM_PORT_NT_LINK_0 = 253,
|
|
PLX_EEPROM_PORT_NT_VIRT_1 = 252,
|
|
PLX_EEPROM_PORT_NT_LINK_1 = 251,
|
|
PLX_EEPROM_PORT_DMA_0 = 250,
|
|
PLX_EEPROM_PORT_DMA_1 = 249,
|
|
PLX_EEPROM_PORT_DMA_2 = 248,
|
|
PLX_EEPROM_PORT_DMA_3 = 247,
|
|
PLX_EEPROM_PORT_SHARED_MEM = 246
|
|
} PLX_EEPROM_PORT;
|
|
|
|
|
|
// EEPROM CRC status
|
|
typedef enum _PLX_CRC_STATUS
|
|
{
|
|
PLX_CRC_INVALID = 0,
|
|
PLX_CRC_VALID = 1,
|
|
PLX_CRC_UNSUPPORTED = 2,
|
|
PLX_CRC_UNKNOWN = 3
|
|
} PLX_CRC_STATUS;
|
|
|
|
|
|
// SPI flags
|
|
typedef enum _PEX_SPI_FLAGS
|
|
{
|
|
PEX_SPI_FLAG_NONE = 0, // No flags
|
|
PEX_SPI_FLAG_USE_MM_RD = (1 << 1), // Use mem-mapped read if supp
|
|
PEX_SPI_FLAG_DUAL_IO_SUPP = (1 << 2), // Dual I/O supported
|
|
PEX_SPI_FLAG_QUAD_IO_SUPP = (1 << 3) // Dual I/O supported
|
|
} PEX_SPI_FLAGS;
|
|
|
|
|
|
// SPI I/O mode types
|
|
typedef enum _PEX_SPI_IO_MODE
|
|
{
|
|
PEX_SPI_IO_MODE_SERIAL = 0, // Standard serial mode
|
|
PEX_SPI_IO_MODE_DUAL_IO = 1, // Dual I/O mode
|
|
PEX_SPI_IO_MODE_QUAD_IO = 2 // Quad I/O mode
|
|
} PEX_SPI_IO_MODE;
|
|
|
|
|
|
// Special value to indicate erase all of flash
|
|
#define SPI_FLASH_ERASE_ALL (U32)-1
|
|
|
|
|
|
// PCI Express Link Speeds
|
|
typedef enum _PLX_LINK_SPEED
|
|
{
|
|
PLX_LINK_SPEED_2_5_GBPS = 1,
|
|
PLX_LINK_SPEED_5_GBPS = 2,
|
|
PLX_LINK_SPEED_8_GBPS = 3,
|
|
PLX_LINK_SPEED_16_GBPS = 4
|
|
} PLX_LINK_SPEED;
|
|
|
|
|
|
// Interrupt generation types
|
|
typedef enum _PLX_IRQ_TYPE
|
|
{
|
|
PLX_IRQ_TYPE_NONE = 0, // No interrupt
|
|
PLX_IRQ_TYPE_UNKNOWN = 1, // Undefined interrupt type
|
|
PLX_IRQ_TYPE_INTX = 2, // Legacy INTx interrupt (INTA,INTB,etc)
|
|
PLX_IRQ_TYPE_MSI = 3, // MSI interrupt
|
|
PLX_IRQ_TYPE_MSIX = 4 // MSI-X interrupt
|
|
} PLX_IRQ_TYPE;
|
|
|
|
|
|
// Port types
|
|
typedef enum _PLX_PORT_TYPE
|
|
{
|
|
PLX_PORT_UNKNOWN = 0xFF,
|
|
PLX_PORT_ENDPOINT = 0,
|
|
PLX_PORT_LEGACY_ENDPOINT = 1,
|
|
PLX_PORT_ROOT_PORT = 4,
|
|
PLX_PORT_UPSTREAM = 5,
|
|
PLX_PORT_DOWNSTREAM = 6,
|
|
PLX_PORT_PCIE_TO_PCI_BRIDGE = 7,
|
|
PLX_PORT_PCI_TO_PCIE_BRIDGE = 8,
|
|
PLX_PORT_ROOT_ENDPOINT = 9,
|
|
PLX_PORT_ROOT_EVENT_COLL = 10
|
|
} PLX_PORT_TYPE;
|
|
|
|
|
|
// PLX-specific port types
|
|
typedef enum _PLX_SPECIFIC_PORT_TYPE
|
|
{
|
|
PLX_SPEC_PORT_UNKNOWN = 0, // Unknown port type
|
|
PLX_SPEC_PORT_INVALID = 0xFF, // Invalid port type
|
|
PLX_SPEC_PORT_NT_VIRTUAL = 1, // NT Virtual-side
|
|
PLX_SPEC_PORT_NT_LINK = 2, // NT Link-side
|
|
PLX_SPEC_PORT_UPSTREAM = 3, // Upstream port
|
|
PLX_SPEC_PORT_DOWNSTREAM = 4, // Downstream port
|
|
PLX_SPEC_PORT_P2P_BRIDGE = 5, // P2P bridge
|
|
PLX_SPEC_PORT_LEGACY_EP = 6, // Legacy EP
|
|
PLX_SPEC_PORT_DMA = 7, // DMA EP
|
|
PLX_SPEC_PORT_HOST = 8, // Host port
|
|
PLX_SPEC_PORT_FABRIC = 9, // Fabric port
|
|
PLX_SPEC_PORT_GEP = 10, // Global EP
|
|
PLX_SPEC_PORT_MPT = 11, // MPT SAS controller EP
|
|
PLX_SPEC_PORT_MPT_NO_SES = 12, // MPT EP (No SES)
|
|
PLX_SPEC_PORT_SYNTH_NIC = 13, // Synthetic NIC VF
|
|
PLX_SPEC_PORT_SYNTH_TWC = 14, // Synthetic TWC EP
|
|
PLX_SPEC_PORT_SYNTH_EN_EP = 15, // Synthetic Enabler EP
|
|
PLX_SPEC_PORT_SYNTH_NT = 16, // Synthetic NT 2.0 EP
|
|
PLX_SPEC_PORT_SYNTH_MPT = 17, // Synthetic MPT SAS controller EP
|
|
PLX_SPEC_PORT_SYNTH_GDMA = 18, // Synthetic gDMA EP
|
|
PLX_SPEC_PORT_INT_MGMT = 19, // iSSW internal management port
|
|
} PLX_SPECIFIC_PORT_TYPE;
|
|
|
|
// For compatibility
|
|
typedef PLX_SPECIFIC_PORT_TYPE PLX_NT_PORT_TYPE;
|
|
|
|
|
|
// NT port configuration types
|
|
typedef enum _PLX_NT_CONFIG_TYPE
|
|
{
|
|
PLX_NT_CONFIG_TYPE_NONE = 0,
|
|
PLX_NT_CONFIG_TYPE_LINK_DOWN,
|
|
PLX_NT_CONFIG_TYPE_STANDARD,
|
|
PLX_NT_CONFIG_TYPE_BACK_TO_BACK
|
|
} PLX_NT_CONFIG_TYPE;
|
|
|
|
|
|
// Non-transparent LUT flags
|
|
typedef enum _PLX_NT_LUT_FLAG
|
|
{
|
|
PLX_NT_LUT_FLAG_NONE = 0,
|
|
PLX_NT_LUT_FLAG_NO_SNOOP = (1 << 0),
|
|
PLX_NT_LUT_FLAG_READ = (1 << 1),
|
|
PLX_NT_LUT_FLAG_WRITE = (1 << 2)
|
|
} PLX_NT_LUT_FLAG;
|
|
|
|
|
|
// DMA control commands
|
|
typedef enum _PLX_DMA_COMMAND
|
|
{
|
|
DmaPause,
|
|
DmaPauseImmediate,
|
|
DmaResume,
|
|
DmaAbort
|
|
} PLX_DMA_COMMAND;
|
|
|
|
|
|
// DMA transfer direction
|
|
typedef enum _PLX_DMA_DIR
|
|
{
|
|
PLX_DMA_PCI_TO_LOC = 0, // DMA PCI --> Local bus (9000 DMA)
|
|
PLX_DMA_LOC_TO_PCI = 1, // DMA Local bus --> PCI (9000 DMA)
|
|
PLX_DMA_USER_TO_PCI = PLX_DMA_PCI_TO_LOC, // DMA User buffer --> PCI (8000 DMA)
|
|
PLX_DMA_PCI_TO_USER = PLX_DMA_LOC_TO_PCI // DMA PCI --> User buffer (8000 DMA)
|
|
} PLX_DMA_DIR;
|
|
|
|
|
|
// DMA Descriptor Mode
|
|
typedef enum _PLX_DMA_DESCR_MODE
|
|
{
|
|
PLX_DMA_MODE_BLOCK = 0, // DMA Block transfer mode
|
|
PLX_DMA_MODE_SGL = 1, // DMA SGL with descriptors off-chip
|
|
PLX_DMA_MODE_SGL_INTERNAL = 2 // DMA SGL with descriptors on-chip
|
|
} PLX_DMA_DESCR_MODE;
|
|
|
|
|
|
// DMA Ring Delay Period
|
|
typedef enum _PLX_DMA_RING_DELAY_TIME
|
|
{
|
|
PLX_DMA_RING_DELAY_0 = 0,
|
|
PLX_DMA_RING_DELAY_1us = 1,
|
|
PLX_DMA_RING_DELAY_2us = 2,
|
|
PLX_DMA_RING_DELAY_8us = 3,
|
|
PLX_DMA_RING_DELAY_32us = 4,
|
|
PLX_DMA_RING_DELAY_128us = 5,
|
|
PLX_DMA_RING_DELAY_512us = 6,
|
|
PLX_DMA_RING_DELAY_1ms = 7
|
|
} PLX_DMA_RING_DELAY_TIME;
|
|
|
|
|
|
// DMA Maximum Source & Destination Transfer Sizes
|
|
typedef enum _PLX_DMA_MAX_TSIZE
|
|
{
|
|
PLX_DMA_MAX_TSIZE_64B = 0,
|
|
PLX_DMA_MAX_TSIZE_128B = 1,
|
|
PLX_DMA_MAX_TSIZE_256B = 2,
|
|
PLX_DMA_MAX_TSIZE_512B = 3,
|
|
PLX_DMA_MAX_TSIZE_1K = 4,
|
|
PLX_DMA_MAX_TSIZE_2K = 5,
|
|
PLX_DMA_MAX_TSIZE_4B = 7,
|
|
|
|
// Legacy definitions may be removed in future
|
|
PLX_DMA_MAX_SRC_TSIZE_64B = PLX_DMA_MAX_TSIZE_64B,
|
|
PLX_DMA_MAX_SRC_TSIZE_128B = PLX_DMA_MAX_TSIZE_128B,
|
|
PLX_DMA_MAX_SRC_TSIZE_256B = PLX_DMA_MAX_TSIZE_256B,
|
|
PLX_DMA_MAX_SRC_TSIZE_512B = PLX_DMA_MAX_TSIZE_512B,
|
|
PLX_DMA_MAX_SRC_TSIZE_1K = PLX_DMA_MAX_TSIZE_1K,
|
|
PLX_DMA_MAX_SRC_TSIZE_2K = PLX_DMA_MAX_TSIZE_2K,
|
|
PLX_DMA_MAX_SRC_TSIZE_4B = PLX_DMA_MAX_TSIZE_4B
|
|
} PLX_DMA_MAX_TSIZE;
|
|
|
|
|
|
// Performance monitor control
|
|
typedef enum _PLX_PERF_CMD
|
|
{
|
|
PLX_PERF_CMD_START,
|
|
PLX_PERF_CMD_STOP,
|
|
} PLX_PERF_CMD;
|
|
|
|
|
|
// Used for device power state. Added for code compatability with Linux
|
|
#if !defined(PLX_MSWINDOWS)
|
|
typedef enum _DEVICE_POWER_STATE
|
|
{
|
|
PowerDeviceUnspecified = 0,
|
|
PowerDeviceD0,
|
|
PowerDeviceD1,
|
|
PowerDeviceD2,
|
|
PowerDeviceD3,
|
|
PowerDeviceMaximum
|
|
} DEVICE_POWER_STATE;
|
|
#endif
|
|
|
|
|
|
// Properties of API access mode
|
|
typedef struct _PLX_MODE_PROP
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
U16 I2cPort;
|
|
U16 SlaveAddr;
|
|
U32 ClockRate;
|
|
} I2c;
|
|
|
|
struct
|
|
{
|
|
U8 Port;
|
|
U32 ClockRate;
|
|
char *StrPath;
|
|
} Mdio;
|
|
|
|
struct
|
|
{
|
|
U8 Port;
|
|
U8 Baud;
|
|
U8 Cable;
|
|
} Sdb;
|
|
|
|
struct
|
|
{
|
|
U64 IpAddress;
|
|
} Tcp;
|
|
};
|
|
} PLX_MODE_PROP;
|
|
|
|
|
|
// PLX version information
|
|
typedef struct _PLX_VERSION
|
|
{
|
|
PLX_API_MODE ApiMode;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
U16 ApiLibrary; // API library version
|
|
U16 Software; // Software version
|
|
U16 Firmware; // Firmware version
|
|
U16 Hardware; // Hardware version
|
|
U16 SwReqByFw; // Firmware requires software must be >= this version
|
|
U16 FwReqBySw; // Software requires firmware must be >= this version
|
|
U16 ApiReqBySw; // Software requires API interface must be >= this version
|
|
U32 Features; // Bitmask of supported features
|
|
} I2c;
|
|
};
|
|
} PLX_VERSION;
|
|
|
|
|
|
// Chip features & port mask
|
|
typedef struct _PEX_CHIP_FEAT
|
|
{
|
|
U8 StnCount; // Supported station count
|
|
U8 PortsPerStn; // Max number of ports per station
|
|
U8 StnMask; // Bitmask of enabled stations
|
|
PEX_BITMASK_T( PortMask, 256 ); // Bitmask for ports and special types
|
|
} PEX_CHIP_FEAT;
|
|
|
|
|
|
// PCI Memory Structure
|
|
typedef struct _PLX_PHYSICAL_MEM
|
|
{
|
|
U64 UserAddr; // User-mode virtual address
|
|
U64 PhysicalAddr; // Bus physical address
|
|
U64 CpuPhysical; // CPU physical address
|
|
U32 Size; // Size of the buffer
|
|
} PLX_PHYSICAL_MEM;
|
|
|
|
|
|
// PLX Driver Properties
|
|
typedef struct _PLX_DRIVER_PROP
|
|
{
|
|
U32 Version; // Driver version
|
|
char Name[16]; // Driver name
|
|
char FullName[255]; // Full driver name
|
|
U8 bIsServiceDriver; // Is service driver or PnP driver?
|
|
U64 AcpiPcieEcam; // Base address of PCIe ECAM
|
|
} PLX_DRIVER_PROP;
|
|
|
|
|
|
// PCI BAR Properties
|
|
typedef struct _PLX_PCI_BAR_PROP
|
|
{
|
|
U64 BarValue; // Actual value in BAR
|
|
U64 Physical; // BAR Physical Address
|
|
U64 Size; // Size of BAR space
|
|
U32 Flags; // Additional BAR properties
|
|
} PLX_PCI_BAR_PROP;
|
|
|
|
|
|
// Used for getting the port properties and status
|
|
typedef struct _PLX_PORT_PROP
|
|
{
|
|
U8 PortType; // Port configuration
|
|
U8 PortNumber; // Internal port number
|
|
U8 LinkWidth; // Negotiated port link width
|
|
U8 MaxLinkWidth; // Max link width device is capable of
|
|
U8 LinkSpeed; // Negotiated link speed
|
|
U8 MaxLinkSpeed; // Max link speed device is capable of
|
|
U16 MaxReadReqSize; // Max read request size allowed
|
|
U16 MaxPayloadSize; // Max payload size setting
|
|
U16 MaxPayloadSupported; // Max payload size supported by device
|
|
U8 bNonPcieDevice; // Flag whether device is a PCIe device
|
|
} PLX_PORT_PROP;
|
|
|
|
|
|
// Used for getting the multi-host switch properties
|
|
typedef struct _PLX_MULTI_HOST_PROP
|
|
{
|
|
U8 SwitchMode; // Current switch mode
|
|
U16 VS_EnabledMask; // Bit for each enabled Virtual Switch
|
|
U8 VS_UpstreamPortNum[8]; // Upstream port number of each Virtual Switch
|
|
U32 VS_DownstreamPorts[8]; // Downstream ports associated with a Virtual Switch
|
|
U8 bIsMgmtPort; // Is selected device management port
|
|
U8 bMgmtPortActiveEn; // Is active management port enabled
|
|
U8 MgmtPortNumActive; // Active management port
|
|
U8 bMgmtPortRedundantEn; // Is redundant management port enabled
|
|
U8 MgmtPortNumRedundant; // Redundant management port
|
|
} PLX_MULTI_HOST_PROP;
|
|
|
|
|
|
// SPI flash properties
|
|
typedef struct _PEX_SPI_OBJ
|
|
{
|
|
U32 IsValidTag; // Magic number to determine validity
|
|
U8 Flags; // Additional flags
|
|
U8 ChipSel; // Chip select to access
|
|
U8 IoMode; // I/O moode to use
|
|
U8 PageSize; // Page size in power of 2
|
|
U8 SectorsCount; // Sector count in power of 2
|
|
U8 SectorSize; // Sector size in power of 2
|
|
U8 MfgID; // Manufacturer ID
|
|
U16 DeviceId; // Device-reported ID
|
|
U32 CtrlBaseAddr; // Address/offset of SPI controller registers
|
|
U32 MmapAddr; // AXI mem-mapped address to flash (optional)
|
|
} PEX_SPI_OBJ;
|
|
|
|
|
|
// PCI Device Key Identifier
|
|
typedef struct _PLX_DEVICE_KEY
|
|
{
|
|
U32 IsValidTag; // Magic number to determine validity
|
|
U8 domain; // Physical device location
|
|
U8 bus;
|
|
U8 slot;
|
|
U8 function;
|
|
U16 VendorId; // Device Identifier
|
|
U16 DeviceId;
|
|
U16 SubVendorId;
|
|
U16 SubDeviceId;
|
|
U8 Revision;
|
|
U16 PlxChip; // PLX chip type
|
|
U16 ChipID; // Chip ID (if reported)
|
|
U8 PlxRevision; // PLX chip revision
|
|
U8 PlxFamily; // PLX chip family
|
|
U8 ApiIndex; // Used internally by the API
|
|
U16 DeviceNumber; // Used internally by device drivers
|
|
U8 ApiMode; // Mode API uses to access device
|
|
U8 PlxPort; // PLX port number of device
|
|
U8 PlxPortType; // PLX-specific port type (NT/DMA/Host/etc)
|
|
U8 NTPortNum; // If NT port exists, store NT port number
|
|
U8 DeviceMode; // Device mode used internally by API
|
|
U32 ApiInternal[2]; // Reserved for internal PLX API use
|
|
} PLX_DEVICE_KEY;
|
|
|
|
|
|
// PLX Device Object Structure
|
|
typedef struct _PLX_DEVICE_OBJECT
|
|
{
|
|
U32 IsValidTag; // Magic number to determine validity
|
|
PLX_DEVICE_KEY Key; // Device location key identifier
|
|
PLX_DRIVER_HANDLE hDevice; // Handle to driver
|
|
PLX_PCI_BAR_PROP PciBar[6]; // PCI BAR properties
|
|
U64 PciBarVa[6]; // For PCI BAR user-mode BAR mappings
|
|
U8 BarMapRef[6]; // BAR map count used by API
|
|
PLX_PHYSICAL_MEM CommonBuffer; // Used to store common buffer information
|
|
U64 PrivateData[4];// Private storage for user application
|
|
} PLX_DEVICE_OBJECT;
|
|
|
|
|
|
// PLX Notification Object
|
|
typedef struct _PLX_NOTIFY_OBJECT
|
|
{
|
|
U32 IsValidTag; // Magic number to determine validity
|
|
U64 pWaitObject; // -- INTERNAL -- Wait object used by the driver
|
|
U64 hEvent; // User event handle (HANDLE can be 32 or 64 bit)
|
|
} PLX_NOTIFY_OBJECT;
|
|
|
|
|
|
// PLX Interrupt Structure
|
|
typedef struct _PLX_INTERRUPT
|
|
{
|
|
U32 Doorbell; // Up to 32 doorbells
|
|
U8 PciMain :1;
|
|
U8 PciAbort :1;
|
|
U8 LocalToPci :2; // Local->PCI interrupts 1 & 2
|
|
U8 DmaDone :4; // DMA channel 0-3 interrupts
|
|
U8 DmaPauseDone :4;
|
|
U8 DmaAbortDone :4;
|
|
U8 DmaImmedStopDone :4;
|
|
U8 DmaInvalidDescr :4;
|
|
U8 DmaError :4;
|
|
U8 MuInboundPost :1;
|
|
U8 MuOutboundPost :1;
|
|
U8 MuOutboundOverflow :1;
|
|
U8 TargetRetryAbort :1;
|
|
U8 Message :4; // 6000 NT 0-3 message interrupts
|
|
U8 SwInterrupt :1;
|
|
U8 ResetDeassert :1;
|
|
U8 PmeDeassert :1;
|
|
U8 GPIO_4_5 :1; // 6000 NT GPIO 4/5 interrupt
|
|
U8 GPIO_14_15 :1; // 6000 NT GPIO 14/15 interrupt
|
|
U8 NTV_LE_Correctable :1; // 8000 NT Virtual - Link-side error interrupts
|
|
U8 NTV_LE_Uncorrectable :1;
|
|
U8 NTV_LE_LinkStateChange :1;
|
|
U8 NTV_LE_UncorrErrorMsg :1;
|
|
} PLX_INTERRUPT;
|
|
|
|
|
|
// DMA Channel Properties Structure
|
|
typedef struct _PLX_DMA_PROP
|
|
{
|
|
// 8000 DMA properties
|
|
U8 CplStatusWriteBack :1;
|
|
U8 DescriptorMode :2;
|
|
U8 DescriptorPollMode :1;
|
|
U8 RingHaltAtEnd :1;
|
|
U8 RingWrapDelayTime :3;
|
|
U8 RelOrderDescrRead :1;
|
|
U8 RelOrderDescrWrite :1;
|
|
U8 RelOrderDataReadReq :1;
|
|
U8 RelOrderDataWrite :1;
|
|
U8 NoSnoopDescrRead :1;
|
|
U8 NoSnoopDescrWrite :1;
|
|
U8 NoSnoopDataReadReq :1;
|
|
U8 NoSnoopDataWrite :1;
|
|
U8 MaxSrcXferSize :3;
|
|
U8 MaxDestWriteSize :3;
|
|
U8 TrafficClass :3;
|
|
U8 MaxPendingReadReq :6;
|
|
U8 DescriptorPollTime;
|
|
U8 MaxDescriptorFetch;
|
|
U16 ReadReqDelayClocks;
|
|
|
|
// 9000 DMA properties
|
|
U8 ReadyInput :1;
|
|
U8 Burst :1;
|
|
U8 BurstInfinite :1;
|
|
U8 SglMode :1;
|
|
U8 DoneInterrupt :1;
|
|
U8 RouteIntToPci :1;
|
|
U8 ConstAddrLocal :1;
|
|
U8 WriteInvalidMode :1;
|
|
U8 DemandMode :1;
|
|
U8 EnableEOT :1;
|
|
U8 FastTerminateMode :1;
|
|
U8 ClearCountMode :1;
|
|
U8 DualAddressMode :1;
|
|
U8 EOTEndLink :1;
|
|
U8 ValidMode :1;
|
|
U8 ValidStopControl :1;
|
|
U8 LocalBusWidth :2;
|
|
U8 WaitStates :4;
|
|
} PLX_DMA_PROP;
|
|
|
|
|
|
// DMA Transfer Parameters
|
|
typedef struct _PLX_DMA_PARAMS
|
|
{
|
|
U64 UserVa; // User buffer virtual address
|
|
U64 AddrSource; // Source address (8000 DMA)
|
|
U64 AddrDest; // Destination address (8000 DMA)
|
|
U64 PciAddr; // PCI address (9000 DMA)
|
|
U32 LocalAddr; // Local bus address (9000 DMA)
|
|
U32 ByteCount; // Number of bytes to transfer
|
|
U8 Direction; // Direction of transfer (Local<->PCI, User<->PCI) (9000 DMA)
|
|
U8 bConstAddrSrc :1; // Constant source PCI address? (8000 DMA)
|
|
U8 bConstAddrDest :1; // Constant destination PCI address? (8000 DMA)
|
|
U8 bForceFlush :1; // Force DMA to flush write on final descriptor (8000 DMA)
|
|
U8 bIgnoreBlockInt :1; // For block mode only, do not enable DMA done interrupt
|
|
} PLX_DMA_PARAMS;
|
|
|
|
|
|
// Performance properties
|
|
typedef struct _PLX_PERF_PROP
|
|
{
|
|
U32 IsValidTag; // Magic number to determine validity
|
|
|
|
// Chip properties
|
|
U8 PlxFamily;
|
|
|
|
// Port properties
|
|
U8 PortNumber;
|
|
U8 LinkWidth;
|
|
U8 LinkSpeed;
|
|
U8 Station;
|
|
U8 StationPort;
|
|
|
|
// Ingress counters
|
|
U32 IngressPostedHeader;
|
|
U32 IngressPostedDW;
|
|
U32 IngressNonpostedHdr;
|
|
U32 IngressNonpostedDW;
|
|
U32 IngressCplHeader;
|
|
U32 IngressCplDW;
|
|
U32 IngressDllp;
|
|
|
|
// Egress counters
|
|
U32 EgressPostedHeader;
|
|
U32 EgressPostedDW;
|
|
U32 EgressNonpostedHdr;
|
|
U32 EgressNonpostedDW;
|
|
U32 EgressCplHeader;
|
|
U32 EgressCplDW;
|
|
U32 EgressDllp;
|
|
|
|
// Storage for previous counter values
|
|
|
|
// Previous Ingress counters
|
|
U32 Prev_IngressPostedHeader;
|
|
U32 Prev_IngressPostedDW;
|
|
U32 Prev_IngressNonpostedHdr;
|
|
U32 Prev_IngressNonpostedDW;
|
|
U32 Prev_IngressCplHeader;
|
|
U32 Prev_IngressCplDW;
|
|
U32 Prev_IngressDllp;
|
|
|
|
// Previous Egress counters
|
|
U32 Prev_EgressPostedHeader;
|
|
U32 Prev_EgressPostedDW;
|
|
U32 Prev_EgressNonpostedHdr;
|
|
U32 Prev_EgressNonpostedDW;
|
|
U32 Prev_EgressCplHeader;
|
|
U32 Prev_EgressCplDW;
|
|
U32 Prev_EgressDllp;
|
|
} PLX_PERF_PROP;
|
|
|
|
|
|
// Performance statistics
|
|
typedef struct _PLX_PERF_STATS
|
|
{
|
|
S64 IngressTotalBytes; // Total bytes including overhead
|
|
long double IngressTotalByteRate; // Total byte rate
|
|
S64 IngressCplAvgPerReadReq; // Average number of completion TLPs for read requests
|
|
S64 IngressCplAvgBytesPerTlp; // Average number of bytes per completion TLPs
|
|
S64 IngressPayloadReadBytes; // Payload bytes read (Completion TLPs)
|
|
S64 IngressPayloadReadBytesAvg; // Average payload bytes for reads (Completion TLPs)
|
|
S64 IngressPayloadWriteBytes; // Payload bytes written (Posted TLPs)
|
|
S64 IngressPayloadWriteBytesAvg; // Average payload bytes for writes (Posted TLPs)
|
|
S64 IngressPayloadTotalBytes; // Payload total bytes
|
|
double IngressPayloadAvgPerTlp; // Payload average size per TLP
|
|
long double IngressPayloadByteRate; // Payload byte rate
|
|
long double IngressLinkUtilization; // Total link utilization
|
|
|
|
S64 EgressTotalBytes; // Total byte including overhead
|
|
long double EgressTotalByteRate; // Total byte rate
|
|
S64 EgressCplAvgPerReadReq; // Average number of completion TLPs for read requests
|
|
S64 EgressCplAvgBytesPerTlp; // Average number of bytes per completion TLPs
|
|
S64 EgressPayloadReadBytes; // Payload bytes read (Completion TLPs)
|
|
S64 EgressPayloadReadBytesAvg; // Average payload bytes for reads (Completion TLPs)
|
|
S64 EgressPayloadWriteBytes; // Payload bytes written (Posted TLPs)
|
|
S64 EgressPayloadWriteBytesAvg; // Average payload bytes for writes (Posted TLPs)
|
|
S64 EgressPayloadTotalBytes; // Payload total bytes
|
|
double EgressPayloadAvgPerTlp; // Payload average size per TLP
|
|
long double EgressPayloadByteRate; // Payload byte rate
|
|
long double EgressLinkUtilization; // Total link utilization
|
|
} PLX_PERF_STATS;
|
|
|
|
|
|
|
|
// Restore previous pack value
|
|
#pragma pack( pop )
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|