/******************************************************************************** Copyright (C) 2016 Marvell International Ltd. SPDX-License-Identifier: BSD-2-Clause-Patent *******************************************************************************/ #include #include #include #include #include #include #include // // NonDiscoverable devices registration // STATIC EFI_STATUS NonDiscoverableInitXhci ( IN MV_BOARD_XHCI_DESC *Desc ) { EFI_STATUS Status; UINT8 i; for (i = 0; i < Desc->XhciDevCount; i++) { Status = RegisterNonDiscoverableMmioDevice ( NonDiscoverableDeviceTypeXhci, Desc[i].SoC->XhciDmaType, NonDiscoverableDeviceInitializerGet ( NonDiscoverableDeviceTypeXhci, i), NULL, 1, Desc[i].SoC->XhciBaseAddress, Desc[i].SoC->XhciMemSize ); if (EFI_ERROR(Status)) { DEBUG((DEBUG_ERROR, "NonDiscoverable: Cannot install Xhci device %d\n", i)); return Status; } } return EFI_SUCCESS; } STATIC EFI_STATUS NonDiscoverableInitAhci ( IN MV_BOARD_AHCI_DESC *Desc ) { EFI_STATUS Status; UINT8 i; for (i = 0; i < Desc->AhciDevCount; i++) { Status = RegisterNonDiscoverableMmioDevice ( NonDiscoverableDeviceTypeAhci, Desc[i].SoC->AhciDmaType, NonDiscoverableDeviceInitializerGet ( NonDiscoverableDeviceTypeAhci, i), NULL, 1, Desc[i].SoC->AhciBaseAddress, Desc[i].SoC->AhciMemSize ); if (EFI_ERROR(Status)) { DEBUG((DEBUG_ERROR, "NonDiscoverable: Cannot install Ahci device %d\n", i)); return Status; } } return EFI_SUCCESS; } STATIC EFI_STATUS NonDiscoverableInitSdhci ( IN MV_BOARD_SDMMC_DESC *Desc ) { EFI_STATUS Status; UINT8 i; for (i = 0; i < Desc->SdMmcDevCount; i++) { Status = RegisterNonDiscoverableMmioDevice ( NonDiscoverableDeviceTypeSdhci, Desc[i].SoC->SdMmcDmaType, NonDiscoverableDeviceInitializerGet ( NonDiscoverableDeviceTypeSdhci, i), NULL, 1, Desc[i].SoC->SdMmcBaseAddress, Desc[i].SoC->SdMmcMemSize ); if (EFI_ERROR(Status)) { DEBUG((DEBUG_ERROR, "NonDiscoverable: Cannot install Sdhci device %d\n", i)); return Status; } } return EFI_SUCCESS; } // // Entry point // EFI_STATUS EFIAPI NonDiscoverableEntryPoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { MARVELL_BOARD_DESC_PROTOCOL *BoardDescProtocol; MV_BOARD_SDMMC_DESC *SdMmcBoardDesc; MV_BOARD_AHCI_DESC *AhciBoardDesc; MV_BOARD_XHCI_DESC *XhciBoardDesc; EFI_STATUS Status; /* Obtain list of available controllers */ Status = gBS->LocateProtocol (&gMarvellBoardDescProtocolGuid, NULL, (VOID **)&BoardDescProtocol); if (EFI_ERROR (Status)) { return Status; } /* Xhci */ Status = BoardDescProtocol->BoardDescXhciGet (BoardDescProtocol, &XhciBoardDesc); if (EFI_ERROR (Status)) { return Status; } Status = NonDiscoverableInitXhci (XhciBoardDesc); if (EFI_ERROR(Status)) { return Status; } BoardDescProtocol->BoardDescFree (XhciBoardDesc); /* Ahci */ Status = BoardDescProtocol->BoardDescAhciGet (BoardDescProtocol, &AhciBoardDesc); if (EFI_ERROR (Status)) { return Status; } Status = NonDiscoverableInitAhci (AhciBoardDesc); if (EFI_ERROR(Status)) { return Status; } BoardDescProtocol->BoardDescFree (AhciBoardDesc); /* SdMmc */ Status = BoardDescProtocol->BoardDescSdMmcGet (BoardDescProtocol, &SdMmcBoardDesc); if (EFI_ERROR (Status)) { return Status; } Status = NonDiscoverableInitSdhci (SdMmcBoardDesc); if (EFI_ERROR(Status)) { return Status; } return EFI_SUCCESS; }