1*4a5d661aSToomas Soome /* 2*4a5d661aSToomas Soome * This file and its contents are supplied under the terms of the 3*4a5d661aSToomas Soome * Common Development and Distribution License ("CDDL"), version 1.0. 4*4a5d661aSToomas Soome * You may only use this file in accordance with the terms of version 5*4a5d661aSToomas Soome * 1.0 of the CDDL. 6*4a5d661aSToomas Soome * 7*4a5d661aSToomas Soome * A full copy of the text of the CDDL should have accompanied this 8*4a5d661aSToomas Soome * source. A copy of the CDDL is also available via the Internet at 9*4a5d661aSToomas Soome * http://www.illumos.org/license/CDDL. 10*4a5d661aSToomas Soome */ 11*4a5d661aSToomas Soome 12*4a5d661aSToomas Soome /* 13*4a5d661aSToomas Soome * Copyright 2015 Toomas Soome <tsoome@me.com> 14*4a5d661aSToomas Soome */ 15*4a5d661aSToomas Soome 16*4a5d661aSToomas Soome #ifndef _LINUX_H 17*4a5d661aSToomas Soome #define _LINUX_H 18*4a5d661aSToomas Soome 19*4a5d661aSToomas Soome #ifdef __cplusplus 20*4a5d661aSToomas Soome extern "C" { 21*4a5d661aSToomas Soome #endif 22*4a5d661aSToomas Soome 23*4a5d661aSToomas Soome #ifndef ASM_FILE 24*4a5d661aSToomas Soome /* For the Linux/i386 boot protocol version 2.10. */ 25*4a5d661aSToomas Soome struct linux_kernel_header 26*4a5d661aSToomas Soome { 27*4a5d661aSToomas Soome uint8_t code1[0x0020]; 28*4a5d661aSToomas Soome uint16_t cl_magic; /* Magic number 0xA33F */ 29*4a5d661aSToomas Soome uint16_t cl_offset; /* The offset of command line */ 30*4a5d661aSToomas Soome uint8_t code2[0x01F1 - 0x0020 - 2 - 2]; 31*4a5d661aSToomas Soome uint8_t setup_sects; /* The size of the setup in sectors */ 32*4a5d661aSToomas Soome uint16_t root_flags; /* If the root is mounted readonly */ 33*4a5d661aSToomas Soome uint16_t syssize; /* obsolete */ 34*4a5d661aSToomas Soome uint16_t swap_dev; /* obsolete */ 35*4a5d661aSToomas Soome uint16_t ram_size; /* obsolete */ 36*4a5d661aSToomas Soome uint16_t vid_mode; /* Video mode control */ 37*4a5d661aSToomas Soome uint16_t root_dev; /* Default root device number */ 38*4a5d661aSToomas Soome uint16_t boot_flag; /* 0xAA55 magic number */ 39*4a5d661aSToomas Soome uint16_t jump; /* Jump instruction */ 40*4a5d661aSToomas Soome uint32_t header; /* Magic signature "HdrS" */ 41*4a5d661aSToomas Soome uint16_t version; /* Boot protocol version supported */ 42*4a5d661aSToomas Soome uint32_t realmode_swtch; /* Boot loader hook */ 43*4a5d661aSToomas Soome uint16_t start_sys; /* The load-low segment (obsolete) */ 44*4a5d661aSToomas Soome uint16_t kernel_version; /* Points to kernel version string */ 45*4a5d661aSToomas Soome uint8_t type_of_loader; /* Boot loader identifier */ 46*4a5d661aSToomas Soome uint8_t loadflags; /* Boot protocol option flags */ 47*4a5d661aSToomas Soome uint16_t setup_move_size; /* Move to high memory size */ 48*4a5d661aSToomas Soome uint32_t code32_start; /* Boot loader hook */ 49*4a5d661aSToomas Soome uint32_t ramdisk_image; /* initrd load address */ 50*4a5d661aSToomas Soome uint32_t ramdisk_size; /* initrd size */ 51*4a5d661aSToomas Soome uint32_t bootsect_kludge; /* obsolete */ 52*4a5d661aSToomas Soome uint16_t heap_end_ptr; /* Free memory after setup end */ 53*4a5d661aSToomas Soome uint16_t pad1; /* Unused */ 54*4a5d661aSToomas Soome uint32_t cmd_line_ptr; /* Points to the kernel command line */ 55*4a5d661aSToomas Soome uint32_t initrd_addr_max; /* Highest address for initrd */ 56*4a5d661aSToomas Soome uint32_t kernel_alignment; 57*4a5d661aSToomas Soome uint8_t relocatable; 58*4a5d661aSToomas Soome uint8_t min_alignment; 59*4a5d661aSToomas Soome uint8_t pad[2]; 60*4a5d661aSToomas Soome uint32_t cmdline_size; 61*4a5d661aSToomas Soome uint32_t hardware_subarch; 62*4a5d661aSToomas Soome uint64_t hardware_subarch_data; 63*4a5d661aSToomas Soome uint32_t payload_offset; 64*4a5d661aSToomas Soome uint32_t payload_length; 65*4a5d661aSToomas Soome uint64_t setup_data; 66*4a5d661aSToomas Soome uint64_t pref_address; 67*4a5d661aSToomas Soome uint32_t init_size; 68*4a5d661aSToomas Soome } __attribute__ ((packed)); 69*4a5d661aSToomas Soome #endif 70*4a5d661aSToomas Soome 71*4a5d661aSToomas Soome #define LINUX_VID_MODE_NORMAL 0xFFFF 72*4a5d661aSToomas Soome #define LINUX_VID_MODE_EXTENDED 0xFFFE 73*4a5d661aSToomas Soome #define LINUX_VID_MODE_ASK 0xFFFD 74*4a5d661aSToomas Soome 75*4a5d661aSToomas Soome #define BOOTSEC_SIGNATURE 0xAA55 76*4a5d661aSToomas Soome #define LINUX_BOOT_LOADER_TYPE 0x72 77*4a5d661aSToomas Soome #define LINUX_BZIMAGE_ADDR 0x100000 78*4a5d661aSToomas Soome #define LINUX_CL_END_OFFSET 0x90FF 79*4a5d661aSToomas Soome #define LINUX_CL_MAGIC 0xA33F 80*4a5d661aSToomas Soome #define LINUX_CL_OFFSET 0x9000 81*4a5d661aSToomas Soome #define LINUX_DEFAULT_SETUP_SECTS 4 82*4a5d661aSToomas Soome #define LINUX_ESP 0x9000 83*4a5d661aSToomas Soome #define LINUX_FLAG_BIG_KERNEL 0x1 84*4a5d661aSToomas Soome #define LINUX_FLAG_CAN_USE_HEAP 0x80 85*4a5d661aSToomas Soome #define LINUX_HEAP_END_OFFSET (0x9000 - 0x200) 86*4a5d661aSToomas Soome #define LINUX_MAGIC_SIGNATURE 0x53726448 87*4a5d661aSToomas Soome #define LINUX_MAX_SETUP_SECTS 64 88*4a5d661aSToomas Soome #define LINUX_OLD_REAL_MODE_ADDR 0x90000 89*4a5d661aSToomas Soome #define LINUX_SETUP_MOVE_SIZE 0x9100 90*4a5d661aSToomas Soome #define LINUX_ZIMAGE_ADDR 0x10000 91*4a5d661aSToomas Soome #define LINUX_INITRD_MAX_ADDRESS 0x38000000 92*4a5d661aSToomas Soome 93*4a5d661aSToomas Soome #ifdef __cplusplus 94*4a5d661aSToomas Soome } 95*4a5d661aSToomas Soome #endif 96*4a5d661aSToomas Soome 97*4a5d661aSToomas Soome #endif /* _LINUX_H */ 98