]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/FwVol/FwVolRead.c
PI 1.1 SMM Feature Check-in
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / FwVol / FwVolRead.c
index 0eda2e5d3e6c96ba23069a3bf313694f14086c12..3936b466b292698021bf7a5c60ad30e6af1c99dc 100644 (file)
@@ -1,23 +1,22 @@
-/** @file \r
-\r
+/** @file\r
   Implements functions to read firmware file\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2009, Intel Corporation. <BR>\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
 \r
-**/\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-#include <DxeMain.h>\r
+**/\r
 \r
-/*++\r
+#include "DxeMain.h"\r
+#include "FwVolDriver.h"\r
 \r
-Required Alignment    Alignment Value in FFS       Alignment Value in\r
+/**\r
+Required Alignment             Alignment Value in FFS         Alignment Value in\r
 (bytes)                        Attributes Field               Firmware Volume Interfaces\r
 1                                    0                                     0\r
 2                                    0                                     1\r
@@ -30,22 +29,19 @@ Required Alignment    Alignment Value in FFS       Alignment Value in
 4 KB                                 5                                     12\r
 32 KB                                6                                     15\r
 64 KB                                7                                     16\r
-\r
---*/\r
-\r
-UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16}; \r
+**/\r
+UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};\r
 \r
 \r
 \r
 /**\r
   Convert the FFS File Attributes to FV File Attributes\r
 \r
-  @param  FfsAttributes              The attributes of UINT8 type. \r
+  @param  FfsAttributes              The attributes of UINT8 type.\r
 \r
   @return The attributes of EFI_FV_FILE_ATTRIBUTES\r
 \r
 **/\r
