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