]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/PvScsiDxe/PvScsi.c
OvmfPkg/PvScsiDxe: Report name of driver
[mirror_edk2.git] / OvmfPkg / PvScsiDxe / PvScsi.c
1 /** @file
2
3 This driver produces Extended SCSI Pass Thru Protocol instances for
4 pvscsi devices.
5
6 Copyright (C) 2020, Oracle and/or its affiliates.
7
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10 **/
11
12 #include <Library/UefiLib.h>
13 #include <Uefi/UefiSpec.h>
14
15 //
16 // Higher versions will be used before lower, 0x10-0xffffffef is the version
17 // range for IHV (Indie Hardware Vendors)
18 //
19 #define PVSCSI_BINDING_VERSION 0x10
20
21 //
22 // Driver Binding
23 //
24
25 STATIC
26 EFI_STATUS
27 EFIAPI
28 PvScsiDriverBindingSupported (
29 IN EFI_DRIVER_BINDING_PROTOCOL *This,
30 IN EFI_HANDLE ControllerHandle,
31 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
32 )
33 {
34 return EFI_UNSUPPORTED;
35 }
36
37 STATIC
38 EFI_STATUS
39 EFIAPI
40 PvScsiDriverBindingStart (
41 IN EFI_DRIVER_BINDING_PROTOCOL *This,
42 IN EFI_HANDLE ControllerHandle,
43 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
44 )
45 {
46 return EFI_UNSUPPORTED;
47 }
48
49 STATIC
50 EFI_STATUS
51 EFIAPI
52 PvScsiDriverBindingStop (
53 IN EFI_DRIVER_BINDING_PROTOCOL *This,
54 IN EFI_HANDLE ControllerHandle,
55 IN UINTN NumberOfChildren,
56 IN EFI_HANDLE *ChildHandleBuffer
57 )
58 {
59 return EFI_UNSUPPORTED;
60 }
61
62 STATIC EFI_DRIVER_BINDING_PROTOCOL mPvScsiDriverBinding = {
63 &PvScsiDriverBindingSupported,
64 &PvScsiDriverBindingStart,
65 &PvScsiDriverBindingStop,
66 PVSCSI_BINDING_VERSION,
67 NULL, // ImageHandle, filled by EfiLibInstallDriverBindingComponentName2()
68 NULL // DriverBindingHandle, filled as well
69 };
70
71 //
72 // Component Name
73 //
74
75 STATIC EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {
76 { "eng;en", L"PVSCSI Host Driver" },
77 { NULL, NULL }
78 };
79
80 STATIC EFI_COMPONENT_NAME_PROTOCOL mComponentName;
81
82 STATIC
83 EFI_STATUS
84 EFIAPI
85 PvScsiGetDriverName (
86 IN EFI_COMPONENT_NAME_PROTOCOL *This,
87 IN CHAR8 *Language,
88 OUT CHAR16 **DriverName
89 )
90 {
91 return LookupUnicodeString2 (
92 Language,
93 This->SupportedLanguages,
94 mDriverNameTable,
95 DriverName,
96 (BOOLEAN)(This == &mComponentName) // Iso639Language
97 );
98 }
99
100 STATIC
101 EFI_STATUS
102 EFIAPI
103 PvScsiGetDeviceName (
104 IN EFI_COMPONENT_NAME_PROTOCOL *This,
105 IN EFI_HANDLE DeviceHandle,
106 IN EFI_HANDLE ChildHandle,
107 IN CHAR8 *Language,
108 OUT CHAR16 **ControllerName
109 )
110 {
111 return EFI_UNSUPPORTED;
112 }
113
114 STATIC EFI_COMPONENT_NAME_PROTOCOL mComponentName = {
115 &PvScsiGetDriverName,
116 &PvScsiGetDeviceName,
117 "eng" // SupportedLanguages, ISO 639-2 language codes
118 };
119
120 STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = {
121 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &PvScsiGetDriverName,
122 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &PvScsiGetDeviceName,
123 "en" // SupportedLanguages, RFC 4646 language codes
124 };
125
126 //
127 // Entry Point
128 //
129
130 EFI_STATUS
131 EFIAPI
132 PvScsiEntryPoint (
133 IN EFI_HANDLE ImageHandle,
134 IN EFI_SYSTEM_TABLE *SystemTable
135 )
136 {
137 return EfiLibInstallDriverBindingComponentName2 (
138 ImageHandle,
139 SystemTable,
140 &mPvScsiDriverBinding,
141 ImageHandle,
142 &mComponentName,
143 &mComponentName2
144 );
145 }