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.
388 lines
12 KiB
388 lines
12 KiB
#ifndef __PCI_TYPES_H
|
|
#define __PCI_TYPES_H
|
|
|
|
/*******************************************************************************
|
|
* Copyright 2013-2017 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:
|
|
*
|
|
* PciTypes.h
|
|
*
|
|
* Description:
|
|
*
|
|
* This file defines the basic types
|
|
*
|
|
* Revision:
|
|
*
|
|
* 06-01-19 : PLX SDK v8.00
|
|
*
|
|
******************************************************************************/
|
|
|
|
|
|
#if defined(PLX_WDM_DRIVER)
|
|
#include <wdm.h> // WDM Driver types
|
|
#endif
|
|
|
|
#if defined(PLX_NT_DRIVER)
|
|
#include <ntddk.h> // NT Kernel Mode Driver (ie PLX Service)
|
|
#endif
|
|
|
|
#if defined(PLX_MSWINDOWS)
|
|
#if !defined(PLX_DRIVER)
|
|
#include <wtypes.h> // Windows application level types
|
|
#endif
|
|
#endif
|
|
|
|
// Must be placed before <linux/types.h> to prevent compile errors
|
|
#if defined(PLX_LINUX) && !defined(PLX_LINUX_DRIVER)
|
|
#include <memory.h> // To automatically add mem*() set of functions
|
|
#endif
|
|
|
|
#if defined(PLX_LINUX) || defined(PLX_LINUX_DRIVER)
|
|
#include <linux/types.h> // Linux types
|
|
#endif
|
|
|
|
#if defined(PLX_LINUX)
|
|
#include <limits.h> // For MAX_SCHEDULE_TIMEOUT in Linux applications
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************
|
|
* Linux Application Level Definitions
|
|
******************************************/
|
|
#if defined(PLX_LINUX)
|
|
typedef __s8 S8;
|
|
typedef __u8 U8;
|
|
typedef __s16 S16;
|
|
typedef __u16 U16;
|
|
typedef __s32 S32;
|
|
typedef __u32 U32;
|
|
typedef __s64 S64;
|
|
typedef __u64 U64;
|
|
typedef signed long PLX_INT_PTR; // For 32/64-bit code compatability
|
|
typedef unsigned long PLX_UINT_PTR;
|
|
typedef int HANDLE;
|
|
typedef int PLX_DRIVER_HANDLE; // Linux-specific driver handle
|
|
|
|
#define INVALID_HANDLE_VALUE (HANDLE)-1
|
|
|
|
#if !defined(MAX_SCHEDULE_TIMEOUT)
|
|
#define MAX_SCHEDULE_TIMEOUT LONG_MAX
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************
|
|
* Linux Kernel Level Definitions
|
|
******************************************/
|
|
#if defined(PLX_LINUX_DRIVER)
|
|
typedef s8 S8;
|
|
typedef u8 U8;
|
|
typedef s16 S16;
|
|
typedef u16 U16;
|
|
typedef s32 S32;
|
|
typedef u32 U32;
|
|
typedef s64 S64;
|
|
typedef u64 U64;
|
|
typedef signed long PLX_INT_PTR; // For 32/64-bit code compatability
|
|
typedef unsigned long PLX_UINT_PTR;
|
|
typedef int PLX_DRIVER_HANDLE; // Linux-specific driver handle
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************
|
|
* Windows Type Definitions
|
|
******************************************/
|
|
#if defined(PLX_MSWINDOWS)
|
|
typedef signed char S8;
|
|
typedef unsigned char U8;
|
|
typedef signed short S16;
|
|
typedef unsigned short U16;
|
|
typedef signed long S32;
|
|
typedef unsigned long U32;
|
|
typedef signed __int64 S64;
|
|
typedef unsigned __int64 U64;
|
|
typedef INT_PTR PLX_INT_PTR; // For 32/64-bit code compatability
|
|
typedef UINT_PTR PLX_UINT_PTR;
|
|
typedef HANDLE PLX_DRIVER_HANDLE; // Windows-specific driver handle
|
|
|
|
#if defined(_DEBUG)
|
|
#define PLX_DEBUG
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************
|
|
* Windows WDM Driver Compatability
|
|
******************************************/
|
|
#if defined(PLX_WDM_DRIVER)
|
|
// RtlIsNtDdiVersionAvailable supported in Windows Vista & higher
|
|
#if (WINVER < 0x600)
|
|
#define RtlIsNtDdiVersionAvailable(ver) IoIsWdmVersionAvailable( (U8)(ver >> 24), (U8)(ver >> 16) )
|
|
|
|
// Windows versions taken from SdkDdkVer.h
|
|
#define NTDDI_WIN2K 0x01100000 // WDM=1.10 Winver=5.00
|
|
#define NTDDI_WINXP 0x01200000 // WDM=1.20 Winver=5.01
|
|
#define NTDDI_WS03 0x01300000 // WDM=1.30 Winver=5.02
|
|
#endif
|
|
|
|
#if (WINVER < 0x601)
|
|
#define NTDDI_WIN6 0x06000000
|
|
#define NTDDI_WIN6SP1 0x06000100
|
|
#define NTDDI_VISTA NTDDI_WIN6
|
|
#define NTDDI_WS08 NTDDI_WIN6SP1
|
|
#define NTDDI_WIN7 0x06010000
|
|
#endif
|
|
|
|
#if (WINVER < 0x602)
|
|
#define NTDDI_WIN8 0x06020000
|
|
#define NTDDI_WIN10 0x0A000000
|
|
#endif
|
|
|
|
#if (WINVER < 0x603)
|
|
#define NTDDI_WINBLUE 0x06030000 // Windows 8.1
|
|
#endif
|
|
|
|
#if (WINVER < 0xA00)
|
|
#define NTDDI_WIN10 0x0A000000
|
|
#endif
|
|
|
|
// Additional Win8+ DDK definitions
|
|
#if (NTDDI_VER < NTDDI_WIN8)
|
|
// More POOL_TYPEs added, needed for no-execute
|
|
typedef enum _PLX_POOL_TYPE
|
|
{
|
|
NonPagedPoolBase = 0,
|
|
NonPagedPoolBaseMustSucceed = NonPagedPoolBase + 2,
|
|
NonPagedPoolBaseCacheAligned = NonPagedPoolBase + 4,
|
|
NonPagedPoolBaseCacheAlignedMustS = NonPagedPoolBase + 6,
|
|
|
|
NonPagedPoolNx = 512,
|
|
NonPagedPoolNxCacheAligned = NonPagedPoolNx + 4,
|
|
NonPagedPoolSessionNx = NonPagedPoolNx + 32
|
|
} PLX_POOL_TYPE;
|
|
|
|
// Additional -OR- flags for MM_PAGE_PRIORITY
|
|
#define MdlMappingNoWrite 0x80000000 // Create the mapping as nowrite
|
|
#define MdlMappingNoExecute 0x40000000 // Create the mapping as noexecute
|
|
#endif
|
|
|
|
#if (NTDDI_VER < NTDDI_WIN7)
|
|
// Win7 DDK added typedef's for registered functions for declaration
|
|
typedef
|
|
NTSTATUS
|
|
DRIVER_INITIALIZE(
|
|
struct _DRIVER_OBJECT *DriverObject,
|
|
PUNICODE_STRING RegistryPath
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
DRIVER_UNLOAD(
|
|
struct _DRIVER_OBJECT *DriverObject
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
DRIVER_ADD_DEVICE(
|
|
struct _DRIVER_OBJECT *DriverObject,
|
|
struct _DEVICE_OBJECT *PhysicalDeviceObject
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
DRIVER_DISPATCH(
|
|
struct _DEVICE_OBJECT *DeviceObject,
|
|
struct _IRP *Irp
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
DRIVER_CANCEL(
|
|
struct _DEVICE_OBJECT *DeviceObject,
|
|
struct _IRP *Irp
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
KSERVICE_ROUTINE(
|
|
struct _KINTERRUPT *Interrupt,
|
|
PVOID ServiceContext
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
KDEFERRED_ROUTINE(
|
|
struct _KDPC *Dpc,
|
|
PVOID DeferredContext,
|
|
PVOID SystemArgument1,
|
|
PVOID SystemArgument2
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
KSYNCHRONIZE_ROUTINE (
|
|
PVOID SynchronizeContext
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
IO_COMPLETION_ROUTINE (
|
|
PDEVICE_OBJECT DeviceObject,
|
|
PIRP Irp,
|
|
PVOID Context
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
IO_WORKITEM_ROUTINE (
|
|
PDEVICE_OBJECT DeviceObject,
|
|
PVOID Context
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
REQUEST_POWER_COMPLETE (
|
|
PDEVICE_OBJECT DeviceObject,
|
|
UCHAR MinorFunction,
|
|
POWER_STATE PowerState,
|
|
PVOID Context,
|
|
PIO_STATUS_BLOCK IoStatus
|
|
);
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************
|
|
* DOS Type Definitions
|
|
******************************************/
|
|
#if defined(PLX_DOS)
|
|
typedef signed char S8;
|
|
typedef unsigned char U8;
|
|
typedef signed short S16;
|
|
typedef unsigned short U16;
|
|
typedef signed long S32;
|
|
typedef unsigned long U32;
|
|
typedef signed long long S64;
|
|
typedef unsigned long long U64;
|
|
typedef S32 PLX_INT_PTR; // For 32/64-bit code compatability
|
|
typedef U32 PLX_UINT_PTR;
|
|
typedef unsigned long HANDLE;
|
|
typedef HANDLE PLX_DRIVER_HANDLE;
|
|
#define INVALID_HANDLE_VALUE 0
|
|
|
|
#if !defined(_far)
|
|
#define _far
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************
|
|
* Volatile Basic Type Definitions
|
|
******************************************/
|
|
typedef volatile S8 VS8;
|
|
typedef volatile U8 VU8;
|
|
typedef volatile S16 VS16;
|
|
typedef volatile U16 VU16;
|
|
typedef volatile S32 VS32;
|
|
typedef volatile U32 VU32;
|
|
typedef volatile S64 VS64;
|
|
typedef volatile U64 VU64;
|
|
|
|
|
|
|
|
/*******************************************
|
|
* Definitions used for ACPI & ECAM probe
|
|
******************************************/
|
|
// Used to scan ROM for services
|
|
#define BIOS_MEM_START 0x000E0000
|
|
#define BIOS_MEM_END 0x00100000
|
|
|
|
// ACPI probe states
|
|
#define ACPI_PCIE_NOT_PROBED 0
|
|
#define ACPI_PCIE_BYPASS_OS_OK 1
|
|
#define ACPI_PCIE_DEFAULT_TO_OS 2
|
|
#define ACPI_PCIE_ALWAYS_USE_OS 3
|
|
|
|
// ECAM probe definitions
|
|
#define ECAM_PROBE_ADDR_MIN 0x80000000
|
|
#define ECAM_PROBE_ADDR_MAX 0xFC000000
|
|
#define ECAM_PROBE_ADDR_INCR 0x01000000
|
|
#define ECAM_PROBE_ADDR_DEFAULT_START 0xC0000000
|
|
#define ECAM_PROBE_ADDR_DEFAULT_END 0xFC000000
|
|
|
|
// Number of PCI registers to compare
|
|
#define ECAM_PROBE_REG_CMP_COUNT 4
|
|
|
|
// ECAM address offset
|
|
#define ECAM_DEVICE_REG_OFFSET( bus, dev, fn, off ) \
|
|
(U32)( ( (bus) << 20) | \
|
|
( (dev) << 15) | \
|
|
( (fn) << 12) | \
|
|
( (off) << 0) )
|
|
|
|
// ACPI RSDT v1.0 structure
|
|
typedef struct _ACPI_RSDT_v1_0
|
|
{
|
|
U32 Signature;
|
|
U32 Length;
|
|
U8 Revision;
|
|
U8 Oem_Id[6];
|
|
U8 Oem_Table_Id[8];
|
|
U32 Oem_Revision;
|
|
U32 Creator_Id;
|
|
U32 Creator_Revision;
|
|
} ACPI_RSDT_v1_0;
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|