#ifndef _PNP_
#define _PNP_
#ifndef __ASSEMBLY__
#define MAX_MEM_REGISTERS 9
#define MAX_IO_PORTS 20
#define MAX_IRQS 7
#define PNPinterrupt0 "PNP0000"
#define PNPinterrupt1 "PNP0001"
#define PNPinterrupt2 "PNP0002"
#define PNPinterrupt3 "PNP0003"
#define PNPExtInt "IBM000D"
#define PNPtimer0 "PNP0100"
#define PNPtimer1 "PNP0101"
#define PNPtimer2 "PNP0102"
#define PNPdma0 "PNP0200"
#define PNPdma1 "PNP0201"
#define PNPdma2 "PNP0202"
#define PNPCMOS "IBM0009"
#define PNPL2 "IBM0007"
#define PNPNVRAM "IBM0008"
#define PNPPM "IBM0005"
#define PNPkeyboard0 "PNP0300"
#define PNPkeyboard1 "PNP0301"
#define PNPkeyboard2 "PNP0302"
#define PNPkeyboard3 "PNP0303"
#define PNPkeyboard4 "PNP0304"
#define PNPkeyboard5 "PNP0305"
#define PNPkeyboard6 "PNP0306"
#define PNPkeyboard7 "PNP0307"
#define PNPparallel0 "PNP0400"
#define PNPparallel1 "PNP0401"
#define PNPepp "IBM001C"
#define PNPserial0 "PNP0500"
#define PNPSerial1 "PNP0501"
#define PNPdisk0 "PNP0600"
#define PNPdisk1 "PNP0601"
#define PNPdisk2 "PNP0602"
#define PNPdiskette0 "PNP0700"
#define PNPdisplay0 "PNP0900"
#define PNPdisplay1 "PNP0901"
#define PNPdisplay2 "PNP0902"
#define PNPdisplay3 "PNP0903"
#define PNPdisplay4 "PNP0904"
#define PNPdisplay5 "PNP0905"
#define PNPdisplay6 "PNP0906"
#define PNPdisplay7 "PNP0907"
#define PNPdisplay8 "PNP0908"
#define PNPdisplay9 "PNP0909"
#define PNPdisplayA "PNP090A"
#define PNPdisplayB "PNP090B"
#define PNPdisplayC "PNP090C"
#define PNPdisplayD "PNP090D"
#define PNPdisplayE "PNP090E"
#define PNPdisplayF "PNP090F"
#define PNPbuses0 "PNP0A00"
#define PNPbuses1 "PNP0A01"
#define PNPbuses2 "PNP0A02"
#define PNPbuses3 "PNP0A03"
#define PNPbuses4 "PNP0A04"
#define PNPspeaker0 "PNP0800"
#define PNPrtc0 "PNP0B00"
#define PNPpnpbios0 "PNP0C00"
#define PNPpnpbios1 "PNP0C01"
#define PNPpnpbios2 "PNP0C02"
#define PNPpnpbios3 "PNP0C03"
#define PNPpcmcia0 "PNP0E00"
#define PNPmouse0 "PNP0F00"
#define PNPmouse1 "PNP0F01"
#define PNPmouse2 "PNP0F02"
#define PNPmouse3 "PNP0F03"
#define PNPmouse4 "PNP0F04"
#define PNPmouse5 "PNP0F05"
#define PNPmouse6 "PNP0F06"
#define PNPmouse7 "PNP0F07"
#define PNPmouse8 "PNP0F08"
#define PNPmouse9 "PNP0F09"
#define PNPmouseA "PNP0F0A"
#define PNPmouseB "PNP0F0B"
#define PNPmodem0 "PNP9000"
#define PNPnetworkC9 "PNP80C9"
#define PNPnetworkCA "PNP80CA"
#define PNPnetworkCB "PNP80CB"
#define PNPnetworkCC "PNP80CC"
#define PNPnetwork27 "PNP8327"
#define PNPnetworket "IBM0010"
#define PNPneteisaet "IBM2001"
#define PNPAMD79C970 "IBM0016"
#define PNPscsi0 "PNPA000"
#define PNPscsi1 "PNPA001"
#define PNPscsi2 "PNPA002"
#define PNPscsi3 "PNPA003"
#define PNPscsiF "IBM000F"
#define PNPscsi825 "IBM001B"
#define PNPscsi875 "IBM0018"
#define PNPmm0 "PNPB000"
#define PNPmm1 "PNPB001"
#define PNPmmF "IBM000E"
#define PNPv7310 "IBM0015"
#define PNPmm4232 "IBM0017"
#define PNPpmsyn "IBM001D"
#define PNPgp4232 "IBM0012"
#define PNPmidi4232 "IBM0013"
#define PNPopctl "IBM000B"
#define PNPsp "IBM0011"
#define PNPLTsp "IBM001E"
#define PNPLTmsp "IBM001F"
#define PNPmemctl "IBM000A"
#define PNPg_assist "IBM0014"
#define PNPtablet "IBM0019"
#define S1_Packet 0x0A
#define S2_Packet 0x15
#define S2_Packet_flags 0x16
#define S3_Packet 0x1C
#define S4_Packet 0x22
#define S4_Packet_flags 0x23
#define S5_Packet 0x2A
#define S6_Packet 0x30
#define S6_Packet_priority 0x31
#define S7_Packet 0x38
#define S8_Packet 0x47
#define S9_Packet_fixed 0x4B
#define S14_Packet 0x71
#define S15_Packet 0x78
#define S15_Packet_checksum 0x79
#define L1_Packet 0x81
#define L1_Shadow 0x20
#define L1_32bit_mem 0x18
#define L1_8_16bit_mem 0x10
#define L1_Decode_Hi 0x04
#define L1_Cache 0x02
#define L1_Writable 0x01
#define L2_Packet 0x82
#define L3_Packet 0x83
#define L4_Packet 0x84
#define L5_Packet 0x85
#define L6_Packet 0x86
#define END_TAG 0x78
#define DF_START_TAG 0x30
#define DF_START_TAG_priority 0x31
#define DF_END_TAG 0x38
#define SUBOPTIMAL_CONFIGURATION 0x2
typedef enum _PnP_BASE_TYPE {
Reserved = 0,
MassStorageDevice = 1,
NetworkInterfaceController = 2,
DisplayController = 3,
MultimediaController = 4,
MemoryController = 5,
BridgeController = 6,
CommunicationsDevice = 7,
SystemPeripheral = 8,
InputDevice = 9,
ServiceProcessor = 0x0A,
} PnP_BASE_TYPE;
typedef enum _PnP_SUB_TYPE {
SCSIController = 0,
IDEController = 1,
FloppyController = 2,
IPIController = 3,
OtherMassStorageController = 0x80,
EthernetController = 0,
TokenRingController = 1,
FDDIController = 2,
OtherNetworkController = 0x80,
VGAController= 0,
SVGAController= 1,
XGAController= 2,
OtherDisplayController = 0x80,
VideoController = 0,
AudioController = 1,
OtherMultimediaController = 0x80,
RAM = 0,
FLASH = 1,
OtherMemoryDevice = 0x80,
HostProcessorBridge = 0,
ISABridge = 1,
EISABridge = 2,
MicroChannelBridge = 3,
PCIBridge = 4,
PCMCIABridge = 5,
VMEBridge = 6,
OtherBridgeDevice = 0x80,
RS232Device = 0,
ATCompatibleParallelPort = 1,
OtherCommunicationsDevice = 0x80,
ProgrammableInterruptController = 0,
DMAController = 1,
SystemTimer = 2,
RealTimeClock = 3,
L2Cache = 4,
NVRAM = 5,
PowerManagement = 6,
CMOS = 7,
OperatorPanel = 8,
ServiceProcessorClass1 = 9,
ServiceProcessorClass2 = 0xA,
ServiceProcessorClass3 = 0xB,
GraphicAssist = 0xC,
SystemPlanar = 0xF,
OtherSystemPeripheral = 0x80,
KeyboardController = 0,
Digitizer = 1,
MouseController = 2,
TabletController = 3,
OtherInputController = 0x80,
GeneralMemoryController = 0,
} PnP_SUB_TYPE;
typedef enum _PnP_INTERFACE {
General = 0,
GeneralSCSI = 0,
GeneralIDE = 0,
ATACompatible = 1,
GeneralFloppy = 0,
Compatible765 = 1,
NS398_Floppy = 2,
NS26E_Floppy = 3,
NS15C_Floppy = 4,
NS2E_Floppy = 5,
CHRP_Floppy = 6,
GeneralIPI = 0,
GeneralEther = 0,
GeneralToken = 0,
GeneralFDDI = 0,
GeneralVGA = 0,
GeneralSVGA = 0,
GeneralXGA = 0,
GeneralVideo = 0,
GeneralAudio = 0,
CS4232Audio = 1,
GeneralRAM = 0,
GeneralFLASH = 0,
PCIMemoryController = 0,
RS6KMemoryController = 1,
GeneralHostBridge = 0,
GeneralISABridge = 0,
GeneralEISABridge = 0,
GeneralMCABridge = 0,
GeneralPCIBridge = 0,
PCIBridgeDirect = 0,
PCIBridgeIndirect = 1,
PCIBridgeRS6K = 2,
GeneralPCMCIABridge = 0,
GeneralVMEBridge = 0,
GeneralRS232 = 0,
COMx = 1,
Compatible16450 = 2,
Compatible16550 = 3,
NS398SerPort = 4,
NS26ESerPort = 5,
NS15CSerPort = 6,
NS2ESerPort = 7,
GeneralParPort = 0,
LPTx = 1,
NS398ParPort = 2,
NS26EParPort = 3,
NS15CParPort = 4,
NS2EParPort = 5,
GeneralPIC = 0,
ISA_PIC = 1,
EISA_PIC = 2,
MPIC = 3,
RS6K_PIC = 4,
GeneralDMA = 0,
ISA_DMA = 1,
EISA_DMA = 2,
GeneralTimer = 0,
ISA_Timer = 1,
EISA_Timer = 2,
GeneralRTC = 0,
ISA_RTC = 1,
StoreThruOnly = 1,
StoreInEnabled = 2,
RS6KL2Cache = 3,
IndirectNVRAM = 0,
DirectNVRAM = 1,
IndirectNVRAM24 = 2,
GeneralPowerManagement = 0,
EPOWPowerManagement = 1,
PowerControl = 2,
GeneralCMOS = 0,
GeneralOPPanel = 0,
HarddiskLight = 1,
CDROMLight = 2,
PowerLight = 3,
KeyLock = 4,
ANDisplay = 5,
SystemStatusLED = 6,
CHRP_SystemStatusLED = 7,
GeneralServiceProcessor = 0,
TransferData = 1,
IGMC32 = 2,
IGMC64 = 3,
GeneralSystemPlanar = 0,
} PnP_INTERFACE;
typedef struct _SERIAL_ID {
unsigned char VendorID0;
unsigned char VendorID1;
unsigned char VendorID2;
unsigned char VendorID3;
unsigned char Serial0;
unsigned char Serial1;
unsigned char Serial2;
unsigned char Serial3;
unsigned char Checksum;
} SERIAL_ID;
typedef enum _PnPItemName {
Unused = 0,
PnPVersion = 1,
LogicalDevice = 2,
CompatibleDevice = 3,
IRQFormat = 4,
DMAFormat = 5,
StartDepFunc = 6,
EndDepFunc = 7,
IOPort = 8,
FixedIOPort = 9,
Res1 = 10,
Res2 = 11,
Res3 = 12,
SmallVendorItem = 14,
EndTag = 15,
MemoryRange = 1,
ANSIIdentifier = 2,
UnicodeIdentifier = 3,
LargeVendorItem = 4,
MemoryRange32 = 5,
MemoryRangeFixed32 = 6,
} PnPItemName;
#define tag_type(t) (((t) & 0x80)>>7)
#define set_tag_type(t,v) (t = (t & 0x7f) | ((v)<<7))
#define tag_small_item_name(t) (((t) & 0x78)>>3)
#define set_tag_small_item_name(t,v) (t = (t & 0x07) | ((v)<<3))
#define tag_small_count(t) ((t) & 0x07)
#define set_tag_count(t,v) (t = (t & 0x78) | (v))
#define tag_large_item_name(t) ((t) & 0x7f)
#define set_tag_large_item_name(t,v) (t = (t | 0x80) | (v))
typedef union _PnP_TAG_PACKET {
struct _S1_Pack{
unsigned char Tag;
unsigned char Version[2];
} S1_Pack;
struct _S2_Pack{
unsigned char Tag;
unsigned char DevId[4];
unsigned char Flags[2];
} S2_Pack;
struct _S3_Pack{
unsigned char Tag;
unsigned char CompatId[4];
} S3_Pack;
struct _S4_Pack{
unsigned char Tag;
unsigned char IRQMask[2];
unsigned char IRQInfo;
} S4_Pack;
struct _S5_Pack{
unsigned char Tag;
unsigned char DMAMask;
unsigned char DMAInfo;
} S5_Pack;
struct _S6_Pack{
unsigned char Tag;
unsigned char Priority;
} S6_Pack;
struct _S7_Pack{
unsigned char Tag;
} S7_Pack;
struct _S8_Pack{
unsigned char Tag;
unsigned char IOInfo;
#define ISAAddr16bit 0x01
unsigned char RangeMin[2];
unsigned char RangeMax[2];
unsigned char IOAlign;
unsigned char IONum;
} S8_Pack;
struct _S9_Pack{
unsigned char Tag;
unsigned char Range[2];
unsigned char IONum;
} S9_Pack;
struct _S14_Pack{
unsigned char Tag;
union _S14_Data{
unsigned char Data[7];
struct _S14_PPCPack{
unsigned char Type;
unsigned char PPCData[6];
} S14_PPCPack;
} S14_Data;
} S14_Pack;
struct _S15_Pack{
unsigned char Tag;
unsigned char Check;
} S15_Pack;
struct _L1_Pack{
unsigned char Tag;
unsigned char Count0;
unsigned char Count1;
unsigned char Data[9];
} L1_Pack;
struct _L2_Pack{
unsigned char Tag;
unsigned char Count0;
unsigned char Count1;
unsigned char Identifier[1];
} L2_Pack;
struct _L3_Pack{
unsigned char Tag;
unsigned char Count0;
unsigned char Count1;
unsigned char Country0;
unsigned char Country1;
unsigned char Identifier[1];
} L3_Pack;
struct _L4_Pack{
unsigned char Tag;
unsigned char Count0;
unsigned char Count1;
union _L4_Data{
unsigned char Data[1];
struct _L4_PPCPack{
unsigned char Type;
unsigned char PPCData[1];
} L4_PPCPack;
} L4_Data;
} L4_Pack;
struct _L5_Pack{
unsigned char Tag;
unsigned char Count0;
unsigned char Count1;
unsigned char Data[17];
} L5_Pack;
struct _L6_Pack{
unsigned char Tag;
unsigned char Count0;
unsigned char Count1;
unsigned char Data[9];
} L6_Pack;
} PnP_TAG_PACKET;
#endif
#endif