]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/LsiScsiDxe/LsiScsi.c
OvmfPkg/LsiScsiDxe: Report the name of the driver
[mirror_edk2.git] / OvmfPkg / LsiScsiDxe / LsiScsi.c
CommitLineData
e94d04a0
GL
1/** @file\r
2\r
3 This driver produces Extended SCSI Pass Thru Protocol instances for\r
4 LSI 53C895A SCSI devices.\r
5\r
6 Copyright (C) 2020, SUSE LLC.\r
7\r
8 SPDX-License-Identifier: BSD-2-Clause-Patent\r
9\r
10**/\r
11\r
5e6b870a 12#include <Library/UefiLib.h>\r
e94d04a0
GL
13#include <Uefi/UefiSpec.h>\r
14\r
5e6b870a
GL
15#include "LsiScsi.h"\r
16\r
17//\r
18// Probe, start and stop functions of this driver, called by the DXE core for\r
19// specific devices.\r
20//\r
21// The following specifications document these interfaces:\r
22// - Driver Writer's Guide for UEFI 2.3.1 v1.01, 9 Driver Binding Protocol\r
23// - UEFI Spec 2.3.1 + Errata C, 10.1 EFI Driver Binding Protocol\r
24//\r
25\r
26EFI_STATUS\r
27EFIAPI\r
28LsiScsiControllerSupported (\r
29 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
30 IN EFI_HANDLE ControllerHandle,\r
31 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
32 )\r
33{\r
34 return EFI_UNSUPPORTED;\r
35}\r
36\r
37EFI_STATUS\r
38EFIAPI\r
39LsiScsiControllerStart (\r
40 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
41 IN EFI_HANDLE ControllerHandle,\r
42 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
43 )\r
44{\r
45 return EFI_SUCCESS;\r
46}\r
47\r
48EFI_STATUS\r
49EFIAPI\r
50LsiScsiControllerStop (\r
51 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
52 IN EFI_HANDLE ControllerHandle,\r
53 IN UINTN NumberOfChildren,\r
54 IN EFI_HANDLE *ChildHandleBuffer\r
55 )\r
56{\r
57 return EFI_SUCCESS;\r
58}\r
59\r
60//\r
61// The static object that groups the Supported() (ie. probe), Start() and\r
62// Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata\r
63// C, 10.1 EFI Driver Binding Protocol.\r
64//\r
65STATIC\r
66EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {\r
67 &LsiScsiControllerSupported,\r
68 &LsiScsiControllerStart,\r
69 &LsiScsiControllerStop,\r
70 0x10, // Version, must be in [0x10 .. 0xFFFFFFEF] for IHV-developed drivers\r
71 NULL, // ImageHandle, to be overwritten by\r
72 // EfiLibInstallDriverBindingComponentName2() in LsiScsiEntryPoint()\r
73 NULL // DriverBindingHandle, ditto\r
74};\r
75\r
76\r
386ca8ab
GL
77//\r
78// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and\r
79// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name\r
80// in English, for display on standard console devices. This is recommended for\r
81// UEFI drivers that follow the UEFI Driver Model. Refer to the Driver Writer's\r
82// Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.\r
83//\r
84// Device type names ("LSI 53C895A SCSI Controller") are not formatted because\r
85// the driver supports only that device type. Therefore the driver name\r
86// suffices for unambiguous identification.\r
87//\r
88\r
89STATIC\r
90EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {\r
91 { "eng;en", L"LSI 53C895A SCSI Controller Driver" },\r
92 { NULL, NULL }\r
93};\r
94\r
95STATIC\r
96EFI_COMPONENT_NAME_PROTOCOL gComponentName;\r
97\r
98EFI_STATUS\r
99EFIAPI\r
100LsiScsiGetDriverName (\r
101 IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
102 IN CHAR8 *Language,\r
103 OUT CHAR16 **DriverName\r
104 )\r
105{\r
106 return LookupUnicodeString2 (\r
107 Language,\r
108 This->SupportedLanguages,\r
109 mDriverNameTable,\r
110 DriverName,\r
111 (BOOLEAN)(This == &gComponentName) // Iso639Language\r
112 );\r
113}\r
114\r
115EFI_STATUS\r
116EFIAPI\r
117LsiScsiGetDeviceName (\r
118 IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
119 IN EFI_HANDLE DeviceHandle,\r
120 IN EFI_HANDLE ChildHandle,\r
121 IN CHAR8 *Language,\r
122 OUT CHAR16 **ControllerName\r
123 )\r
124{\r
125 return EFI_UNSUPPORTED;\r
126}\r
127\r
128STATIC\r
129EFI_COMPONENT_NAME_PROTOCOL gComponentName = {\r
130 &LsiScsiGetDriverName,\r
131 &LsiScsiGetDeviceName,\r
132 "eng" // SupportedLanguages, ISO 639-2 language codes\r
133};\r
134\r
135STATIC\r
136EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = {\r
137 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &LsiScsiGetDriverName,\r
138 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &LsiScsiGetDeviceName,\r
139 "en" // SupportedLanguages, RFC 4646 language codes\r
140};\r
141\r
e94d04a0
GL
142//\r
143// Entry point of this driver\r
144//\r
145EFI_STATUS\r
146EFIAPI\r
147LsiScsiEntryPoint (\r
148 IN EFI_HANDLE ImageHandle,\r
149 IN EFI_SYSTEM_TABLE *SystemTable\r
150 )\r
151{\r
5e6b870a
GL
152 return EfiLibInstallDriverBindingComponentName2 (\r
153 ImageHandle,\r
154 SystemTable,\r
155 &gDriverBinding,\r
156 ImageHandle, // The handle to install onto\r
386ca8ab
GL
157 &gComponentName,\r
158 &gComponentName2\r
5e6b870a 159 );\r
e94d04a0 160}\r