| #ifndef _BZIMAGE_H |
| #define _BZIMAGE_H |
| |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); |
| |
| #include <stdint.h> |
| |
| /** |
| * A bzImage header |
| * |
| * As documented in Documentation/i386/boot.txt |
| */ |
| struct bzimage_header { |
| /** The size of the setup in sectors |
| * |
| * If this field contains 0, assume it contains 4. |
| */ |
| uint8_t setup_sects; |
| /** If set, the root is mounted readonly */ |
| uint16_t root_flags; |
| /** DO NOT USE - for bootsect.S use only */ |
| uint16_t syssize; |
| /** DO NOT USE - obsolete */ |
| uint16_t swap_dev; |
| /** DO NOT USE - for bootsect.S use only */ |
| uint16_t ram_size; |
| /** Video mode control */ |
| uint16_t vid_mode; |
| /** Default root device number */ |
| uint16_t root_dev; |
| /** 0xAA55 magic number */ |
| uint16_t boot_flag; |
| /** Jump instruction */ |
| uint16_t jump; |
| /** Magic signature "HdrS" */ |
| uint32_t header; |
| /** Boot protocol version supported */ |
| uint16_t version; |
| /** Boot loader hook (see below) */ |
| uint32_t realmode_swtch; |
| /** The load-low segment (0x1000) (obsolete) */ |
| uint16_t start_sys; |
| /** Pointer to kernel version string */ |
| uint16_t kernel_version; |
| /** Boot loader identifier */ |
| uint8_t type_of_loader; |
| /** Boot protocol option flags */ |
| uint8_t loadflags; |
| /** Move to high memory size (used with hooks) */ |
| uint16_t setup_move_size; |
| /** Boot loader hook (see below) */ |
| uint32_t code32_start; |
| /** initrd load address (set by boot loader) */ |
| uint32_t ramdisk_image; |
| /** initrd size (set by boot loader) */ |
| uint32_t ramdisk_size; |
| /** DO NOT USE - for bootsect.S use only */ |
| uint32_t bootsect_kludge; |
| /** Free memory after setup end */ |
| uint16_t heap_end_ptr; |
| /** Unused */ |
| uint16_t pad1; |
| /** 32-bit pointer to the kernel command line */ |
| uint32_t cmd_line_ptr; |
| /** Highest legal initrd address */ |
| uint32_t initrd_addr_max; |
| /** Physical addr alignment required for kernel */ |
| uint32_t kernel_alignment; |
| /** Whether kernel is relocatable or not */ |
| uint8_t relocatable_kernel; |
| /** Unused */ |
| uint8_t pad2[3]; |
| /** Maximum size of the kernel command line */ |
| uint32_t cmdline_size; |
| } __attribute__ (( packed )); |
| |
| /** Offset of bzImage header within kernel image */ |
| #define BZI_HDR_OFFSET 0x1f1 |
| |
| /** bzImage boot flag value */ |
| #define BZI_BOOT_FLAG 0xaa55 |
| |
| /** bzImage magic signature value */ |
| #define BZI_SIGNATURE 0x53726448 |
| |
| /** bzImage boot loader identifier for Etherboot */ |
| #define BZI_LOADER_TYPE_ETHERBOOT 0x40 |
| |
| /** bzImage boot loader identifier for iPXE |
| * |
| * We advertise ourselves as Etherboot version 6. |
| */ |
| #define BZI_LOADER_TYPE_IPXE ( BZI_LOADER_TYPE_ETHERBOOT | 0x06 ) |
| |
| /** bzImage "load high" flag */ |
| #define BZI_LOAD_HIGH 0x01 |
| |
| /** Load address for high-loaded kernels */ |
| #define BZI_LOAD_HIGH_ADDR 0x100000 |
| |
| /** Load address for low-loaded kernels */ |
| #define BZI_LOAD_LOW_ADDR 0x10000 |
| |
| /** bzImage "kernel can use heap" flag */ |
| #define BZI_CAN_USE_HEAP 0x80 |
| |
| /** bzImage special video mode "normal" */ |
| #define BZI_VID_MODE_NORMAL 0xffff |
| |
| /** bzImage special video mode "ext" */ |
| #define BZI_VID_MODE_EXT 0xfffe |
| |
| /** bzImage special video mode "ask" */ |
| #define BZI_VID_MODE_ASK 0xfffd |
| |
| /** bzImage maximum initrd address for versions < 2.03 */ |
| #define BZI_INITRD_MAX 0x37ffffff |
| |
| /** bzImage command-line structure used by older kernels */ |
| struct bzimage_cmdline { |
| /** Magic signature */ |
| uint16_t magic; |
| /** Offset to command line */ |
| uint16_t offset; |
| } __attribute__ (( packed )); |
| |
| /** Offset of bzImage command-line structure within kernel image */ |
| #define BZI_CMDLINE_OFFSET 0x20 |
| |
| /** bzImage command line present magic marker value */ |
| #define BZI_CMDLINE_MAGIC 0xa33f |
| |
| /** Assumed size of real-mode portion (including .bss) */ |
| #define BZI_ASSUMED_RM_SIZE 0x8000 |
| |
| /** Amount of stack space to provide */ |
| #define BZI_STACK_SIZE 0x1000 |
| |
| /** Maximum size of command line */ |
| #define BZI_CMDLINE_SIZE 0x7ff |
| |
| #endif /* _BZIMAGE_H */ |