From nobody Fri Jun 26 14:59:22 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gmzNC2WJqz6jctl for ; Fri, 26 Jun 2026 14:59:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gmzNB73tdz3dYF for ; Fri, 26 Jun 2026 14:59:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782485963; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ynymrliQSfMPggm/XF34Hr1iDwuucu/hWtTbRZOvO9U=; b=uSkQHhgYwvdkMUlkB3l/OobtCJQURsJ3Xhi48nGMZiO/1SDJG3gg0J4ByvMhXcdf8flVNf NFyLaOmsCX1ob4xDPIq+i0rWzqmtEDBcBM1xhHadxHzKsatUvC0bVE59/5+znnIwiHVwk2 d6uKmzO8rE9Qkq/Exq1crHGyWuQeVECrKyG4kTj4BdBW3RDRPwHuLbo3wubeyEEtEibACN N+OtmUYNA+PFVBg6fhqdcCMUNQgnj7EdzG2lUhlROAixeU/ooTuP7FlbYbpM82Tx9EE4PS T58apqiajgqVbideCcbwBVvk5VQwEeJ72giG1yXargTjZZBNvW0sN3pUEvFBMw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782485963; a=rsa-sha256; cv=none; b=yu/VilO4DNQdMZ0lv6XYhS5mZDkzHW3LkL2vROjTKicqzjxrTEHM9CYVLETWlYPmIg8PYM XuhRmJdVBlXGChMEbqjE9isPGTPEhea8QAGbt/S7UmOmBnbjJ5e0XKtUEVspRBsvx1ijoB mZA295atbHcasaGD5RKyx8O87SCpwB0tUhHgJwkthzkn9PgFoPganPFi6In8d/kYmnz6d0 R3q6KPlM2XB8JGTjagIeYOVmtYIlmFBCrrINZ3EeAs5vEkAcAI/idVZt1kr1oLlyxTZMLY sbtldaaCYxvfH43D7/xyFgS/MZGdNLsifHZ/nFjja2qdDkrmRrxRUeUxcXkhdA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782485963; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ynymrliQSfMPggm/XF34Hr1iDwuucu/hWtTbRZOvO9U=; b=g/10yA0QnAAyn0N7MvrV338FRgFMfPHkRe1fhfzQB457F29QJrfgWOgYaUgNB3FITxgnxr ui2GMqFsnx6gzVOwuLUceUg28y/8ghPlP0OU9TzS9W8gcYIechRh0+TYW42o+qeqbHqHFO PKvPqP31B0kiN4y27yg4cN8g4ZqKyPfGNJN7WeAwzYQW9nSlYf1pjeEDyzwjYvvC4HiIZL oHTULzLpStZL/ekSkJX7lBl4SfRnHBfRVMXiaYQGo91iWmSt9uyzdl6VEb/WzBWSzDLb4d gFrjDzOylsXv1jk2nYBg/bFFpa3GSQfh3VOXVVySbBC2hdaSHfAxJhlQ8NpKgA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gmzNB5nzSzhsb for ; Fri, 26 Jun 2026 14:59:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1fc7a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 26 Jun 2026 14:59:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 59219fc76a4b - main - loader.efi: efiblk_memdisk_preload passes the VirtualDisks to FreeBSD List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 59219fc76a4bde45039695373a662ad59432d451 Auto-Submitted: auto-generated Date: Fri, 26 Jun 2026 14:59:22 +0000 Message-Id: <6a3e93ca.1fc7a.106ce7df@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=59219fc76a4bde45039695373a662ad59432d451 commit 59219fc76a4bde45039695373a662ad59432d451 Author: Warner Losh AuthorDate: 2026-06-26 14:47:31 +0000 Commit: Warner Losh CommitDate: 2026-06-26 14:54:36 +0000 loader.efi: efiblk_memdisk_preload passes the VirtualDisks to FreeBSD Set hint.md.%d.physaddr and hint.md.%d.len for each of the VirtualDisks. The memory for these remains after we exit boot services so FreeBSD can use them. This leverages the BIOS work we did for memdisks. In hindsight, I should have passed this in via metadata, but it's been in a release. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D57806 --- stand/efi/include/efilib.h | 1 + stand/efi/libefi/efipart.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/stand/efi/include/efilib.h b/stand/efi/include/efilib.h index a387c808fe64..96de2a6344a2 100644 --- a/stand/efi/include/efilib.h +++ b/stand/efi/include/efilib.h @@ -68,6 +68,7 @@ pdinfo_list_t *efiblk_get_pdinfo_list(struct devsw *dev); pdinfo_t *efiblk_get_pdinfo(struct devdesc *dev); pdinfo_t *efiblk_get_pdinfo_by_handle(EFI_HANDLE h); pdinfo_t *efiblk_get_pdinfo_by_device_path(EFI_DEVICE_PATH *path); +void efiblk_memdisk_preload(void); /* libefi.c */ void *efi_get_table(EFI_GUID *tbl); diff --git a/stand/efi/libefi/efipart.c b/stand/efi/libefi/efipart.c index c61a7fce2a47..e02993064d26 100644 --- a/stand/efi/libefi/efipart.c +++ b/stand/efi/libefi/efipart.c @@ -1250,3 +1250,47 @@ error: free(blkbuf); return (rc); } + +/* + * Predicate: is this a VirtualDisk as far as UEFI is concerned? + */ +static bool +testmd(pdinfo_t *hd, pdinfo_t *data __unused) +{ + EFI_DEVICE_PATH *node; + + node = efi_devpath_last_node(hd->pd_devpath); + if (node == NULL) + return (false); + if (DevicePathType(node) == MEDIA_DEVICE_PATH && + DevicePathSubType(node) == MEDIA_RAM_DISK_DP) + return (true); + + return (false); +} + +/* + * Passes all the VirtualDisk instances to FreeBSD as a preloaded memory disk. + */ +void +efiblk_memdisk_preload(void) +{ + MEDIA_RAM_DISK_DEVICE_PATH *ram; + uint64_t start, end; + pdinfo_t *md; + char key[32], value[32]; + int i; + + while ((md = efipart_get_pd(&pdinfo, testmd, NULL)) != NULL) { + ram = (MEDIA_RAM_DISK_DEVICE_PATH *)efi_devpath_last_node(md->pd_devpath); + i = ram->Instance; + start = ((uint64_t)ram->StartingAddr[1] << 32) | ram->StartingAddr[0]; + end = ((uint64_t)ram->EndingAddr[1] << 32) | ram->EndingAddr[0]; + snprintf(key, sizeof(key), "hint.md.%d.physaddr", i); + snprintf(value, sizeof(value), "0x%016x", start); + setenv(key, value, 1); + snprintf(key, sizeof(key), "hint.md.%d.len", i); + snprintf(value, sizeof(value), "0x%016x", end - start); + setenv(key, value, 1); + } +}