summaryrefslogtreecommitdiff
path: root/futility/kernel_blob.h
blob: 173d48d2dd646494e776cb4c02882ca3f9de12c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Copyright 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Constants describing the kernel blob content.

#ifndef VBOOT_REFERENCE_KERNEL_BLOB_H_
#define VBOOT_REFERENCE_KERNEL_BLOB_H_


// Maximum kernel command-line size
#define CROS_CONFIG_SIZE 4096

// Size of the x86 zeropage table
#define CROS_PARAMS_SIZE 4096

// Alignment of various chunks within the kernel blob
#define CROS_ALIGN 4096

// Sentinel RAM address indicating that no entry address is specified
#define CROS_NO_ENTRY_ADDR     (~0)

// RAM address where the 32-bit kernel expects to be started
#define CROS_32BIT_ENTRY_ADDR  0x100000

// Simplified version of x86 kernel e820 memory map entries
#define E820_ENTRY_MAX 128
#define E820_TYPE_RAM      1
#define E820_TYPE_RESERVED 2

struct linux_kernel_e820entry {
  uint64_t start_addr;
  uint64_t segment_size;
  uint32_t segment_type;
} __attribute__((packed));

// Simplified version of the x86 kernel zeropage table
struct linux_kernel_params
{
  uint8_t  pad0[0x1e8 - 0x0];
  uint8_t  n_e820_entry;                // 1e8
  uint8_t  pad1[0x1f1 - 0x1e9];
  uint8_t  setup_sects;                 // 1f1
  uint8_t  pad2[0x1fe - 0x1f2];
  uint16_t boot_flag;                   // 1fe
  uint16_t jump;                        // 200
  uint32_t header;                      // 202
  uint16_t version;                     // 206
  uint8_t  pad3[0x210 - 0x208];
  uint8_t  type_of_loader;              // 210
  uint8_t  pad4[0x218 - 0x211];
  uint32_t ramdisk_image;               // 218
  uint32_t ramdisk_size;                // 21c
  uint8_t  pad5[0x228 - 0x220];
  uint32_t cmd_line_ptr;                // 228
  uint32_t ramdisk_max;                 // 22c
  uint32_t kernel_alignment;            // 230
  uint8_t  relocatable_kernel;          // 234
  uint8_t  min_alignment;               // 235
  uint8_t  pad6[0x2d0 - 0x236];
  struct   linux_kernel_e820entry e820_entries[E820_ENTRY_MAX]; // 2d0 - cd0
} __attribute__ ((packed));


#endif  // VBOOT_REFERENCE_KERNEL_BLOB_H_