Navigation Menu

Skip to content

Commit

Permalink
[int13] Split out ISO9660 and El Torito definitions to separate heade…
Browse files Browse the repository at this point in the history
…r files

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Mar 19, 2013
1 parent 6b9b443 commit 2ec0c1e
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 116 deletions.
116 changes: 0 additions & 116 deletions src/arch/i386/include/int13.h
Expand Up @@ -291,122 +291,6 @@ struct master_boot_record {
/** MBR magic signature */
#define INT13_MBR_MAGIC 0xaa55

/** ISO9660 block size */
#define ISO9660_BLKSIZE 2048

/** An ISO9660 Primary Volume Descriptor (fixed portion) */
struct iso9660_primary_descriptor_fixed {
/** Descriptor type */
uint8_t type;
/** Identifier ("CD001") */
uint8_t id[5];
} __attribute__ (( packed ));

/** An ISO9660 Primary Volume Descriptor */
struct iso9660_primary_descriptor {
/** Fixed portion */
struct iso9660_primary_descriptor_fixed fixed;
} __attribute__ (( packed ));

/** ISO9660 Primary Volume Descriptor type */
#define ISO9660_TYPE_PRIMARY 0x01

/** ISO9660 identifier */
#define ISO9660_ID "CD001"

/** ISO9660 Primary Volume Descriptor block address */
#define ISO9660_PRIMARY_LBA 16

/** An El Torito Boot Record Volume Descriptor (fixed portion) */
struct eltorito_descriptor_fixed {
/** Descriptor type */
uint8_t type;
/** Identifier ("CD001") */
uint8_t id[5];
/** Version, must be 1 */
uint8_t version;
/** Boot system indicator; must be "EL TORITO SPECIFICATION" */
uint8_t system_id[32];
} __attribute__ (( packed ));

/** An El Torito Boot Record Volume Descriptor */
struct eltorito_descriptor {
/** Fixed portion */
struct eltorito_descriptor_fixed fixed;
/** Unused */
uint8_t unused[32];
/** Boot catalog sector */
uint32_t sector;
} __attribute__ (( packed ));

/** ISO9660 Boot Volume Descriptor type */
#define ISO9660_TYPE_BOOT 0x00

/** El Torito Boot Record Volume Descriptor block address */
#define ELTORITO_LBA 17

/** An El Torito Boot Catalog Validation Entry */
struct eltorito_validation_entry {
/** Header ID; must be 1 */
uint8_t header_id;
/** Platform ID
*
* 0 = 80x86
* 1 = PowerPC
* 2 = Mac
*/
uint8_t platform_id;
/** Reserved */
uint16_t reserved;
/** ID string */
uint8_t id_string[24];
/** Checksum word */
uint16_t checksum;
/** Signature; must be 0xaa55 */
uint16_t signature;
} __attribute__ (( packed ));

/** El Torito platform IDs */
enum eltorito_platform_id {
ELTORITO_PLATFORM_X86 = 0x00,
ELTORITO_PLATFORM_POWERPC = 0x01,
ELTORITO_PLATFORM_MAC = 0x02,
};

/** A bootable entry in the El Torito Boot Catalog */
struct eltorito_boot_entry {
/** Boot indicator
*
* Must be @c ELTORITO_BOOTABLE for a bootable ISO image
*/
uint8_t indicator;
/** Media type
*
*/
uint8_t media_type;
/** Load segment */
uint16_t load_segment;
/** System type */
uint8_t filesystem;
/** Unused */
uint8_t reserved_a;
/** Sector count */
uint16_t length;
/** Starting sector */
uint32_t start;
/** Unused */
uint8_t reserved_b[20];
} __attribute__ (( packed ));

/** Boot indicator for a bootable ISO image */
#define ELTORITO_BOOTABLE 0x88

/** El Torito media types */
enum eltorito_media_type {
/** No emulation */
ELTORITO_NO_EMULATION = 0,
};

/** A floppy disk geometry */
struct int13_fdd_geometry {
/** Number of tracks */
Expand Down
2 changes: 2 additions & 0 deletions src/arch/i386/interface/pcbios/int13.c
Expand Up @@ -38,6 +38,8 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <ipxe/sanboot.h>
#include <ipxe/device.h>
#include <ipxe/pci.h>
#include <ipxe/iso9660.h>
#include <ipxe/eltorito.h>
#include <realmode.h>
#include <bios.h>
#include <biosint.h>
Expand Down
103 changes: 103 additions & 0 deletions src/include/ipxe/eltorito.h
@@ -0,0 +1,103 @@
#ifndef _IPXE_ELTORITO_H
#define _IPXE_ELTORITO_H

/**
* @file
*
* El Torito bootable CD-ROM specification
*
*/

FILE_LICENCE ( GPL2_OR_LATER );

#include <stdint.h>
#include <ipxe/iso9660.h>

/** An El Torito Boot Record Volume Descriptor (fixed portion) */
struct eltorito_descriptor_fixed {
/** Descriptor type */
uint8_t type;
/** Identifier ("CD001") */
uint8_t id[5];
/** Version, must be 1 */
uint8_t version;
/** Boot system indicator; must be "EL TORITO SPECIFICATION" */
uint8_t system_id[32];
} __attribute__ (( packed ));

/** An El Torito Boot Record Volume Descriptor */
struct eltorito_descriptor {
/** Fixed portion */
struct eltorito_descriptor_fixed fixed;
/** Unused */
uint8_t unused[32];
/** Boot catalog sector */
uint32_t sector;
} __attribute__ (( packed ));

/** El Torito Boot Record Volume Descriptor block address */
#define ELTORITO_LBA 17

/** An El Torito Boot Catalog Validation Entry */
struct eltorito_validation_entry {
/** Header ID; must be 1 */
uint8_t header_id;
/** Platform ID
*
* 0 = 80x86
* 1 = PowerPC
* 2 = Mac
*/
uint8_t platform_id;
/** Reserved */
uint16_t reserved;
/** ID string */
uint8_t id_string[24];
/** Checksum word */
uint16_t checksum;
/** Signature; must be 0xaa55 */
uint16_t signature;
} __attribute__ (( packed ));

/** El Torito platform IDs */
enum eltorito_platform_id {
ELTORITO_PLATFORM_X86 = 0x00,
ELTORITO_PLATFORM_POWERPC = 0x01,
ELTORITO_PLATFORM_MAC = 0x02,
};

/** A bootable entry in the El Torito Boot Catalog */
struct eltorito_boot_entry {
/** Boot indicator
*
* Must be @c ELTORITO_BOOTABLE for a bootable ISO image
*/
uint8_t indicator;
/** Media type
*
*/
uint8_t media_type;
/** Load segment */
uint16_t load_segment;
/** System type */
uint8_t filesystem;
/** Unused */
uint8_t reserved_a;
/** Sector count */
uint16_t length;
/** Starting sector */
uint32_t start;
/** Unused */
uint8_t reserved_b[20];
} __attribute__ (( packed ));

/** Boot indicator for a bootable ISO image */
#define ELTORITO_BOOTABLE 0x88

/** El Torito media types */
enum eltorito_media_type {
/** No emulation */
ELTORITO_NO_EMULATION = 0,
};

#endif /* _IPXE_ELTORITO_H */
44 changes: 44 additions & 0 deletions src/include/ipxe/iso9660.h
@@ -0,0 +1,44 @@
#ifndef _IPXE_ISO9660_H
#define _IPXE_ISO9660_H

/**
* @file
*
* ISO9660 CD-ROM specification
*
*/

FILE_LICENCE ( GPL2_OR_LATER );

#include <stdint.h>

/** ISO9660 block size */
#define ISO9660_BLKSIZE 2048

/** An ISO9660 Primary Volume Descriptor (fixed portion) */
struct iso9660_primary_descriptor_fixed {
/** Descriptor type */
uint8_t type;
/** Identifier ("CD001") */
uint8_t id[5];
} __attribute__ (( packed ));

/** An ISO9660 Primary Volume Descriptor */
struct iso9660_primary_descriptor {
/** Fixed portion */
struct iso9660_primary_descriptor_fixed fixed;
} __attribute__ (( packed ));

/** ISO9660 Primary Volume Descriptor type */
#define ISO9660_TYPE_PRIMARY 0x01

/** ISO9660 Primary Volume Descriptor block address */
#define ISO9660_PRIMARY_LBA 16

/** ISO9660 Boot Volume Descriptor type */
#define ISO9660_TYPE_BOOT 0x00

/** ISO9660 identifier */
#define ISO9660_ID "CD001"

#endif /* _IPXE_ISO9660_H */

0 comments on commit 2ec0c1e

Please sign in to comment.