]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/VirtioFsDxe/DriverBinding.c
OvmfPkg: introduce VirtioFsDxe
[mirror_edk2.git] / OvmfPkg / VirtioFsDxe / DriverBinding.c
1 /** @file
2 Provide EFI_SIMPLE_FILE_SYSTEM_PROTOCOL instances on virtio-fs devices.
3
4 Copyright (C) 2020, Red Hat, Inc.
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7 **/
8
9 #include <Library/BaseLib.h> // AsciiStrCmp()
10 #include <Library/UefiBootServicesTableLib.h> // gBS
11 #include <Protocol/ComponentName2.h> // EFI_COMPONENT_NAME2_PROTOCOL
12 #include <Protocol/DriverBinding.h> // EFI_DRIVER_BINDING_PROTOCOL
13
14 //
15 // UEFI Driver Model protocol instances.
16 //
17 STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding;
18 STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2;
19
20 //
21 // UEFI Driver Model protocol member functions.
22 //
23 EFI_STATUS
24 EFIAPI
25 VirtioFsBindingSupported (
26 IN EFI_DRIVER_BINDING_PROTOCOL *This,
27 IN EFI_HANDLE ControllerHandle,
28 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
29 )
30 {
31 return EFI_UNSUPPORTED;
32 }
33
34 EFI_STATUS
35 EFIAPI
36 VirtioFsBindingStart (
37 IN EFI_DRIVER_BINDING_PROTOCOL *This,
38 IN EFI_HANDLE ControllerHandle,
39 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
40 )
41 {
42 return EFI_DEVICE_ERROR;
43 }
44
45 EFI_STATUS
46 EFIAPI
47 VirtioFsBindingStop (
48 IN EFI_DRIVER_BINDING_PROTOCOL *This,
49 IN EFI_HANDLE ControllerHandle,
50 IN UINTN NumberOfChildren,
51 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
52 )
53 {
54 return EFI_DEVICE_ERROR;
55 }
56
57 EFI_STATUS
58 EFIAPI
59 VirtioFsGetDriverName (
60 IN EFI_COMPONENT_NAME2_PROTOCOL *This,
61 IN CHAR8 *Language,
62 OUT CHAR16 **DriverName
63 )
64 {
65 if (AsciiStrCmp (Language, "en") != 0) {
66 return EFI_UNSUPPORTED;
67 }
68 *DriverName = L"Virtio Filesystem Driver";
69 return EFI_SUCCESS;
70 }
71
72 EFI_STATUS
73 EFIAPI
74 VirtioFsGetControllerName (
75 IN EFI_COMPONENT_NAME2_PROTOCOL *This,
76 IN EFI_HANDLE ControllerHandle,
77 IN EFI_HANDLE ChildHandle OPTIONAL,
78 IN CHAR8 *Language,
79 OUT CHAR16 **ControllerName
80 )
81 {
82 return EFI_UNSUPPORTED;
83 }
84
85 //
86 // Entry point of this driver.
87 //
88 EFI_STATUS
89 EFIAPI
90 VirtioFsEntryPoint (
91 IN EFI_HANDLE ImageHandle,
92 IN EFI_SYSTEM_TABLE *SystemTable
93 )
94 {
95 EFI_STATUS Status;
96
97 mDriverBinding.Supported = VirtioFsBindingSupported;
98 mDriverBinding.Start = VirtioFsBindingStart;
99 mDriverBinding.Stop = VirtioFsBindingStop;
100 mDriverBinding.Version = 0x10;
101 mDriverBinding.ImageHandle = ImageHandle;
102 mDriverBinding.DriverBindingHandle = ImageHandle;
103
104 mComponentName2.GetDriverName = VirtioFsGetDriverName;
105 mComponentName2.GetControllerName = VirtioFsGetControllerName;
106 mComponentName2.SupportedLanguages = "en";
107
108 Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle,
109 &gEfiDriverBindingProtocolGuid, &mDriverBinding,
110 &gEfiComponentName2ProtocolGuid, &mComponentName2, NULL);
111 return Status;
112 }