]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/LsiScsiDxe/LsiScsi.h
OvmfPkg/LsiScsiDxe: Map DMA buffer
[mirror_edk2.git] / OvmfPkg / LsiScsiDxe / LsiScsi.h
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
15 typedef struct {
16 //
17 // Allocate 64KB for read/write buffer. It seems sufficient for the common
18 // boot scenarios.
19 //
20 // NOTE: The number of bytes for data transmission is bounded by DMA Byte
21 // Count (DBC), a 24-bit register, so the maximum is 0xFFFFFF (16MB-1).
22 //
23 UINT8 Data[SIZE_64KB];
24 } LSI_SCSI_DMA_BUFFER;
25
26 typedef struct {
27 UINT32 Signature;
28 UINT64 OrigPciAttrs;
29 EFI_EVENT ExitBoot;
30 EFI_PCI_IO_PROTOCOL *PciIo;
31 UINT8 MaxTarget;
32 UINT8 MaxLun;
33 LSI_SCSI_DMA_BUFFER *Dma;
34 EFI_PHYSICAL_ADDRESS DmaPhysical;
35 VOID *DmaMapping;
36 EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;
37 EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;
38 } LSI_SCSI_DEV;
39
40 #define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S')
41
42 #define LSI_SCSI_FROM_PASS_THRU(PassThruPtr) \
43 CR (PassThruPtr, LSI_SCSI_DEV, PassThru, LSI_SCSI_DEV_SIGNATURE)
44
45
46 //
47 // Probe, start and stop functions of this driver, called by the DXE core for
48 // specific devices.
49 //
50 // The following specifications document these interfaces:
51 // - Driver Writer's Guide for UEFI 2.3.1 v1.01, 9 Driver Binding Protocol
52 // - UEFI Spec 2.3.1 + Errata C, 10.1 EFI Driver Binding Protocol
53 //
54
55 EFI_STATUS
56 EFIAPI
57 LsiScsiControllerSupported (
58 IN EFI_DRIVER_BINDING_PROTOCOL *This,
59 IN EFI_HANDLE ControllerHandle,
60 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
61 );
62
63 EFI_STATUS
64 EFIAPI
65 LsiScsiControllerStart (
66 IN EFI_DRIVER_BINDING_PROTOCOL *This,
67 IN EFI_HANDLE ControllerHandle,
68 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
69 );
70
71 EFI_STATUS
72 EFIAPI
73 LsiScsiControllerStop (
74 IN EFI_DRIVER_BINDING_PROTOCOL *This,
75 IN EFI_HANDLE ControllerHandle,
76 IN UINTN NumberOfChildren,
77 IN EFI_HANDLE *ChildHandleBuffer
78 );
79
80
81 //
82 // The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL
83 // for the LSI 53C895A SCSI Controller. Refer to UEFI Spec 2.3.1 + Errata C,
84 // sections
85 // - 14.1 SCSI Driver Model Overview,
86 // - 14.7 Extended SCSI Pass Thru Protocol.
87 //
88
89 EFI_STATUS
90 EFIAPI
91 LsiScsiPassThru (
92 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
93 IN UINT8 *Target,
94 IN UINT64 Lun,
95 IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
96 IN EFI_EVENT Event OPTIONAL
97 );
98
99 EFI_STATUS
100 EFIAPI
101 LsiScsiGetNextTargetLun (
102 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
103 IN OUT UINT8 **TargetPointer,
104 IN OUT UINT64 *Lun
105 );
106
107 EFI_STATUS
108 EFIAPI
109 LsiScsiBuildDevicePath (
110 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
111 IN UINT8 *Target,
112 IN UINT64 Lun,
113 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
114 );
115
116 EFI_STATUS
117 EFIAPI
118 LsiScsiGetTargetLun (
119 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
120 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
121 OUT UINT8 **TargetPointer,
122 OUT UINT64 *Lun
123 );
124
125 EFI_STATUS
126 EFIAPI
127 LsiScsiResetChannel (
128 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
129 );
130
131 EFI_STATUS
132 EFIAPI
133 LsiScsiResetTargetLun (
134 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
135 IN UINT8 *Target,
136 IN UINT64 Lun
137 );
138
139 EFI_STATUS
140 EFIAPI
141 LsiScsiGetNextTarget (
142 IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
143 IN OUT UINT8 **TargetPointer
144 );
145
146
147 //
148 // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and
149 // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name
150 // in English, for display on standard console devices. This is recommended for
151 // UEFI drivers that follow the UEFI Driver Model. Refer to the Driver Writer's
152 // Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.
153 //
154 // Device type names ("LSI 53C895A SCSI Controller") are not formatted because
155 // the driver supports only that device type. Therefore the driver name
156 // suffices for unambiguous identification.
157 //
158
159 EFI_STATUS
160 EFIAPI
161 LsiScsiGetDriverName (
162 IN EFI_COMPONENT_NAME_PROTOCOL *This,
163 IN CHAR8 *Language,
164 OUT CHAR16 **DriverName
165 );
166
167 EFI_STATUS
168 EFIAPI
169 LsiScsiGetDeviceName (
170 IN EFI_COMPONENT_NAME_PROTOCOL *This,
171 IN EFI_HANDLE DeviceHandle,
172 IN EFI_HANDLE ChildHandle,
173 IN CHAR8 *Language,
174 OUT CHAR16 **ControllerName
175 );
176
177 #endif // _LSI_SCSI_DXE_H_