#ifndef _LINUX_H
#define _LINUX_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef ASM_FILE
struct linux_kernel_header
{
uint8_t code1[0x0020];
uint16_t cl_magic;
uint16_t cl_offset;
uint8_t code2[0x01F1 - 0x0020 - 2 - 2];
uint8_t setup_sects;
uint16_t root_flags;
uint16_t syssize;
uint16_t swap_dev;
uint16_t ram_size;
uint16_t vid_mode;
uint16_t root_dev;
uint16_t boot_flag;
uint16_t jump;
uint32_t header;
uint16_t version;
uint32_t realmode_swtch;
uint16_t start_sys;
uint16_t kernel_version;
uint8_t type_of_loader;
uint8_t loadflags;
uint16_t setup_move_size;
uint32_t code32_start;
uint32_t ramdisk_image;
uint32_t ramdisk_size;
uint32_t bootsect_kludge;
uint16_t heap_end_ptr;
uint16_t pad1;
uint32_t cmd_line_ptr;
uint32_t initrd_addr_max;
uint32_t kernel_alignment;
uint8_t relocatable;
uint8_t min_alignment;
uint8_t pad[2];
uint32_t cmdline_size;
uint32_t hardware_subarch;
uint64_t hardware_subarch_data;
uint32_t payload_offset;
uint32_t payload_length;
uint64_t setup_data;
uint64_t pref_address;
uint32_t init_size;
} __attribute__ ((packed));
#endif
#define LINUX_VID_MODE_NORMAL 0xFFFF
#define LINUX_VID_MODE_EXTENDED 0xFFFE
#define LINUX_VID_MODE_ASK 0xFFFD
#define BOOTSEC_SIGNATURE 0xAA55
#define LINUX_BOOT_LOADER_TYPE 0x72
#define LINUX_BZIMAGE_ADDR 0x100000
#define LINUX_CL_END_OFFSET 0x90FF
#define LINUX_CL_MAGIC 0xA33F
#define LINUX_CL_OFFSET 0x9000
#define LINUX_DEFAULT_SETUP_SECTS 4
#define LINUX_ESP 0x9000
#define LINUX_FLAG_BIG_KERNEL 0x1
#define LINUX_FLAG_CAN_USE_HEAP 0x80
#define LINUX_HEAP_END_OFFSET (0x9000 - 0x200)
#define LINUX_MAGIC_SIGNATURE 0x53726448
#define LINUX_MAX_SETUP_SECTS 64
#define LINUX_OLD_REAL_MODE_ADDR 0x90000
#define LINUX_SETUP_MOVE_SIZE 0x9100
#define LINUX_ZIMAGE_ADDR 0x10000
#define LINUX_INITRD_MAX_ADDRESS 0x38000000
#ifdef __cplusplus
}
#endif
#endif