Windows2000/private/ntos/inc/pbios.h
2020-09-30 17:12:32 +02:00

189 lines
6.8 KiB
C

/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1991 Microsoft Corporation
Module Name:
pbiosp.h
Abstract:
PnP BIOS/ISA configuration data definitions
Author:
Shie-Lin Tzong (shielint) April 12, 1995
*/
//#include "nthal.h"
//#include "hal.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 Resouce Tags with length bits stripped off
#define TAG_VERSION 0x08
#define TAG_LOGICAL_ID 0x10
#define TAG_COMPATIBLE_ID 0x18
#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 Resouce Tags
#define TAG_MEMORY 0x81
#define TAG_ANSI_ID 0x82
#define TAG_UNICODE_ID 0x83
#define TAG_LVENDOR 0x84
#define TAG_MEMORY32 0x85
#define TAG_MEMORY32_FIXED 0x86
// Complete TAG if applicable.
#define TAG_COMPLETE_COMPATIBLE_ID 0x1C
#define TAG_COMPLETE_END 0x79
#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;
// 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;
// Masks for PNP_IRQ_DESCRIPTOR Information byte
#define PNP_IRQ_LEVEL_MASK 0xC
#define PNP_IRQ_EDGE_MASK 0x3
// 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;
// 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_ROM_MASK 0x40
#define PNP_MEMORY_SHADOWABLE_MASK 0x20
#define PNP_MEMORY_CONTROL_MASK 0x18
#define PNP_MEMORY_CONTROL_8BIT 00
#define PNP_MEMORY_CONTROL_16BIT 01
#define PNP_MEMORY_CONTROL_8AND16BIT 02
#define PNP_MEMORY_CONTROL_32BIT 03
#define PNP_MEMORY_SUPPORT_TYPE_MASK 04
#define PNP_MEMORY_CACHE_SUPPORT_MASK 02
#define PNP_MEMORY_WRITE_STATUS_MASK 01
#define UNKNOWN_DOCKING_IDENTIFIER 0xffffffff
#define UNABLE_TO_DETERMINE_DOCK_CAPABILITIES 0x89
#define FUNCTION_NOT_SUPPORTED 0x82
#define SYSTEM_NOT_DOCKED 0x87
// Pnp BIOS device node structure
typedef struct _PNP_BIOS_DEVICE_NODE {
USHORT Size;
UCHAR Node;
ULONG ProductId;
UCHAR DeviceType[3];
USHORT DeviceAttributes;
// followed by AllocatedResourceBlock, PossibleResourceBlock
// and CompatibleDeviceId
} PNP_BIOS_DEVICE_NODE, *PPNP_BIOS_DEVICE_NODE;
// DeviceType definition
#define BASE_TYPE_DOCKING_STATION 0xA
// Device attributes definitions
#define DEVICE_DISABLEABLE 0x0001
#define DEVICE_CONFIGURABLE 0x0002
#define DEVICE_DOCKING 0x0020
#define DEVICE_REMOVABLE 0x0040
#define DEVICE_CONFIGURABILITY(x) ((x)&0x180)
#define DEVICE_CONFIG_STATIC_ONLY 0x0000
#define DEVICE_CONFIG_STATIC_DYNAMIC 0x0080
#define DEVICE_CONFIG_DYNAMIC_ONLY 0x0100
// Pnp BIOS Installation check
typedef struct _PNP_BIOS_INSTALLATION_CHECK {
UCHAR Signature[4]; // $PnP (ascii)
UCHAR Revision;
UCHAR Length;
USHORT ControlField;
UCHAR Checksum;
ULONG EventFlagAddress; // Physical address
USHORT RealModeEntryOffset;
USHORT RealModeEntrySegment;
USHORT ProtectedModeEntryOffset;
ULONG ProtectedModeCodeBaseAddress;
ULONG OemDeviceId;
USHORT RealModeDataBaseAddress;
ULONG ProtectedModeDataBaseAddress;
} PNP_BIOS_INSTALLATION_CHECK, *PPNP_BIOS_INSTALLATION_CHECK;
#include "poppack.h"
// Pnp BIOS ControlField masks
#define PNP_BIOS_CONTROL_MASK 0x3
#define PNP_BIOS_EVENT_NOT_SUPPORTED 0
#define PNP_BIOS_EVENT_POLLING 1
#define PNP_BIOS_EVENT_ASYNC 2
// Pnp Bios event
#define ABOUT_TO_CHANGE_CONFIG 1
#define DOCK_CHANGED 2
#define SYSTEM_DEVICE_CHANGED 3
#define CONFIG_CHANGE_FAILED 4