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