Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Siyuan Fu <siyuan.fu@intel.com> Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
		
			
				
	
	
		
			239 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Header file of the Driver Binding and Service Binding Protocol for TlsDxe driver.
 | |
| 
 | |
|   Copyright (c) 2016, 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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_TLS_DRIVER_H__
 | |
| #define __EFI_TLS_DRIVER_H__
 | |
| 
 | |
| #include <Uefi.h>
 | |
| 
 | |
| //
 | |
| // Driver Protocols
 | |
| //
 | |
| #include <Protocol/ServiceBinding.h>
 | |
| 
 | |
| //
 | |
| // Driver Version
 | |
| //
 | |
| #define TLS_VERSION  0x00000000
 | |
| 
 | |
| #define TLS_SERVICE_SIGNATURE    SIGNATURE_32 ('T', 'L', 'S', 'S')
 | |
| 
 | |
| #define TLS_INSTANCE_SIGNATURE   SIGNATURE_32 ('T', 'L', 'S', 'I')
 | |
| 
 | |
| ///
 | |
| /// TLS Service Data
 | |
| ///
 | |
| typedef struct _TLS_SERVICE  TLS_SERVICE;
 | |
| 
 | |
| ///
 | |
| /// TLS Instance Data
 | |
| ///
 | |
| typedef struct _TLS_INSTANCE TLS_INSTANCE;
 | |
| 
 | |
| 
 | |
| struct _TLS_SERVICE {
 | |
|   UINT32                          Signature;
 | |
|   EFI_SERVICE_BINDING_PROTOCOL    ServiceBinding;
 | |
| 
 | |
|   UINT16                          TlsChildrenNum;
 | |
|   LIST_ENTRY                      TlsChildrenList;
 | |
| 
 | |
|   //
 | |
|   // Handle to install TlsServiceBinding protocol.
 | |
|   //
 | |
|   EFI_HANDLE                      Handle;
 | |
|   EFI_HANDLE                      ImageHandle;
 | |
| 
 | |
|   //
 | |
|   // Main SSL Context object which is created by a server or client once per program
 | |
|   // life-time and which holds mainly default values for the SSL object which are later
 | |
|   // created for the connections.
 | |
|   //
 | |
|   VOID                            *TlsCtx;
 | |
| };
 | |
| 
 | |
| struct _TLS_INSTANCE {
 | |
|   UINT32                          Signature;
 | |
|   LIST_ENTRY                      Link;
 | |
| 
 | |
|   BOOLEAN                         InDestroy;
 | |
| 
 | |
|   TLS_SERVICE                     *Service;
 | |
|   EFI_HANDLE                      ChildHandle;
 | |
| 
 | |
|   EFI_TLS_PROTOCOL                Tls;
 | |
|   EFI_TLS_CONFIGURATION_PROTOCOL  TlsConfig;
 | |
| 
 | |
|   EFI_TLS_SESSION_STATE           TlsSessionState;
 | |
| 
 | |
|   //
 | |
|   // Main SSL Connection which is created by a server or a client
 | |
|   // per established connection.
 | |
|   //
 | |
|   VOID                            *TlsConn;
 | |
| };
 | |
| 
 | |
| 
 | |
| #define TLS_SERVICE_FROM_THIS(a)   \
 | |
|   CR (a, TLS_SERVICE, ServiceBinding, TLS_SERVICE_SIGNATURE)
 | |
| 
 | |
| #define TLS_INSTANCE_FROM_PROTOCOL(a)  \
 | |
|   CR (a, TLS_INSTANCE, Tls, TLS_INSTANCE_SIGNATURE)
 | |
| 
 | |
| #define TLS_INSTANCE_FROM_CONFIGURATION(a)  \
 | |
|   CR (a, TLS_INSTANCE, TlsConfig, TLS_INSTANCE_SIGNATURE)
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Release all the resources used by the TLS instance.
 | |
| 
 | |
