TianoCore EDK2 master
Loading...
Searching...
No Matches
FusionMptScsi.h
Go to the documentation of this file.
1
11#ifndef __FUSION_MPT_SCSI_H__
12#define __FUSION_MPT_SCSI_H__
13
14//
15// Device offsets and constants
16//
17
18#define LSI_LOGIC_PCI_VENDOR_ID 0x1000
19#define LSI_53C1030_PCI_DEVICE_ID 0x0030
20#define LSI_SAS1068_PCI_DEVICE_ID 0x0054
21#define LSI_SAS1068E_PCI_DEVICE_ID 0x0058
22
23#define MPT_REG_DOORBELL 0x00
24#define MPT_REG_WRITE_SEQ 0x04
25#define MPT_REG_HOST_DIAG 0x08
26#define MPT_REG_TEST 0x0c
27#define MPT_REG_DIAG_DATA 0x10
28#define MPT_REG_DIAG_ADDR 0x14
29#define MPT_REG_ISTATUS 0x30
30#define MPT_REG_IMASK 0x34
31#define MPT_REG_REQ_Q 0x40
32#define MPT_REG_REP_Q 0x44
33
34#define MPT_DOORBELL_RESET 0x40
35#define MPT_DOORBELL_HANDSHAKE 0x42
36
37#define MPT_IMASK_DOORBELL 0x01
38#define MPT_IMASK_REPLY 0x08
39
40#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00
41#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02
42
43#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01
44
45#define MPT_IOC_WHOINIT_ROM_BIOS 0x02
46
47#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_NONE (0x00 << 24)
48#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE (0x01 << 24)
49#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ (0x02 << 24)
50
51#define MPT_SCSI_IOCSTATUS_SUCCESS 0x0000
52#define MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE 0x0043
53#define MPT_SCSI_IOCSTATUS_DATA_OVERRUN 0x0044
54#define MPT_SCSI_IOCSTATUS_DATA_UNDERRUN 0x0045
55
56//
57// Device structures
58//
59
60#pragma pack (1)
61typedef struct {
62 UINT8 WhoInit;
63 UINT8 Reserved1;
64 UINT8 ChainOffset;
65 UINT8 Function;
66 UINT8 Flags;
67 UINT8 MaxDevices;
68 UINT8 MaxBuses;
69 UINT8 MessageFlags;
70 UINT32 MessageContext;
71 UINT16 ReplyFrameSize;
72 UINT16 Reserved2;
73 UINT32 HostMfaHighAddr;
74 UINT32 SenseBufferHighAddr;
76
77typedef struct {
78 UINT8 WhoInit;
79 UINT8 Reserved1;
80 UINT8 MessageLength;
81 UINT8 Function;
82 UINT8 Flags;
83 UINT8 MaxDevices;
84 UINT8 MaxBuses;
85 UINT8 MessageFlags;
86 UINT32 MessageContext;
87 UINT16 Reserved2;
88 UINT16 IocStatus;
89 UINT32 IocLogInfo;
91
92typedef struct {
93 UINT8 TargetId;
94 UINT8 Bus;
95 UINT8 ChainOffset;
96 UINT8 Function;
97 UINT8 CdbLength;
98 UINT8 SenseBufferLength;
99 UINT8 Reserved;
100 UINT8 MessageFlags;
101 UINT32 MessageContext;
102 UINT8 Lun[8];
103 UINT32 Control;
104 UINT8 Cdb[16];
105 UINT32 DataLength;
106 UINT32 SenseBufferLowAddress;
108
109typedef struct {
110 UINT32 Length : 24;
111 UINT32 EndOfList : 1;
112 UINT32 Is64BitAddress : 1;
113 //
114 // True when the buffer contains data to be transfered. Otherwise it's the
115 // destination buffer
116 //
117 UINT32 BufferContainsData : 1;
118 UINT32 LocalAddress : 1;
119 UINT32 ElementType : 2;
120 UINT32 EndOfBuffer : 1;
121 UINT32 LastElement : 1;
122 UINT64 DataBufferAddress;
124
125typedef struct {
126 UINT8 TargetId;
127 UINT8 Bus;
128 UINT8 MessageLength;
129 UINT8 Function;
130 UINT8 CdbLength;
131 UINT8 SenseBufferLength;
132 UINT8 Reserved;
133 UINT8 MessageFlags;
134 UINT32 MessageContext;
135 UINT8 ScsiStatus;
136 UINT8 ScsiState;
137 UINT16 IocStatus;
138 UINT32 IocLogInfo;
139 UINT32 TransferCount;
140 UINT32 SenseCount;
141 UINT32 ResponseInfo;
143
144typedef struct {
145 MPT_SCSI_IO_REQUEST Header;
148#pragma pack ()
149
150typedef union {
152 UINT64 Uint64; // 8 byte alignment required by HW
154
155typedef union {
157 UINT64 Uint64; // 8 byte alignment required by HW
159
160#endif // __FUSION_MPT_SCSI_H__