Home | History | Annotate | Download | only in Tpm2DeviceLibDTpm
      1 /** @file
      2   Ihis library is TPM2 DTPM instance.
      3   It can be registered to Tpm2 Device router, to be active TPM2 engine,
      4   based on platform setting.
      5 
      6 Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>
      7 This program and the accompanying materials
      8 are licensed and made available under the terms and conditions of the BSD License
      9 which accompanies this distribution.  The full text of the license may be found at
     10 http://opensource.org/licenses/bsd-license.php
     11 
     12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 **/
     16 
     17 #include <Library/BaseLib.h>
     18 #include <Library/BaseMemoryLib.h>
     19 #include <Library/DebugLib.h>
     20 #include <Library/Tpm2DeviceLib.h>
     21 
     22 #include <Guid/TpmInstance.h>
     23 
     24 /**
     25   This service enables the sending of commands to the TPM2.
     26 
     27   @param[in]      InputParameterBlockSize  Size of the TPM2 input parameter block.
     28   @param[in]      InputParameterBlock      Pointer to the TPM2 input parameter block.
     29   @param[in,out]  OutputParameterBlockSize Size of the TPM2 output parameter block.
     30   @param[in]      OutputParameterBlock     Pointer to the TPM2 output parameter block.
     31 
     32   @retval EFI_SUCCESS            The command byte stream was successfully sent to the device and a response was successfully received.
     33   @retval EFI_DEVICE_ERROR       The command was not successfully sent to the device or a response was not successfully received from the device.
     34   @retval EFI_BUFFER_TOO_SMALL   The output parameter block is too small.
     35 **/
     36 EFI_STATUS
     37 EFIAPI
     38 DTpm2SubmitCommand (
     39   IN UINT32            InputParameterBlockSize,
     40   IN UINT8             *InputParameterBlock,
     41   IN OUT UINT32        *OutputParameterBlockSize,
     42   IN UINT8             *OutputParameterBlock
     43   );
     44 
     45 /**
     46   This service requests use TPM2.
     47 
     48   @retval EFI_SUCCESS      Get the control of TPM2 chip.
     49   @retval EFI_NOT_FOUND    TPM2 not found.
     50   @retval EFI_DEVICE_ERROR Unexpected device behavior.
     51 **/
     52 EFI_STATUS
     53 EFIAPI
     54 DTpm2RequestUseTpm (
     55   VOID
     56   );
     57 
     58 TPM2_DEVICE_INTERFACE  mDTpm2InternalTpm2Device = {
     59   TPM_DEVICE_INTERFACE_TPM20_DTPM,
     60   DTpm2SubmitCommand,
     61   DTpm2RequestUseTpm,
     62 };
     63 
     64 /**
     65   The function register DTPM2.0 instance.
     66 
     67   @retval EFI_SUCCESS   DTPM2.0 instance is registered, or system dose not surpport registr DTPM2.0 instance
     68 **/
     69 EFI_STATUS
     70 EFIAPI
     71 Tpm2InstanceLibDTpmConstructor (
     72   VOID
     73   )
     74 {
     75   EFI_STATUS  Status;
     76 
     77   Status = Tpm2RegisterTpm2DeviceLib (&mDTpm2InternalTpm2Device);
     78   if ((Status == EFI_SUCCESS) || (Status == EFI_UNSUPPORTED)) {
     79     //
     80     // Unsupported means platform policy does not need this instance enabled.
     81     //
     82     return EFI_SUCCESS;
     83   }
     84   return Status;
     85 }
     86