From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 16452941B7C for ; Sat, 4 May 2024 21:32:43 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=ua4vqTOAxhop5tCta4lnsbct8iHZDzhi5B/M2AZsr2g=; c=relaxed/simple; d=groups.io; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20240206; t=1714858362; v=1; b=q0l+5HMB9252rn7BV1W8rtrGhDD7OnRZL0EBY5eXdaI8hDtIdtfFg8cJwdNqaBxaDOiqt0Rv A/2vE8ySyAGSmxRloU4uRJ2iOMkh890DHA2RBc9KYSgjVX7d3Kw25febJUFQeh+NZJ0hBcMTe6K eFwZiEf2yjy9MApc7v2y63pMABPH22RdjuYKGrkSkPFWgrGESRO7ZACORz/WYAyQhoVAmtNT/R3 bIatPe/PA22QZjP+LMWJN7EcoY5vcSKmQgGhZMTeGpB1M0ZNNZU3dgVePVhC/Ygz8jxXkSEJtqq K9qRBq+WbKUwL2rYgv4uweHumr6f6DMFlS9f50n2UeiTQ== X-Received: by 127.0.0.2 with SMTP id vC4gYY7687511xMAeNe1nn9O; Sat, 04 May 2024 14:32:42 -0700 X-Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mx.groups.io with SMTP id smtpd.web11.6862.1714858359038442436 for ; Sat, 04 May 2024 14:32:39 -0700 X-Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 444LRwxf009497; Sat, 4 May 2024 14:32:36 -0700 X-Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3xwmhg8qbg-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 04 May 2024 14:32:36 -0700 (PDT) X-Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sat, 4 May 2024 14:32:35 -0700 X-Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Sat, 4 May 2024 14:32:35 -0700 X-Received: from MRVL-5Lp9he46Ey.marvell.com (unknown [10.193.11.115]) by maili.marvell.com (Postfix) with ESMTP id 120FA3F708C; Sat, 4 May 2024 14:32:35 -0700 (PDT) From: "Narinder Dhillon" To: CC: , , , , Narinder Dhillon Subject: [edk2-devel] [edk2-platforms PATCH v4 4/7] Silicon/Marvell: Device tree driver Date: Sat, 4 May 2024 14:32:27 -0700 Message-ID: <20240504213230.31976-5-ndhillon@marvell.com> In-Reply-To: <20240504213230.31976-1-ndhillon@marvell.com> References: <20240504213230.31976-1-ndhillon@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: WFwTmC7IZN83W5ym2rzkZEETsDwyiCfj X-Proofpoint-GUID: WFwTmC7IZN83W5ym2rzkZEETsDwyiCfj Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Sat, 04 May 2024 14:32:39 -0700 Resent-From: ndhillon@marvell.com Reply-To: devel@edk2.groups.io,ndhillon@marvell.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: vakalBJoZzrzXDFib4p9MCubx7686176AA= Content-Transfer-Encoding: 8bit Content-Type: text/plain X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=q0l+5HMB; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=marvell.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io From: Narinder Dhillon This patch adds a device tree driver that is used to read board configuration information from a device tree. Signed-off-by: Narinder Dhillon --- .../Drivers/Fdt/FdtClientDxe/FdtClientDxe.c | 382 ++++++++++++++++++ .../Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf | 43 ++ .../Include/Protocol/FdtClient.h | 180 +++++++++ 3 files changed, 605 insertions(+) create mode 100644 Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c create mode 100644 Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf create mode 100644 Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient.h diff --git a/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c b/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c new file mode 100644 index 0000000000..8741a41e46 --- /dev/null +++ b/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.c @@ -0,0 +1,382 @@ +/** @file +* FDT client driver +* +* Copyright (c) 2016, Cavium Inc. All rights reserved.
+* Copyright (c) 2016, Linaro Ltd. All rights reserved.
+* +* SPDX-License-Identifier: BSD-2-Clause-Patent +* +**/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +STATIC VOID *mDeviceTreeBase; + +STATIC +EFI_STATUS +GetNodeProperty ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + IN CONST CHAR8 *PropertyName, + OUT CONST VOID **Prop, + OUT UINT32 *PropSize OPTIONAL + ) +{ + INT32 Len; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Prop != NULL); + + *Prop = fdt_getprop (mDeviceTreeBase, Node, PropertyName, &Len); + if (*Prop == NULL) { + return EFI_NOT_FOUND; + } + + if (PropSize != NULL) { + *PropSize = Len; + } + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +SetNodeProperty ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + IN CONST CHAR8 *PropertyName, + IN CONST VOID *Prop, + IN UINT32 PropSize + ) +{ + INT32 Ret; + + ASSERT (mDeviceTreeBase != NULL); + + Ret = fdt_setprop (mDeviceTreeBase, Node, PropertyName, Prop, PropSize); + if (Ret != 0) { + return EFI_DEVICE_ERROR; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +EFIAPI +FindCompatibleNode ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST CHAR8 *CompatibleString, + IN FDT_HANDLE PrevNode, + OUT FDT_HANDLE *Node + ) +{ + FDT_HANDLE Offset; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Node != NULL); + + Offset = fdt_node_offset_by_compatible (mDeviceTreeBase, PrevNode, CompatibleString); + + if (Offset < 0) { + return EFI_NOT_FOUND; + } + + *Node = Offset; + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetOrInsertChosenNode ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + OUT INT32 *Node + ) +{ + INT32 NewNode; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Node != NULL); + + NewNode = fdt_path_offset (mDeviceTreeBase, "/chosen"); + + if (NewNode < 0) { + NewNode = fdt_add_subnode (mDeviceTreeBase, 0, "/chosen"); + } + + if (NewNode < 0) { + return EFI_OUT_OF_RESOURCES; + } + + *Node = NewNode; + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetNodeDepth ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + OUT INT32 *Depth +) +{ + *Depth = fdt_node_depth (mDeviceTreeBase, Node); + + if (*Depth < 0) { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetParentNode ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + OUT FDT_HANDLE *Parent +) +{ + *Parent = fdt_parent_offset (mDeviceTreeBase, Node); + + if (*Parent < 0) { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetNode ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST CHAR8 *Path, + OUT FDT_HANDLE *Node +) +{ + *Node = fdt_path_offset (mDeviceTreeBase, Path); + + if (*Node < 0) { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetNodePath ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Node, + OUT CHAR8 *Path, + IN INT32 Size +) +{ + INT32 Result; + + Result = fdt_get_path (mDeviceTreeBase, Node, Path, Size); + + if (Result < 0) { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetNodeByPropertyValue ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE StartNode, + IN CHAR8 *Property, + IN VOID *Value, + IN INT32 Size, + OUT FDT_HANDLE *Node +) +{ + INT32 Offset; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Node != NULL); + + Offset = fdt_node_offset_by_prop_value (mDeviceTreeBase, StartNode, + Property, Value, + Size); + + if (Offset < 0) { + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); + return EFI_NOT_FOUND; + } + + *Node = Offset; + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetSubnodeByPropertyValue( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Parent, + IN CHAR8 *PropertyName, + IN VOID *PropertyValue, + IN INT32 PropertyLength, + OUT FDT_HANDLE *Node +) +{ + INT32 Offset; + CONST VOID *Property; + INT32 Length; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Node != NULL); + + Offset = fdt_first_subnode (mDeviceTreeBase, Parent); + + while (Offset > 0) { + Property = fdt_getprop (mDeviceTreeBase, Offset, PropertyName, &Length); + + if ((Property != NULL) && + (PropertyLength == Length) && + (CompareMem (Property, PropertyValue, Length) == 0)) { + *Node = Offset; + return EFI_SUCCESS; + } + + Offset = fdt_next_subnode(mDeviceTreeBase, Offset); + } + + return EFI_NOT_FOUND; +} + +STATIC +EFI_STATUS +GetNodeByPHandle ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE PHandle, + OUT FDT_HANDLE *Node +) +{ + INT32 Offset; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Node != NULL); + + Offset = fdt_node_offset_by_phandle (mDeviceTreeBase, PHandle); + + if (Offset < 0) { + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); + return EFI_NOT_FOUND; + } + + *Node = Offset; + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetFirstSubnode ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Parent, + OUT FDT_HANDLE *Node +) +{ + INT32 Offset; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Node != NULL); + + Offset = fdt_first_subnode (mDeviceTreeBase, Parent); + + if (Offset < 0) { + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); + return EFI_NOT_FOUND; + } + + *Node = Offset; + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetNextSubnode ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Subnode, + OUT FDT_HANDLE *Next +) +{ + INT32 Offset; + + ASSERT (mDeviceTreeBase != NULL); + ASSERT (Next != NULL); + + Offset = fdt_next_subnode (mDeviceTreeBase, Subnode); + + if (Offset < 0) { + DEBUG ((DEBUG_ERROR, "Result: %d\n", Offset)); + return EFI_NOT_FOUND; + } + + *Next = Offset; + + return EFI_SUCCESS; +} + +STATIC MRVL_FDT_CLIENT_PROTOCOL mFdtClientProtocol = { + GetNodeProperty, + SetNodeProperty, + FindCompatibleNode, + GetOrInsertChosenNode, + GetNodeDepth, + GetParentNode, + GetNode, + GetNodePath, + GetNodeByPropertyValue, + GetSubnodeByPropertyValue, + GetNodeByPHandle, + GetFirstSubnode, + GetNextSubnode +}; + +EFI_STATUS +EFIAPI +InitializeFdtClientDxe ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + VOID *Hob; + VOID *DeviceTreeBase; + + Hob = GetFirstGuidHob (&gFdtHobGuid); + + if (Hob == NULL) { + return EFI_NOT_FOUND; + } + + DeviceTreeBase = GET_GUID_HOB_DATA (Hob); + mDeviceTreeBase = (VOID *)*(UINT64 *)DeviceTreeBase; + if (fdt_check_header (mDeviceTreeBase)) { + DEBUG ((DEBUG_ERROR, "No DTB found @ 0x%p\n", DeviceTreeBase)); + return EFI_NOT_FOUND; + } + + DEBUG ((DEBUG_INFO, "DTB @ 0x%p\n", mDeviceTreeBase)); + + return gBS->InstallMultipleProtocolInterfaces (&ImageHandle, + &gMrvlFdtClientProtocolGuid, &mFdtClientProtocol, + NULL); +} diff --git a/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf b/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf new file mode 100644 index 0000000000..26362344f7 --- /dev/null +++ b/Silicon/Marvell/Drivers/Fdt/FdtClientDxe/FdtClientDxe.inf @@ -0,0 +1,43 @@ +## @file +# FDT client driver +# +# Copyright (c) 2016, Linaro Ltd. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = FdtClientDxe + FILE_GUID = 9A871B00-1C16-4F61-8D2C-93B6654B5AD6 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = InitializeFdtClientDxe + +[Sources] + FdtClientDxe.c + +[Packages] + Silicon/Marvell/MarvellSiliconPkg/MarvellSiliconPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BaseLib + DebugLib + FdtLib + HobLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gMrvlFdtClientProtocolGuid ## PRODUCES + +[Guids] + gFdtHobGuid + gFdtTableGuid + +[Depex] + TRUE diff --git a/Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient.h b/Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient.h new file mode 100644 index 0000000000..38480c8831 --- /dev/null +++ b/Silicon/Marvell/MarvellSiliconPkg/Include/Protocol/FdtClient.h @@ -0,0 +1,180 @@ +/** @file + + DISCLAIMER: the FDT_CLIENT_PROTOCOL introduced here is a work in progress, + and should not be used outside of the EDK II tree. + + Copyright (C) 2023 Marvell + Copyright (c) 2016, Linaro Ltd. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __FDT_CLIENT_H__ +#define __FDT_CLIENT_H__ + +#define FDT_CLIENT_PROTOCOL_GUID { \ + 0xE11FACA0, 0x4710, 0x4C8E, {0xA7, 0xA2, 0x01, 0xBA, 0xA2, 0x59, 0x1B, 0x4C} \ + } + +#define FdtToCpu32(Value) SwapBytes32(Value) +#define CpuToFdt32(Value) SwapBytes32(Value) + +#define FdtToCpu64(Value) SwapBytes64(Value) +#define CpuToFdt64(Value) SwapBytes64(Value) + +// +// Protocol interface structure +// +typedef int FDT_HANDLE; +#define FDT_START_HANDLE -1 +typedef struct _MRVL_FDT_CLIENT_PROTOCOL MRVL_FDT_CLIENT_PROTOCOL; + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NODE_PROPERTY) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + IN CONST CHAR8 *PropertyName, + OUT CONST VOID **Prop, + OUT UINT32 *PropSize OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_SET_NODE_PROPERTY) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + IN CONST CHAR8 *PropertyName, + IN CONST VOID *Prop, + IN UINT32 PropSize + ); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_FIND_COMPATIBLE_NODE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST CHAR8 *CompatibleString, + IN FDT_HANDLE PrevNode, + OUT FDT_HANDLE *Node + ); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_FIND_COMPATIBLE_NODE_PROPERTY) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST CHAR8 *CompatibleString, + IN CONST CHAR8 *PropertyName, + OUT CONST VOID **Prop, + OUT UINT32 *PropSize OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_OR_INSERT_CHOSEN_NODE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + OUT FDT_HANDLE *Node + ); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NODE_DEPTH) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + OUT FDT_HANDLE *Depth +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_PARENT_NODE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN FDT_HANDLE Node, + OUT FDT_HANDLE *Parent +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NODE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST CHAR8 *Path, + OUT FDT_HANDLE *Node +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NODE_PATH) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Node, + OUT CHAR8 *Path, + IN INT32 Size +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NODE_BY_PROPERTY_VALUE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE StartNode, + IN CHAR8 *Property, + IN VOID *Value, + IN INT32 Size, + OUT FDT_HANDLE *Node +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_SUBNODE_BY_PROPERTY_VALUE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Parent, + IN CHAR8 *PropertyName, + IN VOID *PropertyValue, + IN INT32 PropertyLength, + OUT FDT_HANDLE *Node +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NODE_BY_PHANDLE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE PHandle, + OUT FDT_HANDLE *Node +); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_FIRST_SUBNODE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Parent, + OUT FDT_HANDLE *Node + ); + +typedef +EFI_STATUS +(EFIAPI *MRVL_FDT_CLIENT_GET_NEXT_SUBNODE) ( + IN MRVL_FDT_CLIENT_PROTOCOL *This, + IN CONST FDT_HANDLE Subnode, + OUT FDT_HANDLE *Next + ); + +struct _MRVL_FDT_CLIENT_PROTOCOL { + MRVL_FDT_CLIENT_GET_NODE_PROPERTY GetNodeProperty; + MRVL_FDT_CLIENT_SET_NODE_PROPERTY SetNodeProperty; + + MRVL_FDT_CLIENT_FIND_COMPATIBLE_NODE FindCompatibleNode; + + MRVL_FDT_CLIENT_GET_OR_INSERT_CHOSEN_NODE GetOrInsertChosenNode; + + MRVL_FDT_CLIENT_GET_NODE_DEPTH GetNodeDepth; + MRVL_FDT_CLIENT_GET_PARENT_NODE GetParentNode; + MRVL_FDT_CLIENT_GET_NODE GetNode; + MRVL_FDT_CLIENT_GET_NODE_PATH GetNodePath; + MRVL_FDT_CLIENT_GET_NODE_BY_PROPERTY_VALUE GetNodeByPropertyValue; + MRVL_FDT_CLIENT_GET_SUBNODE_BY_PROPERTY_VALUE GetSubnodeByPropertyValue; + MRVL_FDT_CLIENT_GET_NODE_BY_PHANDLE GetNodeByPHandle; + MRVL_FDT_CLIENT_GET_FIRST_SUBNODE GetFirstSubnode; + MRVL_FDT_CLIENT_GET_NEXT_SUBNODE GetNextSubnode; + +}; + +extern EFI_GUID gMrvlFdtClientProtocolGuid; + +#endif -- 2.34.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#118572): https://edk2.groups.io/g/devel/message/118572 Mute This Topic: https://groups.io/mt/105913429/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-