|
From: Andy P. <at...@us...> - 2002-04-10 18:39:41
|
Update of /cvsroot/linux-vax/kernel-2.4/arch/ia64/sn/fprom
In directory usw-pr-cvs1:/tmp/cvs-serv12040/ia64/sn/fprom
Modified Files:
Makefile fprom.lds fw-emu.c
Log Message:
synch 2.4.15 commit 36
Index: Makefile
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/arch/ia64/sn/fprom/Makefile,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- Makefile 14 Jan 2001 19:51:03 -0000 1.1.1.1
+++ Makefile 10 Apr 2002 14:27:22 -0000 1.2
@@ -13,6 +13,7 @@
LIB = ../../lib/lib.a
OBJ=fpromasm.o main.o fw-emu.o fpmem.o
+obj-y=fprom
fprom: $(OBJ)
$(LD) -static -Tfprom.lds -o fprom $(OBJ) $(LIB)
Index: fprom.lds
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/arch/ia64/sn/fprom/fprom.lds,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- fprom.lds 14 Jan 2001 19:51:05 -0000 1.1.1.1
+++ fprom.lds 10 Apr 2002 14:27:22 -0000 1.2
@@ -24,7 +24,7 @@
_data = .;
.rodata : AT(ADDR(.rodata) - 0x0000000000000000 )
- { *(.rodata) }
+ { *(.rodata) *(.rodata.*) }
.opd : AT(ADDR(.opd) - 0x0000000000000000 )
{ *(.opd) }
.data : AT(ADDR(.data) - 0x0000000000000000 )
Index: fw-emu.c
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/arch/ia64/sn/fprom/fw-emu.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- fw-emu.c 14 Jan 2001 19:51:08 -0000 1.1.1.1
+++ fw-emu.c 10 Apr 2002 14:27:22 -0000 1.2
@@ -62,6 +62,7 @@
func_ptr_t ap_entry;
+static efi_runtime_services_t *efi_runtime_p;
static char fw_mem[( sizeof(efi_system_table_t)
+ sizeof(efi_runtime_services_t)
+ NUM_EFI_DESCS*sizeof(efi_config_table_t)
@@ -88,8 +89,8 @@
.text
.proc pal_emulator_static
pal_emulator_static:
- mov r8=-1
- cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */
+ mov r8=-1;;
+ cmp.eq p6,p7=6,r28;; /* PAL_PTCE_INFO */
(p7) br.cond.sptk.few 1f
;;
mov r8=0 /* status = 0 */
@@ -98,20 +99,20 @@
movl r11=0x1000000000002000 /* stride[0], stride[1] */
br.cond.sptk.few rp
-1: cmp.eq p6,p7=14,r28 /* PAL_FREQ_RATIOS */
-(p7) br.cond.sptk.few 1f
+1: cmp.eq p6,p7=14,r28;; /* PAL_FREQ_RATIOS */
+(p7) br.cond.sptk.few 1f;;
mov r8=0 /* status = 0 */
movl r9 =0x100000064 /* proc_ratio (1/100) */
movl r10=0x100000100 /* bus_ratio<<32 (1/256) */
movl r11=0x10000000a /* itc_ratio<<32 (1/100) */
-1: cmp.eq p6,p7=22,r28 /* PAL_MC_DRAIN */
-(p7) br.cond.sptk.few 1f
+1: cmp.eq p6,p7=22,r28;; /* PAL_MC_DRAIN */
+(p7) br.cond.sptk.few 1f;;
mov r8=0
br.cond.sptk.few rp
-1: cmp.eq p6,p7=23,r28 /* PAL_MC_EXPECTED */
-(p7) br.cond.sptk.few 1f
+1: cmp.eq p6,p7=23,r28;; /* PAL_MC_EXPECTED */
+(p7) br.cond.sptk.few 1f;;
mov r8=0
br.cond.sptk.few rp
@@ -256,6 +257,36 @@
_fp->gp = __fwtab_pa(base_nasid, _fp->gp);
}
+void
+fix_virt_function_pointer(void *fptr)
+{
+ func_ptr_t *fp;
+
+ fp = fptr;
+ fp->pc = fp->pc | PAGE_OFFSET;
+ fp->gp = fp->gp | PAGE_OFFSET;
+}
+
+
+int
+efi_set_virtual_address_map(void)
+{
+ efi_runtime_services_t *runtime;
+
+ runtime = efi_runtime_p;
+ fix_virt_function_pointer((void*)runtime->get_time);
+ fix_virt_function_pointer((void*)runtime->set_time);
+ fix_virt_function_pointer((void*)runtime->get_wakeup_time);
+ fix_virt_function_pointer((void*)runtime->set_wakeup_time);
+ fix_virt_function_pointer((void*)runtime->set_virtual_address_map);
+ fix_virt_function_pointer((void*)runtime->get_variable);
+ fix_virt_function_pointer((void*)runtime->get_next_variable);
+ fix_virt_function_pointer((void*)runtime->set_variable);
+ fix_virt_function_pointer((void*)runtime->get_next_high_mono_count);
+ fix_virt_function_pointer((void*)runtime->reset_system);
+ return EFI_SUCCESS;;
+}
+
void
sys_fw_init (const char *args, int arglen, int bsp)
@@ -305,7 +336,7 @@
cp = fw_mem;
efi_systab = (void *) cp; cp += sizeof(*efi_systab);
- efi_runtime = (void *) cp; cp += sizeof(*efi_runtime);
+ efi_runtime_p = efi_runtime = (void *) cp; cp += sizeof(*efi_runtime);
efi_tables = (void *) cp; cp += NUM_EFI_DESCS*sizeof(*efi_tables);
sal_systab = (void *) cp; cp += sizeof(*sal_systab);
sal_ed = (void *) cp; cp += sizeof(*sal_ed);
@@ -354,7 +385,7 @@
efi_runtime->set_time = __fwtab_pa(base_nasid, &efi_unimplemented);
efi_runtime->get_wakeup_time = __fwtab_pa(base_nasid, &efi_unimplemented);
efi_runtime->set_wakeup_time = __fwtab_pa(base_nasid, &efi_unimplemented);
- efi_runtime->set_virtual_address_map = __fwtab_pa(base_nasid, &efi_success);
+ efi_runtime->set_virtual_address_map = __fwtab_pa(base_nasid, &efi_set_virtual_address_map);
efi_runtime->get_variable = __fwtab_pa(base_nasid, &efi_unimplemented);
efi_runtime->get_next_variable = __fwtab_pa(base_nasid, &efi_unimplemented);
efi_runtime->set_variable = __fwtab_pa(base_nasid, &efi_unimplemented);
@@ -370,10 +401,11 @@
fix_function_pointer(&efi_get_time);
fix_function_pointer(&efi_success);
fix_function_pointer(&efi_reset_system);
+ fix_function_pointer(&efi_set_virtual_address_map);
/* fill in the ACPI system table: */
memcpy(acpi_systab->signature, "RSD PTR ", 8);
- acpi_systab->rsdt = (acpi_rsdt_t*)__fwtab_pa(base_nasid, acpi_rsdt);
+ acpi_systab->rsdt = (struct acpi_rsdt*)__fwtab_pa(base_nasid, acpi_rsdt);
memcpy(acpi_rsdt->header.signature, "RSDT",4);
acpi_rsdt->header.length = sizeof(acpi_rsdt_t);
|