]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - Documentation/i386/boot.txt
x86: update Documentation/i386/boot.txt
[linux-2.6-omap-h63xx.git] / Documentation / i386 / boot.txt
index 2eb16100bb3fef7658799f5f7f4d259be644b537..147bfe511cdda0d923ca1094a27daac02225af53 100644 (file)
@@ -1,17 +1,14 @@
-                    THE LINUX/I386 BOOT PROTOCOL
-                    ----------------------------
+                    THE LINUX/x86 BOOT PROTOCOL
+                    ---------------------------
 
-                   H. Peter Anvin <hpa@zytor.com>
-                       Last update 2007-05-23
-
-On the i386 platform, the Linux kernel uses a rather complicated boot
+On the x86 platform, the Linux kernel uses a rather complicated boot
 convention.  This has evolved partially due to historical aspects, as
 well as the desire in the early days to have the kernel itself be a
 bootable image, the complicated PC memory model and due to changed
 expectations in the PC industry caused by the effective demise of
 real-mode DOS as a mainstream operating system.
 
-Currently, the following versions of the Linux/i386 boot protocol exist.
+Currently, the following versions of the Linux/x86 boot protocol exist.
 
 Old kernels:   zImage/Image support only.  Some very early kernels
                may not even support a command line.
@@ -40,8 +37,18 @@ Protocol 2.05:       (Kernel 2.6.20) Make protected mode kernel relocatable.
                Introduce relocatable_kernel and kernel_alignment fields.
 
 Protocol 2.06: (Kernel 2.6.22) Added a field that contains the size of
-               the boot command line
+               the boot command line.
+
+Protocol 2.07: (Kernel 2.6.24) Added paravirtualised boot protocol.
+               Introduced hardware_subarch and hardware_subarch_data
+               and KEEP_SEGMENTS flag in load_flags.
+
+Protocol 2.08: (Kernel 2.6.26) Added crc32 checksum and ELF format
+               payload. Introduced payload_offset and payload length
+               fields to aid in locating the payload.
 
+Protocol 2.09: (Kernel 2.6.26) Added a field of 64-bit physical
+               pointer to single linked list of struct setup_data.
 
 **** MEMORY LAYOUT
 
@@ -172,6 +179,8 @@ Offset      Proto   Name            Meaning
 0240/8 2.07+   hardware_subarch_data Subarchitecture-specific data
 0248/4 2.08+   payload_offset  Offset of kernel payload
 024C/4 2.08+   payload_length  Length of kernel payload
+0250/8 2.09+   setup_data      64-bit physical pointer to linked list
+                               of struct setup_data
 
 (1) For backwards compatibility, if the setup_sects field contains 0, the
     real value is 4.
@@ -360,10 +369,17 @@ Protocol: 2.00+
        - If 0, the protected-mode code is loaded at 0x10000.
        - If 1, the protected-mode code is loaded at 0x100000.
 
+  Bit 5 (write): QUIET_FLAG
+       - If 0, print early messages.
+       - If 1, suppress early messages.
+               This requests to the kernel (decompressor and early
+               kernel) to not write early messages that require
+               accessing the display hardware directly.
+
   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.
+       - 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).
 
@@ -492,7 +508,7 @@ Protocol:   2.06+
   maximum size was 255.
 
 Field name:    hardware_subarch
-Type:          write
+Type:          write (optional, defaults to x86/PC)
 Offset/size:   0x23c/4
 Protocol:      2.07+
 
@@ -508,11 +524,13 @@ Protocol: 2.07+
   0x00000002   Xen
 
 Field name:    hardware_subarch_data
-Type:          write
+Type:          write (subarch-dependent)
 Offset/size:   0x240/8
 Protocol:      2.07+
 
   A pointer to data that is specific to hardware subarch
+  This field is currently unused for the default x86/PC environment,
+  do not modify.
 
 Field name:    payload_offset
 Type:          read
@@ -533,6 +551,34 @@ Protocol:  2.08+
 
   The length of the payload.
 
+Field name:    setup_data
+Type:          write (special)
+Offset/size:   0x250/8
+Protocol:      2.09+
+
+  The 64-bit physical pointer to NULL terminated single linked list of
+  struct setup_data. This is used to define a more extensible boot
+  parameters passing mechanism. The definition of struct setup_data is
+  as follow:
+
+  struct setup_data {
+         u64 next;
+         u32 type;
+         u32 len;
+         u8  data[0];
+  };
+
+  Where, the next is a 64-bit physical pointer to the next node of
+  linked list, the next field of the last node is 0; the type is used
+  to identify the contents of data; the len is the length of data
+  field; the data holds the real payload.
+
+  This list may be modified at a number of points during the bootup
+  process.  Therefore, when modifying this list one should always make
+  sure to consider the case where the linked list already contains
+  entries.
+
+
 **** THE IMAGE CHECKSUM
 
 From boot protocol version 2.08 onwards the CRC-32 is calculated over
@@ -541,6 +587,7 @@ initial remainder of 0xffffffff.  The checksum is appended to the
 file; therefore the CRC of the file up to the limit specified in the
 syssize field of the header is always 0.
 
+
 **** THE KERNEL COMMAND LINE
 
 The kernel command line has become an important way for the boot