/** Entry point of SMM Status Code Driver. This function is the entry point of SMM Status Code Driver. @param ImageHandle The firmware allocated handle for the EFI image. @param SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The entry point is executed successfully. **/ EFI_STATUS EFIAPI StatusCodeHandlerSmmEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; Status = gSmst->SmmLocateProtocol ( &gEfiSmmRscHandlerProtocolGuid, NULL, (VOID **) &mRscHandlerProtocol ); ASSERT_EFI_ERROR (Status); // // Dispatch initialization request to supported devices // InitializationDispatcherWorker (); if (FeaturePcdGet (PcdStatusCodeUseSerial)) { mRscHandlerProtocol->Register (SerialStatusCodeReportWorker); } if (FeaturePcdGet (PcdStatusCodeUseMemory)) { mRscHandlerProtocol->Register (MemoryStatusCodeReportWorker); } return EFI_SUCCESS; }
/** Entry point of DXE Status Code Driver. This function is the entry point of this DXE Status Code Driver. It initializes registers status code handlers, and registers event for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. @param ImageHandle The firmware allocated handle for the EFI image. @param SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The entry point is executed successfully. **/ EFI_STATUS EFIAPI StatusCodeHandlerRuntimeDxeEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; Status = gBS->LocateProtocol ( &gEfiRscHandlerProtocolGuid, NULL, (VOID **) &mRscHandlerProtocol ); ASSERT_EFI_ERROR (Status); // // Dispatch initialization request to supported devices // InitializationDispatcherWorker (); if (FeaturePcdGet (PcdStatusCodeUseSerial)) { mRscHandlerProtocol->Register (SerialStatusCodeReportWorker, TPL_HIGH_LEVEL); } if (FeaturePcdGet (PcdStatusCodeUseMemory)) { mRscHandlerProtocol->Register (RtMemoryStatusCodeReportWorker, TPL_HIGH_LEVEL); } Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, UnregisterBootTimeHandlers, NULL, &gEfiEventExitBootServicesGuid, &mExitBootServicesEvent ); Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, VirtualAddressChangeCallBack, NULL, &gEfiEventVirtualAddressChangeGuid, &mVirtualAddressChangeEvent ); ASSERT_EFI_ERROR (Status); return EFI_SUCCESS; }
/** Entry point of DXE Status Code Driver. This function is the entry point of this DXE Status Code Driver. It installs Status Code Runtime Protocol, and registers event for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. @param ImageHandle The firmware allocated handle for the EFI image. @param SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The entry point is executed successfully. **/ EFI_STATUS EFIAPI StatusCodeRuntimeDxeEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; // // Dispatch initialization request to supported devices // InitializationDispatcherWorker (); // // Install Status Code Runtime Protocol implementation as defined in PI Specification. // Status = gBS->InstallMultipleProtocolInterfaces ( &mHandle, &gEfiStatusCodeRuntimeProtocolGuid, &mEfiStatusCodeProtocol, NULL ); ASSERT_EFI_ERROR (Status); Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, VirtualAddressChangeCallBack, NULL, &gEfiEventVirtualAddressChangeGuid, &mVirtualAddressChangeEvent ); ASSERT_EFI_ERROR (Status); return EFI_SUCCESS; }