/** @file\r
- ElTorito Partitions Format Definition.\r
-\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
+ ElTorito Partitions Format Definition. \r
+ This file includes some defintions from \r
+ 1. "El Torito" Bootable CD-ROM Format Specification, Version 1.0.\r
+ 2. Volume and File Structure of CDROM for Information Interchange, \r
+ Standard ECMA-119. (IS0 9660)\r
+\r
+Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
which accompanies this distribution. The full text of the license may be found at \r
http://opensource.org/licenses/bsd-license.php \r
#define _ELTORITO_H_\r
\r
//\r
-// CDROM_VOLUME_DESCRIPTOR.Types\r
+// CDROM_VOLUME_DESCRIPTOR.Types, defined in ISO 9660\r
//\r
#define CDVOL_TYPE_STANDARD 0x0\r
#define CDVOL_TYPE_CODED 0x1\r
\r
#pragma pack(1)\r
\r
-///\r
-/// El Torito Volume Descriptor\r
-/// Note that the CDROM_VOLUME_DESCRIPTOR does not match the ISO-9660\r
-/// descriptor. For some reason descriptor used by El Torito is\r
-/// different, but they start the same. The El Torito descriptor\r
-/// is left shifted 1 byte starting with the SystemId. (Note this\r
-/// causes the field to get unaligned)\r
-///\r
-typedef struct {\r
- UINT8 Type;\r
- CHAR8 Id[5]; // CD001\r
- UINT8 Version;\r
- CHAR8 SystemId[26];\r
- CHAR8 Unused[38];\r
- UINT8 EltCatalog[4];\r
- CHAR8 Unused2[5];\r
- UINT32 VolSpaceSize[2];\r
-} CDROM_VOLUME_DESCRIPTOR;\r
+/// \r
+/// CD-ROM Volume Descriptor\r
+/// \r
+typedef union { \r
+ struct {\r
+ UINT8 Type; \r
+ CHAR8 Id[5]; ///< "CD001" \r
+ CHAR8 Reserved[82];\r
+ } Unknown;\r
+\r
+ ///\r
+ /// Boot Record Volume Descriptor, defined in "El Torito" Specification.\r
+ ///\r
+ struct {\r
+ UINT8 Type; ///< Must be 0\r
+ CHAR8 Id[5]; ///< "CD001" \r
+ UINT8 Version; ///< Must be 1 \r
+ CHAR8 SystemId[32]; ///< "EL TORITO SPECIFICATION" \r
+ CHAR8 Unused[32]; ///< Must be 0 \r
+ UINT8 EltCatalog[4]; ///< Absolute pointer to first sector of Boot Catalog\r
+ CHAR8 Unused2[13]; ///< Must be 0\r
+ } BootRecordVolume;\r
+ \r
+ ///\r
+ /// Primary Volumn Descriptor, defined in ISO 9660.\r
+ ///\r
+ struct {\r
+ UINT8 Type; \r
+ CHAR8 Id[5]; ///< "CD001"\r
+ UINT8 Version; \r
+ UINT8 Unused; ///< Must be 0\r
+ CHAR8 SystemId[32]; \r
+ CHAR8 VolumeId[32]; \r
+ UINT8 Unused2[8]; ///< Must be 0 \r
+ UINT32 VolSpaceSize[2]; ///< the number of Logical Blocks\r
+ } PrimaryVolume;\r
+\r
+} CDROM_VOLUME_DESCRIPTOR; \r
\r
///\r
/// Catalog Entry\r
/// Catalog validation entry (Catalog header)\r
///\r
struct {\r
- UINT8 Indicator;\r
+ UINT8 Indicator; ///< Must be 01\r
UINT8 PlatformId;\r
UINT16 Reserved;\r
CHAR8 ManufacId[24];\r
/// Initial/Default Entry or Section Entry\r
///\r
struct {\r
- UINT8 Indicator;\r
+ UINT8 Indicator; ///< 88 = Bootable, 00 = Not Bootable\r
UINT8 MediaType : 4;\r
- UINT8 Reserved1 : 4;\r
+ UINT8 Reserved1 : 4; ///< Must be 0\r
UINT16 LoadSegment;\r
UINT8 SystemType;\r
- UINT8 Reserved2;\r
+ UINT8 Reserved2; ///< Must be 0\r
UINT16 SectorCount;\r
UINT32 Lba;\r
} Boot;\r
/// Section Header Entry\r
///\r
struct {\r
- UINT8 Indicator;\r
+ UINT8 Indicator; ///< 90 - Header, more header follw, 91 - Final Header\r
UINT8 PlatformId;\r
- UINT16 SectionEntries;\r
+ UINT16 SectionEntries; ///< Number of section entries following this header\r
CHAR8 Id[28];\r
} Section;\r
\r