]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/PvScsiDxe/PvScsi.h
OvmfPkg/PvScsiDxe: Reset device on ExitBootServices()
[mirror_edk2.git] / OvmfPkg / PvScsiDxe / PvScsi.h
CommitLineData
e497432c
LA
1/** @file\r
2\r
3 Internal definitions for the PVSCSI driver, which produces Extended SCSI\r
4 Pass Thru Protocol instances for pvscsi devices.\r
5\r
6 Copyright (C) 2020, Oracle and/or its affiliates.\r
7\r
8 SPDX-License-Identifier: BSD-2-Clause-Patent\r
9\r
10**/\r
11\r
12#ifndef __PVSCSI_DXE_H_\r
13#define __PVSCSI_DXE_H_\r
14\r
15#include <Library/DebugLib.h>\r
16#include <Protocol/ScsiPassThruExt.h>\r
17\r
b654edec
LA
18typedef struct {\r
19 EFI_PHYSICAL_ADDRESS DeviceAddress;\r
20 VOID *Mapping;\r
21} PVSCSI_DMA_DESC;\r
22\r
23typedef struct {\r
24 PVSCSI_RINGS_STATE *RingState;\r
25 PVSCSI_DMA_DESC RingStateDmaDesc;\r
26\r
27 PVSCSI_RING_REQ_DESC *RingReqs;\r
28 PVSCSI_DMA_DESC RingReqsDmaDesc;\r
29\r
30 PVSCSI_RING_CMP_DESC *RingCmps;\r
31 PVSCSI_DMA_DESC RingCmpsDmaDesc;\r
32} PVSCSI_RING_DESC;\r
33\r
6510e197
LA
34typedef struct {\r
35 //\r
36 // As EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET.SenseDataLength is defined\r
37 // as UINT8, defining here SenseData size to MAX_UINT8 will guarantee it\r
38 // cannot overflow when passed to device.\r
39 //\r
40 UINT8 SenseData[MAX_UINT8];\r
41 //\r
42 // This size of the data is arbitrarily chosen.\r
43 // It seems to be sufficient for all I/O requests sent through\r
44 // EFI_SCSI_PASS_THRU_PROTOCOL.PassThru() for common boot scenarios.\r
45 //\r
46 UINT8 Data[0x2000];\r
47} PVSCSI_DMA_BUFFER;\r
48\r
e497432c
LA
49#define PVSCSI_SIG SIGNATURE_32 ('P', 'S', 'C', 'S')\r
50\r
51typedef struct {\r
52 UINT32 Signature;\r
c08eaaaf 53 EFI_PCI_IO_PROTOCOL *PciIo;\r
7d8a04e9 54 EFI_EVENT ExitBoot;\r
45098e8a 55 UINT64 OriginalPciAttributes;\r
b654edec 56 PVSCSI_RING_DESC RingDesc;\r
6510e197
LA
57 PVSCSI_DMA_BUFFER *DmaBuf;\r
58 PVSCSI_DMA_DESC DmaBufDmaDesc;\r
7efce2e5
LA
59 UINT8 MaxTarget;\r
60 UINT8 MaxLun;\r
c4c15b87 61 UINTN WaitForCmpStallInUsecs;\r
e497432c
LA
62 EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;\r
63 EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;\r
64} PVSCSI_DEV;\r
65\r
66#define PVSCSI_FROM_PASS_THRU(PassThruPointer) \\r
67 CR (PassThruPointer, PVSCSI_DEV, PassThru, PVSCSI_SIG)\r
68\r
6510e197
LA
69#define PVSCSI_DMA_BUF_DEV_ADDR(Dev, MemberName) \\r
70 (Dev->DmaBufDmaDesc.DeviceAddress + OFFSET_OF(PVSCSI_DMA_BUFFER, MemberName))\r
71\r
e497432c 72#endif // __PVSCSI_DXE_H_\r