-/** @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
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
/**\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
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
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
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
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
//\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
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
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
&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
//\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