0x22c   unsigned long  ramdisk_max
 0x230   16 bytes       trampoline
 0x290 - 0x2cf          EDD_MBR_SIG_BUFFER (edd.S)
-0x2d0 - 0x600          E820MAP
-0x600 - 0x7ff          EDDBUF (edd.S) for disk signature read sector
-0x600 - 0x7eb          EDDBUF (edd.S) for edd data
+0x2d0 - 0xd00          E820MAP
+0xd00 - 0xeff          EDDBUF (edd.S) for disk signature read sector
+0xd00 - 0xeeb          EDDBUF (edd.S) for edd data
 
 trampoline:    call    start_of_setup
                .align 16
                                        # The offset at this point is 0x240
-               .space  (0x7ff-0x240+1) # E820 & EDD space (ending at 0x7ff)
+               .space  (0xeff-0x240+1) # E820 & EDD space (ending at 0xeff)
 # End of setup header #####################################################
 
 start_of_setup:
        # sizeof(e820rec).
        #
 good820:
-       movb    (E820NR), %al                   # up to 32 entries
+       movb    (E820NR), %al                   # up to 128 entries
        cmpb    $E820MAX, %al
-       jnl     bail820
+       jae     bail820
 
        incb    (E820NR)
        movw    %di, %ax
 
 trampoline:    call    start_of_setup
                .align 16
                                        # The offset at this point is 0x240
-               .space  (0x7ff-0x240+1) # E820 & EDD space (ending at 0x7ff)
+               .space  (0xeff-0x240+1) # E820 & EDD space (ending at 0xeff)
 # End of setup header #####################################################
 
 start_of_setup:
        # sizeof(e820rec).
        #
 good820:
-       movb    (E820NR), %al                   # up to 32 entries
+       movb    (E820NR), %al                   # up to 128 entries
        cmpb    $E820MAX, %al
-       jnl     bail820
+       jae     bail820
 
        incb    (E820NR)
        movw    %di, %ax
 
               (unsigned long) __bss_end - (unsigned long) __bss_start);
 }
 
-extern char x86_boot_params[2048];
-
 #define NEW_CL_POINTER         0x228   /* Relative to real mode data */
 #define OLD_CL_MAGIC_ADDR      0x90020
 #define OLD_CL_MAGIC            0xA33F
        int new_data;
        char * command_line;
 
-       memcpy(x86_boot_params, real_mode_data, 2048); 
+       memcpy(x86_boot_params, real_mode_data, BOOT_PARAM_SIZE);
        new_data = *(int *) (x86_boot_params + NEW_CL_POINTER);
        if (!new_data) {
                if (OLD_CL_MAGIC != * (u16 *) OLD_CL_MAGIC_ADDR) {
 
 #include <linux/string.h>
 #include <linux/bootmem.h>
 #include <linux/bitops.h>
+#include <asm/bootsetup.h>
 #include <asm/pda.h>
 #include <asm/pgtable.h>
 #include <asm/processor.h>
 #include <asm/mman.h>
 #include <asm/numa.h>
 
-char x86_boot_params[2048] __initdata = {0,};
+char x86_boot_params[BOOT_PARAM_SIZE] __initdata = {0,};
 
 cpumask_t cpu_initialized __initdata = CPU_MASK_NONE;
 
 
 #define __E820_HEADER
 
 #define E820MAP        0x2d0           /* our map */
-#define E820MAX        32              /* number of entries in E820MAP */
+#define E820MAX        128             /* number of entries in E820MAP */
 #define E820NR 0x1e8           /* # entries in E820MAP */
 
 #define E820_RAM       1
 
 #define MAXMEM_PFN     PFN_DOWN(MAXMEM)
 #define MAX_NONPAE_PFN (1 << 20)
 
-#define PARAM_SIZE 2048
+#define PARAM_SIZE 4096
 #define COMMAND_LINE_SIZE 256
 
 #define OLD_CL_MAGIC_ADDR      0x90020
 
 #ifndef _X86_64_BOOTSETUP_H
 #define _X86_64_BOOTSETUP_H 1
 
-extern char x86_boot_params[2048];
+#define BOOT_PARAM_SIZE                4096
+extern char x86_boot_params[BOOT_PARAM_SIZE];
 
 /*
  * This is set up by the setup-routine at boot-time
 
 #include <linux/mmzone.h>
 
 #define E820MAP        0x2d0           /* our map */
-#define E820MAX        32              /* number of entries in E820MAP */
+#define E820MAX        128             /* number of entries in E820MAP */
 #define E820NR 0x1e8           /* # entries in E820MAP */
 
 #define E820_RAM       1
 
 
 #define EDDNR 0x1e9            /* addr of number of edd_info structs at EDDBUF
                                   in boot_params - treat this as 1 byte  */
-#define EDDBUF 0x600           /* addr of edd_info structs in boot_params */
+#define EDDBUF 0xd00           /* addr of edd_info structs in boot_params */
 #define EDDMAXNR 6             /* number of edd_info structs starting at EDDBUF  */
 #define EDDEXTSIZE 8           /* change these if you muck with the structures */
 #define EDDPARMSIZE 74