Leaked source code of windows server 2003
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

/*++ 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