git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10795 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Status Code Handler Driver which produces datahub handler and hook it
 | 
						|
  onto the DXE status code router.
 | 
						|
 | 
						|
  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
 | 
						|
  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 "DatahubStatusCodeHandlerDxe.h"
 | 
						|
 | 
						|
EFI_EVENT                 mExitBootServicesEvent     = NULL;
 | 
						|
EFI_RSC_HANDLER_PROTOCOL  *mRscHandlerProtocol       = NULL;
 | 
						|
 | 
						|
/**
 | 
						|
  Unregister status code callback functions only available at boot time from
 | 
						|
  report status code router when exiting boot services.
 | 
						|
 | 
						|
  @param  Event         Event whose notification function is being invoked.
 | 
						|
  @param  Context       Pointer to the notification function's context, which is
 | 
						|
                        always zero in current implementation.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
UnregisterBootTimeHandlers (
 | 
						|
  IN EFI_EVENT        Event,
 | 
						|
  IN VOID             *Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  mRscHandlerProtocol->Unregister (DataHubStatusCodeReportWorker);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  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
 | 
						|
DatahubStatusCodeHandlerDxeEntry (
 | 
						|
  IN EFI_HANDLE         ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE   *SystemTable
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
 | 
						|
  if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {
 | 
						|
    Status = gBS->LocateProtocol (
 | 
						|
                    &gEfiRscHandlerProtocolGuid,
 | 
						|
                    NULL,
 | 
						|
                    (VOID **) &mRscHandlerProtocol
 | 
						|
                    );
 | 
						|
    ASSERT_EFI_ERROR (Status);
 | 
						|
 | 
						|
    //
 | 
						|
    // Dispatch initialization request to supported devices
 | 
						|
    //
 | 
						|
    DataHubStatusCodeInitializeWorker ();
 | 
						|
 | 
						|
    mRscHandlerProtocol->Register (DataHubStatusCodeReportWorker, TPL_HIGH_LEVEL);
 | 
						|
 | 
						|
    Status = gBS->CreateEventEx (
 | 
						|
                    EVT_NOTIFY_SIGNAL,
 | 
						|
                    TPL_NOTIFY,
 | 
						|
                    UnregisterBootTimeHandlers,
 | 
						|
                    NULL,
 | 
						|
                    &gEfiEventExitBootServicesGuid,
 | 
						|
                    &mExitBootServicesEvent
 | 
						|
                    );
 | 
						|
    ASSERT_EFI_ERROR (Status);
 | 
						|
  }
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 |