linux.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. /*
  2. * GRUB -- GRand Unified Bootloader
  3. * Copyright (C) 1999,2000,2001,2002,2003,2004,2007,2008,2009 Free Software Foundation, Inc.
  4. *
  5. * GRUB is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * GRUB is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #ifndef GRUB_I386_LINUX_HEADER
  19. #define GRUB_I386_LINUX_HEADER 1
  20. #include <grub/types.h>
  21. #define GRUB_LINUX_I386_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */
  22. #define GRUB_LINUX_DEFAULT_SETUP_SECTS 4
  23. #define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF
  24. #define GRUB_LINUX_MAX_SETUP_SECTS 64
  25. #define GRUB_LINUX_BOOT_LOADER_TYPE 0x72
  26. #define GRUB_LINUX_HEAP_END_OFFSET (0x9000 - 0x200)
  27. #define GRUB_LINUX_BZIMAGE_ADDR 0x100000
  28. #define GRUB_LINUX_ZIMAGE_ADDR 0x10000
  29. #define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000
  30. #define GRUB_LINUX_SETUP_STACK 0x9000
  31. #define GRUB_LINUX_FLAG_BIG_KERNEL 0x1
  32. #define GRUB_LINUX_FLAG_QUIET 0x20
  33. #define GRUB_LINUX_FLAG_CAN_USE_HEAP 0x80
  34. /* Linux's video mode selection support. Actually I hate it! */
  35. #define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF
  36. #define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE
  37. #define GRUB_LINUX_VID_MODE_ASK 0xFFFD
  38. #define GRUB_LINUX_VID_MODE_VESA_START 0x0300
  39. #define GRUB_LINUX_CL_MAGIC 0xA33F
  40. #define VIDEO_CAPABILITY_SKIP_QUIRKS (1 << 0)
  41. #define VIDEO_CAPABILITY_64BIT_BASE (1 << 1) /* Frame buffer base is 64-bit. */
  42. /* Maximum number of MBR signatures to store. */
  43. #define EDD_MBR_SIG_MAX 16
  44. /* Number of edd_info structs starting at EDDBUF. */
  45. #define EDDMAXNR 6
  46. #ifdef __x86_64__
  47. #define GRUB_LINUX_EFI_SIGNATURE \
  48. ('4' << 24 | '6' << 16 | 'L' << 8 | 'E')
  49. #else
  50. #define GRUB_LINUX_EFI_SIGNATURE \
  51. ('2' << 24 | '3' << 16 | 'L' << 8 | 'E')
  52. #endif
  53. #define GRUB_LINUX_EFI_SIGNATURE_0204 \
  54. ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E')
  55. #define GRUB_LINUX_OFW_SIGNATURE \
  56. (' ' << 24 | 'W' << 16 | 'F' << 8 | 'O')
  57. #define LINUX_X86_XLF_KERNEL_64 (1<<0)
  58. #define LINUX_X86_XLF_CAN_BE_LOADED_ABOVE_4G (1<<1)
  59. #define LINUX_X86_XLF_EFI_HANDOVER_32 (1<<2)
  60. #define LINUX_X86_XLF_EFI_HANDOVER_64 (1<<3)
  61. #define LINUX_X86_XLF_EFI_KEXEC (1<<4)
  62. #define LINUX_X86_XLF_5LEVEL (1<<5)
  63. #define LINUX_X86_XLF_5LEVEL_ENABLED (1<<6)
  64. #define LINUX_X86_STARTUP64_OFFSET 0x200
  65. #ifndef ASM_FILE
  66. #define GRUB_E820_RAM 1
  67. #define GRUB_E820_RESERVED 2
  68. #define GRUB_E820_ACPI 3
  69. #define GRUB_E820_NVS 4
  70. #define GRUB_E820_BADRAM 5
  71. #define GRUB_E820_MAX_ENTRIES_ZEROPAGE 128
  72. struct grub_screen_info
  73. {
  74. grub_uint8_t orig_x; /* 0x00 */
  75. grub_uint8_t orig_y; /* 0x01 */
  76. grub_uint16_t ext_mem_k; /* 0x02 */
  77. grub_uint16_t orig_video_page; /* 0x04 */
  78. grub_uint8_t orig_video_mode; /* 0x06 */
  79. grub_uint8_t orig_video_cols; /* 0x07 */
  80. grub_uint8_t flags; /* 0x08 */
  81. grub_uint8_t unused2; /* 0x09 */
  82. grub_uint16_t orig_video_ega_bx; /* 0x0a */
  83. grub_uint16_t unused3; /* 0x0c */
  84. grub_uint8_t orig_video_lines; /* 0x0e */
  85. grub_uint8_t orig_video_isVGA; /* 0x0f */
  86. grub_uint16_t orig_video_points; /* 0x10 */
  87. /* VESA graphic mode -- linear frame buffer */
  88. grub_uint16_t lfb_width; /* 0x12 */
  89. grub_uint16_t lfb_height; /* 0x14 */
  90. grub_uint16_t lfb_depth; /* 0x16 */
  91. grub_uint32_t lfb_base; /* 0x18 */
  92. grub_uint32_t lfb_size; /* 0x1c */
  93. grub_uint16_t cl_magic, cl_offset; /* 0x20 */
  94. grub_uint16_t lfb_linelength; /* 0x24 */
  95. grub_uint8_t red_size; /* 0x26 */
  96. grub_uint8_t red_pos; /* 0x27 */
  97. grub_uint8_t green_size; /* 0x28 */
  98. grub_uint8_t green_pos; /* 0x29 */
  99. grub_uint8_t blue_size; /* 0x2a */
  100. grub_uint8_t blue_pos; /* 0x2b */
  101. grub_uint8_t rsvd_size; /* 0x2c */
  102. grub_uint8_t rsvd_pos; /* 0x2d */
  103. grub_uint16_t vesapm_seg; /* 0x2e */
  104. grub_uint16_t vesapm_off; /* 0x30 */
  105. grub_uint16_t pages; /* 0x32 */
  106. grub_uint16_t vesa_attributes; /* 0x34 */
  107. grub_uint32_t capabilities; /* 0x36 */
  108. grub_uint32_t ext_lfb_base; /* 0x3a */
  109. grub_uint8_t _reserved[2]; /* 0x3e */
  110. } GRUB_PACKED;
  111. struct grub_apm_bios_info
  112. {
  113. grub_uint16_t version;
  114. grub_uint16_t cseg;
  115. grub_uint32_t offset;
  116. grub_uint16_t cseg_16;
  117. grub_uint16_t dseg;
  118. grub_uint16_t flags;
  119. grub_uint16_t cseg_len;
  120. grub_uint16_t cseg_16_len;
  121. grub_uint16_t dseg_len;
  122. };
  123. struct grub_ist_info
  124. {
  125. grub_uint32_t signature;
  126. grub_uint32_t command;
  127. grub_uint32_t event;
  128. grub_uint32_t perf_level;
  129. };
  130. struct grub_sys_desc_table
  131. {
  132. grub_uint16_t length;
  133. grub_uint8_t table[14];
  134. };
  135. struct grub_olpc_ofw_header {
  136. grub_uint32_t ofw_magic; /* OFW signature */
  137. grub_uint32_t ofw_version;
  138. grub_uint32_t cif_handler; /* callback into OFW */
  139. grub_uint32_t irq_desc_table;
  140. } GRUB_PACKED;
  141. struct grub_setup_header
  142. {
  143. grub_uint8_t setup_sects; /* The size of the setup in sectors */
  144. grub_uint16_t root_flags; /* If the root is mounted readonly */
  145. grub_uint32_t syssize; /* obsolete */
  146. grub_uint16_t ram_size; /* obsolete */
  147. grub_uint16_t vid_mode; /* Video mode control */
  148. grub_uint16_t root_dev; /* Default root device number */
  149. grub_uint16_t boot_flag; /* 1fe */
  150. grub_uint16_t jump; /* Jump instruction */
  151. grub_uint32_t header; /* Magic signature "HdrS" */
  152. grub_uint16_t version; /* Boot protocol version supported */
  153. grub_uint32_t realmode_swtch; /* Boot loader hook */
  154. grub_uint16_t start_sys; /* The load-low segment (obsolete) */
  155. grub_uint16_t kernel_version; /* Points to kernel version string */
  156. grub_uint8_t type_of_loader; /* Boot loader identifier */
  157. grub_uint8_t loadflags; /* Boot protocol option flags */
  158. grub_uint16_t setup_move_size; /* Move to high memory size */
  159. grub_uint32_t code32_start; /* Boot loader hook */
  160. grub_uint32_t ramdisk_image; /* initrd load address */
  161. grub_uint32_t ramdisk_size; /* initrd size */
  162. grub_uint32_t bootsect_kludge; /* obsolete */
  163. grub_uint16_t heap_end_ptr; /* Free memory after setup end */
  164. grub_uint8_t ext_loader_ver; /* Extended loader version */
  165. grub_uint8_t ext_loader_type; /* Extended loader type */
  166. grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */
  167. grub_uint32_t initrd_addr_max; /* Maximum initrd address */
  168. grub_uint32_t kernel_alignment; /* Alignment of the kernel */
  169. grub_uint8_t relocatable_kernel; /* Is the kernel relocatable */
  170. grub_uint8_t min_alignment;
  171. grub_uint16_t xloadflags;
  172. grub_uint32_t cmdline_size; /* Size of the kernel command line */
  173. grub_uint32_t hardware_subarch;
  174. grub_uint64_t hardware_subarch_data;
  175. grub_uint32_t payload_offset;
  176. grub_uint32_t payload_length;
  177. grub_uint64_t setup_data;
  178. grub_uint64_t pref_address;
  179. grub_uint32_t init_size;
  180. grub_uint32_t handover_offset;
  181. grub_uint32_t kernel_info_offset;
  182. } GRUB_PACKED;
  183. struct grub_boot_e820_entry
  184. {
  185. grub_uint64_t addr;
  186. grub_uint64_t size;
  187. grub_uint32_t type;
  188. } GRUB_PACKED;
  189. struct grub_edd_device_params
  190. {
  191. grub_uint16_t length;
  192. grub_uint16_t info_flags;
  193. grub_uint32_t num_default_cylinders;
  194. grub_uint32_t num_default_heads;
  195. grub_uint32_t sectors_per_track;
  196. grub_uint64_t number_of_sectors;
  197. grub_uint16_t bytes_per_sector;
  198. grub_uint32_t dpte_ptr; /* 0xFFFFFFFF for our purposes */
  199. grub_uint16_t key; /* = 0xBEDD */
  200. grub_uint8_t device_path_info_length; /* = 44 */
  201. grub_uint8_t reserved2;
  202. grub_uint16_t reserved3;
  203. grub_uint8_t host_bus_type[4];
  204. grub_uint8_t interface_type[8];
  205. union
  206. {
  207. struct
  208. {
  209. grub_uint16_t base_address;
  210. grub_uint16_t reserved1;
  211. grub_uint32_t reserved2;
  212. } isa;
  213. struct
  214. {
  215. grub_uint8_t bus;
  216. grub_uint8_t slot;
  217. grub_uint8_t function;
  218. grub_uint8_t channel;
  219. grub_uint32_t reserved;
  220. } pci;
  221. /* pcix is same as pci */
  222. struct
  223. {
  224. grub_uint64_t reserved;
  225. } ibnd;
  226. struct
  227. {
  228. grub_uint64_t reserved;
  229. } xprs;
  230. struct
  231. {
  232. grub_uint64_t reserved;
  233. } htpt;
  234. struct
  235. {
  236. grub_uint64_t reserved;
  237. } unknown;
  238. } interface_path;
  239. union
  240. {
  241. struct
  242. {
  243. grub_uint8_t device;
  244. grub_uint8_t reserved1;
  245. grub_uint16_t reserved2;
  246. grub_uint32_t reserved3;
  247. grub_uint64_t reserved4;
  248. } ata;
  249. struct
  250. {
  251. grub_uint8_t device;
  252. grub_uint8_t lun;
  253. grub_uint8_t reserved1;
  254. grub_uint8_t reserved2;
  255. grub_uint32_t reserved3;
  256. grub_uint64_t reserved4;
  257. } atapi;
  258. struct
  259. {
  260. grub_uint16_t id;
  261. grub_uint64_t lun;
  262. grub_uint16_t reserved1;
  263. grub_uint32_t reserved2;
  264. } scsi;
  265. struct
  266. {
  267. grub_uint64_t serial_number;
  268. grub_uint64_t reserved;
  269. } usb;
  270. struct
  271. {
  272. grub_uint64_t eui;
  273. grub_uint64_t reserved;
  274. } i1394;
  275. struct
  276. {
  277. grub_uint64_t wwid;
  278. grub_uint64_t lun;
  279. } fibre;
  280. struct
  281. {
  282. grub_uint64_t identity_tag;
  283. grub_uint64_t reserved;
  284. } i2o;
  285. struct
  286. {
  287. grub_uint32_t array_number;
  288. grub_uint32_t reserved1;
  289. grub_uint64_t reserved2;
  290. } raid;
  291. struct
  292. {
  293. grub_uint8_t device;
  294. grub_uint8_t reserved1;
  295. grub_uint16_t reserved2;
  296. grub_uint32_t reserved3;
  297. grub_uint64_t reserved4;
  298. } sata;
  299. struct
  300. {
  301. grub_uint64_t reserved1;
  302. grub_uint64_t reserved2;
  303. } unknown;
  304. } device_path;
  305. grub_uint8_t reserved4;
  306. grub_uint8_t checksum;
  307. } GRUB_PACKED;
  308. struct grub_edd_info
  309. {
  310. grub_uint8_t device;
  311. grub_uint8_t version;
  312. grub_uint16_t interface_support;
  313. grub_uint16_t legacy_max_cylinder;
  314. grub_uint8_t legacy_max_head;
  315. grub_uint8_t legacy_sectors_per_track;
  316. struct grub_edd_device_params params;
  317. } GRUB_PACKED;
  318. enum
  319. {
  320. GRUB_VIDEO_LINUX_TYPE_TEXT = 0x01,
  321. GRUB_VIDEO_LINUX_TYPE_VESA = 0x23, /* VESA VGA in graphic mode. */
  322. GRUB_VIDEO_LINUX_TYPE_EFIFB = 0x70, /* EFI Framebuffer. */
  323. GRUB_VIDEO_LINUX_TYPE_SIMPLE = 0x70 /* Linear framebuffer without any additional functions. */
  324. };
  325. /* For the Linux/i386 boot protocol version 2.10. */
  326. struct linux_i386_kernel_header
  327. {
  328. grub_uint8_t code1[0x0020];
  329. grub_uint16_t cl_magic; /* Magic number 0xA33F */
  330. grub_uint16_t cl_offset; /* The offset of command line */
  331. grub_uint8_t code2[0x01F1 - 0x0020 - 2 - 2];
  332. grub_uint8_t setup_sects; /* The size of the setup in sectors */
  333. grub_uint16_t root_flags; /* If the root is mounted readonly */
  334. grub_uint16_t syssize; /* obsolete */
  335. grub_uint16_t swap_dev; /* obsolete */
  336. grub_uint16_t ram_size; /* obsolete */
  337. grub_uint16_t vid_mode; /* Video mode control */
  338. grub_uint16_t root_dev; /* Default root device number */
  339. grub_uint16_t boot_flag; /* 0xAA55 magic number */
  340. grub_uint16_t jump; /* Jump instruction */
  341. grub_uint32_t header; /* Magic signature "HdrS" */
  342. grub_uint16_t version; /* Boot protocol version supported */
  343. grub_uint32_t realmode_swtch; /* Boot loader hook */
  344. grub_uint16_t start_sys; /* The load-low segment (obsolete) */
  345. grub_uint16_t kernel_version; /* Points to kernel version string */
  346. grub_uint8_t type_of_loader; /* Boot loader identifier */
  347. #define LINUX_LOADER_ID_LILO 0x0
  348. #define LINUX_LOADER_ID_LOADLIN 0x1
  349. #define LINUX_LOADER_ID_BOOTSECT 0x2
  350. #define LINUX_LOADER_ID_SYSLINUX 0x3
  351. #define LINUX_LOADER_ID_ETHERBOOT 0x4
  352. #define LINUX_LOADER_ID_ELILO 0x5
  353. #define LINUX_LOADER_ID_GRUB 0x7
  354. #define LINUX_LOADER_ID_UBOOT 0x8
  355. #define LINUX_LOADER_ID_XEN 0x9
  356. #define LINUX_LOADER_ID_GUJIN 0xa
  357. #define LINUX_LOADER_ID_QEMU 0xb
  358. grub_uint8_t loadflags; /* Boot protocol option flags */
  359. grub_uint16_t setup_move_size; /* Move to high memory size */
  360. grub_uint32_t code32_start; /* Boot loader hook */
  361. grub_uint32_t ramdisk_image; /* initrd load address */
  362. grub_uint32_t ramdisk_size; /* initrd size */
  363. grub_uint32_t bootsect_kludge; /* obsolete */
  364. grub_uint16_t heap_end_ptr; /* Free memory after setup end */
  365. grub_uint16_t pad1; /* Unused */
  366. grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */
  367. grub_uint32_t initrd_addr_max; /* Highest address for initrd */
  368. grub_uint32_t kernel_alignment;
  369. grub_uint8_t relocatable;
  370. grub_uint8_t min_alignment;
  371. grub_uint16_t xloadflags;
  372. grub_uint32_t cmdline_size;
  373. grub_uint32_t hardware_subarch;
  374. grub_uint64_t hardware_subarch_data;
  375. grub_uint32_t payload_offset;
  376. grub_uint32_t payload_length;
  377. grub_uint64_t setup_data;
  378. grub_uint64_t pref_address;
  379. grub_uint32_t init_size;
  380. grub_uint32_t handover_offset;
  381. } GRUB_PACKED;
  382. /*
  383. * Boot parameters for Linux based on 6.13.7 stable. This is used
  384. * by the setup sectors of Linux, and must be simulated by GRUB
  385. * on EFI, because the setup sectors depend on BIOS.
  386. */
  387. struct linux_kernel_params
  388. {
  389. struct grub_screen_info screen_info; /* 0 */
  390. struct grub_apm_bios_info apm_bios_info; /* 40 */
  391. grub_uint8_t _pad2[4]; /* 54 */
  392. grub_uint64_t tboot_addr; /* 58 */
  393. struct grub_ist_info ist_info; /* 60 */
  394. grub_uint64_t acpi_rsdp_addr; /* 70 */
  395. grub_uint8_t _pad3[8]; /* 78 */
  396. grub_uint8_t hd0_info[16]; /* 80 */
  397. grub_uint8_t hd1_info[16]; /* 90 */
  398. struct grub_sys_desc_table sys_desc_table; /* a0 */
  399. struct grub_olpc_ofw_header olpc_ofw_header; /* b0 */
  400. grub_uint32_t ext_ramdisk_image; /* c0 */
  401. grub_uint32_t ext_ramdisk_size; /* c4 */
  402. grub_uint32_t ext_cmd_line_ptr; /* c8 */
  403. grub_uint8_t _pad4[112]; /* cc */
  404. grub_uint32_t cc_blob_address; /* 13c */
  405. /*
  406. * edid_info should be a struct with "unsigned char dummy[128]" and
  407. * efi_info should be a struct as well, starting at 0x1c0. However,
  408. * for backwards compatibility, GRUB can have efi_systab at 0x1b8 and
  409. * padding at 0x1bc (or padding at both spots). This cuts into the end
  410. * of edid_info. Make edid_info inline and only make it go up to 0x1b8.
  411. */
  412. grub_uint8_t edid_info[0x1b8 - 0x140]; /* 140 */
  413. union
  414. {
  415. struct
  416. {
  417. grub_uint32_t efi_systab; /* 1b8 */
  418. grub_uint32_t padding7_2; /* 1bc */
  419. grub_uint32_t efi_loader_signature; /* 1c0 */
  420. grub_uint32_t efi_memdesc_size; /* 1c4 */
  421. grub_uint32_t efi_memdesc_version; /* 1c8 */
  422. grub_uint32_t efi_memmap_size; /* 1cc */
  423. grub_uint32_t efi_memmap; /* 1d0 */
  424. } v0204;
  425. struct
  426. {
  427. grub_uint32_t padding7_1; /* 1b8 */
  428. grub_uint32_t padding7_2; /* 1bc */
  429. grub_uint32_t efi_loader_signature; /* 1c0 */
  430. grub_uint32_t efi_systab; /* 1c4 */
  431. grub_uint32_t efi_memdesc_size; /* 1c8 */
  432. grub_uint32_t efi_memdesc_version; /* 1cc */
  433. grub_uint32_t efi_memmap; /* 1d0 */
  434. grub_uint32_t efi_memmap_size; /* 1d4 */
  435. } v0206;
  436. struct
  437. {
  438. grub_uint32_t padding7_1; /* 1b8 */
  439. grub_uint32_t padding7_2; /* 1bc */
  440. grub_uint32_t efi_loader_signature; /* 1c0 */
  441. grub_uint32_t efi_systab; /* 1c4 */
  442. grub_uint32_t efi_memdesc_size; /* 1c8 */
  443. grub_uint32_t efi_memdesc_version; /* 1cc */
  444. grub_uint32_t efi_memmap; /* 1d0 */
  445. grub_uint32_t efi_memmap_size; /* 1d4 */
  446. grub_uint32_t efi_systab_hi; /* 1d8 */
  447. grub_uint32_t efi_memmap_hi; /* 1dc */
  448. } v0208;
  449. } efi_info;
  450. grub_uint32_t alt_mem_k; /* 1e0 */
  451. grub_uint32_t scratch; /* 1e4 */
  452. grub_uint8_t e820_entries; /* 1e8 */
  453. grub_uint8_t eddbuf_entries; /* 1e9 */
  454. grub_uint8_t edd_mbr_sig_buf_entries; /* 1ea */
  455. grub_uint8_t kbd_status; /* 1eb */
  456. grub_uint8_t secure_boot; /* 1ec */
  457. grub_uint8_t _pad5[2]; /* 1ed */
  458. grub_uint8_t sentinel; /* 1ef */
  459. grub_uint8_t _pad6[1]; /* 1f0 */
  460. struct grub_setup_header hdr; /* 1f1 */
  461. grub_uint8_t _pad7[0x290 - 0x1f1 - sizeof(struct grub_setup_header)];
  462. grub_uint32_t edd_mbr_sig_buffer[EDD_MBR_SIG_MAX]; /* 290 */
  463. struct grub_boot_e820_entry e820_table[GRUB_E820_MAX_ENTRIES_ZEROPAGE]; /* 2d0 */
  464. grub_uint8_t _pad8[48]; /* cd0 */
  465. struct grub_edd_info eddbuf[EDDMAXNR]; /* d00 */
  466. grub_uint8_t _pad9[276]; /* eec */
  467. } GRUB_PACKED;
  468. #endif /* ! ASM_FILE */
  469. #endif /* ! GRUB_I386_LINUX_HEADER */