1 /** @file
2   ElTorito Partitions Format Definition.
3   This file includes some defintions from
4   1. "El Torito" Bootable CD-ROM Format Specification, Version 1.0.
5   2. Volume and File Structure of CDROM for Information Interchange,
6      Standard ECMA-119. (IS0 9660)
7 
8 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
9 This program and the accompanying materials
10 are licensed and made available under the terms and conditions of the BSD License
11 which accompanies this distribution.  The full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
13 
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 
17 **/
18 
19 #ifndef _ELTORITO_H_
20 #define _ELTORITO_H_
21 
22 //
23 // CDROM_VOLUME_DESCRIPTOR.Types, defined in ISO 9660
24 //
25 #define CDVOL_TYPE_STANDARD 0x0
26 #define CDVOL_TYPE_CODED    0x1
27 #define CDVOL_TYPE_END      0xFF
28 
29 ///
30 /// CDROM_VOLUME_DESCRIPTOR.Id
31 ///
32 #define CDVOL_ID  "CD001"
33 
34 ///
35 /// CDROM_VOLUME_DESCRIPTOR.SystemId
36 ///
37 #define CDVOL_ELTORITO_ID "EL TORITO SPECIFICATION"
38 
39 //
40 // Indicator types
41 //
42 #define ELTORITO_ID_CATALOG               0x01
43 #define ELTORITO_ID_SECTION_BOOTABLE      0x88
44 #define ELTORITO_ID_SECTION_NOT_BOOTABLE  0x00
45 #define ELTORITO_ID_SECTION_HEADER        0x90
46 #define ELTORITO_ID_SECTION_HEADER_FINAL  0x91
47 
48 //
49 // ELTORITO_CATALOG.Boot.MediaTypes
50 //
51 #define ELTORITO_NO_EMULATION 0x00
52 #define ELTORITO_12_DISKETTE  0x01
53 #define ELTORITO_14_DISKETTE  0x02
54 #define ELTORITO_28_DISKETTE  0x03
55 #define ELTORITO_HARD_DISK    0x04
56 
57 
58 #pragma pack(1)
59 
60 ///
61 /// CD-ROM Volume Descriptor
62 ///
63 typedef union {
64   struct {
65     UINT8   Type;
66     CHAR8   Id[5];           ///< "CD001"
67     CHAR8   Reserved[82];
68   } Unknown;
69 
70   ///
71   /// Boot Record Volume Descriptor, defined in "El Torito" Specification.
72   ///
73   struct {
74     UINT8   Type;            ///< Must be 0
75     CHAR8   Id[5];           ///< "CD001"
76     UINT8   Version;         ///< Must be 1
77     CHAR8   SystemId[32];    ///< "EL TORITO SPECIFICATION"
78     CHAR8   Unused[32];      ///< Must be 0
79     UINT8   EltCatalog[4];   ///< Absolute pointer to first sector of Boot Catalog
80     CHAR8   Unused2[13];     ///< Must be 0
81   } BootRecordVolume;
82 
83   ///
84   /// Primary Volumn Descriptor, defined in ISO 9660.
85   ///
86   struct {
87     UINT8   Type;
88     CHAR8   Id[5];           ///< "CD001"
89     UINT8   Version;
90     UINT8   Unused;          ///< Must be 0
91     CHAR8   SystemId[32];
92     CHAR8   VolumeId[32];
93     UINT8   Unused2[8];      ///< Must be 0
94     UINT32  VolSpaceSize[2]; ///< the number of Logical Blocks
95   } PrimaryVolume;
96 
97 } CDROM_VOLUME_DESCRIPTOR;
98 
99 ///
100 /// Catalog Entry
101 ///
102 typedef union {
103   struct {
104     CHAR8       Reserved[0x20];
105   } Unknown;
106 
107   ///
108   /// Catalog validation entry (Catalog header)
109   ///
110   struct {
111     UINT8   Indicator;       ///< Must be 01
112     UINT8   PlatformId;
113     UINT16  Reserved;
114     CHAR8   ManufacId[24];
115     UINT16  Checksum;
116     UINT16  Id55AA;
117   } Catalog;
118 
119   ///
120   /// Initial/Default Entry or Section Entry
121   ///
122   struct {
123     UINT8   Indicator;       ///< 88 = Bootable, 00 = Not Bootable
124     UINT8   MediaType : 4;
125     UINT8   Reserved1 : 4;   ///< Must be 0
126     UINT16  LoadSegment;
127     UINT8   SystemType;
128     UINT8   Reserved2;       ///< Must be 0
129     UINT16  SectorCount;
130     UINT32  Lba;
131   } Boot;
132 
133   ///
134   /// Section Header Entry
135   ///
136   struct {
137     UINT8   Indicator;       ///< 90 - Header, more header follw, 91 - Final Header
138     UINT8   PlatformId;
139     UINT16  SectionEntries;  ///< Number of section entries following this header
140     CHAR8   Id[28];
141   } Section;
142 
143 } ELTORITO_CATALOG;
144 
145 #pragma pack()
146 
147 #endif
148