+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006, 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
-\r
-Module Name:\r
-\r
- PlatformStatusCode.c \r
- \r
-Abstract:\r
-\r
- Contains NT32 specific implementations required to use status codes.\r
-\r
---*/\r
-\r
-#include "MonoStatusCode.h"\r
-\r
-\r
-BOOLEAN gRunningFromMemory = FALSE;\r
-//\r
-// Platform definitions\r
-//\r
-EFI_PEI_REPORT_STATUS_CODE mSecReportStatusCode = NULL;\r
-\r
-extern EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi;\r
-\r
-//\r
-// Function implementations\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-PlatformReportStatusCode (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_STATUS_CODE_TYPE CodeType,\r
- IN EFI_STATUS_CODE_VALUE Value,\r
- IN UINT32 Instance,\r
- IN EFI_GUID * CallerId,\r
- IN EFI_STATUS_CODE_DATA * Data OPTIONAL\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Call all status code listeners in the MonoStatusCode.\r
-\r
-Arguments:\r
-\r
- Same as ReportStatusCode service\r
- \r
-Returns:\r
-\r
- EFI_SUCCESS Always returns success.\r
-\r
---*/\r
-{\r
- if (mSecReportStatusCode != NULL) {\r
- mSecReportStatusCode (PeiServices, CodeType, Value, Instance, CallerId, Data);\r
- }\r
- MemoryReportStatusCode (CodeType, Value, Instance, CallerId, Data);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-PlatformInitializeStatusCode (\r
- IN EFI_FFS_FILE_HEADER *FfsHeader,\r
- IN EFI_PEI_SERVICES **PeiServices\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Initialize the status code listeners. This consists of locating the \r
- listener produced by SecMain.exe.\r
-\r
-Arguments:\r
-\r
- FfsHeader - FV this PEIM was loaded from.\r
- PeiServices - General purpose services available to every PEIM.\r
-\r
-Returns:\r
-\r
- None\r
-\r
---*/\r
-{\r
- EFI_STATUS Status;\r
- EFI_PEI_PROGRESS_CODE_PPI *ReportStatusCodePpi;\r
- EFI_PEI_PPI_DESCRIPTOR *ReportStatusCodeDescriptor;\r
-\r
- //\r
- // Cache the existing status code listener installed by the SEC core.\r
- // We should actually do a heap allocate, install a PPI, etc, but since we\r
- // know that we are running from a DLL, we can use global variables, and\r
- // directly update the status code PPI descriptor\r
- //\r
- //\r
- // Locate SEC status code PPI\r
- //\r
- Status = (*PeiServices)->LocatePpi (\r
- PeiServices,\r
- &gEfiPeiStatusCodePpiGuid,\r
- 0,\r
- &ReportStatusCodeDescriptor,\r
- &ReportStatusCodePpi\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return ;\r
- }\r
-\r
- mSecReportStatusCode = ReportStatusCodePpi->ReportStatusCode;\r
- ReportStatusCodeDescriptor->Ppi = &mStatusCodePpi;\r
-\r
- //\r
- // Always initialize memory status code listener.\r
- //\r
- MemoryStatusCodeInitialize (FfsHeader, PeiServices);\r
-\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-InstallMonoStatusCode (\r
- IN EFI_FFS_FILE_HEADER *FfsHeader,\r
- IN EFI_PEI_SERVICES **PeiServices\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Install the PEIM. Publish the DXE callback as well.\r
-\r
-Arguments:\r
-\r
- FfsHeader - FV this PEIM was loaded from.\r
- PeiServices - General purpose services available to every PEIM.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS The function always returns success.\r
-\r
---*/\r
-{\r
- if (!gRunningFromMemory) {\r
- //\r
- // First pass, running from flash, initialize everything\r
- //\r
- InitializeMonoStatusCode (FfsHeader, PeiServices);\r
- } else {\r
- //\r
- // Second pass, running from memory, initialize memory listener and\r
- // publish the DXE listener in a HOB.\r
- //\r
- MemoryStatusCodeInitialize (FfsHeader, PeiServices);\r
- InitializeDxeReportStatusCode (PeiServices);\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r