]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Protocol/SdMmcOverride.h
MdeModulePkg/UfsPassThruDxe: Fix unaligned data transfer handling
[mirror_edk2.git] / MdeModulePkg / Include / Protocol / SdMmcOverride.h
CommitLineData
c7be0dd5
AB
1/** @file\r
2 Protocol to describe overrides required to support non-standard SDHCI\r
3 implementations\r
4\r
5 Copyright (c) 2017 - 2018, Linaro, Ltd. All rights reserved.<BR>\r
6\r
9d510e61 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
c7be0dd5
AB
8\r
9**/\r
10\r
11#ifndef __SD_MMC_OVERRIDE_H__\r
12#define __SD_MMC_OVERRIDE_H__\r
13\r
14#include <Protocol/SdMmcPassThru.h>\r
15\r
16#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_GUID \\r
17 { 0xeaf9e3c1, 0xc9cd, 0x46db, { 0xa5, 0xe5, 0x5a, 0x12, 0x4c, 0x83, 0x23, 0x23 } }\r
18\r
7f3b0bad 19#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_VERSION 0x2\r
c7be0dd5
AB
20\r
21typedef struct _EDKII_SD_MMC_OVERRIDE EDKII_SD_MMC_OVERRIDE;\r
22\r
a4708009
TM
23//\r
24// Bus timing modes\r
25//\r
26typedef enum {\r
27 SdMmcUhsSdr12,\r
28 SdMmcUhsSdr25,\r
29 SdMmcUhsSdr50,\r
30 SdMmcUhsSdr104,\r
31 SdMmcUhsDdr50,\r
32 SdMmcMmcLegacy,\r
33 SdMmcMmcHsSdr,\r
34 SdMmcMmcHsDdr,\r
35 SdMmcMmcHs200,\r
36 SdMmcMmcHs400,\r
37} SD_MMC_BUS_MODE;\r
38\r
c7be0dd5
AB
39typedef enum {\r
40 EdkiiSdMmcResetPre,\r
41 EdkiiSdMmcResetPost,\r
42 EdkiiSdMmcInitHostPre,\r
43 EdkiiSdMmcInitHostPost,\r
a4708009 44 EdkiiSdMmcUhsSignaling,\r
b7b803a6 45 EdkiiSdMmcSwitchClockFreqPost,\r
c7be0dd5
AB
46} EDKII_SD_MMC_PHASE_TYPE;\r
47\r
48/**\r
49\r
50 Override function for SDHCI capability bits\r
51\r
52 @param[in] ControllerHandle The EFI_HANDLE of the controller.\r
53 @param[in] Slot The 0 based slot index.\r
54 @param[in,out] SdMmcHcSlotCapability The SDHCI capability structure.\r
7f3b0bad
MW
55 @param[in,out] BaseClkFreq The base clock frequency value that\r
56 optionally can be updated.\r
c7be0dd5
AB
57\r
58 @retval EFI_SUCCESS The override function completed successfully.\r
59 @retval EFI_NOT_FOUND The specified controller or slot does not exist.\r
60 @retval EFI_INVALID_PARAMETER SdMmcHcSlotCapability is NULL\r
61\r
62**/\r
63typedef\r
64EFI_STATUS\r
65(EFIAPI * EDKII_SD_MMC_CAPABILITY) (\r
66 IN EFI_HANDLE ControllerHandle,\r
67 IN UINT8 Slot,\r
7f3b0bad
MW
68 IN OUT VOID *SdMmcHcSlotCapability,\r
69 IN OUT UINT32 *BaseClkFreq\r
c7be0dd5
AB
70 );\r
71\r
72/**\r
73\r
74 Override function for SDHCI controller operations\r
75\r
76 @param[in] ControllerHandle The EFI_HANDLE of the controller.\r
77 @param[in] Slot The 0 based slot index.\r
78 @param[in] PhaseType The type of operation and whether the\r
79 hook is invoked right before (pre) or\r
80 right after (post)\r
49c99534 81 @param[in,out] PhaseData The pointer to a phase-specific data.\r
c7be0dd5
AB
82\r
83 @retval EFI_SUCCESS The override function completed successfully.\r
84 @retval EFI_NOT_FOUND The specified controller or slot does not exist.\r
85 @retval EFI_INVALID_PARAMETER PhaseType is invalid\r
86\r
87**/\r
88typedef\r
89EFI_STATUS\r
90(EFIAPI * EDKII_SD_MMC_NOTIFY_PHASE) (\r
91 IN EFI_HANDLE ControllerHandle,\r
92 IN UINT8 Slot,\r
49c99534
MW
93 IN EDKII_SD_MMC_PHASE_TYPE PhaseType,\r
94 IN OUT VOID *PhaseData\r
c7be0dd5
AB
95 );\r
96\r
97struct _EDKII_SD_MMC_OVERRIDE {\r
98 //\r
99 // Protocol version of this implementation\r
100 //\r
101 UINTN Version;\r
102 //\r
103 // Callback to override SD/MMC host controller capability bits\r
104 //\r
105 EDKII_SD_MMC_CAPABILITY Capability;\r
106 //\r
107 // Callback to invoke SD/MMC override hooks\r
108 //\r
109 EDKII_SD_MMC_NOTIFY_PHASE NotifyPhase;\r
110};\r
111\r
112extern EFI_GUID gEdkiiSdMmcOverrideProtocolGuid;\r
113\r
114#endif\r