VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/LsiScsiDxe/LsiScsi.h@ 102046

最後變更 在這個檔案從102046是 99404,由 vboxsync 提交於 22 月 前

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 5.5 KB
 
1/** @file
2
3 Internal definitions for the LSI 53C895A SCSI driver, which produces
4 Extended SCSI Pass Thru Protocol instances for LSI 53C895A SCSI devices.
5
6 Copyright (C) 2020, SUSE LLC.
7
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10**/
11
12#ifndef _LSI_SCSI_DXE_H_
13#define _LSI_SCSI_DXE_H_
14
15typedef struct {
16 //
17 // Allocate 32 UINT32 entries for the script and it's sufficient for
18 // 16 instructions.
19 //
20 UINT32 Script[32];
21 //
22 // The max size of CDB is 32.
23 //
24 UINT8 Cdb[32];
25 //
26 // Allocate 64KB for read/write buffer. It seems sufficient for the common
27 // boot scenarios.
28 //
29 // NOTE: The number of bytes for data transmission is bounded by DMA Byte
30 // Count (DBC), a 24-bit register, so the maximum is 0xFFFFFF (16MB-1).
31 //
32 UINT8 Data[SIZE_64KB];
33 //
34 // For SCSI Message In phase
35 //
36 UINT8 MsgIn[2];
37 //
38 // For SCSI Message Out phase
39 //
40 UINT8 MsgOut;
41 //
42 // For SCSI Status phase
43 //
44 UINT8 Status;
45} LSI_SCSI_DMA_BUFFER;
46
47typedef struct {
48 UINT32 Signature;
49 UINT64 OrigPciAttrs;
50 EFI_EVENT ExitBoot;
51 EFI_PCI_IO_PROTOCOL *PciIo;
52 UINT8 MaxTarget;
53 UINT8 MaxLun;
54 UINT32 StallPerPollUsec;
55 LSI_SCSI_DMA_BUFFER *Dma;
56 EFI_PHYSICAL_ADDRESS DmaPhysical;
57 VOID *DmaMapping;
58 EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;
59 EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;
60} LSI_SCSI_DEV;
61
62#define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S')
63
64#define LSI_SCSI_FROM_PASS_THRU(PassThruPtr) \
65 CR (PassThruPtr, LSI_SCSI_DEV, PassThru, LSI_SCSI_DEV_SIGNATURE)
66
67#define LSI_SCSI_DMA_ADDR(Dev, MemberName) \
68 ((UINT32)(Dev->DmaPhysical + OFFSET_OF (LSI_SCSI_DMA_BUFFER, MemberName)))
69
70//
71// Probe, start and stop functions of this driver, called by the DXE core for
72// specific devices.
73//
74// The following specifications document these interfaces:
75// - Driver Writer's Guide for UEFI 2.3.1 v1.01, 9 Driver Binding Protocol
76// - UEFI Spec 2.3.1 + Errata C, 10.1 EFI Driver Binding Protocol
77//
78
79EFI_STATUS
80EFIAPI
81LsiScsiControllerSupported (
82 IN EFI_DRIVER_BINDING_PROTOCOL *This,
83 IN EFI_HANDLE ControllerHandle,
84 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
85 );
86
87EFI_STATUS
88EFIAPI
89LsiScsiControllerStart (
90 IN EFI_DRIVER_BINDING_PROTOCOL *This,
91 IN EFI_HANDLE ControllerHandle,
92 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
93 );
94
95EFI_STATUS
96EFIAPI
97LsiScsiControllerStop (
98 IN EFI_DRIVER_BINDING_PROTOCOL *This,
99 IN EFI_HANDLE ControllerHandle,
100 IN UINTN NumberOfChildren,
101 IN EFI_HANDLE *ChildHandleBuffer
102 );
103
104//
105// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL
106// for the LSI 53C895A SCSI Controller. Refer to UEFI Spec 2.3.1 + Errata C,
107// sections
108// - 14.1 SCSI Driver Model Overview,
109// - 14.7 Extended SCSI Pass Thru Protocol.
110//
111
112EFI_STATUS
113EFIAPI
114LsiScsiPassThru (
115 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
116 IN UINT8 *Target,
117 IN UINT64 Lun,
118 IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
119 IN EFI_EVENT Event OPTIONAL
120 );
121
122EFI_STATUS
123EFIAPI
124LsiScsiGetNextTargetLun (
125 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
126 IN OUT UINT8 **TargetPointer,
127 IN OUT UINT64 *Lun
128 );
129
130EFI_STATUS
131EFIAPI
132LsiScsiBuildDevicePath (
133 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
134 IN UINT8 *Target,
135 IN UINT64 Lun,
136 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
137 );
138
139EFI_STATUS
140EFIAPI
141LsiScsiGetTargetLun (
142 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
143 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
144 OUT UINT8 **TargetPointer,
145 OUT UINT64 *Lun
146 );
147
148EFI_STATUS
149EFIAPI
150LsiScsiResetChannel (
151 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
152 );
153
154EFI_STATUS
155EFIAPI
156LsiScsiResetTargetLun (
157 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
158 IN UINT8 *Target,
159 IN UINT64 Lun
160 );
161
162EFI_STATUS
163EFIAPI
164LsiScsiGetNextTarget (
165 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
166 IN OUT UINT8 **TargetPointer
167 );
168
169//
170// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and
171// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name
172// in English, for display on standard console devices. This is recommended for
173// UEFI drivers that follow the UEFI Driver Model. Refer to the Driver Writer's
174// Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.
175//
176// Device type names ("LSI 53C895A SCSI Controller") are not formatted because
177// the driver supports only that device type. Therefore the driver name
178// suffices for unambiguous identification.
179//
180
181EFI_STATUS
182EFIAPI
183LsiScsiGetDriverName (
184 IN EFI_COMPONENT_NAME_PROTOCOL *This,
185 IN CHAR8 *Language,
186 OUT CHAR16 **DriverName
187 );
188
189EFI_STATUS
190EFIAPI
191LsiScsiGetDeviceName (
192 IN EFI_COMPONENT_NAME_PROTOCOL *This,
193 IN EFI_HANDLE DeviceHandle,
194 IN EFI_HANDLE ChildHandle,
195 IN CHAR8 *Language,
196 OUT CHAR16 **ControllerName
197 );
198
199#endif // _LSI_SCSI_DXE_H_
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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