]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/Include/IndustryStandard/FusionMptScsi.h
OvmfPkg/MptScsiDxe: Initialize hardware
[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
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
22\r
81cada98
NL
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
33\r
34#define MPT_DOORBELL_RESET 0x40\r
35#define MPT_DOORBELL_HANDSHAKE 0x42\r
36\r
37#define MPT_IMASK_DOORBELL 0x01\r
38#define MPT_IMASK_REPLY 0x08\r
39\r
40#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00\r
41#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02\r
42\r
43#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01\r
44\r
45#define MPT_IOC_WHOINIT_ROM_BIOS 0x02\r
46\r
47//\r
48// Device structures\r
49//\r
50\r
51#pragma pack (1)\r
52typedef struct {\r
53 UINT8 WhoInit;\r
54 UINT8 Reserved1;\r
55 UINT8 ChainOffset;\r
56 UINT8 Function;\r
57 UINT8 Flags;\r
58 UINT8 MaxDevices;\r
59 UINT8 MaxBuses;\r
60 UINT8 MessageFlags;\r
61 UINT32 MessageContext;\r
62 UINT16 ReplyFrameSize;\r
63 UINT16 Reserved2;\r
64 UINT32 HostMfaHighAddr;\r
65 UINT32 SenseBufferHighAddr;\r
66} MPT_IO_CONTROLLER_INIT_REQUEST;\r
67\r
68typedef struct {\r
69 UINT8 WhoInit;\r
70 UINT8 Reserved1;\r
71 UINT8 MessageLength;\r
72 UINT8 Function;\r
73 UINT8 Flags;\r
74 UINT8 MaxDevices;\r
75 UINT8 MaxBuses;\r
76 UINT8 MessageFlags;\r
77 UINT32 MessageContext;\r
78 UINT16 Reserved2;\r
79 UINT16 IocStatus;\r
80 UINT32 IocLogInfo;\r
81} MPT_IO_CONTROLLER_INIT_REPLY;\r
82\r
83typedef struct {\r
84 UINT8 TargetId;\r
85 UINT8 Bus;\r
86 UINT8 ChainOffset;\r
87 UINT8 Function;\r
88 UINT8 CdbLength;\r
89 UINT8 SenseBufferLength;\r
90 UINT8 Reserved;\r
91 UINT8 MessageFlags;\r
92 UINT32 MessageContext;\r
93 UINT8 Lun[8];\r
94 UINT32 Control;\r
95 UINT8 Cdb[16];\r
96 UINT32 DataLength;\r
97 UINT32 SenseBufferLowAddress;\r
98} MPT_SCSI_IO_REQUEST;\r
99\r
100typedef struct {\r
101 UINT32 Length: 24;\r
102 UINT32 EndOfList: 1;\r
103 UINT32 Is64BitAddress: 1;\r
104 //\r
105 // True when the buffer contains data to be transfered. Otherwise it's the\r
106 // destination buffer\r
107 //\r
108 UINT32 BufferContainsData: 1;\r
109 UINT32 LocalAddress: 1;\r
110 UINT32 ElementType: 2;\r
111 UINT32 EndOfBuffer: 1;\r
112 UINT32 LastElement: 1;\r
113 UINT64 DataBufferAddress;\r
114} MPT_SG_ENTRY_SIMPLE;\r
115\r
116typedef struct {\r
117 UINT8 TargetId;\r
118 UINT8 Bus;\r
119 UINT8 MessageLength;\r
120 UINT8 Function;\r
121 UINT8 CdbLength;\r
122 UINT8 SenseBufferLength;\r
123 UINT8 Reserved;\r
124 UINT8 MessageFlags;\r
125 UINT32 MessageContext;\r
126 UINT8 ScsiStatus;\r
127 UINT8 ScsiState;\r
128 UINT16 IocStatus;\r
129 UINT32 IocLogInfo;\r
130 UINT32 TransferCount;\r
131 UINT32 SenseCount;\r
132 UINT32 ResponseInfo;\r
133} MPT_SCSI_IO_REPLY;\r
134\r
135typedef struct {\r
136 MPT_SCSI_IO_REQUEST Header;\r
137 MPT_SG_ENTRY_SIMPLE Sg;\r
138} MPT_SCSI_REQUEST_WITH_SG;\r
139#pragma pack ()\r
140\r
141typedef union {\r
142 MPT_SCSI_IO_REPLY Data;\r
143 UINT64 Uint64; // 8 byte alignment required by HW\r
144} MPT_SCSI_IO_REPLY_ALIGNED;\r
145\r
146typedef union {\r
147 MPT_SCSI_REQUEST_WITH_SG Data;\r
148 UINT64 Uint64; // 8 byte alignment required by HW\r
149} MPT_SCSI_REQUEST_ALIGNED;\r
150\r
f4707442 151#endif // __FUSION_MPT_SCSI_H__\r