blob: 448fff1c6536b28ca16c73c2b6dae917662719ad [file] [log] [blame]
/*
* Copyright (c) 2011, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Intel Corporation nor the names of its
* contributors may be used to endorse or promote products
* derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __BZIMAGE_H__
#define __BZIMAGE_H__
#define BOOTSIG 0x1FE
#define SETUP_VERSION 0x206
#define SETUP_HDR 0x53726448 /* 0x53726448 == "HdrS" */
#define E820_RAM 1
#define E820_RESERVED 2
#define E820_ACPI 3
#define E820_NVS 4
#define E820_UNUSABLE 5
struct setup_header {
UINT8 setup_secs; /* Sectors for setup code */
UINT16 root_flags;
UINT32 sys_size;
UINT16 ram_size;
UINT16 video_mode;
UINT16 root_dev;
UINT16 signature; /* Boot signature */
UINT16 jump;
UINT32 header;
UINT16 version;
UINT16 su_switch;
UINT16 setup_seg;
UINT16 start_sys;
UINT16 kernel_ver;
UINT8 loader_id;
UINT8 load_flags;
UINT16 movesize;
UINT32 code32_start; /* Start of code loaded high */
UINT32 ramdisk_start; /* Start of initial ramdisk */
UINT32 ramdisk_len; /* Lenght of initial ramdisk */
UINT32 bootsect_kludge;
UINT16 heap_end;
UINT8 ext_loader_ver; /* Extended boot loader version */
UINT8 ext_loader_type; /* Extended boot loader ID */
UINT32 cmd_line_ptr; /* 32-bit pointer to the kernel command line */
UINT32 ramdisk_max; /* Highest legal initrd address */
UINT32 kernel_alignment; /* Physical addr alignment required for kernel */
UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */
UINT8 _pad2[3];
UINT32 cmdline_size;
UINT32 hardware_subarch;
UINT64 hardware_subarch_data;
UINT32 payload_offset;
UINT32 payload_length;
UINT64 setup_data;
UINT64 pref_address;
UINT32 init_size;
} __attribute__((packed));
struct efi_info {
UINT32 efi_loader_signature;
UINT32 efi_systab;
UINT32 efi_memdesc_size;
UINT32 efi_memdesc_version;
UINT32 efi_memmap;
UINT32 efi_memmap_size;
UINT32 efi_systab_hi;
UINT32 efi_memmap_hi;
};
struct e820_entry {
UINT64 addr; /* start of memory segment */
UINT64 size; /* size of memory segment */
UINT32 type; /* type of memory segment */
} __attribute__((packed));
struct screen_info {
UINT8 orig_x; /* 0x00 */
UINT8 orig_y; /* 0x01 */
UINT16 ext_mem_k; /* 0x02 */
UINT16 orig_video_page; /* 0x04 */
UINT8 orig_video_mode; /* 0x06 */
UINT8 orig_video_cols; /* 0x07 */
UINT8 flags; /* 0x08 */
UINT8 unused2; /* 0x09 */
UINT16 orig_video_ega_bx;/* 0x0a */
UINT16 unused3; /* 0x0c */
UINT8 orig_video_lines; /* 0x0e */
UINT8 orig_video_isVGA; /* 0x0f */
UINT16 orig_video_points;/* 0x10 */
/* VESA graphic mode -- linear frame buffer */
UINT16 lfb_width; /* 0x12 */
UINT16 lfb_height; /* 0x14 */
UINT16 lfb_depth; /* 0x16 */
UINT32 lfb_base; /* 0x18 */
UINT32 lfb_size; /* 0x1c */
UINT16 cl_magic, cl_offset; /* 0x20 */
UINT16 lfb_linelength; /* 0x24 */
UINT8 red_size; /* 0x26 */
UINT8 red_pos; /* 0x27 */
UINT8 green_size; /* 0x28 */
UINT8 green_pos; /* 0x29 */
UINT8 blue_size; /* 0x2a */
UINT8 blue_pos; /* 0x2b */
UINT8 rsvd_size; /* 0x2c */
UINT8 rsvd_pos; /* 0x2d */
UINT16 vesapm_seg; /* 0x2e */
UINT16 vesapm_off; /* 0x30 */
UINT16 pages; /* 0x32 */
UINT16 vesa_attributes; /* 0x34 */
UINT32 capabilities; /* 0x36 */
UINT8 _reserved[6]; /* 0x3a */
} __attribute__((packed));
struct boot_params {
struct screen_info screen_info;
UINT8 apm_bios_info[0x14];
UINT8 _pad2[4];
UINT64 tboot_addr;
UINT8 ist_info[0x10];
UINT8 _pad3[16];
UINT8 hd0_info[16];
UINT8 hd1_info[16];
UINT8 sys_desc_table[0x10];
UINT8 olpc_ofw_header[0x10];
UINT8 _pad4[128];
UINT8 edid_info[0x80];
struct efi_info efi_info;
UINT32 alt_mem_k;
UINT32 scratch;
UINT8 e820_entries;
UINT8 eddbuf_entries;
UINT8 edd_mbr_sig_buf_entries;
UINT8 _pad6[6];
struct setup_header hdr;
UINT8 _pad7[0x290-0x1f1-sizeof(struct setup_header)];
UINT32 edd_mbr_sig_buffer[16];
struct e820_entry e820_map[128];
UINT8 _pad8[48];
UINT8 eddbuf[0x1ec];
UINT8 _pad9[276];
};
typedef struct {
UINT16 limit;
UINT64 *base;
} __attribute__((packed)) dt_addr_t;
extern EFI_STATUS setup_graphics(struct boot_params *buf);
#endif /* __BZIMAGE_H__ */