]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Protocol/SdMmcOverride.h
MdeModulePkg/SdMmcPciHcDxe: Allow overriding base clock frequency
[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
7 This program and the accompanying materials\r
8 are licensed and made available under the terms and conditions of the BSD License\r
9 which accompanies this distribution. The full text of the license may be found at\r
10 http://opensource.org/licenses/bsd-license.php\r
11\r
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#ifndef __SD_MMC_OVERRIDE_H__\r
18#define __SD_MMC_OVERRIDE_H__\r
19\r
20#include <Protocol/SdMmcPassThru.h>\r
21\r
22#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_GUID \\r
23 { 0xeaf9e3c1, 0xc9cd, 0x46db, { 0xa5, 0xe5, 0x5a, 0x12, 0x4c, 0x83, 0x23, 0x23 } }\r
24\r
7f3b0bad 25#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_VERSION 0x2\r
c7be0dd5
AB
26\r
27typedef struct _EDKII_SD_MMC_OVERRIDE EDKII_SD_MMC_OVERRIDE;\r
28\r
a4708009
TM
29//\r
30// Bus timing modes\r
31//\r
32typedef enum {\r
33 SdMmcUhsSdr12,\r
34 SdMmcUhsSdr25,\r
35 SdMmcUhsSdr50,\r
36 SdMmcUhsSdr104,\r
37 SdMmcUhsDdr50,\r
38 SdMmcMmcLegacy,\r
39 SdMmcMmcHsSdr,\r
40 SdMmcMmcHsDdr,\r
41 SdMmcMmcHs200,\r
42 SdMmcMmcHs400,\r
43} SD_MMC_BUS_MODE;\r
44\r
c7be0dd5
AB
45typedef enum {\r
46 EdkiiSdMmcResetPre,\r
47 EdkiiSdMmcResetPost,\r
48 EdkiiSdMmcInitHostPre,\r
49 EdkiiSdMmcInitHostPost,\r
a4708009 50 EdkiiSdMmcUhsSignaling,\r
b7b803a6 51 EdkiiSdMmcSwitchClockFreqPost,\r
c7be0dd5
AB
52} EDKII_SD_MMC_PHASE_TYPE;\r
53\r
54/**\r
55\r
56 Override function for SDHCI capability bits\r
57\r
58 @param[in] ControllerHandle The EFI_HANDLE of the controller.\r
59 @param[in] Slot The 0 based slot index.\r
60 @param[in,out] SdMmcHcSlotCapability The SDHCI capability structure.\r
7f3b0bad
MW
61 @param[in,out] BaseClkFreq The base clock frequency value that\r
62 optionally can be updated.\r
c7be0dd5
AB
63\r
64 @retval EFI_SUCCESS The override function completed successfully.\r
65 @retval EFI_NOT_FOUND The specified controller or slot does not exist.\r
66 @retval EFI_INVALID_PARAMETER SdMmcHcSlotCapability is NULL\r
67\r
68**/\r
69typedef\r
70EFI_STATUS\r
71(EFIAPI * EDKII_SD_MMC_CAPABILITY) (\r
72 IN EFI_HANDLE ControllerHandle,\r
73 IN UINT8 Slot,\r
7f3b0bad
MW
74 IN OUT VOID *SdMmcHcSlotCapability,\r
75 IN OUT UINT32 *BaseClkFreq\r
c7be0dd5
AB
76 );\r
77\r
78/**\r
79\r
80 Override function for SDHCI controller operations\r
81\r
82 @param[in] ControllerHandle The EFI_HANDLE of the controller.\r
83 @param[in] Slot The 0 based slot index.\r
84 @param[in] PhaseType The type of operation and whether the\r
85 hook is invoked right before (pre) or\r
86 right after (post)\r
49c99534 87 @param[in,out] PhaseData The pointer to a phase-specific data.\r
c7be0dd5
AB
88\r
89 @retval EFI_SUCCESS The override function completed successfully.\r
90 @retval EFI_NOT_FOUND The specified controller or slot does not exist.\r
91 @retval EFI_INVALID_PARAMETER PhaseType is invalid\r
92\r
93**/\r
94typedef\r
95EFI_STATUS\r
96(EFIAPI * EDKII_SD_MMC_NOTIFY_PHASE) (\r
97 IN EFI_HANDLE ControllerHandle,\r
98 IN UINT8 Slot,\r
49c99534
MW
99 IN EDKII_SD_MMC_PHASE_TYPE PhaseType,\r
100 IN OUT VOID *PhaseData\r
c7be0dd5
AB
101 );\r
102\r
103struct _EDKII_SD_MMC_OVERRIDE {\r
104 //\r
105 // Protocol version of this implementation\r
106 //\r
107 UINTN Version;\r
108 //\r
109 // Callback to override SD/MMC host controller capability bits\r
110 //\r
111 EDKII_SD_MMC_CAPABILITY Capability;\r
112 //\r
113 // Callback to invoke SD/MMC override hooks\r
114 //\r
115 EDKII_SD_MMC_NOTIFY_PHASE NotifyPhase;\r
116};\r
117\r
118extern EFI_GUID gEdkiiSdMmcOverrideProtocolGuid;\r
119\r
120#endif\r