From patchwork Thu Aug 28 02:07:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 149 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756346882; bh=YQl0v0nZ/93U8rgJ1V5gGCo1bF+HdF7XLmProrndCEU=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=fO5Ak7WikfWCUdOs0WoYubLW40w8sKKJu6b1yzhU/xrX6I+1Sj0ktqkpwq+vse10o suWUPtfUaLXryDWV8expmzSQL8qoLJBP91O7OkXkGijHt5+fhhR3lVbxnxnQtE5O0S 7M529fCWueZKkXJqXMZAzMP6GyuGjLcGaBwUVHR20oCMGoG3LJKOiNgZDV6RR8n1Tq JMpBrRPCZmw46vb+ZMn0icJWZ3z8ucfZn9Z9FgudhL1098F87mRSTFtnFkA4B9pUVM cUXznApbkRe+oSTEtYYEzcsOI3IEUCLbOT2IeRW6VZJHav+qmg1MkZ8bydWYQhfTR2 MuxK2QmkQnjfw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 1867E6777F for ; Wed, 27 Aug 2025 20:08:02 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id DSaCMHYo5mZU for ; Wed, 27 Aug 2025 20:08:02 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756346878; bh=YQl0v0nZ/93U8rgJ1V5gGCo1bF+HdF7XLmProrndCEU=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=sEnau5vbrrFp+UCbISFC7zR4MLiHlxScnSAS+A/a9tQBHRznkxrLB3Nrt9F5e5+sp dCkrFh3o6BMyzmeyLvkWUZ2pCo+DCxLAg3bFvoHmLrmBXm/8gfDZe4DxEeXO39B92j 7rXkpbpbhqL6j5WNPbHxo0g7kl52bWyB+qKS1y7ZoyyU9ePRPsua1X0UkL5kviQQQQ 1jSfVW0BC1n1S6/ubkUnSu5OdIUvFy7Eo0u1OwVtrtiKVxpPDbp/9Ya3IMU76zvQLY KAMmmhupeYHglCMuz5seVbGXF3uFwcLqEYXer7lcJHUj6rie1kydCg1aE/d27liaAe PcTalrJiJtT3g== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 7B86E677CB for ; Wed, 27 Aug 2025 20:07:58 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756346876; bh=WzqJOvLUjifWz/xpMyWDZfxTj2jZaBS6ZoON0grvcCs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PZqGnaZ+PjeWQIOXoUxJSL+pPwYAzGO/MMHNA0ZB/AukPH7cH7epYD3vnDAPUAYXs bLM//8fTBS2VNX1FiSjQ0eUEMahaWk9vCSlFLESApirY9G4EVNdGk/liP4aVQ4sQyf EtIzHYrViOt3zdMRgazgHVBVfz7qtiaSggyc9DvEkWqDWV4vUF8JohCCFZYqfzRaHr XRecN0LEO4/1Sdz9rufZoGrRaxp6ABGoD3P6UgvpOthv3Fb5L3hfpmVyw8Q0oMOLpE LdVmHnsSY6ubx6NzONAF7w57/CFJPQyowX4fC3IF/Cpm1wk1lS82GJrMNSIEX3Y4A0 qpgKhOXxXuIrw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id D44D06782C; Wed, 27 Aug 2025 20:07:56 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id SBsX5mT-8gxs; Wed, 27 Aug 2025 20:07:56 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756346875; bh=3Y59aaUIbE857StPd7jLtp9bTVi6UADBsxCvgjLvgG8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vw7bwt5WBAjNNExGRIpOcvQHIPwpTQzPqYI/ng9UeC4l2ur2otcez0kTx6SDxU/P1 HVsGRHFZzzreFMeJPL0ulwwRY6NQIbnM1lIFCH6cdOjOAtRuzo5plzmyztJU1BGdFR 9QZHEdPz/tZLEBkpbp2BPAXwCe9/ArPChZDf8N6J5V5cDJePX6GkCAV6dv06qpDwKa yAPwJr5aAPlsg6WFuNF87TL7mkOpkgliNslFTx4Sa2K3SB0NgIOZOYHDBgLcDzZSah F9IW5HEElF7HjSdFkKUDdVwxbVTpiSev6ln32FZTNo5Ke5fII6TRLjjbjCgoWz/lb3 5hirxC1CR8nyA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id B96F26777F; Wed, 27 Aug 2025 20:07:54 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Wed, 27 Aug 2025 20:07:09 -0600 Message-ID: <20250828020732.981415-7-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250828020732.981415-1-sjg@u-boot.org> References: <20250828020732.981415-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: KUJ4HMYSD5BHVF247GL3FNZWL5DLXBCI X-Message-ID-Hash: KUJ4HMYSD5BHVF247GL3FNZWL5DLXBCI X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 06/20] efi: Convert a device-path to a uclass and name List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass Add a function which looks through a device path and tries to figure out the corresponding name (e.g. 'nvme' and uclass ID. This can be useful for showing a short summary of the device path. Co-developed-by: Claude Signed-off-by: Simon Glass --- include/efi_device_path.h | 11 +++++ lib/efi/device_path.c | 86 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/include/efi_device_path.h b/include/efi_device_path.h index 41b59367762..2e425a6d82b 100644 --- a/include/efi_device_path.h +++ b/include/efi_device_path.h @@ -10,6 +10,7 @@ #include +enum uclass_id; struct blk_desc; struct efi_load_option; struct udevice; @@ -418,4 +419,14 @@ struct efi_device_path *search_gpt_dp_node(struct efi_device_path *device_path); struct efi_device_path *efi_dp_from_http(const char *server, struct udevice *dev); +/** + * efi_dp_guess_uclass() - get the guessed name and uclass from EFI device path + * + * @device_path: EFI device path + * @guessp: Returns the U-Boot uclass ID + * Return: name string + */ +const char *efi_dp_guess_uclass(struct efi_device_path *device_path, + enum uclass_id *guessp); + #endif /* EFI_DEVICE_PATH_H */ diff --git a/lib/efi/device_path.c b/lib/efi/device_path.c index 1dc28f81146..191d58bbd2d 100644 --- a/lib/efi/device_path.c +++ b/lib/efi/device_path.c @@ -1290,3 +1290,89 @@ struct efi_device_path *search_gpt_dp_node(struct efi_device_path *device_path) return NULL; } + +const char *efi_dp_guess_uclass(struct efi_device_path *device_path, + enum uclass_id *guessp) +{ + struct efi_device_path *dp = device_path; + enum uclass_id best_guess = UCLASS_BLK; + const char *best_name = "blk"; + + while (dp) { + if (dp->type == DEVICE_PATH_TYPE_MESSAGING_DEVICE) { + switch (dp->sub_type) { + case DEVICE_PATH_SUB_TYPE_MSG_ATAPI: + *guessp = UCLASS_IDE; + return "ide"; + case DEVICE_PATH_SUB_TYPE_MSG_SCSI: + case DEVICE_PATH_SUB_TYPE_MSG_ISCSI: + *guessp = UCLASS_SCSI; + return "scsi"; + case DEVICE_PATH_SUB_TYPE_MSG_FIREWIRE: + case DEVICE_PATH_SUB_TYPE_MSG_1394: + *guessp = UCLASS_BLK; + return "firewire"; + case DEVICE_PATH_SUB_TYPE_MSG_USB: + case DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS: + case DEVICE_PATH_SUB_TYPE_MSG_USB_WWI: + *guessp = UCLASS_USB; + return "usb"; + case DEVICE_PATH_SUB_TYPE_MSG_I2O: + *guessp = UCLASS_BLK; + return "i2o"; + case DEVICE_PATH_SUB_TYPE_MSG_INFINIBAND: + *guessp = UCLASS_ETH; + return "infiniband"; + case DEVICE_PATH_SUB_TYPE_MSG_VENDOR: + *guessp = UCLASS_MISC; + return "vendor"; + case DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR: + case DEVICE_PATH_SUB_TYPE_MSG_IPV4: + case DEVICE_PATH_SUB_TYPE_MSG_IPV6: + case DEVICE_PATH_SUB_TYPE_MSG_VLAN: + *guessp = UCLASS_ETH; + return "eth"; + case DEVICE_PATH_SUB_TYPE_MSG_UART: + *guessp = UCLASS_SERIAL; + return "serial"; + case DEVICE_PATH_SUB_TYPE_MSG_SATA: + *guessp = UCLASS_AHCI; + return "ahci"; + case DEVICE_PATH_SUB_TYPE_MSG_FIBRECHAN: + case DEVICE_PATH_SUB_TYPE_MSG_FIBRECHAN_EX: + *guessp = UCLASS_SCSI; + return "fibrechan"; + case DEVICE_PATH_SUB_TYPE_MSG_SAS: + case DEVICE_PATH_SUB_TYPE_MSG_SAS_EX: + *guessp = UCLASS_SCSI; + return "sas"; + case DEVICE_PATH_SUB_TYPE_MSG_NVME: + *guessp = UCLASS_NVME; + return "nvme"; + case DEVICE_PATH_SUB_TYPE_MSG_URI: + *guessp = UCLASS_ETH; + return "uri"; + case DEVICE_PATH_SUB_TYPE_MSG_UFS: + *guessp = UCLASS_UFS; + return "ufs"; + case DEVICE_PATH_SUB_TYPE_MSG_SD: + case DEVICE_PATH_SUB_TYPE_MSG_MMC: + case DEVICE_PATH_SUB_TYPE_MSG_EMMC: + *guessp = UCLASS_MMC; + return "mmc"; + default: + break; + } + } else if (dp->type == DEVICE_PATH_TYPE_HARDWARE_DEVICE) { + /* PCI devices could be many things, keep as fallback */ + best_guess = UCLASS_PCI; + best_name = "pci"; + } + dp = efi_dp_next(dp); + } + + *guessp = best_guess; + + return best_name; +} +