On Fri, Jun 08, 2018 at 05:34:17PM +0200, Marcin Wojtas wrote: > Introduce new callback that can provide information > about MDIO controllers to the Mdio driver. > > Extend ArmadaBoardDescLib with new structure MV_BOARD_MDIO_DESC, > for holding board specific data. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Marcin Wojtas <m...@semihalf.com> > Reviewed-by: Hua Jing <jing...@marvell.com> > --- > Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c | 37 > ++++++++++++++++++++ > Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h | 8 +++++ > Silicon/Marvell/Include/Protocol/BoardDesc.h | 8 +++++ > 3 files changed, 53 insertions(+) > > diff --git a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > index d580319..8f3bdfa 100644 > --- a/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > +++ b/Silicon/Marvell/Drivers/BoardDesc/MvBoardDescDxe.c > @@ -96,6 +96,42 @@ MvBoardDescComPhyGet ( > > STATIC > EFI_STATUS > +MvBoardDescMdioGet ( > + IN MARVELL_BOARD_DESC_PROTOCOL *This, > + IN OUT MV_BOARD_MDIO_DESC **MdioDesc > + ) > +{ > + MV_BOARD_MDIO_DESC *BoardDesc; > + MV_SOC_MDIO_DESC *SoCDesc; > + EFI_STATUS Status; > + UINT8 MdioCount;
UINTN. > + UINTN Index; > + > + /* Get SoC data about all available MDIO controllers */ > + Status = ArmadaSoCDescMdioGet (&SoCDesc, &MdioCount); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + /* Allocate and fill board description */ > + BoardDesc = AllocateZeroPool (MdioCount * sizeof (MV_BOARD_MDIO_DESC)); > + if (BoardDesc == NULL) { > + DEBUG ((DEBUG_ERROR, "%a: Cannot allocate memory\n", __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + > + for (Index = 0; Index < MdioCount; Index++) { > + BoardDesc[Index].SoC = &SoCDesc[Index]; > + } > + > + BoardDesc->MdioDevCount = MdioCount; > + *MdioDesc = BoardDesc; > + > + return EFI_SUCCESS; > +} > + > +STATIC > +EFI_STATUS > MvBoardDescAhciGet ( > IN MARVELL_BOARD_DESC_PROTOCOL *This, > IN OUT MV_BOARD_AHCI_DESC **AhciDesc > @@ -434,6 +470,7 @@ MvBoardDescInitProtocol ( > ) > { > BoardDescProtocol->BoardDescComPhyGet = MvBoardDescComPhyGet; > + BoardDescProtocol->BoardDescMdioGet = MvBoardDescMdioGet; Insert alhabetically. > BoardDescProtocol->BoardDescAhciGet = MvBoardDescAhciGet; > BoardDescProtocol->BoardDescSdMmcGet = MvBoardDescSdMmcGet; > BoardDescProtocol->BoardDescXhciGet = MvBoardDescXhciGet; > diff --git a/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > b/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > index 1b56316..5379679 100644 > --- a/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > +++ b/Silicon/Marvell/Include/Library/ArmadaBoardDescLib.h > @@ -28,6 +28,14 @@ typedef struct { > } MV_BOARD_COMPHY_DESC; > > // > +// MDIO devices per-board description > +// > +typedef struct { > + MV_SOC_MDIO_DESC *SoC; > + UINT8 MdioDevCount; UINTN. > +} MV_BOARD_MDIO_DESC; > + > +// > // NonDiscoverableDevices per-board description > // > > diff --git a/Silicon/Marvell/Include/Protocol/BoardDesc.h > b/Silicon/Marvell/Include/Protocol/BoardDesc.h > index 27250db..cff802a 100644 > --- a/Silicon/Marvell/Include/Protocol/BoardDesc.h > +++ b/Silicon/Marvell/Include/Protocol/BoardDesc.h > @@ -50,6 +50,13 @@ EFI_STATUS > > typedef > EFI_STATUS > +(EFIAPI *MV_BOARD_DESC_MDIO_GET) ( > + IN MARVELL_BOARD_DESC_PROTOCOL *This, > + IN OUT MV_BOARD_MDIO_DESC **MdioDesc > + ); > + > +typedef > +EFI_STATUS > (EFIAPI *MV_BOARD_DESC_AHCI_GET) ( > IN MARVELL_BOARD_DESC_PROTOCOL *This, > IN OUT MV_BOARD_AHCI_DESC **AhciDesc > @@ -91,6 +98,7 @@ VOID > > struct _MARVELL_BOARD_DESC_PROTOCOL { > MV_BOARD_DESC_COMPHY_GET BoardDescComPhyGet; > + MV_BOARD_DESC_MDIO_GET BoardDescMdioGet; Insert alphabetically. / Leif > MV_BOARD_DESC_AHCI_GET BoardDescAhciGet; > MV_BOARD_DESC_SDMMC_GET BoardDescSdMmcGet; > MV_BOARD_DESC_XHCI_GET BoardDescXhciGet; > -- > 2.7.4 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel