"Fossies" - the Fresh Open Source Software Archive

Member "libisofs-1.5.4/libisofs/eltorito.h" (8 Jul 2020, 5940 Bytes) of package /linux/misc/libisofs-1.5.4.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "eltorito.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 1.5.0_vs_1.5.2.

    1 /*
    2  * Copyright (c) 2007 Vreixo Formoso
    3  * Copyright (c) 2010 - 2018 Thomas Schmitt
    4  *
    5  * This file is part of the libisofs project; you can redistribute it and/or
    6  * modify it under the terms of the GNU General Public License version 2 
    7  * or later as published by the Free Software Foundation. 
    8  * See COPYING file for details.
    9  */
   10 
   11 /**
   12  * Declare El-Torito related structures.
   13  * References:
   14  *  "El Torito" Bootable CD-ROM Format Specification Version 1.0 (1995)
   15  */
   16 
   17 #ifndef LIBISO_ELTORITO_H
   18 #define LIBISO_ELTORITO_H
   19 
   20 #include "ecma119.h"
   21 #include "node.h"
   22 
   23 /**
   24  * A node that acts as a placeholder for an El-Torito catalog.
   25  */
   26 struct Iso_Boot
   27 {
   28     IsoNode node;
   29 
   30     /* Want to get content of loaded boot catalog.
   31        Vreixo took care not to make it an IsoFile at load time.
   32        So this is implemented independently of IsoStream.
   33      */
   34     uint32_t lba;
   35     off_t size;
   36     char *content;
   37 };
   38 
   39 /* Not more than 32 so that all entries fit into 2048 bytes */
   40 #define Libisofs_max_boot_imageS 32
   41 
   42 struct el_torito_boot_catalog {
   43     IsoBoot *node; /* node of the catalog */
   44 
   45     int num_bootimages;
   46     struct el_torito_boot_image *bootimages[Libisofs_max_boot_imageS];
   47                                                   /* [0]= default boot image */
   48 
   49     /* Weight value for image sorting */
   50     int sort_weight;
   51 };
   52 
   53 struct el_torito_boot_image {
   54     IsoFile *image;
   55 
   56     /* Overrides .image if >= 0 : array index of appended partition */
   57     int appended_idx;
   58     uint32_t appended_start; /* In blocks of 2048 bytes */
   59     uint32_t appended_size;  /* In blocks of  512 bytes */
   60 
   61     unsigned int bootable:1; /**< If the entry is bootable. */
   62     /**
   63      * Whether the boot image seems to contain a boot_info_table
   64      */
   65     unsigned int seems_boot_info_table:1;
   66     unsigned int seems_grub2_boot_info:1;
   67     /**
   68      * Whether the boot image seems to be capable of isohybrid
   69      */
   70     unsigned int seems_isohybrid_capable:1;
   71     /**
   72      * isolinux options
   73      * bit 0 -> whether to patch image
   74      * bit 1 -> whether to put built-in isolinux 3.72 isohybrid-MBR into image
   75      *          System Area (deprecated)
   76      *
   77      *  bit2-7= Mentioning in isohybrid GPT
   78      *          0= do not mention in GPT
   79      *          1= mention as EFI partition
   80      *          2= Mention as HFS+ partition
   81      *  bit8= Mention in isohybrid Apple partition map
   82      */
   83     unsigned int isolinux_options;
   84 
   85     unsigned char type; /**< The type of image :
   86                               0=no emulation , 1=fd 1.2 MB , 2=fd 1.4 MB
   87                               3=fd 3.8 MB , 4=hdd (size in partition table)
   88                          */
   89     unsigned char partition_type; /**< type of partition for HD-emul images */
   90     uint32_t emul_hdd_size; /* 512-bytes LBA after highest partition end from
   91                                HD-emul partition table
   92                              */
   93     uint16_t load_seg; /**< Load segment for the initial boot image. */
   94     uint16_t load_size; /**< Number of sectors to load. */
   95     int load_size_full; /* 1= override load_size by image size */
   96 
   97     /* Byte 1 of Validation Entry or Section Header Entry:
   98        0= 80x86, 1= PowerPC, 2= Mac, 0xef= EFI */
   99     uint8_t platform_id;
  100     uint8_t id_string[28];
  101     uint8_t selection_crit[20];
  102 
  103 };
  104 
  105 /** El-Torito, 2.1 */
  106 struct el_torito_validation_entry {
  107     uint8_t header_id           BP(1, 1);
  108     uint8_t platform_id         BP(2, 2);
  109     uint8_t reserved            BP(3, 4);
  110     uint8_t id_string           BP(5, 28);
  111     uint8_t checksum            BP(29, 30);
  112     uint8_t key_byte1           BP(31, 31);
  113     uint8_t key_byte2           BP(32, 32);
  114 };
  115 
  116 /** El-Torito, 2.2 */
  117 struct el_torito_default_entry {
  118     uint8_t boot_indicator      BP(1, 1);
  119     uint8_t boot_media_type     BP(2, 2);
  120     uint8_t load_seg            BP(3, 4);
  121     uint8_t system_type         BP(5, 5);
  122     uint8_t unused1             BP(6, 6);
  123     uint8_t sec_count           BP(7, 8);
  124     uint8_t block               BP(9, 12);
  125     uint8_t unused2             BP(13, 32);
  126 };
  127 
  128 /** El-Torito, 2.3 */
  129 struct el_torito_section_header {
  130     uint8_t header_indicator    BP(1, 1);
  131     uint8_t platform_id         BP(2, 2);
  132     uint8_t num_entries         BP(3, 4);
  133     uint8_t id_string           BP(5, 32);
  134 };
  135 
  136 /** El-Torito, 2.4 */
  137 struct el_torito_section_entry {
  138     uint8_t boot_indicator      BP(1, 1);
  139     uint8_t boot_media_type     BP(2, 2);
  140     uint8_t load_seg            BP(3, 4);
  141     uint8_t system_type         BP(5, 5);
  142     uint8_t unused1             BP(6, 6);
  143     uint8_t sec_count           BP(7, 8);
  144     uint8_t block               BP(9, 12);
  145     uint8_t selec_criteria      BP(13, 13);
  146     uint8_t vendor_sc           BP(14, 32);
  147 };
  148 
  149 void el_torito_boot_catalog_free(struct el_torito_boot_catalog *cat);
  150 
  151 /**
  152  * Create a IsoFileSrc for writing the el-torito catalog for the given
  153  * target, and add it to target. If the target already has a src for the
  154  * catalog, it just returns.
  155  */
  156 int el_torito_catalog_file_src_create(Ecma119Image *target, IsoFileSrc **src);
  157 
  158 /**
  159  * Create a writer for el-torito information.
  160  */
  161 int eltorito_writer_create(Ecma119Image *target);
  162 
  163 /**
  164  * Insert boot info table content into buf.
  165  *
  166  * @return
  167  *      1 on success, 0 error (but continue), < 0 error
  168  */
  169 int make_boot_info_table(uint8_t *buf, uint32_t pvd_lba,
  170                          uint32_t boot_lba, uint32_t imgsize);
  171 
  172 /* Patch the boot images if indicated.
  173 */
  174 int iso_patch_eltoritos(Ecma119Image *t);
  175 
  176 
  177 /* Parameters for patch_grub2_boot_image()
  178    Might later become variables in struct el_torito_boot_image.
  179 */
  180 #define Libisofs_grub2_elto_patch_poS    (512 * 5 - 12)
  181 #define Libisofs_grub2_elto_patch_offsT  5
  182 
  183 
  184 /* Maximum size of a boot image which is marked by
  185    el_torito_set_isolinux_options() for patching (boot info table,
  186    GRUB2 boot info, maybe others).
  187 */
  188 #define Libisofs_elto_max_patchablE      (32 * 1024 * 1024)
  189 
  190 
  191 #endif /* LIBISO_ELTORITO_H */