]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.h
MdeModulePkg/SdMmcPciHcDxe: Fix PIO transfer mode
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / SdMmcPciHcDxe / SdMmcPciHcDxe.h
index 8846fde5cd8f783f7de89054139aab86932bf488..40e4373e572118dd720a84ea1f6df0e12b827ad5 100644 (file)
@@ -3,14 +3,8 @@
   Provides some data structure definitions used by the SD/MMC host controller driver.\r
 \r
 Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.\r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -84,11 +78,13 @@ typedef enum {
 } EFI_SD_MMC_SLOT_TYPE;\r
 \r
 typedef struct {\r
-  BOOLEAN                           Enable;\r
-  EFI_SD_MMC_SLOT_TYPE              SlotType;\r
-  BOOLEAN                           MediaPresent;\r
-  BOOLEAN                           Initialized;\r
-  SD_MMC_CARD_TYPE                  CardType;\r
+  BOOLEAN                            Enable;\r
+  EFI_SD_MMC_SLOT_TYPE               SlotType;\r
+  BOOLEAN                            MediaPresent;\r
+  BOOLEAN                            Initialized;\r
+  SD_MMC_CARD_TYPE                   CardType;\r
+  UINT64                             CurrentFreq;\r
+  EDKII_SD_MMC_OPERATING_PARAMETERS  OperatingParameters;\r
 } SD_MMC_HC_SLOT;\r
 \r
 typedef struct {\r
@@ -126,8 +122,17 @@ typedef struct {
   UINT32                              BaseClkFreq[SD_MMC_HC_MAX_SLOT];\r
 } SD_MMC_HC_PRIVATE_DATA;\r
 \r
+typedef struct {\r
+  SD_MMC_BUS_MODE               BusTiming;\r
+  UINT8                         BusWidth;\r
+  UINT32                        ClockFreq;\r
+  EDKII_SD_MMC_DRIVER_STRENGTH  DriverStrength;\r
+} SD_MMC_BUS_SETTINGS;\r
+\r
 #define SD_MMC_HC_TRB_SIG             SIGNATURE_32 ('T', 'R', 'B', 'T')\r
 \r
+#define SD_MMC_TRB_RETRIES            5\r
+\r
 //\r
 // TRB (Transfer Request Block) contains information for the cmd request.\r
 //\r
@@ -149,7 +154,12 @@ typedef struct {
 \r
   EFI_EVENT                           Event;\r
   BOOLEAN                             Started;\r
+  BOOLEAN                             CommandComplete;\r
   UINT64                              Timeout;\r
+  UINT32                              Retries;\r
+\r
+  BOOLEAN                             PioModeTransferCompleted;\r
+  UINT32                              PioBlockIndex;\r
 \r
   SD_MMC_HC_ADMA_32_DESC_LINE         *Adma32Desc;\r
   SD_MMC_HC_ADMA_64_V3_DESC_LINE      *Adma64V3Desc;\r
@@ -794,6 +804,30 @@ SdCardIdentification (
   IN UINT8                              Slot\r
   );\r
 \r
+/**\r
+  SD/MMC card clock supply.\r
+\r
+  Refer to SD Host Controller Simplified spec 3.0 Section 3.2.1 for details.\r
+\r
+  @param[in] Private         A pointer to the SD_MMC_HC_PRIVATE_DATA instance.\r
+  @param[in] Slot            The slot number of the SD card to send the command to.\r
+  @param[in] BusTiming       BusTiming at which the frequency change is done.\r
+  @param[in] FirstTimeSetup  Flag to indicate whether the clock is being setup for the first time.\r
+  @param[in] ClockFreq       The max clock frequency to be set. The unit is KHz.\r
+\r
+  @retval EFI_SUCCESS       The clock is supplied successfully.\r
+  @retval Others            The clock isn't supplied successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+SdMmcHcClockSupply (\r
+  IN SD_MMC_HC_PRIVATE_DATA  *Private,\r
+  IN UINT8                   Slot,\r
+  IN SD_MMC_BUS_MODE         BusTiming,\r
+  IN BOOLEAN                 FirstTimeSetup,\r
+  IN UINT64                  ClockFreq\r
+  );\r
+\r
 /**\r
   Software reset the specified SD/MMC host controller.\r
 \r