| /** @file | |
| EDKII_UFS_HC_PLATFORM_PROTOCOL definition. | |
| Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __EDKII_UFS_HC_PLATFORM_PROTOCOL_H__ | |
| #define __EDKII_UFS_HC_PLATFORM_PROTOCOL_H__ | |
| #include <Protocol/UfsHostController.h> | |
| #define EDKII_UFS_HC_PLATFORM_PROTOCOL_VERSION 2 | |
| extern EFI_GUID gEdkiiUfsHcPlatformProtocolGuid; | |
| typedef struct _EDKII_UFS_HC_PLATFORM_PROTOCOL EDKII_UFS_HC_PLATFORM_PROTOCOL; | |
| typedef struct _EDKII_UFS_HC_DRIVER_INTERFACE EDKII_UFS_HC_DRIVER_INTERFACE; | |
| typedef struct { | |
| UINT32 Opcode; | |
| UINT32 Arg1; | |
| UINT32 Arg2; | |
| UINT32 Arg3; | |
| } EDKII_UIC_COMMAND; | |
| /** | |
| Execute UIC command | |
| @param[in] This Pointer to driver interface produced by the UFS controller. | |
| @param[in, out] UicCommand Descriptor of the command that will be executed. | |
| @retval EFI_SUCCESS Command executed successfully. | |
| @retval EFI_INVALID_PARAMETER This or UicCommand is NULL. | |
| @retval Others Command failed to execute. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_UFS_EXEC_UIC_COMMAND)( | |
| IN EDKII_UFS_HC_DRIVER_INTERFACE *This, | |
| IN OUT EDKII_UIC_COMMAND *UicCommand | |
| ); | |
| struct _EDKII_UFS_HC_DRIVER_INTERFACE { | |
| /// | |
| /// Protocol to accesss host controller MMIO and PCI registers. | |
| /// | |
| EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHcProtocol; | |
| /// | |
| /// Function implementing UIC command execution. | |
| /// | |
| EDKII_UFS_EXEC_UIC_COMMAND UfsExecUicCommand; | |
| }; | |
| typedef struct { | |
| UINT32 Capabilities; | |
| UINT32 Version; | |
| } EDKII_UFS_HC_INFO; | |
| /** | |
| Allows platform protocol to override host controller information | |
| @param[in] ControllerHandle Handle of the UFS controller. | |
| @param[in, out] HcInfo Pointer EDKII_UFS_HC_INFO associated with host controller. | |
| @retval EFI_SUCCESS Function completed successfully. | |
| @retval EFI_INVALID_PARAMETER HcInfo is NULL. | |
| @retval Others Function failed to complete. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_UFS_HC_PLATFORM_OVERRIDE_HC_INFO)( | |
| IN EFI_HANDLE ControllerHandle, | |
| IN OUT EDKII_UFS_HC_INFO *HcInfo | |
| ); | |
| typedef enum { | |
| EdkiiUfsHcPreHce, | |
| EdkiiUfsHcPostHce, | |
| EdkiiUfsHcPreLinkStartup, | |
| EdkiiUfsHcPostLinkStartup | |
| } EDKII_UFS_HC_PLATFORM_CALLBACK_PHASE; | |
| typedef enum { | |
| EdkiiUfsCardRefClkFreq19p2Mhz, | |
| EdkiiUfsCardRefClkFreq26Mhz, | |
| EdkiiUfsCardRefClkFreq38p4Mhz, | |
| EdkiiUfsCardRefClkFreqObsolete | |
| } EDKII_UFS_CARD_REF_CLK_FREQ_ATTRIBUTE; | |
| /** | |
| Callback function for platform driver. | |
| @param[in] ControllerHandle Handle of the UFS controller. | |
| @param[in] CallbackPhase Specifies when the platform protocol is called | |
| @param[in, out] CallbackData Data specific to the callback phase. | |
| For PreHce and PostHce - EDKII_UFS_HC_DRIVER_INTERFACE. | |
| For PreLinkStartup and PostLinkStartup - EDKII_UFS_HC_DRIVER_INTERFACE. | |
| @retval EFI_SUCCESS Override function completed successfully. | |
| @retval EFI_INVALID_PARAMETER CallbackPhase is invalid or CallbackData is NULL when phase expects valid data. | |
| @retval Others Function failed to complete. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_UFS_HC_PLATFORM_CALLBACK)( | |
| IN EFI_HANDLE ControllerHandle, | |
| IN EDKII_UFS_HC_PLATFORM_CALLBACK_PHASE CallbackPhase, | |
| IN OUT VOID *CallbackData | |
| ); | |
| struct _EDKII_UFS_HC_PLATFORM_PROTOCOL { | |
| /// | |
| /// Version of the protocol. | |
| /// | |
| UINT32 Version; | |
| /// | |
| /// Allows platform driver to override host controller information. | |
| /// | |
| EDKII_UFS_HC_PLATFORM_OVERRIDE_HC_INFO OverrideHcInfo; | |
| /// | |
| /// Allows platform driver to implement platform specific flows | |
| /// for host controller. | |
| /// | |
| EDKII_UFS_HC_PLATFORM_CALLBACK Callback; | |
| /// | |
| /// Reference Clock Frequency Ufs Card Attribute that need to be set in this Ufs Host Environment. | |
| /// | |
| EDKII_UFS_CARD_REF_CLK_FREQ_ATTRIBUTE RefClkFreq; | |
| }; | |
| #endif |