From patchwork Wed Sep 10 00:52:00 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roy Franz X-Patchwork-Id: 37167 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-pd0-f200.google.com (mail-pd0-f200.google.com [209.85.192.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 7280520C93 for ; Wed, 10 Sep 2014 00:54:29 +0000 (UTC) Received: by mail-pd0-f200.google.com with SMTP id ft15sf32318665pdb.11 for ; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:cc:subject:precedence:list-id:list-unsubscribe:list-post :list-help:list-subscribe:mime-version:sender:errors-to :x-original-sender:x-original-authentication-results:mailing-list :list-archive:content-type:content-transfer-encoding; bh=nNeRksL/c7ufc6S4Ktnn0mlSgjApvEivRqHvlq3Ro6E=; b=YJhaSMCzcza1r4LwNguvixFydNtB7jTIf3d3ZUbFdXBTbL75M2Fb5ZTqao/6XBtHEs vLN8L4OJEYst45Zbj7GeBSkea0jsoMT4vi/XJHy/yxLTTeDp+eJsK+mEQ7VM5AGU8z3b DuwU//8VSlAfllfcp1rhC8kIrg+aBv1ipq3lzZgQMVfESade1fhKfR0ByrqMh57edjnL z/zZSWNEEqJHICrUayw2OEdYIzcx0pfFK+2+Z+5Jec2/ymV1VnC3vnFcigKGL+H9EaCV LOPUnzXjmNFBfvc5cTybieB9FhTw0KRMqYFx5c5qBUWayP0BHg2LBpn5sknXUCsFr9j4 t3Rg== X-Gm-Message-State: ALoCoQmuDpFPNCDGKeVVjqLh2CmeryHy286ptp6SbSvwN+Zx/Z7lf32A8rT//jN7o+dJo6tKHkmK X-Received: by 10.66.65.75 with SMTP id v11mr23764694pas.30.1410310468741; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.42.16 with SMTP id b16ls942929qga.16.gmail; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) X-Received: by 10.52.51.203 with SMTP id m11mr104499vdo.72.1410310468612; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) Received: from mail-vc0-f174.google.com (mail-vc0-f174.google.com [209.85.220.174]) by mx.google.com with ESMTPS id w7si5853105vcs.17.2014.09.09.17.54.28 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 09 Sep 2014 17:54:28 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.174 as permitted sender) client-ip=209.85.220.174; Received: by mail-vc0-f174.google.com with SMTP id hy10so3555547vcb.33 for ; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) X-Received: by 10.52.141.76 with SMTP id rm12mr3051150vdb.71.1410310468509; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.45.67 with SMTP id uj3csp363877vcb; Tue, 9 Sep 2014 17:54:28 -0700 (PDT) X-Received: by 10.140.32.134 with SMTP id h6mr56097604qgh.49.1410310468027; Tue, 09 Sep 2014 17:54:28 -0700 (PDT) Received: from lists.xen.org (lists.xen.org. [50.57.142.19]) by mx.google.com with ESMTPS id k9si17242860qgk.48.2014.09.09.17.54.27 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 09 Sep 2014 17:54:28 -0700 (PDT) Received-SPF: none (google.com: xen-devel-bounces@lists.xen.org does not designate permitted sender hosts) client-ip=50.57.142.19; Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XRW9C-0006Gq-69; Wed, 10 Sep 2014 00:52:34 +0000 Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XRW9A-0006Fu-Dh for xen-devel@lists.xen.org; Wed, 10 Sep 2014 00:52:32 +0000 Received: from [85.158.143.35:64132] by server-3.bemta-4.messagelabs.com id 36/E8-06192-FC0AF045; Wed, 10 Sep 2014 00:52:31 +0000 X-Env-Sender: roy.franz@linaro.org X-Msg-Ref: server-10.tower-21.messagelabs.com!1410310349!12733977!1 X-Originating-IP: [209.85.223.171] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 6.11.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 14387 invoked from network); 10 Sep 2014 00:52:30 -0000 Received: from mail-ie0-f171.google.com (HELO mail-ie0-f171.google.com) (209.85.223.171) by server-10.tower-21.messagelabs.com with RC4-SHA encrypted SMTP; 10 Sep 2014 00:52:30 -0000 Received: by mail-ie0-f171.google.com with SMTP id y20so181820ier.2 for ; Tue, 09 Sep 2014 17:52:29 -0700 (PDT) X-Received: by 10.42.216.82 with SMTP id hh18mr14169137icb.61.1410310349393; Tue, 09 Sep 2014 17:52:29 -0700 (PDT) Received: from rfranz-v430.caveonetworks.com (64.2.3.195.ptr.us.xo.net. [64.2.3.195]) by mx.google.com with ESMTPSA id dx10sm654825igb.4.2014.09.09.17.52.28 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Sep 2014 17:52:28 -0700 (PDT) From: Roy Franz To: xen-devel@lists.xen.org, ian.campbell@citrix.com, stefano.stabellini@citrix.com, tim@xen.org, jbeulich@suse.com, keir@xen.org Date: Tue, 9 Sep 2014 17:52:00 -0700 Message-Id: <1410310325-4509-11-git-send-email-roy.franz@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1410310325-4509-1-git-send-email-roy.franz@linaro.org> References: <1410310325-4509-1-git-send-email-roy.franz@linaro.org> Cc: Roy Franz , fu.wei@linaro.org Subject: [Xen-devel] [PATCH V4 10/15] Add SMBIOS and runtime services setup arch functions. X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: roy.franz@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.174 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Archive: Add architecture specific funtions for setting up SMBIOS and runtime services data structures. These are not fundamentally x86 specific, but ARM currently lacks implementations. These functions may not be needed when ARM SMBIOS and runtime service support is added. Both SMBIOS and EFI runtime service support depend on this EFI boot patch series. Signed-off-by: Roy Franz --- xen/common/efi/boot.c | 50 ++++---------------------------------- xen/include/asm-x86/efi-boot.h | 55 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 45 deletions(-) diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c index 5296d88..013597b 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -55,6 +55,8 @@ static CHAR16 *__init s2w(union string *str); static char *__init w2s(const union string *str); static bool_t __init read_file(EFI_FILE_HANDLE dir_handle, struct file *file, char *name_options); +static bool_t __init __maybe_unused match_guid(const EFI_GUID *guid1, + const EFI_GUID *guid2); static EFI_BOOT_SERVICES *__initdata efi_bs; static EFI_HANDLE __initdata efi_ih; @@ -170,7 +172,7 @@ static char *__init w2s(const union string *str) return str->s; } -static bool_t __init match_guid(const EFI_GUID *guid1, const EFI_GUID *guid2) +static bool_t __init __maybe_unused match_guid(const EFI_GUID *guid1, const EFI_GUID *guid2) { return guid1->Data1 == guid2->Data1 && guid1->Data2 == guid2->Data2 && @@ -581,12 +583,6 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) efi_ih = ImageHandle; efi_bs = SystemTable->BootServices; - efi_rs = SystemTable->RuntimeServices; - efi_ct = SystemTable->ConfigurationTable; - efi_num_ct = SystemTable->NumberOfTableEntries; - efi_version = SystemTable->Hdr.Revision; - efi_fw_vendor = SystemTable->FirmwareVendor; - efi_fw_revision = SystemTable->FirmwareRevision; StdOut = SystemTable->ConOut; StdErr = SystemTable->StdErr ?: StdOut; @@ -805,49 +801,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) boot_cpu_data.x86_capability[1] = cpuid_ext_features; } - /* Obtain basic table pointers. */ - for ( i = 0; i < efi_num_ct; ++i ) - { - static EFI_GUID __initdata acpi2_guid = ACPI_20_TABLE_GUID; - static EFI_GUID __initdata acpi_guid = ACPI_TABLE_GUID; - static EFI_GUID __initdata mps_guid = MPS_TABLE_GUID; - static EFI_GUID __initdata smbios_guid = SMBIOS_TABLE_GUID; - - if ( match_guid(&acpi2_guid, &efi_ct[i].VendorGuid) ) - efi.acpi20 = (long)efi_ct[i].VendorTable; - if ( match_guid(&acpi_guid, &efi_ct[i].VendorGuid) ) - efi.acpi = (long)efi_ct[i].VendorTable; - if ( match_guid(&mps_guid, &efi_ct[i].VendorGuid) ) - efi.mps = (long)efi_ct[i].VendorTable; - if ( match_guid(&smbios_guid, &efi_ct[i].VendorGuid) ) - efi.smbios = (long)efi_ct[i].VendorTable; - } + efi_arch_runtime_setup(SystemTable); - if (efi.smbios != EFI_INVALID_TABLE_ADDR) - dmi_efi_get_table((void *)(long)efi.smbios); + efi_arch_smbios(); /* Collect PCI ROM contents. */ efi_arch_pci(); - /* Get snapshot of variable store parameters. */ - status = (efi_rs->Hdr.Revision >> 16) >= 2 ? - efi_rs->QueryVariableInfo(EFI_VARIABLE_NON_VOLATILE | - EFI_VARIABLE_BOOTSERVICE_ACCESS | - EFI_VARIABLE_RUNTIME_ACCESS, - &efi_boot_max_var_store_size, - &efi_boot_remain_var_store_size, - &efi_boot_max_var_size) : - EFI_INCOMPATIBLE_VERSION; - if ( EFI_ERROR(status) ) - { - efi_boot_max_var_store_size = 0; - efi_boot_remain_var_store_size = 0; - efi_boot_max_var_size = status; - PrintStr(L"Warning: Could not query variable store: "); - DisplayUint(status, 0); - PrintStr(newline); - } - efi_arch_memory(); efi_arch_video(base_video, cols, rows, depth, gop); diff --git a/xen/include/asm-x86/efi-boot.h b/xen/include/asm-x86/efi-boot.h index b09e12c..b2e8599 100644 --- a/xen/include/asm-x86/efi-boot.h +++ b/xen/include/asm-x86/efi-boot.h @@ -984,3 +984,58 @@ static void __init efi_arch_handle_module(struct file *file, char *name, mb_modules[mbi.mods_count].mod_end = file->size; ++mbi.mods_count; } + +static void __init efi_arch_smbios(void) +{ + if (efi.smbios != EFI_INVALID_TABLE_ADDR) + dmi_efi_get_table((void *)(long)efi.smbios); +} + +static void __init efi_arch_runtime_setup(EFI_SYSTEM_TABLE *SystemTable) +{ + EFI_STATUS status; + int i; + + efi_rs = SystemTable->RuntimeServices; + efi_ct = SystemTable->ConfigurationTable; + efi_num_ct = SystemTable->NumberOfTableEntries; + efi_version = SystemTable->Hdr.Revision; + efi_fw_vendor = SystemTable->FirmwareVendor; + efi_fw_revision = SystemTable->FirmwareRevision; + + /* Obtain basic table pointers. */ + for ( i = 0; i < efi_num_ct; ++i ) + { + static EFI_GUID __initdata acpi2_guid = ACPI_20_TABLE_GUID; + static EFI_GUID __initdata acpi_guid = ACPI_TABLE_GUID; + static EFI_GUID __initdata mps_guid = MPS_TABLE_GUID; + static EFI_GUID __initdata smbios_guid = SMBIOS_TABLE_GUID; + + if ( match_guid(&acpi2_guid, &efi_ct[i].VendorGuid) ) + efi.acpi20 = (long)efi_ct[i].VendorTable; + if ( match_guid(&acpi_guid, &efi_ct[i].VendorGuid) ) + efi.acpi = (long)efi_ct[i].VendorTable; + if ( match_guid(&mps_guid, &efi_ct[i].VendorGuid) ) + efi.mps = (long)efi_ct[i].VendorTable; + if ( match_guid(&smbios_guid, &efi_ct[i].VendorGuid) ) + efi.smbios = (long)efi_ct[i].VendorTable; + } + /* Get snapshot of variable store parameters. */ + status = (efi_rs->Hdr.Revision >> 16) >= 2 ? + efi_rs->QueryVariableInfo(EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + &efi_boot_max_var_store_size, + &efi_boot_remain_var_store_size, + &efi_boot_max_var_size) : + EFI_INCOMPATIBLE_VERSION; + if ( EFI_ERROR(status) ) + { + efi_boot_max_var_store_size = 0; + efi_boot_remain_var_store_size = 0; + efi_boot_max_var_size = status; + PrintStr(L"Warning: Could not query variable store: "); + DisplayUint(status, 0); + PrintStr(newline); + } +}