#ifndef ELTORITO_H_ #define ELTORITO_H_ #include "tree.h" #include "file.h" #include "ecma119.h" struct el_torito_boot_catalog { struct iso_tree_node_boot *node; /* node of the catalog */ struct el_torito_boot_image *image; /* default boot image */ enum tree_node_from proc; /* whether the catalog is new or read from a * prev session/image */ }; struct el_torito_boot_image { struct iso_tree_node_boot *node; unsigned int bootable:1; /**< If the entry is bootable. */ unsigned int isolinux:1; /**< If the image will be patched */ unsigned char type; /**< The type of image */ unsigned char partition_type; /**< type of partition for HD-emul images */ short load_seg; /**< Load segment for the initial boot image. */ short load_size; /**< Number of sector to load. */ }; struct el_torito_validation_entry { uint8_t header_id BP(1, 1); uint8_t platform_id BP(2, 2); uint8_t reserved BP(3, 4); uint8_t id_string BP(5, 28); uint8_t checksum BP(29, 30); uint8_t key_byte1 BP(31, 31); uint8_t key_byte2 BP(32, 32); }; struct el_torito_default_entry { uint8_t boot_indicator BP(1, 1); uint8_t boot_media_type BP(2, 2); uint8_t load_seg BP(3, 4); uint8_t system_type BP(5, 5); uint8_t unused1 BP(6, 6); uint8_t sec_count BP(7, 8); uint8_t block BP(9, 12); uint8_t unused2 BP(13, 32); }; struct el_torito_section_header_entry { uint8_t header_indicator BP(1, 1); uint8_t platform_id BP(2, 2); uint8_t number BP(3, 4); uint8_t character BP(5, 32); }; struct el_torito_section_entry { uint8_t boot_indicator BP(1, 1); uint8_t boot_media_type BP(2, 2); uint8_t load_seg BP(3, 4); uint8_t system_type BP(5, 5); uint8_t unused1 BP(6, 6); uint8_t sec_count BP(7, 8); uint8_t block BP(9, 12); uint8_t selec_criteria BP(13, 13); uint8_t vendor_sc BP(14, 32); }; void el_torito_boot_catalog_free(struct el_torito_boot_catalog *cat); /** * Write the Boot Record Volume Descriptor */ void el_torito_write_boot_vol_desc(struct ecma119_write_target *t, uint8_t *buf); void el_torito_wr_boot_vol_desc(struct ecma119_write_target *t, uint8_t *buf); /** * Write catalog + image */ void el_torito_wr_catalog(struct ecma119_write_target *t, uint8_t *buf); #endif /*ELTORITO_H_*/