Signed-off-by: qianouyang Reviewed-by: gdong1 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12586 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  The module entry point for SecureBoot configuration module.
 | 
						|
 | 
						|
Copyright (c) 2011, 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 "SecureBootConfigImpl.h"
 | 
						|
 | 
						|
/**
 | 
						|
  The entry point for SecureBoot configuration driver.
 | 
						|
 | 
						|
  @param[in]  ImageHandle        The image handle of the driver.
 | 
						|
  @param[in]  SystemTable        The system table.
 | 
						|
 | 
						|
  @retval EFI_ALREADY_STARTED    The driver already exists in system.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Fail to execute entry point due to lack of resources.
 | 
						|
  @retval EFI_SUCCES             All the related protocols are installed on the driver.
 | 
						|
  @retval Others                 Fail to get the SecureBootEnable variable.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SecureBootConfigDriverEntryPoint (
 | 
						|
  IN EFI_HANDLE          ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE    *SystemTable
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                       Status;
 | 
						|
  SECUREBOOT_CONFIG_PRIVATE_DATA   *PrivateData;
 | 
						|
  
 | 
						|
  //
 | 
						|
  // If already started, return.
 | 
						|
  //
 | 
						|
    Status = gBS->OpenProtocol (
 | 
						|
                  ImageHandle,
 | 
						|
                  &gEfiCallerIdGuid,
 | 
						|
                  NULL,
 | 
						|
                  ImageHandle,
 | 
						|
                  ImageHandle,
 | 
						|
                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL
 | 
						|
                  );
 | 
						|
  if (!EFI_ERROR (Status)) {
 | 
						|
    return EFI_ALREADY_STARTED;
 | 
						|
  }
 | 
						|
  
 | 
						|
  //
 | 
						|
  // Create a private data structure.
 | 
						|
  //
 | 
						|
  PrivateData = AllocateCopyPool (sizeof (SECUREBOOT_CONFIG_PRIVATE_DATA), &mSecureBootConfigPrivateDateTemplate);
 | 
						|
  if (PrivateData == NULL) {
 | 
						|
    return EFI_OUT_OF_RESOURCES;
 | 
						|
  }
 | 
						|
    
 | 
						|
  //
 | 
						|
  // Install SecureBoot configuration form
 | 
						|
  //
 | 
						|
  Status = InstallSecureBootConfigForm (PrivateData);
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    goto ErrorExit;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // Install private GUID.
 | 
						|
  //    
 | 
						|
  Status = gBS->InstallMultipleProtocolInterfaces (
 | 
						|
                  &ImageHandle,
 | 
						|
                  &gEfiCallerIdGuid,
 | 
						|
                  PrivateData,
 | 
						|
                  NULL
 | 
						|
                  );
 | 
						|
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    goto ErrorExit;
 | 
						|
  }
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
 | 
						|
ErrorExit:
 | 
						|
  if (PrivateData != NULL) {
 | 
						|
    UninstallSecureBootConfigForm (PrivateData);
 | 
						|
  }  
 | 
						|
  
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unload the SecureBoot configuration form.
 | 
						|
 | 
						|
  @param[in]  ImageHandle         The driver's image handle.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS         The SecureBoot configuration form is unloaded.
 | 
						|
  @retval     Others              Failed to unload the form.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SecureBootConfigDriverUnload (
 | 
						|
  IN EFI_HANDLE  ImageHandle
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                  Status;
 | 
						|
  SECUREBOOT_CONFIG_PRIVATE_DATA   *PrivateData;
 | 
						|
 | 
						|
  Status = gBS->HandleProtocol (
 | 
						|
                  ImageHandle,
 | 
						|
                  &gEfiCallerIdGuid,
 | 
						|
                  (VOID **) &PrivateData
 | 
						|
                  );  
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    return Status;  
 | 
						|
  }
 | 
						|
  
 | 
						|
  ASSERT (PrivateData->Signature == SECUREBOOT_CONFIG_PRIVATE_DATA_SIGNATURE);
 | 
						|
 | 
						|
  gBS->UninstallMultipleProtocolInterfaces (
 | 
						|
         &ImageHandle,
 | 
						|
         &gEfiCallerIdGuid,
 | 
						|
         PrivateData,
 | 
						|
         NULL
 | 
						|
         );
 | 
						|
  
 | 
						|
  UninstallSecureBootConfigForm (PrivateData);
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 |