Skip to content

Commit

Permalink
update boot spec to 2.07
Browse files Browse the repository at this point in the history
Updates for version 2.07 of the boot protocol.  This includes:

load_flags.KEEP_SEGMENTS- flag to request/inhibit segment reloads
hardware_subarch	- what subarchitecture we're booting under
hardware_subarch_data	- per-architecture data

The intention of these changes is to make booting a paravirtualized
kernel work via the normal Linux boot protocol.

Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Vivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Rusty Russell authored and Linus Torvalds committed Oct 22, 2007
1 parent 55b70a0 commit e5371ac
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 3 deletions.
34 changes: 33 additions & 1 deletion Documentation/i386/boot.txt
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ Offset Proto Name Meaning
0234/1 2.05+ relocatable_kernel Whether kernel is relocatable or not
0235/3 N/A pad2 Unused
0238/4 2.06+ cmdline_size Maximum size of the kernel command line
023C/4 2.07+ hardware_subarch Hardware subarchitecture
0240/8 2.07+ hardware_subarch_data Subarchitecture-specific data

(1) For backwards compatibility, if the setup_sects field contains 0, the
real value is 4.
Expand Down Expand Up @@ -204,7 +206,7 @@ boot loaders can ignore those fields.

The byte order of all fields is littleendian (this is x86, after all.)

Field name: setup_secs
Field name: setup_sects
Type: read
Offset/size: 0x1f1/1
Protocol: ALL
Expand Down Expand Up @@ -356,6 +358,13 @@ Protocol: 2.00+
- If 0, the protected-mode code is loaded at 0x10000.
- If 1, the protected-mode code is loaded at 0x100000.

Bit 6 (write): KEEP_SEGMENTS
Protocol: 2.07+
- if 0, reload the segment registers in the 32bit entry point.
- if 1, do not reload the segment registers in the 32bit entry point.
Assume that %cs %ds %ss %es are all set to flat segments with
a base of 0 (or the equivalent for their environment).

Bit 7 (write): CAN_USE_HEAP
Set this bit to 1 to indicate that the value entered in the
heap_end_ptr is valid. If this field is clear, some setup code
Expand Down Expand Up @@ -480,6 +489,29 @@ Protocol: 2.06+
cmdline_size characters. With protocol version 2.05 and earlier, the
maximum size was 255.

Field name: hardware_subarch
Type: write
Offset/size: 0x23c/4
Protocol: 2.07+

In a paravirtualized environment the hardware low level architectural
pieces such as interrupt handling, page table handling, and
accessing process control registers needs to be done differently.

This field allows the bootloader to inform the kernel we are in one
one of those environments.

0x00000000 The default x86/PC environment
0x00000001 lguest
0x00000002 Xen

Field name: hardware_subarch_data
Type: write
Offset/size: 0x240/8
Protocol: 2.07+

A pointer to data that is specific to hardware subarch


**** THE KERNEL COMMAND LINE

Expand Down
7 changes: 7 additions & 0 deletions arch/x86/kernel/asm-offsets_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <asm/fixmap.h>
#include <asm/processor.h>
#include <asm/thread_info.h>
#include <asm/bootparam.h>
#include <asm/elf.h>

#include <xen/interface/xen.h>
Expand Down Expand Up @@ -146,4 +147,10 @@ void foo(void)
OFFSET(LGUEST_PAGES_regs_errcode, lguest_pages, regs.errcode);
OFFSET(LGUEST_PAGES_regs, lguest_pages, regs);
#endif

BLANK();
OFFSET(BP_scratch, boot_params, scratch);
OFFSET(BP_loadflags, boot_params, hdr.loadflags);
OFFSET(BP_hardware_subarch, boot_params, hdr.hardware_subarch);
OFFSET(BP_version, boot_params, hdr.version);
}
9 changes: 7 additions & 2 deletions include/asm-x86/bootparam.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ struct setup_header {
u16 kernel_version;
u8 type_of_loader;
u8 loadflags;
#define LOADED_HIGH 0x01
#define CAN_USE_HEAP 0x80
#define LOADED_HIGH (1<<0)
#define KEEP_SEGMENTS (1<<6)
#define CAN_USE_HEAP (1<<7)
u16 setup_move_size;
u32 code32_start;
u32 ramdisk_image;
Expand All @@ -41,6 +42,10 @@ struct setup_header {
u32 initrd_addr_max;
u32 kernel_alignment;
u8 relocatable_kernel;
u8 _pad2[3];
u32 cmdline_size;
u32 hardware_subarch;
u64 hardware_subarch_data;
} __attribute__((packed));

struct sys_desc_table {
Expand Down

0 comments on commit e5371ac

Please sign in to comment.