-STATIC\r
 EFI_FV_FILE_ATTRIBUTES\r
 FfsAttributes2FvFileAttributes (\r
   IN EFI_FFS_FILE_ATTRIBUTES FfsAttributes\r
@@ -62,46 +58,46 @@ FfsAttributes2FvFileAttributes (
 /**\r
   Given the input key, search for the next matching file in the volume.\r
 \r
-  @param  This                       Indicates the calling context. \r
-  @param  Key                        Key is a pointer to a caller allocated \r
-                                     buffer that contains implementation specific \r
-                                     data that is used to track where to begin \r
-                                     the search for the next file. The size of \r
-                                     the buffer must be at least This->KeySize \r
-                                     bytes long. To reinitialize the search and \r
-                                     begin from the beginning of the firmware \r
-                                     volume, the entire buffer must be cleared to \r
-                                     zero. Other than clearing the buffer to \r
-                                     initiate a new search, the caller must not \r
-                                     modify the data in the buffer between calls \r
-                                     to GetNextFile(). \r
-  @param  FileType                   FileType is a pointer to a caller allocated \r
-                                     EFI_FV_FILETYPE. The GetNextFile() API can \r
-                                     filter it's search for files based on the \r
-                                     value of *FileType input. A *FileType input \r
-                                     of 0 causes GetNextFile() to search for \r
-                                     files of all types.  If a file is found, the \r
-                                     file's type is returned in *FileType.  \r
-                                     *FileType is not modified if no file is \r
-                                     found. \r
-  @param  NameGuid                   NameGuid is a pointer to a caller allocated \r
-                                     EFI_GUID. If a file is found, the file's \r
-                                     name is returned in *NameGuid.  *NameGuid is \r
-                                     not modified if no file is found. \r
-  @param  Attributes                 Attributes is a pointer to a caller \r
-                                     allocated EFI_FV_FILE_ATTRIBUTES.  If a file \r
-                                     is found, the file's attributes are returned \r
-                                     in *Attributes. *Attributes is not modified \r
-                                     if no file is found. \r
-  @param  Size                       Size is a pointer to a caller allocated \r
-                                     UINTN. If a file is found, the file's size \r
-                                     is returned in *Size. *Size is not modified \r
-                                     if no file is found. \r
-\r
-  @retval EFI_SUCCESS                Successfully find the file. \r
-  @retval EFI_DEVICE_ERROR           Device error. \r
-  @retval EFI_ACCESS_DENIED          Fv could not read. \r
-  @retval EFI_NOT_FOUND              No matching file found. \r
+  @param  This                       Indicates the calling context.\r
+  @param  Key                        Key is a pointer to a caller allocated\r
+                                     buffer that contains implementation specific\r
+                                     data that is used to track where to begin\r
+                                     the search for the next file. The size of\r
+                                     the buffer must be at least This->KeySize\r
+                                     bytes long. To reinitialize the search and\r
+                                     begin from the beginning of the firmware\r
+                                     volume, the entire buffer must be cleared to\r
+                                     zero. Other than clearing the buffer to\r
+                                     initiate a new search, the caller must not\r
+                                     modify the data in the buffer between calls\r
+                                     to GetNextFile().\r
+  @param  FileType                   FileType is a pointer to a caller allocated\r
+                                     EFI_FV_FILETYPE. The GetNextFile() API can\r
+                                     filter it's search for files based on the\r
+                                     value of *FileType input. A *FileType input\r
+                                     of 0 causes GetNextFile() to search for\r
+                                     files of all types.  If a file is found, the\r
+                                     file's type is returned in *FileType.\r
+                                     *FileType is not modified if no file is\r
+                                     found.\r
+  @param  NameGuid                   NameGuid is a pointer to a caller allocated\r
+                                     EFI_GUID. If a file is found, the file's\r
+                                     name is returned in *NameGuid.  *NameGuid is\r
+                                     not modified if no file is found.\r
+  @param  Attributes                 Attributes is a pointer to a caller\r
+                                     allocated EFI_FV_FILE_ATTRIBUTES.  If a file\r
+                                     is found, the file's attributes are returned\r
+                                     in *Attributes. *Attributes is not modified\r
+                                     if no file is found.\r
+  @param  Size                       Size is a pointer to a caller allocated\r
+                                     UINTN. If a file is found, the file's size\r
+                                     is returned in *Size. *Size is not modified\r
+                                     if no file is found.\r
+\r
+  @retval EFI_SUCCESS                Successfully find the file.\r
+  @retval EFI_DEVICE_ERROR           Device error.\r
+  @retval EFI_ACCESS_DENIED          Fv could not read.\r
+  @retval EFI_NOT_FOUND              No matching file found.\r
   @retval EFI_INVALID_PARAMETER      Invalid parameter\r
 \r
 **/\r
@@ -139,9 +135,9 @@ FvGetNextFile (
     return EFI_ACCESS_DENIED;\r
   }\r
 \r
-  if (*FileType > EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE) {\r
+  if (*FileType > EFI_FV_FILETYPE_SMM_CORE) {\r
     //\r
-    // File type needs to be in 0 - 0x0B\r
+    // File type needs to be in 0 - 0x0D\r
     //\r
     return EFI_NOT_FOUND;\r
   }\r
@@ -196,13 +192,13 @@ FvGetNextFile (
       break;\r
     }\r
 \r
-  } \r
+  }\r
 \r
   //\r
   // Return FileType, NameGuid, and Attributes\r
   //\r
   *FileType = FfsFileHeader->Type;\r
-  CopyMem (NameGuid, &FfsFileHeader->Name, sizeof (EFI_GUID));\r
+  CopyGuid (NameGuid, &FfsFileHeader->Name);\r
   *Attributes = FfsAttributes2FvFileAttributes (FfsFileHeader->Attributes);\r
 \r
   //\r
@@ -224,39 +220,39 @@ FvGetNextFile (
   Locates a file in the firmware volume and\r
   copies it to the supplied buffer.\r
 \r
-  @param  This                       Indicates the calling context. \r
-  @param  NameGuid                   Pointer to an EFI_GUID, which is the \r
-                                     filename. \r
-  @param  Buffer                     Buffer is a pointer to pointer to a buffer \r
-                                     in which the file or section contents or are \r
-                                     returned. \r
-  @param  BufferSize                 BufferSize is a pointer to caller allocated \r
-                                     UINTN. On input *BufferSize indicates the \r
-                                     size in bytes of the memory region pointed \r
-                                     to by Buffer. On output, *BufferSize \r
-                                     contains the number of bytes required to \r
-                                     read the file. \r
-  @param  FoundType                  FoundType is a pointer to a caller allocated \r
-                                     EFI_FV_FILETYPE that on successful return \r
-                                     from Read() contains the type of file read.  \r
-                                     This output reflects the file type \r
-                                     irrespective of the value of the SectionType \r
-                                     input. \r
-  @param  FileAttributes             FileAttributes is a pointer to a caller \r
-                                     allocated EFI_FV_FILE_ATTRIBUTES.  On \r
-                                     successful return from Read(), \r
-                                     *FileAttributes contains the attributes of \r
-                                     the file read. \r
-  @param  AuthenticationStatus       AuthenticationStatus is a pointer to a \r
-                                     caller allocated UINTN in which the \r
-                                     authentication status is returned. \r
-\r
-  @retval EFI_SUCCESS                Successfully read to memory buffer. \r
-  @retval EFI_WARN_BUFFER_TOO_SMALL  Buffer too small. \r
-  @retval EFI_NOT_FOUND              Not found. \r
-  @retval EFI_DEVICE_ERROR           Device error. \r
-  @retval EFI_ACCESS_DENIED          Could not read. \r
-  @retval EFI_INVALID_PARAMETER      Invalid parameter. \r
+  @param  This                       Indicates the calling context.\r
+  @param  NameGuid                   Pointer to an EFI_GUID, which is the\r
+                                     filename.\r
+  @param  Buffer                     Buffer is a pointer to pointer to a buffer\r
+                                     in which the file or section contents or are\r
+                                     returned.\r
+  @param  BufferSize                 BufferSize is a pointer to caller allocated\r
+                                     UINTN. On input *BufferSize indicates the\r
+                                     size in bytes of the memory region pointed\r
+                                     to by Buffer. On output, *BufferSize\r
+                                     contains the number of bytes required to\r
+                                     read the file.\r
+  @param  FoundType                  FoundType is a pointer to a caller allocated\r
+                                     EFI_FV_FILETYPE that on successful return\r
+                                     from Read() contains the type of file read.\r
+                                     This output reflects the file type\r
+                                     irrespective of the value of the SectionType\r
+                                     input.\r
+  @param  FileAttributes             FileAttributes is a pointer to a caller\r
+                                     allocated EFI_FV_FILE_ATTRIBUTES.  On\r
+                                     successful return from Read(),\r
+                                     *FileAttributes contains the attributes of\r
+                                     the file read.\r
+  @param  AuthenticationStatus       AuthenticationStatus is a pointer to a\r
+                                     caller allocated UINTN in which the\r
+                                     authentication status is returned.\r
+\r
+  @retval EFI_SUCCESS                Successfully read to memory buffer.\r
+  @retval EFI_WARN_BUFFER_TOO_SMALL  Buffer too small.\r
+  @retval EFI_NOT_FOUND              Not found.\r
+  @retval EFI_DEVICE_ERROR           Device error.\r
+  @retval EFI_ACCESS_DENIED          Could not read.\r
+  @retval EFI_INVALID_PARAMETER      Invalid parameter.\r
   @retval EFI_OUT_OF_RESOURCES       Not enough buffer to be allocated.\r
 \r
 **/\r
@@ -281,13 +277,13 @@ FvReadFile (
   UINT8                             *SrcPtr;\r
   EFI_FFS_FILE_HEADER               *FfsHeader;\r
   UINTN                             InputBufferSize;\r
-  \r
-  if (NULL == NameGuid) {\r
+\r
+  if (NameGuid == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   FvDevice = FV_DEVICE_FROM_THIS (This);\r
-  \r
+\r
 \r
   //\r
   // Keep looking until we find the matching NameGuid.\r
@@ -344,20 +340,20 @@ FvReadFile (
     //\r
     // Caller passed in a pointer so allocate buffer for them\r
     //\r
-    *Buffer = CoreAllocateBootServicesPool (FileSize);\r
+    *Buffer = AllocatePool (FileSize);\r
     if (*Buffer == NULL) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
   } else if (FileSize > InputBufferSize) {\r
     //\r
     // Callers buffer was not big enough\r
-    // \r
+    //\r
     Status = EFI_WARN_BUFFER_TOO_SMALL;\r
     FileSize = InputBufferSize;\r
   }\r
-  \r
+\r
   //\r
-  // Copy data into callers buffer \r
+  // Copy data into callers buffer\r
   //\r
   CopyMem (*Buffer, SrcPtr, FileSize);\r
 \r
@@ -370,27 +366,27 @@ FvReadFile (
   Locates a section in a given FFS File and\r
   copies it to the supplied buffer (not including section header).\r
 \r
-  @param  This                       Indicates the calling context. \r
-  @param  NameGuid                   Pointer to an EFI_GUID, which is the \r
-                                     filename. \r
-  @param  SectionType                Indicates the section type to return. \r
-  @param  SectionInstance            Indicates which instance of sections with a \r
-                                     type of SectionType to return. \r
-  @param  Buffer                     Buffer is a pointer to pointer to a buffer \r
-                                     in which the file or section contents or are \r
-                                     returned. \r
-  @param  BufferSize                 BufferSize is a pointer to caller allocated \r
+  @param  This                       Indicates the calling context.\r
+  @param  NameGuid                   Pointer to an EFI_GUID, which is the\r
+                                     filename.\r
+  @param  SectionType                Indicates the section type to return.\r
+  @param  SectionInstance            Indicates which instance of sections with a\r
+                                     type of SectionType to return.\r
+  @param  Buffer                     Buffer is a pointer to pointer to a buffer\r
+                                     in which the file or section contents or are\r
+                                     returned.\r
+  @param  BufferSize                 BufferSize is a pointer to caller allocated\r
                                      UINTN.\r
-  @param  AuthenticationStatus       AuthenticationStatus is a pointer to a \r
-                                     caller allocated UINT32 in which the \r
-                                     authentication status is returned. \r
-\r
-  @retval EFI_SUCCESS                Successfully read the file section into \r
-                                     buffer. \r
-  @retval EFI_WARN_BUFFER_TOO_SMALL  Buffer too small. \r
-  @retval EFI_NOT_FOUND              Section not found. \r
-  @retval EFI_DEVICE_ERROR           Device error. \r
-  @retval EFI_ACCESS_DENIED          Could not read. \r
+  @param  AuthenticationStatus       AuthenticationStatus is a pointer to a\r
+                                     caller allocated UINT32 in which the\r
+                                     authentication status is returned.\r
+\r
+  @retval EFI_SUCCESS                Successfully read the file section into\r
+                                     buffer.\r
+  @retval EFI_WARN_BUFFER_TOO_SMALL  Buffer too small.\r
+  @retval EFI_NOT_FOUND              Section not found.\r
+  @retval EFI_DEVICE_ERROR           Device error.\r
+  @retval EFI_ACCESS_DENIED          Could not read.\r
   @retval EFI_INVALID_PARAMETER      Invalid parameter.\r
 \r
 **/\r
@@ -413,8 +409,8 @@ FvReadFileSection (
   UINTN                             FileSize;\r
   UINT8                             *FileBuffer;\r
   FFS_FILE_LIST_ENTRY               *FfsEntry;\r
\r
-  if (NULL == NameGuid || Buffer == NULL) {\r
+\r
+  if (NameGuid == NULL || Buffer == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -432,16 +428,16 @@ FvReadFileSection (
             &FileType,\r
             &FileAttributes,\r
             AuthenticationStatus\r
-            );             \r
+            );\r
   //\r
   // Get the last key used by our call to FvReadFile as it is the FfsEntry for this file.\r
-  //  \r
-  FfsEntry = (FFS_FILE_LIST_ENTRY *)FvDevice->LastKey;\r
+  //\r
+  FfsEntry = (FFS_FILE_LIST_ENTRY *) FvDevice->LastKey;\r
 \r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // Check to see that the file actually HAS sections before we go any further.\r
   //\r
@@ -455,10 +451,10 @@ FvReadFileSection (
   //\r
   if (FfsEntry->StreamHandle == 0) {\r
     Status = OpenSectionStream (\r
-                    FileSize,\r
-                    FileBuffer,\r
-                    &FfsEntry->StreamHandle\r
-                    );\r
+               FileSize,\r
+               FileBuffer,\r
+               &FfsEntry->StreamHandle\r
+               );\r
     if (EFI_ERROR (Status)) {\r
       goto Done;\r
     }\r