|   @param[in]  Instance        The TLS instance data.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| TlsCleanInstance (
 | |
|   IN TLS_INSTANCE           *Instance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create the TLS instance and initialize it.
 | |
| 
 | |
|   @param[in]  Service              The pointer to the TLS service.
 | |
|   @param[out] Instance             The pointer to the TLS instance.
 | |
| 
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate resources.
 | |
|   @retval EFI_SUCCESS            The TLS instance is created.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| TlsCreateInstance (
 | |
|   IN  TLS_SERVICE         *Service,
 | |
|   OUT TLS_INSTANCE        **Instance
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Release all the resources used by the TLS service binding instance.
 | |
| 
 | |
|   @param[in]  Service        The TLS service data.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| TlsCleanService (
 | |
|   IN TLS_SERVICE     *Service
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create then initialize a TLS service.
 | |
| 
 | |
|   @param[in]  Image                  ImageHandle of the TLS driver
 | |
|   @param[out] Service                The service for TLS driver
 | |
| 
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate resource to create the service.
 | |
|   @retval EFI_SUCCESS            The service is created for the driver.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| TlsCreateService (
 | |
|   IN  EFI_HANDLE            Image,
 | |
|   OUT TLS_SERVICE           **Service
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Unloads an image.
 | |
| 
 | |
|   @param[in]  ImageHandle       Handle that identifies the image to be unloaded.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The image has been unloaded.
 | |
|   @retval EFI_INVALID_PARAMETER ImageHandle is not a valid image handle.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TlsUnload (
 | |
|   IN EFI_HANDLE  ImageHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is the declaration of an EFI image entry point. This entry point is
 | |
|   the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including
 | |
|   both device drivers and bus drivers.
 | |
| 
 | |
|   @param  ImageHandle           The firmware allocated handle for the UEFI image.
 | |
|   @param  SystemTable           A pointer to the EFI System Table.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval Others                An unexpected error occurred.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TlsDriverEntryPoint (
 | |
|   IN EFI_HANDLE        ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE  *SystemTable
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Creates a child handle and installs a protocol.
 | |
| 
 | |
|   The CreateChild() function installs a protocol on ChildHandle.
 | |
|   If ChildHandle is a pointer to NULL, then a new handle is created and returned in ChildHandle.
 | |
|   If ChildHandle is not a pointer to NULL, then the protocol installs on the existing ChildHandle.
 | |
| 
 | |
|   @param[in] This        Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.
 | |
|   @param[in] ChildHandle Pointer to the handle of the child to create. If it is NULL,
 | |
|                          then a new handle is created. If it is a pointer to an existing UEFI handle,
 | |
|                          then the protocol is added to the existing UEFI handle.
 | |
| 
 | |
|   @retval EFI_SUCCES            The protocol was added to ChildHandle.
 | |
|   @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
 | |
|   @retval EFI_OUT_OF_RESOURCES  There are not enough resources available to create
 | |
|                                 the child.
 | |
|   @retval other                 The child handle was not created.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TlsServiceBindingCreateChild (
 | |
|   IN EFI_SERVICE_BINDING_PROTOCOL  *This,
 | |
|   IN EFI_HANDLE                    *ChildHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Destroys a child handle with a protocol installed on it.
 | |
| 
 | |
|   The DestroyChild() function does the opposite of CreateChild(). It removes a protocol
 | |
|   that was installed by CreateChild() from ChildHandle. If the removed protocol is the
 | |
|   last protocol on ChildHandle, then ChildHandle is destroyed.
 | |
| 
 | |
|   @param  This        Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.
 | |
|   @param  ChildHandle Handle of the child to destroy.
 | |
| 
 | |
|   @retval EFI_SUCCES            The protocol was removed from ChildHandle.
 | |
|   @retval EFI_UNSUPPORTED       ChildHandle does not support the protocol that is being removed.
 | |
|   @retval EFI_INVALID_PARAMETER Child handle is NULL.
 | |
|   @retval EFI_ACCESS_DENIED     The protocol could not be removed from the ChildHandle
 | |
|                                 because its services are being used.
 | |
|   @retval other                 The child handle was not destroyed.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TlsServiceBindingDestroyChild (
 | |
|   IN EFI_SERVICE_BINDING_PROTOCOL  *This,
 | |
|   IN EFI_HANDLE                    ChildHandle
 | |
|   );
 | |
| 
 | |
| #endif
 | |
| 
 |