From nobody Mon Feb 9 12:25:08 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+69013+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+69013+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1608153225; cv=none; d=zohomail.com; s=zohoarc; b=HRyFxaurd5r6Jvb3B0STx/PLB45oR894T5IHe2LLs7d1KgdOLV7jgJ9PflAa0vOerhqxT1YbKq867e+kAcoTpFVPmKyoU9LSVd+rHWzR79GntNqdQBJbKLTAlueCV2p0IKpG1Cb25euZ7OuuDYNptQbhQ0oEvdRTIeYCgF3G7r0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608153225; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=bRPX7oONlvLEQjFhe4RrA7R1tc1NZLQtPvifN4qJSqA=; b=UFFYAD5bdjDQoGXkD8OexaKRGas+oPvs1QtiL5uhrn19gK1k5SztpG6EY3fIua342l+PuMk5HZVj30nxdQcT+azClWWPpdU3ySyUxZ1wMHkErNZQEIG4TeoecRlqkTCIE9AcFKKtOkSkQDvojZ07oumTrcfsblXVdjj4ID06Uv4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+69013+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1608153225109840.2234447398832; Wed, 16 Dec 2020 13:13:45 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id 9ZjvYY1788612xIk0KOWzOc6; Wed, 16 Dec 2020 13:13:43 -0800 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.groups.io with SMTP id smtpd.web12.3473.1608153221482470255 for ; Wed, 16 Dec 2020 13:13:42 -0800 X-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-260-Pc0BB8nCP5-6TRG5fI6YXg-1; Wed, 16 Dec 2020 16:13:38 -0500 X-MC-Unique: Pc0BB8nCP5-6TRG5fI6YXg-1 X-Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D150C1E7C1; Wed, 16 Dec 2020 21:13:37 +0000 (UTC) X-Received: from lacos-laptop-7.usersys.redhat.com (ovpn-114-152.ams2.redhat.com [10.36.114.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id D20C75D9CD; Wed, 16 Dec 2020 21:13:32 +0000 (UTC) From: "Laszlo Ersek" To: devel@edk2.groups.io, virtio-fs@redhat.com, lersek@redhat.com Cc: Ard Biesheuvel , Jordan Justen , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [edk2-devel] [edk2 PATCH 01/48] OvmfPkg: introduce VirtioFsDxe Date: Wed, 16 Dec 2020 22:10:38 +0100 Message-Id: <20201216211125.19496-2-lersek@redhat.com> In-Reply-To: <20201216211125.19496-1-lersek@redhat.com> References: <20201216211125.19496-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com X-Gm-Message-State: GKbXUp5CngjpABTK6533q70Yx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1608153223; bh=bRPX7oONlvLEQjFhe4RrA7R1tc1NZLQtPvifN4qJSqA=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=rCBmaLPzlx6Db6ltAIaP4PM9+545w00ysHh7CV2pKlokOu7GlUD5uHvIH+f/X9B52tm fOr7CtFCOm9iATgj7rrGOMvCFiYJKlCFyKUYlQxlVICEQV922ELCpPu38Sy4hL3xs8HdV aCcec2fRmCqs7b5cHy8HkcOipifUw8TUl8U= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The purpose of the driver is to ease file exchange (file sharing) between the guest firmware and the virtualization host. The driver is supposed to interoperate with QEMU's "virtiofsd" (Virtio Filesystem Daemon). References: - https://virtio-fs.gitlab.io/ - https://libvirt.org/kbase/virtiofs.html VirtioFsDxe will bind virtio-fs devices, and produce EFI_SIMPLE_FILE_SYSTEM_PROTOCOL instances on them. In the longer term, assuming QEMU will create "bootorder" fw_cfg file entries for virtio-fs devices, booting guest OSes from host-side directories should become possible (dependent on the matching QemuBootOrderLib enhancement). Add the skeleton of the driver. Install EFI_DRIVER_BINDING_PROTOCOL with stub member functions. Install EFI_COMPONENT_NAME2_PROTOCOL with final member functions. This suffices for the DRIVERS command in the UEFI Shell to list the driver with a human-readable name. The file permission model is described immediately in the INF file as a comment block, for future reference. Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Philippe Mathieu-Daud=C3=A9 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3097 Signed-off-by: Laszlo Ersek --- OvmfPkg/OvmfPkgIa32.dsc | 1 + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + OvmfPkg/OvmfPkgX64.dsc | 1 + OvmfPkg/OvmfPkgIa32.fdf | 1 + OvmfPkg/OvmfPkgIa32X64.fdf | 1 + OvmfPkg/OvmfPkgX64.fdf | 1 + OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf | 92 ++++++++++++++++ OvmfPkg/VirtioFsDxe/DriverBinding.c | 112 ++++++++++++++++++++ 8 files changed, 210 insertions(+) diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 8eede796a8bd..4ff70674fb6e 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -807,16 +807,17 @@ [Components] } MdeModulePkg/Universal/PrintDxe/PrintDxe.inf MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf FatPkg/EnhancedFatDxe/Fat.inf MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf + OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf OvmfPkg/SataControllerDxe/SataControllerDxe.inf MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index f9f82a48f4b9..d40a59183c79 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -821,16 +821,17 @@ [Components.X64] } MdeModulePkg/Universal/PrintDxe/PrintDxe.inf MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf FatPkg/EnhancedFatDxe/Fat.inf MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf + OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf OvmfPkg/SataControllerDxe/SataControllerDxe.inf MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index e59ae05b73aa..ec7886235acf 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -817,16 +817,17 @@ [Components] } MdeModulePkg/Universal/PrintDxe/PrintDxe.inf MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf FatPkg/EnhancedFatDxe/Fat.inf MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf + OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf OvmfPkg/SataControllerDxe/SataControllerDxe.inf MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index c07b775d0a2d..f400c845b9c9 100644 --- a/OvmfPkg/OvmfPkgIa32.fdf +++ b/OvmfPkg/OvmfPkgIa32.fdf @@ -285,16 +285,17 @@ [FV.DXEFV] INF OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf INF RuleOverride=3DACPITABLE OvmfPkg/AcpiTables/AcpiTables.inf INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorD= xe.inf INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphics= ResourceTableDxe.inf =20 INF FatPkg/EnhancedFatDxe/Fat.inf INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf +INF OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf =20 !if $(TOOL_CHAIN_TAG) !=3D "XCODE5" INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf INF ShellPkg/DynamicCommand/HttpDynamicCommand/HttpDynamicCommand.inf INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand= .inf !endif INF ShellPkg/Application/Shell/Shell.inf =20 diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index 9adf1525c135..d055552fd09f 100644 --- a/OvmfPkg/OvmfPkgIa32X64.fdf +++ b/OvmfPkg/OvmfPkgIa32X64.fdf @@ -286,16 +286,17 @@ [FV.DXEFV] INF OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf INF RuleOverride=3DACPITABLE OvmfPkg/AcpiTables/AcpiTables.inf INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorD= xe.inf INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphics= ResourceTableDxe.inf =20 INF FatPkg/EnhancedFatDxe/Fat.inf INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf +INF OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf =20 !if $(TOOL_CHAIN_TAG) !=3D "XCODE5" INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf INF ShellPkg/DynamicCommand/HttpDynamicCommand/HttpDynamicCommand.inf INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand= .inf !endif INF ShellPkg/Application/Shell/Shell.inf =20 diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 17ba9e177ac3..1a2ef5bf2ae3 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -295,16 +295,17 @@ [FV.DXEFV] INF OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf INF RuleOverride=3DACPITABLE OvmfPkg/AcpiTables/AcpiTables.inf INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorD= xe.inf INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphics= ResourceTableDxe.inf =20 INF FatPkg/EnhancedFatDxe/Fat.inf INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf +INF OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf =20 !if $(TOOL_CHAIN_TAG) !=3D "XCODE5" INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf INF ShellPkg/DynamicCommand/HttpDynamicCommand/HttpDynamicCommand.inf INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand= .inf !endif INF ShellPkg/Application/Shell/Shell.inf =20 diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf b/OvmfPkg/VirtioFsDxe/Virt= ioFsDxe.inf new file mode 100644 index 000000000000..69cb44bc7c96 --- /dev/null +++ b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf @@ -0,0 +1,92 @@ +## @file +# Provide EFI_SIMPLE_FILE_SYSTEM_PROTOCOL instances on virtio-fs devices. +# +# Copyright (C) 2020, Red Hat, Inc. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +# Permission Model of this driver: +# +# Regardless of the UID and GID values this driver send in the FUSE request +# header, the daemon (that is, the Virtio Filesystem device) always acts w= ith +# root privileges on the host side. The only time the daemon considers sai= d UID +# and GID fields is when creating a new file or directory. Thus, the guest +# driver cannot rely on the host for enforcing any file mode permissions, +# regardless of the "personality" that the guest driver poses as, because +# "root" on the host side ignores all file mode bits. +# +# Therefore the guest driver has to do its own permission checking, and us= e the +# host-side file mode bits only as a kind of "metadata storage" or "remind= er" +# -- hopefully in a way that makes some sense on the host side too. +# +# The complete mapping between the EFI_FILE_PROTOCOL and the host-side file +# mode bits is described below. +# +# - The guest driver poses as UID 0, GID 0, PID 1. +# +# - If and only if all "w" bits are missing from a file on the host side, = then +# the file or directory is reported as EFI_FILE_READ_ONLY in the guest. = When +# setting EFI_FILE_READ_ONLY in the guest, all "w" bits (0222) are clear= ed on +# the host; when clearing EFI_FILE_READ_ONLY in the guest, all "w" bits = are +# set on the host. Viewed from the host side, this sort of reflects that= an +# EFI_FILE_READ_ONLY file should not be written by anyone. +# +# - The attributes EFI_FILE_HIDDEN, EFI_FILE_SYSTEM, EFI_FILE_RESERVED, and +# EFI_FILE_ARCHIVE are never reported in the guest, and they are silently +# ignored when a SetInfo() call or a file-creating Open() call requests = them. +# +# - On the host, files are created with 0666 file mode bits, directories a= re +# created with 0777 file mode bits. +# +# - In the guest, the EFI_FILE_READ_ONLY attribute only controls the permi= tted +# open mode. In particular, on directories, the EFI_FILE_READ_ONLY attri= bute +# does not prevent the creation or deletion of entries inside the direct= ory; +# EFI_FILE_READ_ONLY only prevents the renaming, deleting, flushing (syn= cing) +# and touching of the directory itself (with "touching" meaning updating= the +# timestamps). The fact that EFI_FILE_READ_ONLY being set on a directory= is +# irrelevant in the guest with regard to entry creation/deletion, is +# well-mirrored by the fact that virtiofsd -- which runs as root, regard= less +# of guest driver personality -- ignores the absence of "w" permissions = on a +# host-side directory, when creating or removing entries in it. +# +# - When an EFI_FILE_PROTOCOL is opened read-only, then the Delete(), Writ= e() +# and Flush() member functions are disabled for it. Additionally, SetInf= o() +# is restricted to flipping the EFI_FILE_READ_ONLY bit (which takes effe= ct at +# the next Open()). +# +# - As a consequence of the above, for deleting a directory, it must be +# presented in the guest as openable for writing. +# +# - We diverge from the UEFI spec, and permit Flush() on a directory that = has +# been opened read-write; otherwise the only way to invoke FUSE_FSYNCDIR= on a +# directory would be to Close() it. +# +# - OpenVolume() opens the root directory for read-only access. The Open() +# member function may open it for read-write access. While the root dire= ctory +# cannot be renamed or deleted, opening it for read-write access is usef= ul +# for calling Flush(), according to the previous paragraph, or for updat= ing +# the root directory's timestamps with SetInfo(). +## + +[Defines] + INF_VERSION =3D 1.29 + BASE_NAME =3D VirtioFsDxe + FILE_GUID =3D 7BD9DDF7-8B83-488E-AEC9-24C786= 10289C + MODULE_TYPE =3D UEFI_DRIVER + ENTRY_POINT =3D VirtioFsEntryPoint + +[Packages] + MdePkg/MdePkg.dec + +[Sources] + DriverBinding.c + +[LibraryClasses] + BaseLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEfiComponentName2ProtocolGuid ## PRODUCES + gEfiDriverBindingProtocolGuid ## PRODUCES diff --git a/OvmfPkg/VirtioFsDxe/DriverBinding.c b/OvmfPkg/VirtioFsDxe/Driv= erBinding.c new file mode 100644 index 000000000000..ac0a6330f01b --- /dev/null +++ b/OvmfPkg/VirtioFsDxe/DriverBinding.c @@ -0,0 +1,112 @@ +/** @file + Provide EFI_SIMPLE_FILE_SYSTEM_PROTOCOL instances on virtio-fs devices. + + Copyright (C) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include // AsciiStrCmp() +#include // gBS +#include // EFI_COMPONENT_NAME2_PROTO= COL +#include // EFI_DRIVER_BINDING_PROTOC= OL + +// +// UEFI Driver Model protocol instances. +// +STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding; +STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2; + +// +// UEFI Driver Model protocol member functions. +// +EFI_STATUS +EFIAPI +VirtioFsBindingSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + ) +{ + return EFI_UNSUPPORTED; +} + +EFI_STATUS +EFIAPI +VirtioFsBindingStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + ) +{ + return EFI_DEVICE_ERROR; +} + +EFI_STATUS +EFIAPI +VirtioFsBindingStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer OPTIONAL + ) +{ + return EFI_DEVICE_ERROR; +} + +EFI_STATUS +EFIAPI +VirtioFsGetDriverName ( + IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +{ + if (AsciiStrCmp (Language, "en") !=3D 0) { + return EFI_UNSUPPORTED; + } + *DriverName =3D L"Virtio Filesystem Driver"; + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +VirtioFsGetControllerName ( + IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +{ + return EFI_UNSUPPORTED; +} + +// +// Entry point of this driver. +// +EFI_STATUS +EFIAPI +VirtioFsEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + mDriverBinding.Supported =3D VirtioFsBindingSupported; + mDriverBinding.Start =3D VirtioFsBindingStart; + mDriverBinding.Stop =3D VirtioFsBindingStop; + mDriverBinding.Version =3D 0x10; + mDriverBinding.ImageHandle =3D ImageHandle; + mDriverBinding.DriverBindingHandle =3D ImageHandle; + + mComponentName2.GetDriverName =3D VirtioFsGetDriverName; + mComponentName2.GetControllerName =3D VirtioFsGetControllerName; + mComponentName2.SupportedLanguages =3D "en"; + + Status =3D gBS->InstallMultipleProtocolInterfaces (&ImageHandle, + &gEfiDriverBindingProtocolGuid, &mDriverBinding, + &gEfiComponentName2ProtocolGuid, &mComponentName2, NULL); + return Status; +} --=20 2.19.1.3.g30247aa5d201 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#69013): https://edk2.groups.io/g/devel/message/69013 Mute This Topic: https://groups.io/mt/79022524/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-