123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /** @file
- The module entry point for Tcg configuration module.
- Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include "TcgConfigImpl.h"
- #include <Guid/TpmInstance.h>
- /**
- The entry point for Tcg 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_SUCCESS All the related protocols are installed on the driver.
- @retval Others Fail to install protocols as indicated.
- **/
- EFI_STATUS
- EFIAPI
- TcgConfigDriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
- {
- EFI_STATUS Status;
- TCG_CONFIG_PRIVATE_DATA *PrivateData;
- EFI_TCG_PROTOCOL *TcgProtocol;
- if (!CompareGuid (PcdGetPtr(PcdTpmInstanceGuid), &gEfiTpmDeviceInstanceTpm12Guid)){
- DEBUG ((EFI_D_ERROR, "No TPM12 instance required!\n"));
- return EFI_UNSUPPORTED;
- }
- Status = Tpm12RequestUseTpm ();
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "TPM not detected!\n"));
- return Status;
- }
- Status = gBS->LocateProtocol (&gEfiTcgProtocolGuid, NULL, (VOID **) &TcgProtocol);
- if (EFI_ERROR (Status)) {
- TcgProtocol = NULL;
- }
- 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 (TCG_CONFIG_PRIVATE_DATA), &mTcgConfigPrivateDateTemplate);
- if (PrivateData == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- PrivateData->Configuration = AllocatePool (sizeof (TCG_CONFIGURATION));
- if (PrivateData->Configuration == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto ErrorExit;
- }
- PrivateData->TcgProtocol = TcgProtocol;
- //
- // Install TCG configuration form
- //
- Status = InstallTcgConfigForm (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) {
- UninstallTcgConfigForm (PrivateData);
- }
- return Status;
- }
- /**
- Unload the Tcg configuration form.
- @param[in] ImageHandle The driver's image handle.
- @retval EFI_SUCCESS The Tcg configuration form is unloaded.
- @retval Others Failed to unload the form.
- **/
- EFI_STATUS
- EFIAPI
- TcgConfigDriverUnload (
- IN EFI_HANDLE ImageHandle
- )
- {
- EFI_STATUS Status;
- TCG_CONFIG_PRIVATE_DATA *PrivateData;
- Status = gBS->HandleProtocol (
- ImageHandle,
- &gEfiCallerIdGuid,
- (VOID **) &PrivateData
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- ASSERT (PrivateData->Signature == TCG_CONFIG_PRIVATE_DATA_SIGNATURE);
- gBS->UninstallMultipleProtocolInterfaces (
- ImageHandle,
- &gEfiCallerIdGuid,
- PrivateData,
- NULL
- );
- UninstallTcgConfigForm (PrivateData);
- return EFI_SUCCESS;
- }
|