1 /** @file
2 
3   Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
4   This program and the accompanying materials
5   are licensed and made available under the terms and conditions of the BSD License
6   which accompanies this distribution.  The full text of the license may be found at
7   http://opensource.org/licenses/bsd-license.php.
8 
9   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 **/
13 
14 #ifndef _SD_MMC_PCI_HOST_CONTROLLER_PEI_H_
15 #define _SD_MMC_PCI_HOST_CONTROLLER_PEI_H_
16 
17 #include <PiPei.h>
18 
19 #include <Ppi/MasterBootMode.h>
20 #include <Ppi/SdMmcHostController.h>
21 
22 #include <IndustryStandard/Pci.h>
23 
24 #include <Library/DebugLib.h>
25 #include <Library/BaseLib.h>
26 #include <Library/BaseMemoryLib.h>
27 #include <Library/PciLib.h>
28 #include <Library/PeiServicesLib.h>
29 #include <Library/MemoryAllocationLib.h>
30 
31 #define SD_MMC_HC_PEI_SIGNATURE    SIGNATURE_32 ('S', 'D', 'M', 'C')
32 
33 #define MAX_SD_MMC_HCS             8
34 #define MAX_SD_MMC_SLOTS           6
35 
36 //
37 // SD Host Controller SlotInfo Register Offset
38 //
39 #define SD_MMC_HC_PEI_SLOT_OFFSET  0x40
40 
41 typedef struct {
42   UINT8    FirstBar:3;        // bit 0:2
43   UINT8    Reserved:1;        // bit 3
44   UINT8    SlotNum:3;         // bit 4:6
45   UINT8    Reserved1:1;       // bit 7
46 } SD_MMC_HC_PEI_SLOT_INFO;
47 
48 typedef struct {
49   UINTN                            SlotNum;
50   UINTN                            MmioBarAddr[MAX_SD_MMC_SLOTS];
51 } SD_MMC_HC_PEI_BAR;
52 
53 typedef struct {
54   UINTN                            Signature;
55   EDKII_SD_MMC_HOST_CONTROLLER_PPI SdMmcHostControllerPpi;
56   EFI_PEI_PPI_DESCRIPTOR           PpiList;
57   UINTN                            TotalSdMmcHcs;
58   SD_MMC_HC_PEI_BAR                MmioBar[MAX_SD_MMC_HCS];
59 } SD_MMC_HC_PEI_PRIVATE_DATA;
60 
61 #define SD_MMC_HC_PEI_PRIVATE_DATA_FROM_THIS(a)  CR (a, SD_MMC_HC_PEI_PRIVATE_DATA, SdMmcHostControllerPpi, SD_MMC_HC_PEI_SIGNATURE)
62 
63 /**
64   Get the MMIO base address of SD/MMC host controller.
65 
66   @param[in]     This            The protocol instance pointer.
67   @param[in]     ControllerId    The ID of the SD/MMC host controller.
68   @param[in,out] MmioBar         The pointer to store the array of available
69                                  SD/MMC host controller slot MMIO base addresses.
70                                  The entry number of the array is specified by BarNum.
71   @param[out]    BarNum          The pointer to store the supported bar number.
72 
73   @retval EFI_SUCCESS            The operation succeeds.
74   @retval EFI_INVALID_PARAMETER  The parameters are invalid.
75 
76 **/
77 EFI_STATUS
78 EFIAPI
79 GetSdMmcHcMmioBar (
80   IN     EDKII_SD_MMC_HOST_CONTROLLER_PPI *This,
81   IN     UINT8                            ControllerId,
82   IN OUT UINTN                            **MmioBar,
83      OUT UINT8                            *BarNum
84   );
85 
86 #endif
87