Home | History | Annotate | Download | only in IndustryStandard
      1 /** @file
      2 
      3   Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
      4   This program and the accompanying materials
      5   are licensed and made available under the terms and conditions of the BSD License
      6   which accompanies this distribution.  The full text of the license may be found at
      7   http://opensource.org/licenses/bsd-license.php
      8 
      9   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 **/
     13 
     14 #ifndef __LINUX_BZIMAGE_H__
     15 #define __LINUX_BZIMAGE_H__
     16 
     17 #define BOOTSIG			0x1FE
     18 #define SETUP_HDR		0x53726448	/* 0x53726448 == "HdrS" */
     19 
     20 #define E820_RAM		1
     21 #define E820_RESERVED		2
     22 #define E820_ACPI		3
     23 #define E820_NVS		4
     24 #define E820_UNUSABLE		5
     25 
     26 #pragma pack(1)
     27 
     28 struct setup_header {
     29 	UINT8 setup_secs;	/* Sectors for setup code */
     30 	UINT16 root_flags;
     31 	UINT32 sys_size;
     32 	UINT16 ram_size;
     33 	UINT16 video_mode;
     34 	UINT16 root_dev;
     35 	UINT16 signature;	/* Boot signature */
     36 	UINT16 jump;
     37 	UINT32 header;
     38 	UINT16 version;
     39 	UINT16 su_switch;
     40 	UINT16 setup_seg;
     41 	UINT16 start_sys;
     42 	UINT16 kernel_ver;
     43 	UINT8 loader_id;
     44 	UINT8 load_flags;
     45 	UINT16 movesize;
     46 	UINT32 code32_start;	/* Start of code loaded high */
     47 	UINT32 ramdisk_start;	/* Start of initial ramdisk */
     48 	UINT32 ramdisk_len;	/* Lenght of initial ramdisk */
     49 	UINT32 bootsect_kludge;
     50 	UINT16 heap_end;
     51 	UINT8 ext_loader_ver;  /* Extended boot loader version */
     52 	UINT8 ext_loader_type; /* Extended boot loader ID */
     53 	UINT32 cmd_line_ptr;   /* 32-bit pointer to the kernel command line */
     54 	UINT32 ramdisk_max;    /* Highest legal initrd address */
     55 	UINT32 kernel_alignment; /* Physical addr alignment required for kernel */
     56 	UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */
     57 	UINT8 min_alignment;
     58 	UINT16 xloadflags;
     59 	UINT32 cmdline_size;
     60 	UINT32 hardware_subarch;
     61 	UINT64 hardware_subarch_data;
     62 	UINT32 payload_offset;
     63 	UINT32 payload_length;
     64 	UINT64 setup_data;
     65 	UINT64 pref_address;
     66 	UINT32 init_size;
     67 	UINT32 handover_offset;
     68 };
     69 
     70 struct efi_info {
     71 	UINT32 efi_loader_signature;
     72 	UINT32 efi_systab;
     73 	UINT32 efi_memdesc_size;
     74 	UINT32 efi_memdesc_version;
     75 	UINT32 efi_memmap;
     76 	UINT32 efi_memmap_size;
     77 	UINT32 efi_systab_hi;
     78 	UINT32 efi_memmap_hi;
     79 };
     80 
     81 struct e820_entry {
     82 	UINT64 addr;		/* start of memory segment */
     83 	UINT64 size;		/* size of memory segment */
     84 	UINT32 type;		/* type of memory segment */
     85 };
     86 
     87 struct screen_info {
     88         UINT8  orig_x;           /* 0x00 */
     89         UINT8  orig_y;           /* 0x01 */
     90         UINT16 ext_mem_k;        /* 0x02 */
     91         UINT16 orig_video_page;  /* 0x04 */
     92         UINT8  orig_video_mode;  /* 0x06 */
     93         UINT8  orig_video_cols;  /* 0x07 */
     94         UINT8  flags;            /* 0x08 */
     95         UINT8  unused2;          /* 0x09 */
     96         UINT16 orig_video_ega_bx;/* 0x0a */
     97         UINT16 unused3;          /* 0x0c */
     98         UINT8  orig_video_lines; /* 0x0e */
     99         UINT8  orig_video_isVGA; /* 0x0f */
    100         UINT16 orig_video_points;/* 0x10 */
    101 
    102 	/* VESA graphic mode -- linear frame buffer */
    103         UINT16 lfb_width;        /* 0x12 */
    104         UINT16 lfb_height;       /* 0x14 */
    105         UINT16 lfb_depth;        /* 0x16 */
    106         UINT32 lfb_base;         /* 0x18 */
    107         UINT32 lfb_size;         /* 0x1c */
    108         UINT16 cl_magic, cl_offset; /* 0x20 */
    109 	UINT16 lfb_linelength;   /* 0x24 */
    110         UINT8  red_size;         /* 0x26 */
    111         UINT8  red_pos;          /* 0x27 */
    112         UINT8  green_size;       /* 0x28 */
    113 	UINT8  green_pos;        /* 0x29 */
    114         UINT8  blue_size;        /* 0x2a */
    115 	UINT8  blue_pos;         /* 0x2b */
    116         UINT8  rsvd_size;        /* 0x2c */
    117         UINT8  rsvd_pos;         /* 0x2d */
    118         UINT16 vesapm_seg;       /* 0x2e */
    119 	UINT16 vesapm_off;       /* 0x30 */
    120         UINT16 pages;            /* 0x32 */
    121         UINT16 vesa_attributes;  /* 0x34 */
    122         UINT32 capabilities;     /* 0x36 */
    123         UINT8  _reserved[6];     /* 0x3a */
    124 };
    125 
    126 struct boot_params {
    127 	struct screen_info screen_info;
    128 	UINT8 apm_bios_info[0x14];
    129 	UINT8 _pad2[4];
    130 	UINT64 tboot_addr;
    131 	UINT8 ist_info[0x10];
    132 	UINT8 _pad3[16];
    133 	UINT8 hd0_info[16];
    134 	UINT8 hd1_info[16];
    135 	UINT8 sys_desc_table[0x10];
    136 	UINT8 olpc_ofw_header[0x10];
    137 	UINT8 _pad4[128];
    138 	UINT8 edid_info[0x80];
    139 	struct efi_info efi_info;
    140 	UINT32 alt_mem_k;
    141 	UINT32 scratch;
    142 	UINT8 e820_entries;
    143 	UINT8 eddbuf_entries;
    144 	UINT8 edd_mbr_sig_buf_entries;
    145 	UINT8 _pad6[6];
    146 	struct setup_header hdr;
    147 	UINT8 _pad7[0x290-0x1f1-sizeof(struct setup_header)];
    148 	UINT32 edd_mbr_sig_buffer[16];
    149 	struct e820_entry e820_map[128];
    150 	UINT8 _pad8[48];
    151 	UINT8 eddbuf[0x1ec];
    152 	UINT8 _pad9[276];
    153 };
    154 
    155 typedef struct {
    156 	UINT16 limit;
    157 	UINT64 *base;
    158 } dt_addr_t;
    159 
    160 #pragma pack()
    161 
    162 extern EFI_STATUS setup_graphics(struct boot_params *buf);
    163 
    164 #endif /* __LINUX_BZIMAGE_H__ */
    165