From 3e0029ebed479c86b27012d3088d8fce8ebad015 Mon Sep 17 00:00:00 2001 From: Artiom Myaskouvskey Date: Thu, 7 Dec 2006 02:14:11 +0100 Subject: [PATCH] --- yaml --- r: 43101 b: refs/heads/master c: e1cccf48b182dd743c3c83a4fdf8dc570a43b393 h: refs/heads/master i: 43099: 4e50899a8099de3a37b72d7ec046850d1de2b415 v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/efi.c | 17 ++++++++++++----- trunk/include/linux/efi.h | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index bee7548215b5..5e1d567650cd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b0d0a4ba45760b10ecee9035ed45b442c1a6cc84 +refs/heads/master: e1cccf48b182dd743c3c83a4fdf8dc570a43b393 diff --git a/trunk/arch/i386/kernel/efi.c b/trunk/arch/i386/kernel/efi.c index 8b40648d0ef0..b92c7f0a358a 100644 --- a/trunk/arch/i386/kernel/efi.c +++ b/trunk/arch/i386/kernel/efi.c @@ -194,17 +194,24 @@ inline int efi_set_rtc_mmss(unsigned long nowtime) return 0; } /* - * This should only be used during kernel init and before runtime - * services have been remapped, therefore, we'll need to call in physical - * mode. Note, this call isn't used later, so mark it __init. + * This is used during kernel init before runtime + * services have been remapped and also during suspend, therefore, + * we'll need to call both in physical and virtual modes. */ -inline unsigned long __init efi_get_time(void) +inline unsigned long efi_get_time(void) { efi_status_t status; efi_time_t eft; efi_time_cap_t cap; - status = phys_efi_get_time(&eft, &cap); + if (efi.get_time) { + /* if we are in virtual mode use remapped function */ + status = efi.get_time(&eft, &cap); + } else { + /* we are in physical mode */ + status = phys_efi_get_time(&eft, &cap); + } + if (status != EFI_SUCCESS) printk("Oops: efitime: can't read time status: 0x%lx\n",status); diff --git a/trunk/include/linux/efi.h b/trunk/include/linux/efi.h index 66d621dbcb6c..91ecf49fbf21 100644 --- a/trunk/include/linux/efi.h +++ b/trunk/include/linux/efi.h @@ -300,7 +300,7 @@ extern int efi_mem_attribute_range (unsigned long phys_addr, unsigned long size, extern int __init efi_uart_console_only (void); extern void efi_initialize_iomem_resources(struct resource *code_resource, struct resource *data_resource); -extern unsigned long __init efi_get_time(void); +extern unsigned long efi_get_time(void); extern int __init efi_set_rtc_mmss(unsigned long nowtime); extern struct efi_memory_map memmap;