From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 61D091A1E02 for ; Fri, 9 Sep 2016 16:28:55 -0700 (PDT) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D5B6A83F43; Fri, 9 Sep 2016 23:28:54 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-33.phx2.redhat.com [10.3.116.33]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u89NSiDk010983; Fri, 9 Sep 2016 19:28:53 -0400 From: Laszlo Ersek To: edk2-devel-01 Cc: Jordan Justen , Thomas Huth Date: Sat, 10 Sep 2016 01:28:39 +0200 Message-Id: <20160909232840.2353-3-lersek@redhat.com> In-Reply-To: <20160909232840.2353-1-lersek@redhat.com> References: <20160909232840.2353-1-lersek@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 09 Sep 2016 23:28:54 +0000 (UTC) Subject: [PATCH 2/3] OvmfPkg: convert C files with LF line terminators to CRLF X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Sep 2016 23:28:55 -0000 Run "unix2dos" on the affected files. "git show -b" produces no diff for this patch. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Cc: Jordan Justen Cc: Thomas Huth --- OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h | 122 +-- OvmfPkg/VirtioRngDxe/VirtioRng.h | 92 +- OvmfPkg/Library/NvVarsFileLib/FsAccess.c | 1034 ++++++++++---------- OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c | 166 ++-- OvmfPkg/SmbiosPlatformDxe/X86Xen.c | 196 ++-- 5 files changed, 805 insertions(+), 805 deletions(-) diff --git a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h index ac3a3d636354..f24f3d32bde9 100644 --- a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h +++ b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h @@ -1,61 +1,61 @@ -/** @file - Save Non-Volatile Variables to a file system. - - Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
- This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#ifndef __NV_VARS_FILE_LIB_INSTANCE__ -#define __NV_VARS_FILE_LIB_INSTANCE__ - -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include - -/** - Loads the non-volatile variables from the NvVars file on the - given file system. - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - - @return EFI_STATUS based on the success or failure of load operation - -**/ -EFI_STATUS -LoadNvVarsFromFs ( - EFI_HANDLE FsHandle - ); - - -/** - Saves the non-volatile variables into the NvVars file on the - given file system. - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - - @return EFI_STATUS based on the success or failure of load operation - -**/ -EFI_STATUS -SaveNvVarsToFs ( - EFI_HANDLE FsHandle - ); - -#endif - +/** @file + Save Non-Volatile Variables to a file system. + + Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __NV_VARS_FILE_LIB_INSTANCE__ +#define __NV_VARS_FILE_LIB_INSTANCE__ + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include + +/** + Loads the non-volatile variables from the NvVars file on the + given file system. + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + + @return EFI_STATUS based on the success or failure of load operation + +**/ +EFI_STATUS +LoadNvVarsFromFs ( + EFI_HANDLE FsHandle + ); + + +/** + Saves the non-volatile variables into the NvVars file on the + given file system. + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + + @return EFI_STATUS based on the success or failure of load operation + +**/ +EFI_STATUS +SaveNvVarsToFs ( + EFI_HANDLE FsHandle + ); + +#endif + diff --git a/OvmfPkg/VirtioRngDxe/VirtioRng.h b/OvmfPkg/VirtioRngDxe/VirtioRng.h index 844550a00c17..998f9fae48c2 100644 --- a/OvmfPkg/VirtioRngDxe/VirtioRng.h +++ b/OvmfPkg/VirtioRngDxe/VirtioRng.h @@ -1,46 +1,46 @@ -/** @file - - Private definitions of the VirtioRng RNG driver - - Copyright (C) 2016, Linaro Ltd. - - This program and the accompanying materials are licensed and made available - under the terms and conditions of the BSD License which accompanies this - distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT - WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#ifndef _VIRTIO_RNG_DXE_H_ -#define _VIRTIO_RNG_DXE_H_ - -#include -#include -#include - -#include - -#define VIRTIO_RNG_SIG SIGNATURE_32 ('V', 'R', 'N', 'G') - -typedef struct { - // - // Parts of this structure are initialized / torn down in various functions - // at various call depths. The table to the right should make it easier to - // track them. - // - // field init function init depth - // ---------------- ------------------ ---------- - UINT32 Signature; // DriverBindingStart 0 - VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0 - EFI_EVENT ExitBoot; // DriverBindingStart 0 - VRING Ring; // VirtioRingInit 2 - EFI_RNG_PROTOCOL Rng; // VirtioRngInit 1 -} VIRTIO_RNG_DEV; - -#define VIRTIO_ENTROPY_SOURCE_FROM_RNG(RngPointer) \ - CR (RngPointer, VIRTIO_RNG_DEV, Rng, VIRTIO_RNG_SIG) - -#endif +/** @file + + Private definitions of the VirtioRng RNG driver + + Copyright (C) 2016, Linaro Ltd. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _VIRTIO_RNG_DXE_H_ +#define _VIRTIO_RNG_DXE_H_ + +#include +#include +#include + +#include + +#define VIRTIO_RNG_SIG SIGNATURE_32 ('V', 'R', 'N', 'G') + +typedef struct { + // + // Parts of this structure are initialized / torn down in various functions + // at various call depths. The table to the right should make it easier to + // track them. + // + // field init function init depth + // ---------------- ------------------ ---------- + UINT32 Signature; // DriverBindingStart 0 + VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0 + EFI_EVENT ExitBoot; // DriverBindingStart 0 + VRING Ring; // VirtioRingInit 2 + EFI_RNG_PROTOCOL Rng; // VirtioRngInit 1 +} VIRTIO_RNG_DEV; + +#define VIRTIO_ENTROPY_SOURCE_FROM_RNG(RngPointer) \ + CR (RngPointer, VIRTIO_RNG_DEV, Rng, VIRTIO_RNG_SIG) + +#endif diff --git a/OvmfPkg/Library/NvVarsFileLib/FsAccess.c b/OvmfPkg/Library/NvVarsFileLib/FsAccess.c index 5df8de49855d..7cc7e68e385f 100644 --- a/OvmfPkg/Library/NvVarsFileLib/FsAccess.c +++ b/OvmfPkg/Library/NvVarsFileLib/FsAccess.c @@ -1,517 +1,517 @@ -/** @file - File System Access for NvVarsFileLib - - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include "NvVarsFileLib.h" - -#include -#include -#include - - -/** - Open the NvVars file for reading or writing - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - @param[in] ReadingFile - TRUE: open the file for reading. FALSE: writing - @param[out] NvVarsFile - If EFI_SUCCESS is returned, then this is updated - with the opened NvVars file. - - @return EFI_SUCCESS if the file was opened - -**/ -EFI_STATUS -GetNvVarsFile ( - IN EFI_HANDLE FsHandle, - IN BOOLEAN ReadingFile, - OUT EFI_FILE_HANDLE *NvVarsFile - ) -{ - EFI_STATUS Status; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs; - EFI_FILE_HANDLE Root; - - // - // Get the FileSystem protocol on that handle - // - Status = gBS->HandleProtocol ( - FsHandle, - &gEfiSimpleFileSystemProtocolGuid, - (VOID **)&Fs - ); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Get the volume (the root directory) - // - Status = Fs->OpenVolume (Fs, &Root); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Attempt to open the NvVars file in the root directory - // - Status = Root->Open ( - Root, - NvVarsFile, - L"NvVars", - ReadingFile ? - EFI_FILE_MODE_READ : - ( - EFI_FILE_MODE_CREATE | - EFI_FILE_MODE_READ | - EFI_FILE_MODE_WRITE - ), - 0 - ); - if (EFI_ERROR (Status)) { - return Status; - } - - return Status; -} - - -/** - Open the NvVars file for reading or writing - - @param[in] File - The file to inspect - @param[out] Exists - Returns whether the file exists - @param[out] Size - Returns the size of the file - (0 if the file does not exist) - -**/ -VOID -NvVarsFileReadCheckup ( - IN EFI_FILE_HANDLE File, - OUT BOOLEAN *Exists, - OUT UINTN *Size - ) -{ - EFI_FILE_INFO *FileInfo; - - *Exists = FALSE; - *Size = 0; - - FileInfo = FileHandleGetInfo (File); - if (FileInfo == NULL) { - return; - } - - if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) != 0) { - FreePool (FileInfo); - return; - } - - *Exists = TRUE; - *Size = (UINTN) FileInfo->FileSize; - - FreePool (FileInfo); -} - - -/** - Open the NvVars file for reading or writing - - @param[in] File - The file to inspect - @param[out] Exists - Returns whether the file exists - @param[out] Size - Returns the size of the file - (0 if the file does not exist) - -**/ -EFI_STATUS -FileHandleEmpty ( - IN EFI_FILE_HANDLE File - ) -{ - EFI_STATUS Status; - EFI_FILE_INFO *FileInfo; - - // - // Retrieve the FileInfo structure - // - FileInfo = FileHandleGetInfo (File); - if (FileInfo == NULL) { - return EFI_INVALID_PARAMETER; - } - - // - // If the path is a directory, then return an error - // - if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) != 0) { - FreePool (FileInfo); - return EFI_INVALID_PARAMETER; - } - - // - // If the file size is already 0, then it is empty, so - // we can return success. - // - if (FileInfo->FileSize == 0) { - FreePool (FileInfo); - return EFI_SUCCESS; - } - - // - // Set the file size to 0. - // - FileInfo->FileSize = 0; - Status = FileHandleSetInfo (File, FileInfo); - - FreePool (FileInfo); - - return Status; -} - - -/** - Reads a file to a newly allocated buffer - - @param[in] File - The file to read - @param[in] ReadSize - The size of data to read from the file - - @return Pointer to buffer allocated to hold the file - contents. NULL if an error occured. - -**/ -VOID* -FileHandleReadToNewBuffer ( - IN EFI_FILE_HANDLE FileHandle, - IN UINTN ReadSize - ) -{ - EFI_STATUS Status; - UINTN ActualReadSize; - VOID *FileContents; - - ActualReadSize = ReadSize; - FileContents = AllocatePool (ReadSize); - if (FileContents != NULL) { - Status = FileHandleRead ( - FileHandle, - &ReadSize, - FileContents - ); - if (EFI_ERROR (Status) || (ActualReadSize != ReadSize)) { - FreePool (FileContents); - return NULL; - } - } - - return FileContents; -} - - -/** - Reads the contents of the NvVars file on the file system - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - - @return EFI_STATUS based on the success or failure of the file read - -**/ -EFI_STATUS -ReadNvVarsFile ( - IN EFI_HANDLE FsHandle - ) -{ - EFI_STATUS Status; - EFI_FILE_HANDLE File; - UINTN FileSize; - BOOLEAN FileExists; - VOID *FileContents; - EFI_HANDLE SerializedVariables; - - Status = GetNvVarsFile (FsHandle, TRUE, &File); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_INFO, "FsAccess.c: Could not open NV Variables file on this file system\n")); - return Status; - } - - NvVarsFileReadCheckup (File, &FileExists, &FileSize); - if (FileSize == 0) { - FileHandleClose (File); - return EFI_UNSUPPORTED; - } - - FileContents = FileHandleReadToNewBuffer (File, FileSize); - if (FileContents == NULL) { - FileHandleClose (File); - return EFI_UNSUPPORTED; - } - - DEBUG (( - EFI_D_INFO, - "FsAccess.c: Read %Lu bytes from NV Variables file\n", - (UINT64)FileSize - )); - - Status = SerializeVariablesNewInstanceFromBuffer ( - &SerializedVariables, - FileContents, - FileSize - ); - if (!RETURN_ERROR (Status)) { - Status = SerializeVariablesSetSerializedVariables (SerializedVariables); - } - - FreePool (FileContents); - FileHandleClose (File); - - return Status; -} - - -/** - Writes a variable to indicate that the NV variables - have been loaded from the file system. - -**/ -STATIC -VOID -SetNvVarsVariable ( - VOID - ) -{ - BOOLEAN VarData; - UINTN Size; - - // - // Write a variable to indicate we've already loaded the - // variable data. If it is found, we skip the loading on - // subsequent attempts. - // - Size = sizeof (VarData); - VarData = TRUE; - gRT->SetVariable ( - L"NvVars", - &gEfiSimpleFileSystemProtocolGuid, - EFI_VARIABLE_NON_VOLATILE | - EFI_VARIABLE_BOOTSERVICE_ACCESS | - EFI_VARIABLE_RUNTIME_ACCESS, - Size, - (VOID*) &VarData - ); -} - - -/** - Loads the non-volatile variables from the NvVars file on the - given file system. - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - - @return EFI_STATUS based on the success or failure of load operation - -**/ -EFI_STATUS -LoadNvVarsFromFs ( - EFI_HANDLE FsHandle - ) -{ - EFI_STATUS Status; - BOOLEAN VarData; - UINTN Size; - - DEBUG ((EFI_D_INFO, "FsAccess.c: LoadNvVarsFromFs\n")); - - // - // We write a variable to indicate we've already loaded the - // variable data. If it is found, we skip the loading. - // - // This is relevent if the non-volatile variable have been - // able to survive a reboot operation. In that case, we don't - // want to re-load the file as it would overwrite newer changes - // made to the variables. - // - Size = sizeof (VarData); - VarData = TRUE; - Status = gRT->GetVariable ( - L"NvVars", - &gEfiSimpleFileSystemProtocolGuid, - NULL, - &Size, - (VOID*) &VarData - ); - if (Status == EFI_SUCCESS) { - DEBUG ((EFI_D_INFO, "NV Variables were already loaded\n")); - return EFI_ALREADY_STARTED; - } - - // - // Attempt to restore the variables from the NvVars file. - // - Status = ReadNvVarsFile (FsHandle); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_INFO, "Error while restoring NV variable data\n")); - return Status; - } - - // - // Write a variable to indicate we've already loaded the - // variable data. If it is found, we skip the loading on - // subsequent attempts. - // - SetNvVarsVariable(); - - DEBUG (( - EFI_D_INFO, - "FsAccess.c: Read NV Variables file (size=%Lu)\n", - (UINT64)Size - )); - - return Status; -} - - -STATIC -RETURN_STATUS -EFIAPI -IterateVariablesCallbackAddAllNvVariables ( - IN VOID *Context, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data - ) -{ - EFI_HANDLE Instance; - - Instance = (EFI_HANDLE) Context; - - // - // Only save non-volatile variables - // - if ((Attributes & EFI_VARIABLE_NON_VOLATILE) == 0) { - return RETURN_SUCCESS; - } - - return SerializeVariablesAddVariable ( - Instance, - VariableName, - VendorGuid, - Attributes, - DataSize, - Data - ); -} - - -/** - Saves the non-volatile variables into the NvVars file on the - given file system. - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - - @return EFI_STATUS based on the success or failure of load operation - -**/ -EFI_STATUS -SaveNvVarsToFs ( - EFI_HANDLE FsHandle - ) -{ - EFI_STATUS Status; - EFI_FILE_HANDLE File; - UINTN WriteSize; - UINTN VariableDataSize; - VOID *VariableData; - EFI_HANDLE SerializedVariables; - - SerializedVariables = NULL; - - Status = SerializeVariablesNewInstance (&SerializedVariables); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = SerializeVariablesIterateSystemVariables ( - IterateVariablesCallbackAddAllNvVariables, - (VOID*) SerializedVariables - ); - if (EFI_ERROR (Status)) { - return Status; - } - - VariableData = NULL; - VariableDataSize = 0; - Status = SerializeVariablesToBuffer ( - SerializedVariables, - NULL, - &VariableDataSize - ); - if (Status == RETURN_BUFFER_TOO_SMALL) { - VariableData = AllocatePool (VariableDataSize); - if (VariableData == NULL) { - Status = EFI_OUT_OF_RESOURCES; - } else { - Status = SerializeVariablesToBuffer ( - SerializedVariables, - VariableData, - &VariableDataSize - ); - } - } - - SerializeVariablesFreeInstance (SerializedVariables); - - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Open the NvVars file for writing. - // - Status = GetNvVarsFile (FsHandle, FALSE, &File); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_INFO, "FsAccess.c: Unable to open file to saved NV Variables\n")); - return Status; - } - - // - // Empty the starting file contents. - // - Status = FileHandleEmpty (File); - if (EFI_ERROR (Status)) { - FileHandleClose (File); - return Status; - } - - WriteSize = VariableDataSize; - Status = FileHandleWrite (File, &WriteSize, VariableData); - if (EFI_ERROR (Status)) { - return Status; - } - - FileHandleClose (File); - - if (!EFI_ERROR (Status)) { - // - // Write a variable to indicate we've already loaded the - // variable data. If it is found, we skip the loading on - // subsequent attempts. - // - SetNvVarsVariable(); - - DEBUG ((EFI_D_INFO, "Saved NV Variables to NvVars file\n")); - } - - return Status; - -} - - +/** @file + File System Access for NvVarsFileLib + + Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "NvVarsFileLib.h" + +#include +#include +#include + + +/** + Open the NvVars file for reading or writing + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + @param[in] ReadingFile - TRUE: open the file for reading. FALSE: writing + @param[out] NvVarsFile - If EFI_SUCCESS is returned, then this is updated + with the opened NvVars file. + + @return EFI_SUCCESS if the file was opened + +**/ +EFI_STATUS +GetNvVarsFile ( + IN EFI_HANDLE FsHandle, + IN BOOLEAN ReadingFile, + OUT EFI_FILE_HANDLE *NvVarsFile + ) +{ + EFI_STATUS Status; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs; + EFI_FILE_HANDLE Root; + + // + // Get the FileSystem protocol on that handle + // + Status = gBS->HandleProtocol ( + FsHandle, + &gEfiSimpleFileSystemProtocolGuid, + (VOID **)&Fs + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Get the volume (the root directory) + // + Status = Fs->OpenVolume (Fs, &Root); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Attempt to open the NvVars file in the root directory + // + Status = Root->Open ( + Root, + NvVarsFile, + L"NvVars", + ReadingFile ? + EFI_FILE_MODE_READ : + ( + EFI_FILE_MODE_CREATE | + EFI_FILE_MODE_READ | + EFI_FILE_MODE_WRITE + ), + 0 + ); + if (EFI_ERROR (Status)) { + return Status; + } + + return Status; +} + + +/** + Open the NvVars file for reading or writing + + @param[in] File - The file to inspect + @param[out] Exists - Returns whether the file exists + @param[out] Size - Returns the size of the file + (0 if the file does not exist) + +**/ +VOID +NvVarsFileReadCheckup ( + IN EFI_FILE_HANDLE File, + OUT BOOLEAN *Exists, + OUT UINTN *Size + ) +{ + EFI_FILE_INFO *FileInfo; + + *Exists = FALSE; + *Size = 0; + + FileInfo = FileHandleGetInfo (File); + if (FileInfo == NULL) { + return; + } + + if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) != 0) { + FreePool (FileInfo); + return; + } + + *Exists = TRUE; + *Size = (UINTN) FileInfo->FileSize; + + FreePool (FileInfo); +} + + +/** + Open the NvVars file for reading or writing + + @param[in] File - The file to inspect + @param[out] Exists - Returns whether the file exists + @param[out] Size - Returns the size of the file + (0 if the file does not exist) + +**/ +EFI_STATUS +FileHandleEmpty ( + IN EFI_FILE_HANDLE File + ) +{ + EFI_STATUS Status; + EFI_FILE_INFO *FileInfo; + + // + // Retrieve the FileInfo structure + // + FileInfo = FileHandleGetInfo (File); + if (FileInfo == NULL) { + return EFI_INVALID_PARAMETER; + } + + // + // If the path is a directory, then return an error + // + if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) != 0) { + FreePool (FileInfo); + return EFI_INVALID_PARAMETER; + } + + // + // If the file size is already 0, then it is empty, so + // we can return success. + // + if (FileInfo->FileSize == 0) { + FreePool (FileInfo); + return EFI_SUCCESS; + } + + // + // Set the file size to 0. + // + FileInfo->FileSize = 0; + Status = FileHandleSetInfo (File, FileInfo); + + FreePool (FileInfo); + + return Status; +} + + +/** + Reads a file to a newly allocated buffer + + @param[in] File - The file to read + @param[in] ReadSize - The size of data to read from the file + + @return Pointer to buffer allocated to hold the file + contents. NULL if an error occured. + +**/ +VOID* +FileHandleReadToNewBuffer ( + IN EFI_FILE_HANDLE FileHandle, + IN UINTN ReadSize + ) +{ + EFI_STATUS Status; + UINTN ActualReadSize; + VOID *FileContents; + + ActualReadSize = ReadSize; + FileContents = AllocatePool (ReadSize); + if (FileContents != NULL) { + Status = FileHandleRead ( + FileHandle, + &ReadSize, + FileContents + ); + if (EFI_ERROR (Status) || (ActualReadSize != ReadSize)) { + FreePool (FileContents); + return NULL; + } + } + + return FileContents; +} + + +/** + Reads the contents of the NvVars file on the file system + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + + @return EFI_STATUS based on the success or failure of the file read + +**/ +EFI_STATUS +ReadNvVarsFile ( + IN EFI_HANDLE FsHandle + ) +{ + EFI_STATUS Status; + EFI_FILE_HANDLE File; + UINTN FileSize; + BOOLEAN FileExists; + VOID *FileContents; + EFI_HANDLE SerializedVariables; + + Status = GetNvVarsFile (FsHandle, TRUE, &File); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_INFO, "FsAccess.c: Could not open NV Variables file on this file system\n")); + return Status; + } + + NvVarsFileReadCheckup (File, &FileExists, &FileSize); + if (FileSize == 0) { + FileHandleClose (File); + return EFI_UNSUPPORTED; + } + + FileContents = FileHandleReadToNewBuffer (File, FileSize); + if (FileContents == NULL) { + FileHandleClose (File); + return EFI_UNSUPPORTED; + } + + DEBUG (( + EFI_D_INFO, + "FsAccess.c: Read %Lu bytes from NV Variables file\n", + (UINT64)FileSize + )); + + Status = SerializeVariablesNewInstanceFromBuffer ( + &SerializedVariables, + FileContents, + FileSize + ); + if (!RETURN_ERROR (Status)) { + Status = SerializeVariablesSetSerializedVariables (SerializedVariables); + } + + FreePool (FileContents); + FileHandleClose (File); + + return Status; +} + + +/** + Writes a variable to indicate that the NV variables + have been loaded from the file system. + +**/ +STATIC +VOID +SetNvVarsVariable ( + VOID + ) +{ + BOOLEAN VarData; + UINTN Size; + + // + // Write a variable to indicate we've already loaded the + // variable data. If it is found, we skip the loading on + // subsequent attempts. + // + Size = sizeof (VarData); + VarData = TRUE; + gRT->SetVariable ( + L"NvVars", + &gEfiSimpleFileSystemProtocolGuid, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + Size, + (VOID*) &VarData + ); +} + + +/** + Loads the non-volatile variables from the NvVars file on the + given file system. + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + + @return EFI_STATUS based on the success or failure of load operation + +**/ +EFI_STATUS +LoadNvVarsFromFs ( + EFI_HANDLE FsHandle + ) +{ + EFI_STATUS Status; + BOOLEAN VarData; + UINTN Size; + + DEBUG ((EFI_D_INFO, "FsAccess.c: LoadNvVarsFromFs\n")); + + // + // We write a variable to indicate we've already loaded the + // variable data. If it is found, we skip the loading. + // + // This is relevent if the non-volatile variable have been + // able to survive a reboot operation. In that case, we don't + // want to re-load the file as it would overwrite newer changes + // made to the variables. + // + Size = sizeof (VarData); + VarData = TRUE; + Status = gRT->GetVariable ( + L"NvVars", + &gEfiSimpleFileSystemProtocolGuid, + NULL, + &Size, + (VOID*) &VarData + ); + if (Status == EFI_SUCCESS) { + DEBUG ((EFI_D_INFO, "NV Variables were already loaded\n")); + return EFI_ALREADY_STARTED; + } + + // + // Attempt to restore the variables from the NvVars file. + // + Status = ReadNvVarsFile (FsHandle); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_INFO, "Error while restoring NV variable data\n")); + return Status; + } + + // + // Write a variable to indicate we've already loaded the + // variable data. If it is found, we skip the loading on + // subsequent attempts. + // + SetNvVarsVariable(); + + DEBUG (( + EFI_D_INFO, + "FsAccess.c: Read NV Variables file (size=%Lu)\n", + (UINT64)Size + )); + + return Status; +} + + +STATIC +RETURN_STATUS +EFIAPI +IterateVariablesCallbackAddAllNvVariables ( + IN VOID *Context, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data + ) +{ + EFI_HANDLE Instance; + + Instance = (EFI_HANDLE) Context; + + // + // Only save non-volatile variables + // + if ((Attributes & EFI_VARIABLE_NON_VOLATILE) == 0) { + return RETURN_SUCCESS; + } + + return SerializeVariablesAddVariable ( + Instance, + VariableName, + VendorGuid, + Attributes, + DataSize, + Data + ); +} + + +/** + Saves the non-volatile variables into the NvVars file on the + given file system. + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + + @return EFI_STATUS based on the success or failure of load operation + +**/ +EFI_STATUS +SaveNvVarsToFs ( + EFI_HANDLE FsHandle + ) +{ + EFI_STATUS Status; + EFI_FILE_HANDLE File; + UINTN WriteSize; + UINTN VariableDataSize; + VOID *VariableData; + EFI_HANDLE SerializedVariables; + + SerializedVariables = NULL; + + Status = SerializeVariablesNewInstance (&SerializedVariables); + if (EFI_ERROR (Status)) { + return Status; + } + + Status = SerializeVariablesIterateSystemVariables ( + IterateVariablesCallbackAddAllNvVariables, + (VOID*) SerializedVariables + ); + if (EFI_ERROR (Status)) { + return Status; + } + + VariableData = NULL; + VariableDataSize = 0; + Status = SerializeVariablesToBuffer ( + SerializedVariables, + NULL, + &VariableDataSize + ); + if (Status == RETURN_BUFFER_TOO_SMALL) { + VariableData = AllocatePool (VariableDataSize); + if (VariableData == NULL) { + Status = EFI_OUT_OF_RESOURCES; + } else { + Status = SerializeVariablesToBuffer ( + SerializedVariables, + VariableData, + &VariableDataSize + ); + } + } + + SerializeVariablesFreeInstance (SerializedVariables); + + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Open the NvVars file for writing. + // + Status = GetNvVarsFile (FsHandle, FALSE, &File); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_INFO, "FsAccess.c: Unable to open file to saved NV Variables\n")); + return Status; + } + + // + // Empty the starting file contents. + // + Status = FileHandleEmpty (File); + if (EFI_ERROR (Status)) { + FileHandleClose (File); + return Status; + } + + WriteSize = VariableDataSize; + Status = FileHandleWrite (File, &WriteSize, VariableData); + if (EFI_ERROR (Status)) { + return Status; + } + + FileHandleClose (File); + + if (!EFI_ERROR (Status)) { + // + // Write a variable to indicate we've already loaded the + // variable data. If it is found, we skip the loading on + // subsequent attempts. + // + SetNvVarsVariable(); + + DEBUG ((EFI_D_INFO, "Saved NV Variables to NvVars file\n")); + } + + return Status; + +} + + diff --git a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c index c89bb4af7de7..b597b30bedab 100644 --- a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c +++ b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c @@ -1,83 +1,83 @@ -/** @file - Save Non-Volatile Variables to a file system. - - Copyright (c) 2009, Intel Corporation. All rights reserved.
- This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include "NvVarsFileLib.h" -#include -#include - -EFI_HANDLE mNvVarsFileLibFsHandle = NULL; - - -/** - Attempts to connect the NvVarsFileLib to the specified file system. - - @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance - - @return The EFI_STATUS while attempting to connect the NvVarsFileLib - to the file system instance. - @retval EFI_SUCCESS - The given file system was connected successfully - -**/ -EFI_STATUS -EFIAPI -ConnectNvVarsToFileSystem ( - IN EFI_HANDLE FsHandle - ) -{ - EFI_STATUS Status; - - // - // We might fail to load the variable, since the file system initially - // will not have the NvVars file. - // - LoadNvVarsFromFs (FsHandle); - - // - // We must be able to save the variables successfully to the file system - // to have connected successfully. - // - Status = SaveNvVarsToFs (FsHandle); - if (!EFI_ERROR (Status)) { - mNvVarsFileLibFsHandle = FsHandle; - } - - return Status; -} - - -/** - Update non-volatile variables stored on the file system. - - @return The EFI_STATUS while attempting to update the variable on - the connected file system. - @retval EFI_SUCCESS - The non-volatile variables were saved to the disk - @retval EFI_NOT_STARTED - A file system has not been connected - -**/ -EFI_STATUS -EFIAPI -UpdateNvVarsOnFileSystem ( - ) -{ - if (mNvVarsFileLibFsHandle == NULL) { - // - // A file system had not been connected to the library. - // - return EFI_NOT_STARTED; - } else { - return SaveNvVarsToFs (mNvVarsFileLibFsHandle); - } -} - - +/** @file + Save Non-Volatile Variables to a file system. + + Copyright (c) 2009, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "NvVarsFileLib.h" +#include +#include + +EFI_HANDLE mNvVarsFileLibFsHandle = NULL; + + +/** + Attempts to connect the NvVarsFileLib to the specified file system. + + @param[in] FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance + + @return The EFI_STATUS while attempting to connect the NvVarsFileLib + to the file system instance. + @retval EFI_SUCCESS - The given file system was connected successfully + +**/ +EFI_STATUS +EFIAPI +ConnectNvVarsToFileSystem ( + IN EFI_HANDLE FsHandle + ) +{ + EFI_STATUS Status; + + // + // We might fail to load the variable, since the file system initially + // will not have the NvVars file. + // + LoadNvVarsFromFs (FsHandle); + + // + // We must be able to save the variables successfully to the file system + // to have connected successfully. + // + Status = SaveNvVarsToFs (FsHandle); + if (!EFI_ERROR (Status)) { + mNvVarsFileLibFsHandle = FsHandle; + } + + return Status; +} + + +/** + Update non-volatile variables stored on the file system. + + @return The EFI_STATUS while attempting to update the variable on + the connected file system. + @retval EFI_SUCCESS - The non-volatile variables were saved to the disk + @retval EFI_NOT_STARTED - A file system has not been connected + +**/ +EFI_STATUS +EFIAPI +UpdateNvVarsOnFileSystem ( + ) +{ + if (mNvVarsFileLibFsHandle == NULL) { + // + // A file system had not been connected to the library. + // + return EFI_NOT_STARTED; + } else { + return SaveNvVarsToFs (mNvVarsFileLibFsHandle); + } +} + + diff --git a/OvmfPkg/SmbiosPlatformDxe/X86Xen.c b/OvmfPkg/SmbiosPlatformDxe/X86Xen.c index 3f018d6f5cb9..3d2abcea7c8f 100644 --- a/OvmfPkg/SmbiosPlatformDxe/X86Xen.c +++ b/OvmfPkg/SmbiosPlatformDxe/X86Xen.c @@ -1,98 +1,98 @@ -/** @file - Detect Xen hvmloader SMBIOS data for usage by OVMF. - - Copyright (c) 2011, Bei Guan - Copyright (c) 2011, Intel Corporation. All rights reserved.
- - This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include "SmbiosPlatformDxe.h" -#include -#include - -#define XEN_SMBIOS_PHYSICAL_ADDRESS 0x000EB000 -#define XEN_SMBIOS_PHYSICAL_END 0x000F0000 - -/** - Validates the SMBIOS entry point structure - - @param EntryPointStructure SMBIOS entry point structure - - @retval TRUE The entry point structure is valid - @retval FALSE The entry point structure is not valid - -**/ -STATIC -BOOLEAN -IsEntryPointStructureValid ( - IN SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure - ) -{ - UINTN Index; - UINT8 Length; - UINT8 Checksum; - UINT8 *BytePtr; - - BytePtr = (UINT8*) EntryPointStructure; - Length = EntryPointStructure->EntryPointLength; - Checksum = 0; - - for (Index = 0; Index < Length; Index++) { - Checksum = Checksum + (UINT8) BytePtr[Index]; - } - - if (Checksum != 0) { - return FALSE; - } else { - return TRUE; - } -} - -/** - Locates the Xen SMBIOS data if it exists - - @return SMBIOS_TABLE_ENTRY_POINT Address of Xen SMBIOS data - -**/ -SMBIOS_TABLE_ENTRY_POINT * -GetXenSmbiosTables ( - VOID - ) -{ - UINT8 *XenSmbiosPtr; - SMBIOS_TABLE_ENTRY_POINT *XenSmbiosEntryPointStructure; - EFI_HOB_GUID_TYPE *GuidHob; - - // - // See if a XenInfo HOB is available - // - GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid); - if (GuidHob == NULL) { - return NULL; - } - - for (XenSmbiosPtr = (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_ADDRESS; - XenSmbiosPtr < (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_END; - XenSmbiosPtr += 0x10) { - - XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) XenSmbiosPtr; - - if (!AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) && - !AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) && - IsEntryPointStructureValid (XenSmbiosEntryPointStructure)) { - - return XenSmbiosEntryPointStructure; - - } - } - - return NULL; -} +/** @file + Detect Xen hvmloader SMBIOS data for usage by OVMF. + + Copyright (c) 2011, Bei Guan + Copyright (c) 2011, Intel Corporation. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "SmbiosPlatformDxe.h" +#include +#include + +#define XEN_SMBIOS_PHYSICAL_ADDRESS 0x000EB000 +#define XEN_SMBIOS_PHYSICAL_END 0x000F0000 + +/** + Validates the SMBIOS entry point structure + + @param EntryPointStructure SMBIOS entry point structure + + @retval TRUE The entry point structure is valid + @retval FALSE The entry point structure is not valid + +**/ +STATIC +BOOLEAN +IsEntryPointStructureValid ( + IN SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure + ) +{ + UINTN Index; + UINT8 Length; + UINT8 Checksum; + UINT8 *BytePtr; + + BytePtr = (UINT8*) EntryPointStructure; + Length = EntryPointStructure->EntryPointLength; + Checksum = 0; + + for (Index = 0; Index < Length; Index++) { + Checksum = Checksum + (UINT8) BytePtr[Index]; + } + + if (Checksum != 0) { + return FALSE; + } else { + return TRUE; + } +} + +/** + Locates the Xen SMBIOS data if it exists + + @return SMBIOS_TABLE_ENTRY_POINT Address of Xen SMBIOS data + +**/ +SMBIOS_TABLE_ENTRY_POINT * +GetXenSmbiosTables ( + VOID + ) +{ + UINT8 *XenSmbiosPtr; + SMBIOS_TABLE_ENTRY_POINT *XenSmbiosEntryPointStructure; + EFI_HOB_GUID_TYPE *GuidHob; + + // + // See if a XenInfo HOB is available + // + GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid); + if (GuidHob == NULL) { + return NULL; + } + + for (XenSmbiosPtr = (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_ADDRESS; + XenSmbiosPtr < (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_END; + XenSmbiosPtr += 0x10) { + + XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) XenSmbiosPtr; + + if (!AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) && + !AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) && + IsEntryPointStructureValid (XenSmbiosEntryPointStructure)) { + + return XenSmbiosEntryPointStructure; + + } + } + + return NULL; +} -- 2.9.2