1 #ifndef _BZIMAGE_H 2 #define _BZIMAGE_H 3 4 FILE_LICENCE ( GPL2_OR_LATER ); 5 6 #include <stdint.h> 7 8 /** 9 * A bzImage header 10 * 11 * As documented in Documentation/i386/boot.txt 12 */ 13 struct bzimage_header { 14 /** The size of the setup in sectors 15 * 16 * If this field contains 0, assume it contains 4. 17 */ 18 uint8_t setup_sects; 19 /** If set, the root is mounted readonly */ 20 uint16_t root_flags; 21 /** DO NOT USE - for bootsect.S use only */ 22 uint16_t syssize; 23 /** DO NOT USE - obsolete */ 24 uint16_t swap_dev; 25 /** DO NOT USE - for bootsect.S use only */ 26 uint16_t ram_size; 27 /** Video mode control */ 28 uint16_t vid_mode; 29 /** Default root device number */ 30 uint16_t root_dev; 31 /** 0xAA55 magic number */ 32 uint16_t boot_flag; 33 /** Jump instruction */ 34 uint16_t jump; 35 /** Magic signature "HdrS" */ 36 uint32_t header; 37 /** Boot protocol version supported */ 38 uint16_t version; 39 /** Boot loader hook (see below) */ 40 uint32_t realmode_swtch; 41 /** The load-low segment (0x1000) (obsolete) */ 42 uint16_t start_sys; 43 /** Pointer to kernel version string */ 44 uint16_t kernel_version; 45 /** Boot loader identifier */ 46 uint8_t type_of_loader; 47 /** Boot protocol option flags */ 48 uint8_t loadflags; 49 /** Move to high memory size (used with hooks) */ 50 uint16_t setup_move_size; 51 /** Boot loader hook (see below) */ 52 uint32_t code32_start; 53 /** initrd load address (set by boot loader) */ 54 uint32_t ramdisk_image; 55 /** initrd size (set by boot loader) */ 56 uint32_t ramdisk_size; 57 /** DO NOT USE - for bootsect.S use only */ 58 uint32_t bootsect_kludge; 59 /** Free memory after setup end */ 60 uint16_t heap_end_ptr; 61 /** Unused */ 62 uint16_t pad1; 63 /** 32-bit pointer to the kernel command line */ 64 uint32_t cmd_line_ptr; 65 /** Highest legal initrd address */ 66 uint32_t initrd_addr_max; 67 /** Physical addr alignment required for kernel */ 68 uint32_t kernel_alignment; 69 /** Whether kernel is relocatable or not */ 70 uint8_t relocatable_kernel; 71 /** Unused */ 72 uint8_t pad2[3]; 73 /** Maximum size of the kernel command line */ 74 uint32_t cmdline_size; 75 } __attribute__ (( packed )); 76 77 /** Offset of bzImage header within kernel image */ 78 #define BZI_HDR_OFFSET 0x1f1 79 80 /** bzImage boot flag value */ 81 #define BZI_BOOT_FLAG 0xaa55 82 83 /** bzImage magic signature value */ 84 #define BZI_SIGNATURE 0x53726448 85 86 /** bzImage boot loader identifier for Etherboot */ 87 #define BZI_LOADER_TYPE_ETHERBOOT 0x40 88 89 /** bzImage boot loader identifier for gPXE 90 * 91 * We advertise ourselves as Etherboot version 6. 92 */ 93 #define BZI_LOADER_TYPE_GPXE ( BZI_LOADER_TYPE_ETHERBOOT | 0x06 ) 94 95 /** bzImage "load high" flag */ 96 #define BZI_LOAD_HIGH 0x01 97 98 /** Load address for high-loaded kernels */ 99 #define BZI_LOAD_HIGH_ADDR 0x100000 100 101 /** Load address for low-loaded kernels */ 102 #define BZI_LOAD_LOW_ADDR 0x10000 103 104 /** bzImage "kernel can use heap" flag */ 105 #define BZI_CAN_USE_HEAP 0x80 106 107 /** bzImage special video mode "normal" */ 108 #define BZI_VID_MODE_NORMAL 0xffff 109 110 /** bzImage special video mode "ext" */ 111 #define BZI_VID_MODE_EXT 0xfffe 112 113 /** bzImage special video mode "ask" */ 114 #define BZI_VID_MODE_ASK 0xfffd 115 116 /** bzImage maximum initrd address for versions < 2.03 */ 117 #define BZI_INITRD_MAX 0x37ffffff 118 119 /** bzImage command-line structure used by older kernels */ 120 struct bzimage_cmdline { 121 /** Magic signature */ 122 uint16_t magic; 123 /** Offset to command line */ 124 uint16_t offset; 125 } __attribute__ (( packed )); 126 127 /** Offset of bzImage command-line structure within kernel image */ 128 #define BZI_CMDLINE_OFFSET 0x20 129 130 /** bzImage command line present magic marker value */ 131 #define BZI_CMDLINE_MAGIC 0xa33f 132 133 /** Assumed size of real-mode portion (including .bss) */ 134 #define BZI_ASSUMED_RM_SIZE 0x8000 135 136 /** Amount of stack space to provide */ 137 #define BZI_STACK_SIZE 0x1000 138 139 /** Maximum size of command line */ 140 #define BZI_CMDLINE_SIZE 0x100 141 142 #endif /* _BZIMAGE_H */ 143