diff --git a/sys/boot/ia64/libski/elf_freebsd.c b/sys/boot/ia64/libski/elf_freebsd.c index ac8c8868228..6465d8a49b2 100644 --- a/sys/boot/ia64/libski/elf_freebsd.c +++ b/sys/boot/ia64/libski/elf_freebsd.c @@ -129,7 +129,7 @@ struct ia64_pte { }; void -enter_kernel(const char* filename, u_int64_t start) +enter_kernel(const char* filename, u_int64_t start, struct bootinfo *bi) { printf("Entering %s at 0x%lx...\n", filename, start); @@ -145,6 +145,7 @@ enter_kernel(const char* filename, u_int64_t start) | IA64_PSR_BN)); __asm __volatile("mov cr.iip=%0" :: "r"(start)); __asm __volatile("mov cr.ifs=r0;;"); + __asm __volatile("mov r8=%0" :: "r" (bi)); __asm __volatile("rfi;;"); } @@ -196,8 +197,5 @@ elf_exec(struct preloaded_file *fp) :: "r"(0), "r"(*(u_int64_t*)&pte)); __asm __volatile("srlz.i;;"); - enter_kernel(fp->f_name, hdr->e_entry); + enter_kernel(fp->f_name, hdr->e_entry, bi); } - - - diff --git a/sys/boot/ia64/ski/elf_freebsd.c b/sys/boot/ia64/ski/elf_freebsd.c index ac8c8868228..6465d8a49b2 100644 --- a/sys/boot/ia64/ski/elf_freebsd.c +++ b/sys/boot/ia64/ski/elf_freebsd.c @@ -129,7 +129,7 @@ struct ia64_pte { }; void -enter_kernel(const char* filename, u_int64_t start) +enter_kernel(const char* filename, u_int64_t start, struct bootinfo *bi) { printf("Entering %s at 0x%lx...\n", filename, start); @@ -145,6 +145,7 @@ enter_kernel(const char* filename, u_int64_t start) | IA64_PSR_BN)); __asm __volatile("mov cr.iip=%0" :: "r"(start)); __asm __volatile("mov cr.ifs=r0;;"); + __asm __volatile("mov r8=%0" :: "r" (bi)); __asm __volatile("rfi;;"); } @@ -196,8 +197,5 @@ elf_exec(struct preloaded_file *fp) :: "r"(0), "r"(*(u_int64_t*)&pte)); __asm __volatile("srlz.i;;"); - enter_kernel(fp->f_name, hdr->e_entry); + enter_kernel(fp->f_name, hdr->e_entry, bi); } - - - diff --git a/sys/boot/ia64/ski/version b/sys/boot/ia64/ski/version index b87ca5034b1..6f4fc3c28a4 100644 --- a/sys/boot/ia64/ski/version +++ b/sys/boot/ia64/ski/version @@ -3,4 +3,6 @@ $FreeBSD$ NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this file is important. Make sure the current version number is on line 6. +0.2: Pass the address of the bootinfo block to the kernel in register + r8. Keep it at the hardwired address for now. 0.1: Initial SKI version. diff --git a/sys/boot/ia64/skiload/version b/sys/boot/ia64/skiload/version index b87ca5034b1..6f4fc3c28a4 100644 --- a/sys/boot/ia64/skiload/version +++ b/sys/boot/ia64/skiload/version @@ -3,4 +3,6 @@ $FreeBSD$ NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this file is important. Make sure the current version number is on line 6. +0.2: Pass the address of the bootinfo block to the kernel in register + r8. Keep it at the hardwired address for now. 0.1: Initial SKI version.