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.
436 lines
16 KiB
436 lines
16 KiB
/*++ BUILD Version: 0001 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
res_bios
|
|
|
|
Abstract:
|
|
|
|
PnP BIOS/ISA configuration data definitions
|
|
|
|
Author:
|
|
|
|
Shie-Lin Tzong (shielint) April 12, 1995
|
|
Stephane Plante (splante) Feb 13, 1997
|
|
|
|
Revision History:
|
|
|
|
Feb 13 1997
|
|
Changed and fully adapted to ACPI driver
|
|
|
|
--*/
|
|
|
|
#ifndef _RES_BIOS_H_
|
|
#define _RES_BIOS_H_
|
|
|
|
//
|
|
// Constants
|
|
//
|
|
#define SMALL_RESOURCE_TAG (UCHAR)(0x00)
|
|
#define LARGE_RESOURCE_TAG (UCHAR)(0x80)
|
|
#define SMALL_TAG_MASK 0xf8
|
|
#define SMALL_TAG_SIZE_MASK 7
|
|
|
|
//
|
|
// Small Resource Tags with length bits stripped off
|
|
//
|
|
#define TAG_IRQ 0x20
|
|
#define TAG_DMA 0x28
|
|
#define TAG_START_DEPEND 0x30
|
|
#define TAG_END_DEPEND 0x38
|
|
#define TAG_IO 0x40
|
|
#define TAG_IO_FIXED 0x48
|
|
#define TAG_VENDOR 0x70
|
|
#define TAG_END 0x78
|
|
|
|
//
|
|
// Large Resource Tags
|
|
//
|
|
#define TAG_MEMORY 0x81
|
|
#define TAG_VENDOR_LONG 0x84
|
|
#define TAG_MEMORY32 0x85
|
|
#define TAG_MEMORY32_FIXED 0x86
|
|
#define TAG_DOUBLE_ADDRESS 0x87
|
|
#define TAG_WORD_ADDRESS 0x88
|
|
#define TAG_EXTENDED_IRQ 0x89
|
|
#define TAG_QUAD_ADDRESS 0x8a
|
|
|
|
#include "pshpack1.h"
|
|
|
|
//
|
|
// PNP ISA Port descriptor definition
|
|
//
|
|
typedef struct _PNP_PORT_DESCRIPTOR_ {
|
|
UCHAR Tag; // 01000111B, small item name = 08, length = 7
|
|
UCHAR Information; // bit [0] = 1 device decodes full 16 bit addr
|
|
// = 0 device decodes ISA addr bits[9-0]
|
|
USHORT MinimumAddress;
|
|
USHORT MaximumAddress;
|
|
UCHAR Alignment; // Increment in 1 byte blocks
|
|
UCHAR Length; // # contiguous Port requested
|
|
} PNP_PORT_DESCRIPTOR, *PPNP_PORT_DESCRIPTOR;
|
|
|
|
#define PNP_PORT_DECODE_MASK 0x1
|
|
#define PNP_PORT_10_BIT_DECODE 0x0
|
|
#define PNP_PORT_16_BIT_DECODE 0x1
|
|
|
|
//
|
|
// PNP ISA fixed Port descriptor definition
|
|
//
|
|
typedef struct _PNP_FIXED_PORT_DESCRIPTOR_ {
|
|
UCHAR Tag; // 01001011B, small item name = 09, length = 3
|
|
USHORT MinimumAddress;
|
|
UCHAR Length; // # contiguous Port requested
|
|
} PNP_FIXED_PORT_DESCRIPTOR, *PPNP_FIXED_PORT_DESCRIPTOR;
|
|
|
|
//
|
|
// PNP ISA IRQ descriptor definition
|
|
//
|
|
typedef struct _PNP_IRQ_DESCRIPTOR_ {
|
|
UCHAR Tag; // 0010001XB small item name = 4 length = 2/3
|
|
USHORT IrqMask; // bit 0 is irq 0
|
|
UCHAR Information; // Optional
|
|
} PNP_IRQ_DESCRIPTOR, *PPNP_IRQ_DESCRIPTOR;
|
|
|
|
#define PNP_IRQ_LEVEL 0x08
|
|
#define PNP_IRQ_LATCHED 0x01
|
|
#define PNP_IRQ_SHARED 0x10
|
|
|
|
//
|
|
// PNP ISA DMA descriptor definition
|
|
//
|
|
typedef struct _PNP_DMA_DESCRIPTOR_ {
|
|
UCHAR Tag; // 00101010B, small item name = 05, length = 2
|
|
UCHAR ChannelMask; // bit 0 is channel 0
|
|
UCHAR Flags; // see spec
|
|
} PNP_DMA_DESCRIPTOR, *PPNP_DMA_DESCRIPTOR;
|
|
|
|
//
|
|
// Defination and mask for the various flags
|
|
//
|
|
#define PNP_DMA_SIZE_MASK 0x03
|
|
#define PNP_DMA_SIZE_8 0x00
|
|
#define PNP_DMA_SIZE_8_AND_16 0x01
|
|
#define PNP_DMA_SIZE_16 0x02
|
|
#define PNP_DMA_SIZE_RESERVED 0x03
|
|
|
|
#define PNP_DMA_BUS_MASTER 0x04
|
|
|
|
#define PNP_DMA_TYPE_MASK 0x60
|
|
#define PNP_DMA_TYPE_COMPATIBLE 0x00
|
|
#define PNP_DMA_TYPE_A 0x20
|
|
#define PNP_DMA_TYPE_B 0x40
|
|
#define PNP_DMA_TYPE_F 0x60
|
|
|
|
//
|
|
// PNP ISA MEMORY descriptor
|
|
//
|
|
typedef struct _PNP_MEMORY_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10000001B, Large item name = 1
|
|
USHORT Length; // Length of the descriptor = 9
|
|
UCHAR Information; // See def below
|
|
USHORT MinimumAddress; // address bit [8-23]
|
|
USHORT MaximumAddress; // address bit [8-23]
|
|
USHORT Alignment; // 0x0000 = 64KB
|
|
USHORT MemorySize; // In 256 byte blocks
|
|
} PNP_MEMORY_DESCRIPTOR, *PPNP_MEMORY_DESCRIPTOR;
|
|
|
|
//
|
|
// PNP ISA MEMORY32 descriptor
|
|
//
|
|
typedef struct _PNP_MEMORY32_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10000101B, Large item name = 5
|
|
USHORT Length; // Length of the descriptor = 17
|
|
UCHAR Information; // See def below
|
|
ULONG MinimumAddress; // 32 bit addr
|
|
ULONG MaximumAddress; // 32 bit addr
|
|
ULONG Alignment; // 32 bit alignment
|
|
ULONG MemorySize; // 32 bit length
|
|
} PNP_MEMORY32_DESCRIPTOR, *PPNP_MEMORY32_DESCRIPTOR;
|
|
|
|
//
|
|
// PNP ISA FIXED MEMORY32 descriptor
|
|
//
|
|
typedef struct _PNP_FIXED_MEMORY32_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10000110B, Large item name = 6
|
|
USHORT Length; // Length of the descriptor = 9
|
|
UCHAR Information; // See def below
|
|
ULONG BaseAddress; // 32 bit addr
|
|
ULONG MemorySize; // 32 bit length
|
|
} PNP_FIXED_MEMORY32_DESCRIPTOR, *PPNP_FIXED_MEMORY32_DESCRIPTOR;
|
|
|
|
#define PNP_MEMORY_READ_ONLY 0x00
|
|
#define PNP_MEMORY_READ_WRITE 0x01
|
|
|
|
//
|
|
// PNP ISA Resource Source descriptor definition
|
|
//
|
|
typedef struct _PNP_RESOURCE_SOURCE_DESCRIPTOR_ {
|
|
UCHAR Index; // Varies with type of Source
|
|
UCHAR String[1]; // Start of a variable string
|
|
} PNP_RESOURCE_SOURCE_DESCRIPTOR, *PPNP_RESOURCE_SOURCE_DESCRIPTOR;
|
|
|
|
//
|
|
// PNP DWORD Address descriptor definition
|
|
//
|
|
typedef struct _PNP_DWORD_ADDRESS_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10000111B, Large item name= 7
|
|
USHORT Length; // Length of the descriptor = 23 (min)
|
|
UCHAR RFlag; // Resource Flags
|
|
UCHAR GFlag; // General Flags
|
|
UCHAR TFlag; // Type specific flags
|
|
ULONG Granularity; // Memory Decode Bits
|
|
ULONG MinimumAddress; // Minium Address in range
|
|
ULONG MaximumAddress; // Maximum Address in range
|
|
ULONG TranslationAddress; // How to translate the address
|
|
ULONG AddressLength; // Number of bytes requested
|
|
} PNP_DWORD_ADDRESS_DESCRIPTOR, *PPNP_DWORD_ADDRESS_DESCRIPTOR;
|
|
|
|
typedef struct _PNP_QWORD_ADDRESS_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10001010B, Large item name= 10
|
|
USHORT Length; // Length of the descriptor = 23 (min)
|
|
UCHAR RFlag; // Resource Flags
|
|
UCHAR GFlag; // General Flags
|
|
UCHAR TFlag; // Type specific flags
|
|
ULONGLONG Granularity; // Memory Decode Bits
|
|
ULONGLONG MinimumAddress; // Minium Address in range
|
|
ULONGLONG MaximumAddress; // Maximum Address in range
|
|
ULONGLONG TranslationAddress; // How to translate the address
|
|
ULONGLONG AddressLength; // Number of bytes requested
|
|
} PNP_QWORD_ADDRESS_DESCRIPTOR, *PPNP_QWORD_ADDRESS_DESCRIPTOR;
|
|
|
|
typedef struct _PNP_WORD_ADDRESS_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10001000B, Large item name= 8
|
|
USHORT Length; // Length of the descriptor = 13 (min)
|
|
UCHAR RFlag; // Resource Flags
|
|
UCHAR GFlag; // General Flags
|
|
UCHAR TFlag; // Type specific flags
|
|
USHORT Granularity; // Memory Decode Bits
|
|
USHORT MinimumAddress; // Minium Address in range
|
|
USHORT MaximumAddress; // Maximum Address in range
|
|
USHORT TranslationAddress; // How to translate the address
|
|
USHORT AddressLength; // Number of Bytes requested
|
|
} PNP_WORD_ADDRESS_DESCRIPTOR, *PPNP_WORD_ADDRESS_DESCRIPTOR;
|
|
|
|
//
|
|
// These are the valid minimum lengths. We bugcheck if the descriptors
|
|
// are less then these
|
|
//
|
|
#define PNP_ADDRESS_WORD_MINIMUM_LENGTH 0x0D
|
|
#define PNP_ADDRESS_DWORD_MINIMUM_LENGTH 0x17
|
|
#define PNP_ADDRESS_QWORD_MINIMUM_LENGTH 0x2B
|
|
|
|
//
|
|
// These are the possible values for RFlag Means
|
|
//
|
|
#define PNP_ADDRESS_MEMORY_TYPE 0x0
|
|
#define PNP_ADDRESS_IO_TYPE 0x1
|
|
#define PNP_ADDRESS_BUS_NUMBER_TYPE 0x2
|
|
|
|
//
|
|
// The Global flags
|
|
//
|
|
#define PNP_ADDRESS_FLAG_CONSUMED_ONLY 0x1
|
|
#define PNP_ADDRESS_FLAG_SUBTRACTIVE_DECODE 0x2
|
|
#define PNP_ADDRESS_FLAG_MINIMUM_FIXED 0x4
|
|
#define PNP_ADDRESS_FLAG_MAXIMUM_FIXED 0x8
|
|
|
|
//
|
|
// This mask is used when the RFLags indicates that this is
|
|
// memory address descriptor. The mask is used with the TFlags
|
|
// and the result is compared to the next 4 defines to determine
|
|
// the memory type
|
|
//
|
|
#define PNP_ADDRESS_TYPE_MEMORY_MASK 0x1E
|
|
#define PNP_ADDRESS_TYPE_MEMORY_NONCACHEABLE 0x00
|
|
#define PNP_ADDRESS_TYPE_MEMORY_CACHEABLE 0x02
|
|
#define PNP_ADDRESS_TYPE_MEMORY_WRITE_COMBINE 0x04
|
|
#define PNP_ADDRESS_TYPE_MEMORY_PREFETCHABLE 0x06
|
|
|
|
//
|
|
// If this bit is set, then this memory is read-write
|
|
//
|
|
#define PNP_ADDRESS_TYPE_MEMORY_READ_WRITE 0x01
|
|
#define PNP_ADDRESS_TYPE_MEMORY_READ_ONLY 0x00
|
|
|
|
//
|
|
// These are used when the RFlags indicates that this is an IO descriptor
|
|
//
|
|
#define PNP_ADDRESS_TYPE_IO_NON_ISA_RANGE 0x01
|
|
#define PNP_ADDRESS_TYPE_IO_ISA_RANGE 0x02
|
|
#define PNP_ADDRESS_TYPE_IO_SPARSE_TRANSLATION 0x20
|
|
#define PNP_ADDRESS_TYPE_IO_TRANSLATE_IO_TO_MEM 0x10
|
|
|
|
//
|
|
// PNP ISA Extended IRQ descriptor definition [fixed block]
|
|
//
|
|
typedef struct _PNP_EXTENDED_IRQ_DESCRIPTOR_ {
|
|
UCHAR Tag; // 10001001B, Large item name = 9
|
|
USHORT Length; // Length of the descriptor = 12 (min)
|
|
UCHAR Flags; // Vector Flags
|
|
UCHAR TableSize; // How many items in the table
|
|
ULONG Table[1]; // Table of interrupts
|
|
} PNP_EXTENDED_IRQ_DESCRIPTOR, *PPNP_EXTENDED_IRQ_DESCRIPTOR;
|
|
|
|
#define PNP_EXTENDED_IRQ_RESOURCE_CONSUMER_ONLY 0x01
|
|
#define PNP_EXTENDED_IRQ_MODE 0x02
|
|
#define PNP_EXTENDED_IRQ_POLARITY 0x04
|
|
#define PNP_EXTENDED_IRQ_SHARED 0x08
|
|
|
|
#define PNP_VENDOR_SPECIFIC_MASK 0x07
|
|
|
|
//
|
|
// These are the flags that can be passed into the Bios to Io engine
|
|
//
|
|
#define PNP_BIOS_TO_IO_NO_CONSUMED_RESOURCES 0x01
|
|
|
|
#include "poppack.h"
|
|
|
|
VOID
|
|
PnpiBiosAddressHandleBusFlags(
|
|
IN PVOID Buffer,
|
|
IN PIO_RESOURCE_DESCRIPTOR Descriptor
|
|
);
|
|
|
|
VOID
|
|
PnpiBiosAddressHandleGlobalFlags(
|
|
IN PVOID Buffer,
|
|
IN PIO_RESOURCE_DESCRIPTOR Descriptor
|
|
);
|
|
|
|
VOID
|
|
PnpiBiosAddressHandleMemoryFlags(
|
|
IN PVOID Buffer,
|
|
IN PIO_RESOURCE_DESCRIPTOR Descriptor
|
|
);
|
|
|
|
VOID
|
|
PnpiBiosAddressHandlePortFlags(
|
|
IN PVOID Buffer,
|
|
IN PIO_RESOURCE_DESCRIPTOR Descriptor
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosAddressToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosAddressDoubleToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosAddressQuadToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosDmaToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN UCHAR Channel,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN USHORT Count,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosExtendedIrqToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN UCHAR DataIndex,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosIrqToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN USHORT Interrupt,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN USHORT Count,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosMemoryToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiBiosPortToIoDescriptor (
|
|
IN PUCHAR Data,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
|
|
NTSTATUS
|
|
PnpiBiosPortFixedToIoDescriptor(
|
|
IN PUCHAR Data,
|
|
IN PIO_RESOURCE_LIST Array[],
|
|
IN ULONG ArrayIndex,
|
|
IN ULONG Flags
|
|
);
|
|
|
|
VOID
|
|
PnpiClearAllocatedMemory(
|
|
IN PIO_RESOURCE_LIST ResourceArray[],
|
|
IN ULONG ResourceArraySize
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiGrowResourceDescriptor(
|
|
IN OUT PIO_RESOURCE_LIST *ResourceList
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiGrowResourceList(
|
|
IN OUT PIO_RESOURCE_LIST *ResourceListArray[],
|
|
IN OUT ULONG *ResourceListArraySize
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpiUpdateResourceList(
|
|
IN OUT PIO_RESOURCE_LIST *ResourceList,
|
|
OUT PIO_RESOURCE_DESCRIPTOR *ResourceDesc
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpBiosResourcesToNtResources (
|
|
IN PUCHAR BiosData,
|
|
IN ULONG Flags,
|
|
OUT PIO_RESOURCE_REQUIREMENTS_LIST *List
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpCmResourceListToIoResourceList(
|
|
IN PCM_RESOURCE_LIST CmList,
|
|
IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *IoList
|
|
);
|
|
|
|
NTSTATUS
|
|
PnpIoResourceListToCmResourceList(
|
|
IN PIO_RESOURCE_REQUIREMENTS_LIST IoList,
|
|
IN OUT PCM_RESOURCE_LIST *CmList
|
|
);
|
|
|
|
#endif
|
|
|