176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _BZIMAGE_H 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _BZIMAGE_H 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE ( GPL2_OR_LATER ); 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h> 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * A bzImage header 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * As documented in Documentation/i386/boot.txt 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct bzimage_header { 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** The size of the setup in sectors 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * If this field contains 0, assume it contains 4. 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t setup_sects; 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** If set, the root is mounted readonly */ 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t root_flags; 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** DO NOT USE - for bootsect.S use only */ 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t syssize; 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** DO NOT USE - obsolete */ 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t swap_dev; 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** DO NOT USE - for bootsect.S use only */ 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t ram_size; 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Video mode control */ 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vid_mode; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Default root device number */ 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t root_dev; 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** 0xAA55 magic number */ 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t boot_flag; 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Jump instruction */ 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t jump; 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Magic signature "HdrS" */ 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t header; 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Boot protocol version supported */ 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t version; 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Boot loader hook (see below) */ 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t realmode_swtch; 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** The load-low segment (0x1000) (obsolete) */ 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t start_sys; 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Pointer to kernel version string */ 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t kernel_version; 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Boot loader identifier */ 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t type_of_loader; 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Boot protocol option flags */ 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t loadflags; 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Move to high memory size (used with hooks) */ 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t setup_move_size; 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Boot loader hook (see below) */ 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t code32_start; 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** initrd load address (set by boot loader) */ 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t ramdisk_image; 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** initrd size (set by boot loader) */ 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t ramdisk_size; 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** DO NOT USE - for bootsect.S use only */ 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t bootsect_kludge; 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Free memory after setup end */ 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t heap_end_ptr; 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Unused */ 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t pad1; 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** 32-bit pointer to the kernel command line */ 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t cmd_line_ptr; 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Highest legal initrd address */ 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t initrd_addr_max; 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Physical addr alignment required for kernel */ 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t kernel_alignment; 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Whether kernel is relocatable or not */ 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t relocatable_kernel; 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Unused */ 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t pad2[3]; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Maximum size of the kernel command line */ 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t cmdline_size; 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed )); 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Offset of bzImage header within kernel image */ 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_HDR_OFFSET 0x1f1 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage boot flag value */ 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_BOOT_FLAG 0xaa55 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage magic signature value */ 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_SIGNATURE 0x53726448 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage boot loader identifier for Etherboot */ 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_LOADER_TYPE_ETHERBOOT 0x40 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage boot loader identifier for gPXE 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * We advertise ourselves as Etherboot version 6. 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_LOADER_TYPE_GPXE ( BZI_LOADER_TYPE_ETHERBOOT | 0x06 ) 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage "load high" flag */ 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_LOAD_HIGH 0x01 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Load address for high-loaded kernels */ 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_LOAD_HIGH_ADDR 0x100000 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Load address for low-loaded kernels */ 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_LOAD_LOW_ADDR 0x10000 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage "kernel can use heap" flag */ 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_CAN_USE_HEAP 0x80 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage special video mode "normal" */ 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_VID_MODE_NORMAL 0xffff 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage special video mode "ext" */ 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_VID_MODE_EXT 0xfffe 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage special video mode "ask" */ 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_VID_MODE_ASK 0xfffd 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage maximum initrd address for versions < 2.03 */ 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_INITRD_MAX 0x37ffffff 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage command-line structure used by older kernels */ 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct bzimage_cmdline { 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Magic signature */ 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t magic; 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /** Offset to command line */ 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t offset; 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed )); 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Offset of bzImage command-line structure within kernel image */ 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_CMDLINE_OFFSET 0x20 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** bzImage command line present magic marker value */ 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_CMDLINE_MAGIC 0xa33f 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Assumed size of real-mode portion (including .bss) */ 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_ASSUMED_RM_SIZE 0x8000 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Amount of stack space to provide */ 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_STACK_SIZE 0x1000 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Maximum size of command line */ 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BZI_CMDLINE_SIZE 0x100 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* _BZIMAGE_H */ 143