]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/Include/IndustryStandard/FusionMptScsi.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / Include / IndustryStandard / FusionMptScsi.h
CommitLineData
f4707442
NL
1/** @file\r
2\r
3 Macros and type definitions for LSI Fusion MPT SCSI devices.\r
4\r
5 Copyright (C) 2020, Oracle and/or its affiliates.\r
6\r
7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
8\r
9**/\r
10\r
11#ifndef __FUSION_MPT_SCSI_H__\r
12#define __FUSION_MPT_SCSI_H__\r
13\r
14//\r
15// Device offsets and constants\r
16//\r
17\r
ac0a286f
MK
18#define LSI_LOGIC_PCI_VENDOR_ID 0x1000\r
19#define LSI_53C1030_PCI_DEVICE_ID 0x0030\r
20#define LSI_SAS1068_PCI_DEVICE_ID 0x0054\r
21#define LSI_SAS1068E_PCI_DEVICE_ID 0x0058\r
f4707442 22\r
ac0a286f
MK
23#define MPT_REG_DOORBELL 0x00\r
24#define MPT_REG_WRITE_SEQ 0x04\r
25#define MPT_REG_HOST_DIAG 0x08\r
26#define MPT_REG_TEST 0x0c\r
27#define MPT_REG_DIAG_DATA 0x10\r
28#define MPT_REG_DIAG_ADDR 0x14\r
29#define MPT_REG_ISTATUS 0x30\r
30#define MPT_REG_IMASK 0x34\r
31#define MPT_REG_REQ_Q 0x40\r
32#define MPT_REG_REP_Q 0x44\r
81cada98 33\r
ac0a286f
MK
34#define MPT_DOORBELL_RESET 0x40\r
35#define MPT_DOORBELL_HANDSHAKE 0x42\r
81cada98 36\r
ac0a286f
MK
37#define MPT_IMASK_DOORBELL 0x01\r
38#define MPT_IMASK_REPLY 0x08\r
81cada98 39\r
ac0a286f
MK
40#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00\r
41#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02\r
81cada98 42\r
ac0a286f 43#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01\r
81cada98 44\r
ac0a286f 45#define MPT_IOC_WHOINIT_ROM_BIOS 0x02\r
81cada98 46\r
ac0a286f
MK
47#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_NONE (0x00 << 24)\r
48#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE (0x01 << 24)\r
49#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ (0x02 << 24)\r
505812ae 50\r
ac0a286f
MK
51#define MPT_SCSI_IOCSTATUS_SUCCESS 0x0000\r
52#define MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE 0x0043\r
53#define MPT_SCSI_IOCSTATUS_DATA_OVERRUN 0x0044\r
54#define MPT_SCSI_IOCSTATUS_DATA_UNDERRUN 0x0045\r
505812ae 55\r
81cada98
NL
56//\r
57// Device structures\r
58//\r
59\r
60#pragma pack (1)\r
61typedef struct {\r
62 UINT8 WhoInit;\r
63 UINT8 Reserved1;\r
64 UINT8 ChainOffset;\r
65 UINT8 Function;\r
66 UINT8 Flags;\r
67 UINT8 MaxDevices;\r
68 UINT8 MaxBuses;\r
69 UINT8 MessageFlags;\r
70 UINT32 MessageContext;\r
71 UINT16 ReplyFrameSize;\r
72 UINT16 Reserved2;\r
73 UINT32 HostMfaHighAddr;\r
74 UINT32 SenseBufferHighAddr;\r
75} MPT_IO_CONTROLLER_INIT_REQUEST;\r
76\r
77typedef struct {\r
78 UINT8 WhoInit;\r
79 UINT8 Reserved1;\r
80 UINT8 MessageLength;\r
81 UINT8 Function;\r
82 UINT8 Flags;\r
83 UINT8 MaxDevices;\r
84 UINT8 MaxBuses;\r
85 UINT8 MessageFlags;\r
86 UINT32 MessageContext;\r
87 UINT16 Reserved2;\r
88 UINT16 IocStatus;\r
89 UINT32 IocLogInfo;\r
90} MPT_IO_CONTROLLER_INIT_REPLY;\r
91\r
92typedef struct {\r
93 UINT8 TargetId;\r
94 UINT8 Bus;\r
95 UINT8 ChainOffset;\r
96 UINT8 Function;\r
97 UINT8 CdbLength;\r
98 UINT8 SenseBufferLength;\r
99 UINT8 Reserved;\r
100 UINT8 MessageFlags;\r
101 UINT32 MessageContext;\r
102 UINT8 Lun[8];\r
103 UINT32 Control;\r
104 UINT8 Cdb[16];\r
105 UINT32 DataLength;\r
106 UINT32 SenseBufferLowAddress;\r
107} MPT_SCSI_IO_REQUEST;\r
108\r
109typedef struct {\r
ac0a286f
MK
110 UINT32 Length : 24;\r
111 UINT32 EndOfList : 1;\r
112 UINT32 Is64BitAddress : 1;\r
81cada98
NL
113 //\r
114 // True when the buffer contains data to be transfered. Otherwise it's the\r
115 // destination buffer\r
116 //\r
ac0a286f
MK
117 UINT32 BufferContainsData : 1;\r
118 UINT32 LocalAddress : 1;\r
119 UINT32 ElementType : 2;\r
120 UINT32 EndOfBuffer : 1;\r
121 UINT32 LastElement : 1;\r
81cada98
NL
122 UINT64 DataBufferAddress;\r
123} MPT_SG_ENTRY_SIMPLE;\r
124\r
125typedef struct {\r
126 UINT8 TargetId;\r
127 UINT8 Bus;\r
128 UINT8 MessageLength;\r
129 UINT8 Function;\r
130 UINT8 CdbLength;\r
131 UINT8 SenseBufferLength;\r
132 UINT8 Reserved;\r
133 UINT8 MessageFlags;\r
134 UINT32 MessageContext;\r
135 UINT8 ScsiStatus;\r
136 UINT8 ScsiState;\r
137 UINT16 IocStatus;\r
138 UINT32 IocLogInfo;\r
139 UINT32 TransferCount;\r
140 UINT32 SenseCount;\r
141 UINT32 ResponseInfo;\r
142} MPT_SCSI_IO_REPLY;\r
143\r
144typedef struct {\r
ac0a286f
MK
145 MPT_SCSI_IO_REQUEST Header;\r
146 MPT_SG_ENTRY_SIMPLE Sg;\r
81cada98
NL
147} MPT_SCSI_REQUEST_WITH_SG;\r
148#pragma pack ()\r
149\r
150typedef union {\r
ac0a286f
MK
151 MPT_SCSI_IO_REPLY Data;\r
152 UINT64 Uint64; // 8 byte alignment required by HW\r
81cada98
NL
153} MPT_SCSI_IO_REPLY_ALIGNED;\r
154\r
155typedef union {\r
ac0a286f
MK
156 MPT_SCSI_REQUEST_WITH_SG Data;\r
157 UINT64 Uint64; // 8 byte alignment required by HW\r
81cada98
NL
158} MPT_SCSI_REQUEST_ALIGNED;\r
159\r
f4707442 160#endif // __FUSION_MPT_SCSI_H__\r