forked from xt-sys/exectos
.github
bootdata
drivers
sdk
cmake
ovmf
xtbk
xtdk
amd64
i686
README.md
blfuncs.h
bltarget.h
bltypes.h
exfuncs.h
extypes.h
hlfuncs.h
hltypes.h
iotypes.h
kefuncs.h
ketypes.h
ldrtypes.h
potypes.h
pstypes.h
rtlfuncs.h
rtltypes.h
xtbase.h
xtblapi.h
xtdebug.h
xtdefs.h
xtfw.h
xtglyph.h
xtguid.h
xtimage.h
xtkmapi.h
xtstatus.h
xtstruct.h
xttarget.h
xttypes.h
xtuefi.h
xtldr
xtoskrnl
.clangd
.gitignore
CMakeLists.txt
CONTRIBUTING.md
COPYING.md
ExectOS.code-workspace
IDEAS.md
KNOWN_ISSUES.md
README.md
configure.sh
218 lines
6.5 KiB
C
218 lines
6.5 KiB
C
/**
|
|
* PROJECT: ExectOS
|
|
* COPYRIGHT: See COPYING.md in the top level directory
|
|
* FILE: sdk/xtdk/iotypes.h
|
|
* DESCRIPTION: I/O related type definitions
|
|
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
|
*/
|
|
|
|
#ifndef __XTDK_IOTYPES_H
|
|
#define __XTDK_IOTYPES_H
|
|
|
|
#include <xttypes.h>
|
|
|
|
|
|
/* Number of PCI base address registers */
|
|
#define PCI_TYPE0_ADDRESSES 6
|
|
#define PCI_TYPE1_ADDRESSES 2
|
|
#define PCI_TYPE2_ADDRESSES 5
|
|
|
|
/* PCI maximum number of devices */
|
|
#define PCI_MAX_BRIDGE_NUMBER 255
|
|
#define PCI_MAX_DEVICES 32
|
|
#define PCI_MAX_FUNCTION 8
|
|
|
|
/* Invalid PCI vendor ID */
|
|
#define PCI_INVALID_VENDORID 0xFFFF
|
|
|
|
/* PCI common config header types */
|
|
#define PCI_DEVICE_TYPE 0x00
|
|
#define PCI_BRIDGE_TYPE 0x01
|
|
#define PCI_CARDBUS_BRIDGE_TYPE 0x02
|
|
#define PCI_MULTIFUNCTION 0x80
|
|
|
|
/* PCI common config commands */
|
|
#define PCI_ENABLE_IO_SPACE 0x0001
|
|
#define PCI_ENABLE_MEMORY_SPACE 0x0002
|
|
#define PCI_ENABLE_BUS_MASTER 0x0004
|
|
#define PCI_ENABLE_SPECIAL_CYCLES 0x0008
|
|
#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
|
|
#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
|
|
#define PCI_ENABLE_PARITY 0x0040
|
|
#define PCI_ENABLE_WAIT_CYCLE 0x0080
|
|
#define PCI_ENABLE_SERR 0x0100
|
|
#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
|
|
#define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
|
|
|
|
/* PCI common config statuses */
|
|
#define PCI_STATUS_INTERRUPT_PENDING 0x0008
|
|
#define PCI_STATUS_CAPABILITIES_LIST 0x0010
|
|
#define PCI_STATUS_66MHZ_CAPABLE 0x0020
|
|
#define PCI_STATUS_UDF_SUPPORTED 0x0040
|
|
#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
|
|
#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
|
|
#define PCI_STATUS_DEVSEL 0x0600
|
|
#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
|
|
#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
|
|
#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
|
|
#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
|
|
#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
|
|
|
|
/* PCI bridge control registers */
|
|
typedef struct _PCI_BRIDGE_CONTROL_REGISTER
|
|
{
|
|
UINT Bar[2];
|
|
UCHAR PrimaryBus;
|
|
UCHAR SecondaryBus;
|
|
UCHAR SubordinateBus;
|
|
UCHAR SecondaryLatencyTimer;
|
|
UCHAR IoBase;
|
|
UCHAR IoLimit;
|
|
USHORT SecondaryStatus;
|
|
USHORT MemoryBase;
|
|
USHORT MemoryLimit;
|
|
USHORT PrefetchableMemoryBase;
|
|
USHORT PrefetchableMemoryLimit;
|
|
UINT PrefetchableBaseUpper32;
|
|
UINT PrefetchableLimitUpper32;
|
|
USHORT IoBaseUpper16;
|
|
USHORT IoLimitUpper16;
|
|
UINT Reserved;
|
|
UINT ExpansionRomBAR;
|
|
UCHAR InterruptLine;
|
|
UCHAR InterruptPin;
|
|
USHORT BridgeControl;
|
|
} PCI_BRIDGE_CONTROL_REGISTER, *PPCI_BRIDGE_CONTROL_REGISTER;
|
|
|
|
/* PCI and PCI-E common header structure */
|
|
typedef struct _PCI_COMMON_HEADER
|
|
{
|
|
USHORT VendorId;
|
|
USHORT DeviceId;
|
|
USHORT Command;
|
|
USHORT Status;
|
|
UCHAR RevisionId;
|
|
UCHAR ProgIf;
|
|
UCHAR SubClass;
|
|
UCHAR BaseClass;
|
|
UCHAR CacheLineSize;
|
|
UCHAR LatencyTimer;
|
|
UCHAR HeaderType;
|
|
UCHAR BIST;
|
|
union
|
|
{
|
|
struct _PCI_TYPE0_HEADER
|
|
{
|
|
ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
|
|
ULONG CIS;
|
|
USHORT SubVendorId;
|
|
USHORT SubSystemId;
|
|
ULONG ROMBaseAddress;
|
|
UCHAR CapabilitiesPtr;
|
|
UCHAR Reserved1[3];
|
|
ULONG Reserved2;
|
|
UCHAR InterruptLine;
|
|
UCHAR InterruptPin;
|
|
UCHAR MinimumGrant;
|
|
UCHAR MaximumLatency;
|
|
} type0;
|
|
struct _PCI_TYPE1_HEADER
|
|
{
|
|
ULONG BaseAddresses[PCI_TYPE1_ADDRESSES];
|
|
UCHAR PrimaryBus;
|
|
UCHAR SecondaryBus;
|
|
UCHAR SubordinateBus;
|
|
UCHAR SecondaryLatency;
|
|
UCHAR IOBase;
|
|
UCHAR IOLimit;
|
|
USHORT SecondaryStatus;
|
|
USHORT MemoryBase;
|
|
USHORT MemoryLimit;
|
|
USHORT PrefetchBase;
|
|
USHORT PrefetchLimit;
|
|
ULONG PrefetchBaseUpper32;
|
|
ULONG PrefetchLimitUpper32;
|
|
USHORT IOBaseUpper16;
|
|
USHORT IOLimitUpper16;
|
|
UCHAR CapabilitiesPtr;
|
|
UCHAR Reserved1[3];
|
|
ULONG ROMBaseAddress;
|
|
UCHAR InterruptLine;
|
|
UCHAR InterruptPin;
|
|
USHORT BridgeControl;
|
|
} type1;
|
|
struct _PCI_TYPE2_HEADER
|
|
{
|
|
ULONG SocketRegistersBaseAddress;
|
|
UCHAR CapabilitiesPtr;
|
|
UCHAR Reserved;
|
|
USHORT SecondaryStatus;
|
|
UCHAR PrimaryBus;
|
|
UCHAR SecondaryBus;
|
|
UCHAR SubordinateBus;
|
|
UCHAR SecondaryLatency;
|
|
struct
|
|
{
|
|
ULONG Base;
|
|
ULONG Limit;
|
|
} Range[PCI_TYPE2_ADDRESSES - 1];
|
|
UCHAR InterruptLine;
|
|
UCHAR InterruptPin;
|
|
USHORT BridgeControl;
|
|
} type2;
|
|
} u;
|
|
} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
|
|
|
|
/* PCI and PCI-E common config structure */
|
|
typedef struct _PCI_COMMON_CONFIG
|
|
{
|
|
PCI_COMMON_HEADER PciHeader;
|
|
UCHAR DeviceSpecific[192];
|
|
} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
|
|
|
|
/* PCI device header type region structure */
|
|
typedef struct _PCI_DEVICE_HEADER_TYPE_REGION
|
|
{
|
|
UINT Bar[6];
|
|
UINT CISPtr;
|
|
USHORT SubsystemVendorID;
|
|
USHORT SubsystemID;
|
|
UINT ExpansionRomBar;
|
|
UINT Reserved[2];
|
|
UCHAR InterruptLine;
|
|
UCHAR InterruptPin;
|
|
UCHAR MinGnt;
|
|
UCHAR MaxLat;
|
|
} PCI_DEVICE_HEADER_TYPE_REGION, *PPCI_DEVICE_HEADER_TYPE_REGION;
|
|
|
|
/* PCI device independent region structure */
|
|
typedef struct _PCI_DEVICE_INDEPENDENT_REGION
|
|
{
|
|
USHORT VendorId;
|
|
USHORT DeviceId;
|
|
USHORT Command;
|
|
USHORT Status;
|
|
UCHAR RevisionID;
|
|
UCHAR ClassCode[3];
|
|
UCHAR CacheLineSize;
|
|
UCHAR LaytencyTimer;
|
|
UCHAR HeaderType;
|
|
UCHAR BIST;
|
|
} PCI_DEVICE_INDEPENDENT_REGION, *PPCI_DEVICE_INDEPENDENT_REGION;
|
|
|
|
/* PCI device type 0 structure */
|
|
typedef struct _PCI_TYPE0_DEVICE
|
|
{
|
|
PCI_DEVICE_INDEPENDENT_REGION Hdr;
|
|
PCI_DEVICE_HEADER_TYPE_REGION Device;
|
|
} PCI_TYPE0_DEVICE, *PPCI_TYPE0_DEVICE;
|
|
|
|
/* PCI device type 1 structure */
|
|
typedef struct _PCI_TYPE1_DEVICE
|
|
{
|
|
PCI_DEVICE_INDEPENDENT_REGION Hdr;
|
|
PCI_BRIDGE_CONTROL_REGISTER Bridge;
|
|
} PCI_TYPE1_DEVICE, *PPCI_TYPE1_DEVICE;
|
|
|
|
#endif /* __XTDK_IOTYPES_H */
|