VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/VirtioScsiDxe/VirtioScsi.h@ 95057

最後變更 在這個檔案從95057是 80721,由 vboxsync 提交於 5 年 前

Devices/EFI/FirmwareNew: Start upgrade process to edk2-stable201908 (compiles on Windows and works to some extent), bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 5.9 KB
 
1/** @file
2
3 Internal definitions for the virtio-scsi driver, which produces Extended SCSI
4 Pass Thru Protocol instances for virtio-scsi devices.
5
6 Copyright (C) 2012, Red Hat, Inc.
7
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10**/
11
12#ifndef _VIRTIO_SCSI_DXE_H_
13#define _VIRTIO_SCSI_DXE_H_
14
15#include <Protocol/ComponentName.h>
16#include <Protocol/DriverBinding.h>
17#include <Protocol/ScsiPassThruExt.h>
18
19#include <IndustryStandard/Virtio.h>
20
21
22//
23// This driver supports 2-byte target identifiers and 4-byte LUN identifiers.
24//
25// EFI_EXT_SCSI_PASS_THRU_PROTOCOL provides TARGET_MAX_BYTES bytes for target
26// identification, and 8 bytes for LUN identification.
27//
28// EFI_EXT_SCSI_PASS_THRU_MODE.AdapterId is also a target identifier,
29// consisting of 4 bytes. Make sure TARGET_MAX_BYTES can accommodate both
30// AdapterId and our target identifiers.
31//
32#if TARGET_MAX_BYTES < 4
33# error "virtio-scsi requires TARGET_MAX_BYTES >= 4"
34#endif
35
36
37#define VSCSI_SIG SIGNATURE_32 ('V', 'S', 'C', 'S')
38
39typedef struct {
40 //
41 // Parts of this structure are initialized / torn down in various functions
42 // at various call depths. The table to the right should make it easier to
43 // track them.
44 //
45 // field init function init depth
46 // ---------------- ------------------ ----------
47 UINT32 Signature; // DriverBindingStart 0
48 VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0
49 EFI_EVENT ExitBoot; // DriverBindingStart 0
50 BOOLEAN InOutSupported; // VirtioScsiInit 1
51 UINT16 MaxTarget; // VirtioScsiInit 1
52 UINT32 MaxLun; // VirtioScsiInit 1
53 UINT32 MaxSectors; // VirtioScsiInit 1
54 VRING Ring; // VirtioRingInit 2
55 EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; // VirtioScsiInit 1
56 EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; // VirtioScsiInit 1
57 VOID *RingMap; // VirtioRingMap 2
58} VSCSI_DEV;
59
60#define VIRTIO_SCSI_FROM_PASS_THRU(PassThruPointer) \
61 CR (PassThruPointer, VSCSI_DEV, PassThru, VSCSI_SIG)
62
63
64//
65// Probe, start and stop functions of this driver, called by the DXE core for
66// specific devices.
67//
68// The following specifications document these interfaces:
69// - Driver Writer's Guide for UEFI 2.3.1 v1.01, 9 Driver Binding Protocol
70// - UEFI Spec 2.3.1 + Errata C, 10.1 EFI Driver Binding Protocol
71//
72
73EFI_STATUS
74EFIAPI
75VirtioScsiDriverBindingSupported (
76 IN EFI_DRIVER_BINDING_PROTOCOL *This,
77 IN EFI_HANDLE DeviceHandle,
78 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
79 );
80
81
82EFI_STATUS
83EFIAPI
84VirtioScsiDriverBindingStart (
85 IN EFI_DRIVER_BINDING_PROTOCOL *This,
86 IN EFI_HANDLE DeviceHandle,
87 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
88 );
89
90
91EFI_STATUS
92EFIAPI
93VirtioScsiDriverBindingStop (
94 IN EFI_DRIVER_BINDING_PROTOCOL *This,
95 IN EFI_HANDLE DeviceHandle,
96 IN UINTN NumberOfChildren,
97 IN EFI_HANDLE *ChildHandleBuffer
98 );
99
100
101//
102// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL
103// for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections
104// - 14.1 SCSI Driver Model Overview,
105// - 14.7 Extended SCSI Pass Thru Protocol.
106//
107
108EFI_STATUS
109EFIAPI
110VirtioScsiPassThru (
111 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
112 IN UINT8 *Target,
113 IN UINT64 Lun,
114 IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
115 IN EFI_EVENT Event OPTIONAL
116 );
117
118
119EFI_STATUS
120EFIAPI
121VirtioScsiGetNextTargetLun (
122 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
123 IN OUT UINT8 **Target,
124 IN OUT UINT64 *Lun
125 );
126
127
128EFI_STATUS
129EFIAPI
130VirtioScsiBuildDevicePath (
131 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
132 IN UINT8 *Target,
133 IN UINT64 Lun,
134 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
135 );
136
137
138EFI_STATUS
139EFIAPI
140VirtioScsiGetTargetLun (
141 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
142 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
143 OUT UINT8 **Target,
144 OUT UINT64 *Lun
145 );
146
147
148EFI_STATUS
149EFIAPI
150VirtioScsiResetChannel (
151 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
152 );
153
154
155EFI_STATUS
156EFIAPI
157VirtioScsiResetTargetLun (
158 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
159 IN UINT8 *Target,
160 IN UINT64 Lun
161 );
162
163
164EFI_STATUS
165EFIAPI
166VirtioScsiGetNextTarget (
167 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
168 IN OUT UINT8 **Target
169 );
170
171
172//
173// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and
174// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name
175// in English, for display on standard console devices. This is recommended for
176// UEFI drivers that follow the UEFI Driver Model. Refer to the Driver Writer's
177// Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.
178//
179// Device type names ("Virtio SCSI Host Device") are not formatted because the
180// driver supports only that device type. Therefore the driver name suffices
181// for unambiguous identification.
182//
183
184EFI_STATUS
185EFIAPI
186VirtioScsiGetDriverName (
187 IN EFI_COMPONENT_NAME_PROTOCOL *This,
188 IN CHAR8 *Language,
189 OUT CHAR16 **DriverName
190 );
191
192
193EFI_STATUS
194EFIAPI
195VirtioScsiGetDeviceName (
196 IN EFI_COMPONENT_NAME_PROTOCOL *This,
197 IN EFI_HANDLE DeviceHandle,
198 IN EFI_HANDLE ChildHandle,
199 IN CHAR8 *Language,
200 OUT CHAR16 **ControllerName
201 );
202
203#endif // _VIRTIO_SCSI_DXE_H_
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette