pnp.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. /* 11/02/95 */
  2. /*----------------------------------------------------------------------------*/
  3. /* Plug and Play header definitions */
  4. /*----------------------------------------------------------------------------*/
  5. /* Structure map for PnP on PowerPC Reference Platform */
  6. /* See Plug and Play ISA Specification, Version 1.0, May 28, 1993. It */
  7. /* (or later versions) is available on Compuserve in the PLUGPLAY area. */
  8. /* This code has extensions to that specification, namely new short and */
  9. /* long tag types for platform dependent information */
  10. /* Warning: LE notation used throughout this file */
  11. /* For enum's: if given in hex then they are bit significant, i.e. */
  12. /* only one bit is on for each enum */
  13. #ifndef _PNP_
  14. #define _PNP_
  15. #ifndef __ASSEMBLY__
  16. #define MAX_MEM_REGISTERS 9
  17. #define MAX_IO_PORTS 20
  18. #define MAX_IRQS 7
  19. /*#define MAX_DMA_CHANNELS 7*/
  20. /* Interrupt controllers */
  21. #define PNPinterrupt0 "PNP0000" /* AT Interrupt Controller */
  22. #define PNPinterrupt1 "PNP0001" /* EISA Interrupt Controller */
  23. #define PNPinterrupt2 "PNP0002" /* MCA Interrupt Controller */
  24. #define PNPinterrupt3 "PNP0003" /* APIC */
  25. #define PNPExtInt "IBM000D" /* PowerPC Extended Interrupt Controller */
  26. /* Timers */
  27. #define PNPtimer0 "PNP0100" /* AT Timer */
  28. #define PNPtimer1 "PNP0101" /* EISA Timer */
  29. #define PNPtimer2 "PNP0102" /* MCA Timer */
  30. /* DMA controllers */
  31. #define PNPdma0 "PNP0200" /* AT DMA Controller */
  32. #define PNPdma1 "PNP0201" /* EISA DMA Controller */
  33. #define PNPdma2 "PNP0202" /* MCA DMA Controller */
  34. /* start of August 15, 1994 additions */
  35. /* CMOS */
  36. #define PNPCMOS "IBM0009" /* CMOS */
  37. /* L2 Cache */
  38. #define PNPL2 "IBM0007" /* L2 Cache */
  39. /* NVRAM */
  40. #define PNPNVRAM "IBM0008" /* NVRAM */
  41. /* Power Management */
  42. #define PNPPM "IBM0005" /* Power Management */
  43. /* end of August 15, 1994 additions */
  44. /* Keyboards */
  45. #define PNPkeyboard0 "PNP0300" /* IBM PC/XT KB Cntlr (83 key, no mouse) */
  46. #define PNPkeyboard1 "PNP0301" /* Olivetti ICO (102 key) */
  47. #define PNPkeyboard2 "PNP0302" /* IBM PC/AT KB Cntlr (84 key) */
  48. #define PNPkeyboard3 "PNP0303" /* IBM Enhanced (101/2 key, PS/2 mouse) */
  49. #define PNPkeyboard4 "PNP0304" /* Nokia 1050 KB Cntlr */
  50. #define PNPkeyboard5 "PNP0305" /* Nokia 9140 KB Cntlr */
  51. #define PNPkeyboard6 "PNP0306" /* Standard Japanese KB Cntlr */
  52. #define PNPkeyboard7 "PNP0307" /* Microsoft Windows (R) KB Cntlr */
  53. /* Parallel port controllers */
  54. #define PNPparallel0 "PNP0400" /* Standard LPT Parallel Port */
  55. #define PNPparallel1 "PNP0401" /* ECP Parallel Port */
  56. #define PNPepp "IBM001C" /* EPP Parallel Port */
  57. /* Serial port controllers */
  58. #define PNPserial0 "PNP0500" /* Standard PC Serial port */
  59. #define PNPSerial1 "PNP0501" /* 16550A Compatible Serial port */
  60. /* Disk controllers */
  61. #define PNPdisk0 "PNP0600" /* Generic ESDI/IDE/ATA Compat HD Cntlr */
  62. #define PNPdisk1 "PNP0601" /* Plus Hardcard II */
  63. #define PNPdisk2 "PNP0602" /* Plus Hardcard IIXL/EZ */
  64. /* Diskette controllers */
  65. #define PNPdiskette0 "PNP0700" /* PC Standard Floppy Disk Controller */
  66. /* Display controllers */
  67. #define PNPdisplay0 "PNP0900" /* VGA Compatible */
  68. #define PNPdisplay1 "PNP0901" /* Video Seven VGA */
  69. #define PNPdisplay2 "PNP0902" /* 8514/A Compatible */
  70. #define PNPdisplay3 "PNP0903" /* Trident VGA */
  71. #define PNPdisplay4 "PNP0904" /* Cirrus Logic Laptop VGA */
  72. #define PNPdisplay5 "PNP0905" /* Cirrus Logic VGA */
  73. #define PNPdisplay6 "PNP0906" /* Tseng ET4000 or ET4000/W32 */
  74. #define PNPdisplay7 "PNP0907" /* Western Digital VGA */
  75. #define PNPdisplay8 "PNP0908" /* Western Digital Laptop VGA */
  76. #define PNPdisplay9 "PNP0909" /* S3 */
  77. #define PNPdisplayA "PNP090A" /* ATI Ultra Pro/Plus (Mach 32) */
  78. #define PNPdisplayB "PNP090B" /* ATI Ultra (Mach 8) */
  79. #define PNPdisplayC "PNP090C" /* XGA Compatible */
  80. #define PNPdisplayD "PNP090D" /* ATI VGA Wonder */
  81. #define PNPdisplayE "PNP090E" /* Weitek P9000 Graphics Adapter */
  82. #define PNPdisplayF "PNP090F" /* Oak Technology VGA */
  83. /* Peripheral busses */
  84. #define PNPbuses0 "PNP0A00" /* ISA Bus */
  85. #define PNPbuses1 "PNP0A01" /* EISA Bus */
  86. #define PNPbuses2 "PNP0A02" /* MCA Bus */
  87. #define PNPbuses3 "PNP0A03" /* PCI Bus */
  88. #define PNPbuses4 "PNP0A04" /* VESA/VL Bus */
  89. /* RTC, BIOS, planar devices */
  90. #define PNPspeaker0 "PNP0800" /* AT Style Speaker Sound */
  91. #define PNPrtc0 "PNP0B00" /* AT RTC */
  92. #define PNPpnpbios0 "PNP0C00" /* PNP BIOS (only created by root enum) */
  93. #define PNPpnpbios1 "PNP0C01" /* System Board Memory Device */
  94. #define PNPpnpbios2 "PNP0C02" /* Math Coprocessor */
  95. #define PNPpnpbios3 "PNP0C03" /* PNP BIOS Event Notification Interrupt */
  96. /* PCMCIA controller */
  97. #define PNPpcmcia0 "PNP0E00" /* Intel 82365 Compatible PCMCIA Cntlr */
  98. /* Mice */
  99. #define PNPmouse0 "PNP0F00" /* Microsoft Bus Mouse */
  100. #define PNPmouse1 "PNP0F01" /* Microsoft Serial Mouse */
  101. #define PNPmouse2 "PNP0F02" /* Microsoft Inport Mouse */
  102. #define PNPmouse3 "PNP0F03" /* Microsoft PS/2 Mouse */
  103. #define PNPmouse4 "PNP0F04" /* Mousesystems Mouse */
  104. #define PNPmouse5 "PNP0F05" /* Mousesystems 3 Button Mouse - COM2 */
  105. #define PNPmouse6 "PNP0F06" /* Genius Mouse - COM1 */
  106. #define PNPmouse7 "PNP0F07" /* Genius Mouse - COM2 */
  107. #define PNPmouse8 "PNP0F08" /* Logitech Serial Mouse */
  108. #define PNPmouse9 "PNP0F09" /* Microsoft Ballpoint Serial Mouse */
  109. #define PNPmouseA "PNP0F0A" /* Microsoft PNP Mouse */
  110. #define PNPmouseB "PNP0F0B" /* Microsoft PNP Ballpoint Mouse */
  111. /* Modems */
  112. #define PNPmodem0 "PNP9000" /* Specific IDs TBD */
  113. /* Network controllers */
  114. #define PNPnetworkC9 "PNP80C9" /* IBM Token Ring */
  115. #define PNPnetworkCA "PNP80CA" /* IBM Token Ring II */
  116. #define PNPnetworkCB "PNP80CB" /* IBM Token Ring II/Short */
  117. #define PNPnetworkCC "PNP80CC" /* IBM Token Ring 4/16Mbs */
  118. #define PNPnetwork27 "PNP8327" /* IBM Token Ring (All types) */
  119. #define PNPnetworket "IBM0010" /* IBM Ethernet used by Power PC */
  120. #define PNPneteisaet "IBM2001" /* IBM Ethernet EISA adapter */
  121. #define PNPAMD79C970 "IBM0016" /* AMD 79C970 (PCI Ethernet) */
  122. /* SCSI controllers */
  123. #define PNPscsi0 "PNPA000" /* Adaptec 154x Compatible SCSI Cntlr */
  124. #define PNPscsi1 "PNPA001" /* Adaptec 174x Compatible SCSI Cntlr */
  125. #define PNPscsi2 "PNPA002" /* Future Domain 16-700 Compat SCSI Cntlr*/
  126. #define PNPscsi3 "PNPA003" /* Panasonic CDROM Adapter (SBPro/SB16) */
  127. #define PNPscsiF "IBM000F" /* NCR 810 SCSI Controller */
  128. #define PNPscsi825 "IBM001B" /* NCR 825 SCSI Controller */
  129. #define PNPscsi875 "IBM0018" /* NCR 875 SCSI Controller */
  130. /* Sound/Video, Multimedia */
  131. #define PNPmm0 "PNPB000" /* Sound Blaster Compatible Sound Device */
  132. #define PNPmm1 "PNPB001" /* MS Windows Sound System Compat Device */
  133. #define PNPmmF "IBM000E" /* Crystal CS4231 Audio Device */
  134. #define PNPv7310 "IBM0015" /* ASCII V7310 Video Capture Device */
  135. #define PNPmm4232 "IBM0017" /* Crystal CS4232 Audio Device */
  136. #define PNPpmsyn "IBM001D" /* YMF 289B chip (Yamaha) */
  137. #define PNPgp4232 "IBM0012" /* Crystal CS4232 Game Port */
  138. #define PNPmidi4232 "IBM0013" /* Crystal CS4232 MIDI */
  139. /* Operator Panel */
  140. #define PNPopctl "IBM000B" /* Operator's panel */
  141. /* Service Processor */
  142. #define PNPsp "IBM0011" /* IBM Service Processor */
  143. #define PNPLTsp "IBM001E" /* Lightning/Terlingua Support Processor */
  144. #define PNPLTmsp "IBM001F" /* Lightning/Terlingua Mini-SP */
  145. /* Memory Controller */
  146. #define PNPmemctl "IBM000A" /* Memory controller */
  147. /* Graphics Assist */
  148. #define PNPg_assist "IBM0014" /* Graphics Assist */
  149. /* Miscellaneous Device Controllers */
  150. #define PNPtablet "IBM0019" /* IBM Tablet Controller */
  151. /* PNP Packet Handles */
  152. #define S1_Packet 0x0A /* Version resource */
  153. #define S2_Packet 0x15 /* Logical DEVID (without flags) */
  154. #define S2_Packet_flags 0x16 /* Logical DEVID (with flags) */
  155. #define S3_Packet 0x1C /* Compatible device ID */
  156. #define S4_Packet 0x22 /* IRQ resource (without flags) */
  157. #define S4_Packet_flags 0x23 /* IRQ resource (with flags) */
  158. #define S5_Packet 0x2A /* DMA resource */
  159. #define S6_Packet 0x30 /* Depend funct start (w/o priority) */
  160. #define S6_Packet_priority 0x31 /* Depend funct start (w/ priority) */
  161. #define S7_Packet 0x38 /* Depend funct end */
  162. #define S8_Packet 0x47 /* I/O port resource (w/o fixed loc) */
  163. #define S9_Packet_fixed 0x4B /* I/O port resource (w/ fixed loc) */
  164. #define S14_Packet 0x71 /* Vendor defined */
  165. #define S15_Packet 0x78 /* End of resource (w/o checksum) */
  166. #define S15_Packet_checksum 0x79 /* End of resource (w/ checksum) */
  167. #define L1_Packet 0x81 /* Memory range */
  168. #define L1_Shadow 0x20 /* Memory is shadowable */
  169. #define L1_32bit_mem 0x18 /* 32-bit memory only */
  170. #define L1_8_16bit_mem 0x10 /* 8- and 16-bit supported */
  171. #define L1_Decode_Hi 0x04 /* decode supports high address */
  172. #define L1_Cache 0x02 /* read cacheable, write-through */
  173. #define L1_Writeable 0x01 /* Memory is writeable */
  174. #define L2_Packet 0x82 /* ANSI ID string */
  175. #define L3_Packet 0x83 /* Unicode ID string */
  176. #define L4_Packet 0x84 /* Vendor defined */
  177. #define L5_Packet 0x85 /* Large I/O */
  178. #define L6_Packet 0x86 /* 32-bit Fixed Loc Mem Range Desc */
  179. #define END_TAG 0x78 /* End of resource */
  180. #define DF_START_TAG 0x30 /* Dependent function start */
  181. #define DF_START_TAG_priority 0x31 /* Dependent function start */
  182. #define DF_END_TAG 0x38 /* Dependent function end */
  183. #define SUBOPTIMAL_CONFIGURATION 0x2 /* Priority byte sub optimal config */
  184. /* Device Base Type Codes */
  185. typedef enum _PnP_BASE_TYPE {
  186. Reserved = 0,
  187. MassStorageDevice = 1,
  188. NetworkInterfaceController = 2,
  189. DisplayController = 3,
  190. MultimediaController = 4,
  191. MemoryController = 5,
  192. BridgeController = 6,
  193. CommunicationsDevice = 7,
  194. SystemPeripheral = 8,
  195. InputDevice = 9,
  196. ServiceProcessor = 0x0A, /* 11/2/95 */
  197. } PnP_BASE_TYPE;
  198. /* Device Sub Type Codes */
  199. typedef enum _PnP_SUB_TYPE {
  200. SCSIController = 0,
  201. IDEController = 1,
  202. FloppyController = 2,
  203. IPIController = 3,
  204. OtherMassStorageController = 0x80,
  205. EthernetController = 0,
  206. TokenRingController = 1,
  207. FDDIController = 2,
  208. OtherNetworkController = 0x80,
  209. VGAController= 0,
  210. SVGAController= 1,
  211. XGAController= 2,
  212. OtherDisplayController = 0x80,
  213. VideoController = 0,
  214. AudioController = 1,
  215. OtherMultimediaController = 0x80,
  216. RAM = 0,
  217. FLASH = 1,
  218. OtherMemoryDevice = 0x80,
  219. HostProcessorBridge = 0,
  220. ISABridge = 1,
  221. EISABridge = 2,
  222. MicroChannelBridge = 3,
  223. PCIBridge = 4,
  224. PCMCIABridge = 5,
  225. VMEBridge = 6,
  226. OtherBridgeDevice = 0x80,
  227. RS232Device = 0,
  228. ATCompatibleParallelPort = 1,
  229. OtherCommunicationsDevice = 0x80,
  230. ProgrammableInterruptController = 0,
  231. DMAController = 1,
  232. SystemTimer = 2,
  233. RealTimeClock = 3,
  234. L2Cache = 4,
  235. NVRAM = 5,
  236. PowerManagement = 6,
  237. CMOS = 7,
  238. OperatorPanel = 8,
  239. ServiceProcessorClass1 = 9,
  240. ServiceProcessorClass2 = 0xA,
  241. ServiceProcessorClass3 = 0xB,
  242. GraphicAssist = 0xC,
  243. SystemPlanar = 0xF, /* 10/5/95 */
  244. OtherSystemPeripheral = 0x80,
  245. KeyboardController = 0,
  246. Digitizer = 1,
  247. MouseController = 2,
  248. TabletController = 3, /* 10/27/95 */
  249. OtherInputController = 0x80,
  250. GeneralMemoryController = 0,
  251. } PnP_SUB_TYPE;
  252. /* Device Interface Type Codes */
  253. typedef enum _PnP_INTERFACE {
  254. General = 0,
  255. GeneralSCSI = 0,
  256. GeneralIDE = 0,
  257. ATACompatible = 1,
  258. GeneralFloppy = 0,
  259. Compatible765 = 1,
  260. NS398_Floppy = 2, /* NS Super I/O wired to use index
  261. register at port 398 and data
  262. register at port 399 */
  263. NS26E_Floppy = 3, /* Ports 26E and 26F */
  264. NS15C_Floppy = 4, /* Ports 15C and 15D */
  265. NS2E_Floppy = 5, /* Ports 2E and 2F */
  266. CHRP_Floppy = 6, /* CHRP Floppy in PR*P system */
  267. GeneralIPI = 0,
  268. GeneralEther = 0,
  269. GeneralToken = 0,
  270. GeneralFDDI = 0,
  271. GeneralVGA = 0,
  272. GeneralSVGA = 0,
  273. GeneralXGA = 0,
  274. GeneralVideo = 0,
  275. GeneralAudio = 0,
  276. CS4232Audio = 1, /* CS 4232 Plug 'n Play Configured */
  277. GeneralRAM = 0,
  278. GeneralFLASH = 0,
  279. PCIMemoryController = 0, /* PCI Config Method */
  280. RS6KMemoryController = 1, /* RS6K Config Method */
  281. GeneralHostBridge = 0,
  282. GeneralISABridge = 0,
  283. GeneralEISABridge = 0,
  284. GeneralMCABridge = 0,
  285. GeneralPCIBridge = 0,
  286. PCIBridgeDirect = 0,
  287. PCIBridgeIndirect = 1,
  288. PCIBridgeRS6K = 2,
  289. GeneralPCMCIABridge = 0,
  290. GeneralVMEBridge = 0,
  291. GeneralRS232 = 0,
  292. COMx = 1,
  293. Compatible16450 = 2,
  294. Compatible16550 = 3,
  295. NS398SerPort = 4, /* NS Super I/O wired to use index
  296. register at port 398 and data
  297. register at port 399 */
  298. NS26ESerPort = 5, /* Ports 26E and 26F */
  299. NS15CSerPort = 6, /* Ports 15C and 15D */
  300. NS2ESerPort = 7, /* Ports 2E and 2F */
  301. GeneralParPort = 0,
  302. LPTx = 1,
  303. NS398ParPort = 2, /* NS Super I/O wired to use index
  304. register at port 398 and data
  305. register at port 399 */
  306. NS26EParPort = 3, /* Ports 26E and 26F */
  307. NS15CParPort = 4, /* Ports 15C and 15D */
  308. NS2EParPort = 5, /* Ports 2E and 2F */
  309. GeneralPIC = 0,
  310. ISA_PIC = 1,
  311. EISA_PIC = 2,
  312. MPIC = 3,
  313. RS6K_PIC = 4,
  314. GeneralDMA = 0,
  315. ISA_DMA = 1,
  316. EISA_DMA = 2,
  317. GeneralTimer = 0,
  318. ISA_Timer = 1,
  319. EISA_Timer = 2,
  320. GeneralRTC = 0,
  321. ISA_RTC = 1,
  322. StoreThruOnly = 1,
  323. StoreInEnabled = 2,
  324. RS6KL2Cache = 3,
  325. IndirectNVRAM = 0, /* Indirectly addressed */
  326. DirectNVRAM = 1, /* Memory Mapped */
  327. IndirectNVRAM24 = 2, /* Indirectly addressed - 24 bit */
  328. GeneralPowerManagement = 0,
  329. EPOWPowerManagement = 1,
  330. PowerControl = 2, /* d1378 */
  331. GeneralCMOS = 0,
  332. GeneralOPPanel = 0,
  333. HarddiskLight = 1,
  334. CDROMLight = 2,
  335. PowerLight = 3,
  336. KeyLock = 4,
  337. ANDisplay = 5, /* AlphaNumeric Display */
  338. SystemStatusLED = 6, /* 3 digit 7 segment LED */
  339. CHRP_SystemStatusLED = 7, /* CHRP LEDs in PR*P system */
  340. GeneralServiceProcessor = 0,
  341. TransferData = 1,
  342. IGMC32 = 2,
  343. IGMC64 = 3,
  344. GeneralSystemPlanar = 0, /* 10/5/95 */
  345. } PnP_INTERFACE;
  346. /* PnP resources */
  347. /* Compressed ASCII is 5 bits per char; 00001=A ... 11010=Z */
  348. typedef struct _SERIAL_ID {
  349. unsigned char VendorID0; /* Bit(7)=0 */
  350. /* Bits(6:2)=1st character in */
  351. /* compressed ASCII */
  352. /* Bits(1:0)=2nd character in */
  353. /* compressed ASCII bits(4:3) */
  354. unsigned char VendorID1; /* Bits(7:5)=2nd character in */
  355. /* compressed ASCII bits(2:0) */
  356. /* Bits(4:0)=3rd character in */
  357. /* compressed ASCII */
  358. unsigned char VendorID2; /* Product number - vendor assigned */
  359. unsigned char VendorID3; /* Product number - vendor assigned */
  360. /* Serial number is to provide uniqueness if more than one board of same */
  361. /* type is in system. Must be "FFFFFFFF" if feature not supported. */
  362. unsigned char Serial0; /* Unique serial number bits (7:0) */
  363. unsigned char Serial1; /* Unique serial number bits (15:8) */
  364. unsigned char Serial2; /* Unique serial number bits (23:16) */
  365. unsigned char Serial3; /* Unique serial number bits (31:24) */
  366. unsigned char Checksum;
  367. } SERIAL_ID;
  368. typedef enum _PnPItemName {
  369. Unused = 0,
  370. PnPVersion = 1,
  371. LogicalDevice = 2,
  372. CompatibleDevice = 3,
  373. IRQFormat = 4,
  374. DMAFormat = 5,
  375. StartDepFunc = 6,
  376. EndDepFunc = 7,
  377. IOPort = 8,
  378. FixedIOPort = 9,
  379. Res1 = 10,
  380. Res2 = 11,
  381. Res3 = 12,
  382. SmallVendorItem = 14,
  383. EndTag = 15,
  384. MemoryRange = 1,
  385. ANSIIdentifier = 2,
  386. UnicodeIdentifier = 3,
  387. LargeVendorItem = 4,
  388. MemoryRange32 = 5,
  389. MemoryRangeFixed32 = 6,
  390. } PnPItemName;
  391. /* Define a bunch of access functions for the bits in the tag field */
  392. /* Tag type - 0 = small; 1 = large */
  393. #define tag_type(t) (((t) & 0x80)>>7)
  394. #define set_tag_type(t,v) (t = (t & 0x7f) | ((v)<<7))
  395. /* Small item name is 4 bits - one of PnPItemName enum above */
  396. #define tag_small_item_name(t) (((t) & 0x78)>>3)
  397. #define set_tag_small_item_name(t,v) (t = (t & 0x07) | ((v)<<3))
  398. /* Small item count is 3 bits - count of further bytes in packet */
  399. #define tag_small_count(t) ((t) & 0x07)
  400. #define set_tag_count(t,v) (t = (t & 0x78) | (v))
  401. /* Large item name is 7 bits - one of PnPItemName enum above */
  402. #define tag_large_item_name(t) ((t) & 0x7f)
  403. #define set_tag_large_item_name(t,v) (t = (t | 0x80) | (v))
  404. /* a PnP resource is a bunch of contiguous TAG packets ending with an end tag */
  405. typedef union _PnP_TAG_PACKET {
  406. struct _S1_Pack{ /* VERSION PACKET */
  407. unsigned char Tag; /* small tag = 0x0a */
  408. unsigned char Version[2]; /* PnP version, Vendor version */
  409. } S1_Pack;
  410. struct _S2_Pack{ /* LOGICAL DEVICE ID PACKET */
  411. unsigned char Tag; /* small tag = 0x15 or 0x16 */
  412. unsigned char DevId[4]; /* Logical device id */
  413. unsigned char Flags[2]; /* bit(0) boot device; */
  414. /* bit(7:1) cmd in range x31-x37 */
  415. /* bit(7:0) cmd in range x28-x3f (opt)*/
  416. } S2_Pack;
  417. struct _S3_Pack{ /* COMPATIBLE DEVICE ID PACKET */
  418. unsigned char Tag; /* small tag = 0x1c */
  419. unsigned char CompatId[4]; /* Compatible device id */
  420. } S3_Pack;
  421. struct _S4_Pack{ /* IRQ PACKET */
  422. unsigned char Tag; /* small tag = 0x22 or 0x23 */
  423. unsigned char IRQMask[2]; /* bit(0) is IRQ0, ...; */
  424. /* bit(0) is IRQ8 ... */
  425. unsigned char IRQInfo; /* optional; assume bit(0)=1; else */
  426. /* bit(0) - high true edge sensitive */
  427. /* bit(1) - low true edge sensitive */
  428. /* bit(2) - high true level sensitive*/
  429. /* bit(3) - low true level sensitive */
  430. /* bit(7:4) - must be 0 */
  431. } S4_Pack;
  432. struct _S5_Pack{ /* DMA PACKET */
  433. unsigned char Tag; /* small tag = 0x2a */
  434. unsigned char DMAMask; /* bit(0) is channel 0 ... */
  435. unsigned char DMAInfo;
  436. } S5_Pack;
  437. struct _S6_Pack{ /* START DEPENDENT FUNCTION PACKET */
  438. unsigned char Tag; /* small tag = 0x30 or 0x31 */
  439. unsigned char Priority; /* Optional; if missing then x01; else*/
  440. /* x00 = best possible */
  441. /* x01 = acceptible */
  442. /* x02 = sub-optimal but functional */
  443. } S6_Pack;
  444. struct _S7_Pack{ /* END DEPENDENT FUNCTION PACKET */
  445. unsigned char Tag; /* small tag = 0x38 */
  446. } S7_Pack;
  447. struct _S8_Pack{ /* VARIABLE I/O PORT PACKET */
  448. unsigned char Tag; /* small tag x47 */
  449. unsigned char IOInfo; /* x0 = decode only bits(9:0); */
  450. #define ISAAddr16bit 0x01 /* x01 = decode bits(15:0) */
  451. unsigned char RangeMin[2]; /* Min base address */
  452. unsigned char RangeMax[2]; /* Max base address */
  453. unsigned char IOAlign; /* base alignmt, incr in 1B blocks */
  454. unsigned char IONum; /* number of contiguous I/O ports */
  455. } S8_Pack;
  456. struct _S9_Pack{ /* FIXED I/O PORT PACKET */
  457. unsigned char Tag; /* small tag = 0x4b */
  458. unsigned char Range[2]; /* base address 10 bits */
  459. unsigned char IONum; /* number of contiguous I/O ports */
  460. } S9_Pack;
  461. struct _S14_Pack{ /* VENDOR DEFINED PACKET */
  462. unsigned char Tag; /* small tag = 0x7m m = 1-7 */
  463. union _S14_Data{
  464. unsigned char Data[7]; /* Vendor defined */
  465. struct _S14_PPCPack{ /* Pr*p s14 pack */
  466. unsigned char Type; /* 00=non-IBM */
  467. unsigned char PPCData[6]; /* Vendor defined */
  468. } S14_PPCPack;
  469. } S14_Data;
  470. } S14_Pack;
  471. struct _S15_Pack{ /* END PACKET */
  472. unsigned char Tag; /* small tag = 0x78 or 0x79 */
  473. unsigned char Check; /* optional - checksum */
  474. } S15_Pack;
  475. struct _L1_Pack{ /* MEMORY RANGE PACKET */
  476. unsigned char Tag; /* large tag = 0x81 */
  477. unsigned char Count0; /* x09 */
  478. unsigned char Count1; /* x00 */
  479. unsigned char Data[9]; /* a variable array of bytes, */
  480. /* count in tag */
  481. } L1_Pack;
  482. struct _L2_Pack{ /* ANSI ID STRING PACKET */
  483. unsigned char Tag; /* large tag = 0x82 */
  484. unsigned char Count0; /* Length of string */
  485. unsigned char Count1;
  486. unsigned char Identifier[1]; /* a variable array of bytes, */
  487. /* count in tag */
  488. } L2_Pack;
  489. struct _L3_Pack{ /* UNICODE ID STRING PACKET */
  490. unsigned char Tag; /* large tag = 0x83 */
  491. unsigned char Count0; /* Length + 2 of string */
  492. unsigned char Count1;
  493. unsigned char Country0; /* TBD */
  494. unsigned char Country1; /* TBD */
  495. unsigned char Identifier[1]; /* a variable array of bytes, */
  496. /* count in tag */
  497. } L3_Pack;
  498. struct _L4_Pack{ /* VENDOR DEFINED PACKET */
  499. unsigned char Tag; /* large tag = 0x84 */
  500. unsigned char Count0;
  501. unsigned char Count1;
  502. union _L4_Data{
  503. unsigned char Data[1]; /* a variable array of bytes, */
  504. /* count in tag */
  505. struct _L4_PPCPack{ /* Pr*p L4 packet */
  506. unsigned char Type; /* 00=non-IBM */
  507. unsigned char PPCData[1]; /* a variable array of bytes, */
  508. /* count in tag */
  509. } L4_PPCPack;
  510. } L4_Data;
  511. } L4_Pack;
  512. struct _L5_Pack{
  513. unsigned char Tag; /* large tag = 0x85 */
  514. unsigned char Count0; /* Count = 17 */
  515. unsigned char Count1;
  516. unsigned char Data[17];
  517. } L5_Pack;
  518. struct _L6_Pack{
  519. unsigned char Tag; /* large tag = 0x86 */
  520. unsigned char Count0; /* Count = 9 */
  521. unsigned char Count1;
  522. unsigned char Data[9];
  523. } L6_Pack;
  524. } PnP_TAG_PACKET;
  525. #endif /* __ASSEMBLY__ */
  526. #endif /* ndef _PNP_ */