00001 /*++ BUILD Version: 0001 // Increment this if a change has global effects 00002 00003 Copyright (c) 1991 Microsoft Corporation 00004 00005 Module Name: 00006 00007 pbiosp.h 00008 00009 Abstract: 00010 00011 PnP BIOS/ISA configuration data definitions 00012 00013 Author: 00014 00015 Shie-Lin Tzong (shielint) April 12, 1995 00016 00017 Revision History: 00018 00019 --*/ 00020 00021 //#include "nthal.h" 00022 //#include "hal.h" 00023 00024 // 00025 // Constants 00026 // 00027 00028 #define SMALL_RESOURCE_TAG (UCHAR)(0x00) 00029 #define LARGE_RESOURCE_TAG (UCHAR)(0x80) 00030 #define SMALL_TAG_MASK 0xf8 00031 #define SMALL_TAG_SIZE_MASK 7 00032 00033 // 00034 // Small Resouce Tags with length bits stripped off 00035 // 00036 00037 #define TAG_VERSION 0x08 00038 #define TAG_LOGICAL_ID 0x10 00039 #define TAG_COMPATIBLE_ID 0x18 00040 #define TAG_IRQ 0x20 00041 #define TAG_DMA 0x28 00042 #define TAG_START_DEPEND 0x30 00043 #define TAG_END_DEPEND 0x38 00044 #define TAG_IO 0x40 00045 #define TAG_IO_FIXED 0x48 00046 #define TAG_VENDOR 0x70 00047 #define TAG_END 0x78 00048 00049 // 00050 // Large Resouce Tags 00051 // 00052 00053 #define TAG_MEMORY 0x81 00054 #define TAG_ANSI_ID 0x82 00055 #define TAG_UNICODE_ID 0x83 00056 #define TAG_LVENDOR 0x84 00057 #define TAG_MEMORY32 0x85 00058 #define TAG_MEMORY32_FIXED 0x86 00059 00060 // 00061 // Complete TAG if applicable. 00062 // 00063 00064 #define TAG_COMPLETE_COMPATIBLE_ID 0x1C 00065 #define TAG_COMPLETE_END 0x79 00066 00067 #include "pshpack1.h" 00068 00069 // 00070 // PNP ISA Port descriptor definition 00071 // 00072 00073 typedef struct _PNP_PORT_DESCRIPTOR_ { 00074 UCHAR Tag; // 01000111B, small item name = 08, length = 7 00075 UCHAR Information; // bit [0] = 1 device decodes full 16 bit addr 00076 // = 0 device decodes ISA addr bits[9-0] 00077 USHORT MinimumAddress; 00078 USHORT MaximumAddress; 00079 UCHAR Alignment; // Increment in 1 byte blocks 00080 UCHAR Length; // # contiguous Port requested 00081 } PNP_PORT_DESCRIPTOR, *PPNP_PORT_DESCRIPTOR; 00082 00083 // 00084 // PNP ISA fixed Port descriptor definition 00085 // 00086 00087 typedef struct _PNP_FIXED_PORT_DESCRIPTOR_ { 00088 UCHAR Tag; // 01001011B, small item name = 09, length = 3 00089 USHORT MinimumAddress; 00090 UCHAR Length; // # contiguous Port requested 00091 } PNP_FIXED_PORT_DESCRIPTOR, *PPNP_FIXED_PORT_DESCRIPTOR; 00092 00093 // 00094 // PNP ISA IRQ descriptor definition 00095 // 00096 00097 typedef struct _PNP_IRQ_DESCRIPTOR_ { 00098 UCHAR Tag; // 0010001XB small item name = 4 length = 2/3 00099 USHORT IrqMask; // bit 0 is irq 0 00100 UCHAR Information; // Optional 00101 } PNP_IRQ_DESCRIPTOR, *PPNP_IRQ_DESCRIPTOR; 00102 00103 // 00104 // Masks for PNP_IRQ_DESCRIPTOR Information byte 00105 // 00106 00107 #define PNP_IRQ_LEVEL_MASK 0xC 00108 #define PNP_IRQ_EDGE_MASK 0x3 00109 00110 // 00111 // PNP ISA DMA descriptor definition 00112 // 00113 00114 typedef struct _PNP_DMA_DESCRIPTOR_ { 00115 UCHAR Tag; // 00101010B, small item name = 05, length = 2 00116 UCHAR ChannelMask; // bit 0 is channel 0 00117 UCHAR Flags; // see spec 00118 } PNP_DMA_DESCRIPTOR, *PPNP_DMA_DESCRIPTOR; 00119 00120 // 00121 // PNP ISA MEMORY descriptor 00122 // 00123 00124 typedef struct _PNP_MEMORY_DESCRIPTOR_ { 00125 UCHAR Tag; // 10000001B, Large item name = 1 00126 USHORT Length; // Length of the descriptor = 9 00127 UCHAR Information; // See def below 00128 USHORT MinimumAddress; // address bit [8-23] 00129 USHORT MaximumAddress; // address bit [8-23] 00130 USHORT Alignment; // 0x0000 = 64KB 00131 USHORT MemorySize; // In 256 byte blocks 00132 } PNP_MEMORY_DESCRIPTOR, *PPNP_MEMORY_DESCRIPTOR; 00133 00134 // 00135 // PNP ISA MEMORY32 descriptor 00136 // 00137 00138 typedef struct _PNP_MEMORY32_DESCRIPTOR_ { 00139 UCHAR Tag; // 10000101B, Large item name = 5 00140 USHORT Length; // Length of the descriptor = 17 00141 UCHAR Information; // See def below 00142 ULONG MinimumAddress; // 32 bit addr 00143 ULONG MaximumAddress; // 32 bit addr 00144 ULONG Alignment; // 32 bit alignment 00145 ULONG MemorySize; // 32 bit length 00146 } PNP_MEMORY32_DESCRIPTOR, *PPNP_MEMORY32_DESCRIPTOR; 00147 00148 // 00149 // PNP ISA FIXED MEMORY32 descriptor 00150 // 00151 00152 typedef struct _PNP_FIXED_MEMORY32_DESCRIPTOR_ { 00153 UCHAR Tag; // 10000110B, Large item name = 6 00154 USHORT Length; // Length of the descriptor = 9 00155 UCHAR Information; // See def below 00156 ULONG BaseAddress; // 32 bit addr 00157 ULONG MemorySize; // 32 bit length 00158 } PNP_FIXED_MEMORY32_DESCRIPTOR, *PPNP_FIXED_MEMORY32_DESCRIPTOR; 00159 00160 #define PNP_MEMORY_ROM_MASK 0x40 00161 #define PNP_MEMORY_SHADOWABLE_MASK 0x20 00162 #define PNP_MEMORY_CONTROL_MASK 0x18 00163 #define PNP_MEMORY_CONTROL_8BIT 00 00164 #define PNP_MEMORY_CONTROL_16BIT 01 00165 #define PNP_MEMORY_CONTROL_8AND16BIT 02 00166 #define PNP_MEMORY_CONTROL_32BIT 03 00167 #define PNP_MEMORY_SUPPORT_TYPE_MASK 04 00168 #define PNP_MEMORY_CACHE_SUPPORT_MASK 02 00169 #define PNP_MEMORY_WRITE_STATUS_MASK 01 00170 00171 #define UNKNOWN_DOCKING_IDENTIFIER 0xffffffff 00172 #define UNABLE_TO_DETERMINE_DOCK_CAPABILITIES 0x89 00173 #define FUNCTION_NOT_SUPPORTED 0x82 00174 #define SYSTEM_NOT_DOCKED 0x87 00175 00176 // 00177 // Pnp BIOS device node structure 00178 // 00179 00180 typedef struct _PNP_BIOS_DEVICE_NODE { 00181 USHORT Size; 00182 UCHAR Node; 00183 ULONG ProductId; 00184 UCHAR DeviceType[3]; 00185 USHORT DeviceAttributes; 00186 // followed by AllocatedResourceBlock, PossibleResourceBlock 00187 // and CompatibleDeviceId 00188 } PNP_BIOS_DEVICE_NODE, *PPNP_BIOS_DEVICE_NODE; 00189 00190 // 00191 // DeviceType definition 00192 // 00193 00194 #define BASE_TYPE_DOCKING_STATION 0xA 00195 00196 // 00197 // Device attributes definitions 00198 // 00199 00200 #define DEVICE_DISABLEABLE 0x0001 00201 #define DEVICE_CONFIGURABLE 0x0002 00202 #define DEVICE_DOCKING 0x0020 00203 #define DEVICE_REMOVABLE 0x0040 00204 00205 #define DEVICE_CONFIGURABILITY(x) ((x)&0x180) 00206 #define DEVICE_CONFIG_STATIC_ONLY 0x0000 00207 #define DEVICE_CONFIG_STATIC_DYNAMIC 0x0080 00208 #define DEVICE_CONFIG_DYNAMIC_ONLY 0x0100 00209 00210 // 00211 // Pnp BIOS Installation check 00212 // 00213 00214 typedef struct _PNP_BIOS_INSTALLATION_CHECK { 00215 UCHAR Signature[4]; // $PnP (ascii) 00216 UCHAR Revision; 00217 UCHAR Length; 00218 USHORT ControlField; 00219 UCHAR Checksum; 00220 ULONG EventFlagAddress; // Physical address 00221 USHORT RealModeEntryOffset; 00222 USHORT RealModeEntrySegment; 00223 USHORT ProtectedModeEntryOffset; 00224 ULONG ProtectedModeCodeBaseAddress; 00225 ULONG OemDeviceId; 00226 USHORT RealModeDataBaseAddress; 00227 ULONG ProtectedModeDataBaseAddress; 00228 } PNP_BIOS_INSTALLATION_CHECK, *PPNP_BIOS_INSTALLATION_CHECK; 00229 00230 #include "poppack.h" 00231 00232 // 00233 // Pnp BIOS ControlField masks 00234 // 00235 00236 #define PNP_BIOS_CONTROL_MASK 0x3 00237 #define PNP_BIOS_EVENT_NOT_SUPPORTED 0 00238 #define PNP_BIOS_EVENT_POLLING 1 00239 #define PNP_BIOS_EVENT_ASYNC 2 00240 00241 // 00242 // Pnp Bios event 00243 // 00244 00245 #define ABOUT_TO_CHANGE_CONFIG 1 00246 #define DOCK_CHANGED 2 00247 #define SYSTEM_DEVICE_CHANGED 3 00248 #define CONFIG_CHANGE_FAILED 4