blob: 3e5cd7fc32aa92155c04522ff06b5028ad0740dd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_MPI_INIT_H
#define _SYS_MPI_INIT_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* SCSI Initiator Messages
*/
/*
* SCSI IO messages and assocaited structures
*/
typedef struct msg_scsi_io_request {
uint8_t TargetID;
uint8_t Bus;
uint8_t ChainOffset;
uint8_t Function;
uint8_t CDBLength;
uint8_t SenseBufferLength;
uint8_t Reserved;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t LUN[8];
uint32_t Control;
uint8_t CDB[16];
uint32_t DataLength;
uint32_t SenseBufferLowAddr;
sge_io_union_t SGL;
} msg_scsi_io_request_t;
/* SCSIO MsgFlags bits */
#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH 0x01
#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_32 0x00
#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_64 0x01
#define MPI_SCSIIO_MSGFLGS_SENSE_LOCATION 0x02
#define MPI_SCSIIO_MSGFLGS_SENSE_LOC_HOST 0x00
#define MPI_SCSIIO_MSGFLGS_SENSE_LOC_IOC 0x02
/*
* SCSIIO LUN fields
*/
#define MPI_SCSIIO_LUN_FIRST_LEVEL_ADDRESSING 0x0000FFFF
#define MPI_SCSIIO_LUN_SECOND_LEVEL_ADDRESSING 0xFFFF0000
#define MPI_SCSIIO_LUN_THIRD_LEVEL_ADDRESSING 0x0000FFFF
#define MPI_SCSIIO_LUN_FOURTH_LEVEL_ADDRESSING 0xFFFF0000
#define MPI_SCSIIO_LUN_LEVEL_1_WORD 0xFF00
#define MPI_SCSIIO_LUN_LEVEL_1_DWORD 0x0000FF00
/*
* SCSIO Control bits
*/
#define MPI_SCSIIO_CONTROL_DATADIRECTION_MASK 0x03000000
#define MPI_SCSIIO_CONTROL_NODATATRANSFER 0x00000000
#define MPI_SCSIIO_CONTROL_WRITE 0x01000000
#define MPI_SCSIIO_CONTROL_READ 0x02000000
#define MPI_SCSIIO_CONTROL_ADDCDBLEN_MASK 0x3C000000
#define MPI_SCSIIO_CONTROL_ADDCDBLEN_SHIFT 26
#define MPI_SCSIIO_CONTROL_TASKATTRIBUTE_MASK 0x00000700
#define MPI_SCSIIO_CONTROL_SIMPLEQ 0x00000000
#define MPI_SCSIIO_CONTROL_HEADOFQ 0x00000100
#define MPI_SCSIIO_CONTROL_ORDEREDQ 0x00000200
#define MPI_SCSIIO_CONTROL_ACAQ 0x00000400
#define MPI_SCSIIO_CONTROL_UNTAGGED 0x00000500
#define MPI_SCSIIO_CONTROL_NO_DISCONNECT 0x00000700
#define MPI_SCSIIO_CONTROL_TASKMANAGE_MASK 0x00FF0000
#define MPI_SCSIIO_CONTROL_OBSOLETE 0x00800000
#define MPI_SCSIIO_CONTROL_CLEAR_ACA_RSV 0x00400000
#define MPI_SCSIIO_CONTROL_TARGET_RESET 0x00200000
#define MPI_SCSIIO_CONTROL_LUN_RESET_RSV 0x00100000
#define MPI_SCSIIO_CONTROL_RESERVED 0x00080000
#define MPI_SCSIIO_CONTROL_CLR_TASK_SET_RSV 0x00040000
#define MPI_SCSIIO_CONTROL_ABORT_TASK_SET 0x00020000
#define MPI_SCSIIO_CONTROL_RESERVED2 0x00010000
/*
* SCSIIO reply structure
*/
typedef struct msg_scsi_io_reply {
uint8_t TargetID;
uint8_t Bus;
uint8_t MsgLength;
uint8_t Function;
uint8_t CDBLength;
uint8_t SenseBufferLength;
uint8_t Reserved;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t SCSIStatus;
uint8_t SCSIState;
uint16_t IOCStatus;
uint32_t IOCLogInfo;
uint32_t TransferCount;
uint32_t SenseCount;
uint32_t ResponseInfo;
uint16_t TaskTag;
uint16_t Reserved1;
} msg_scsi_io_reply_t;
/*
* SCSIIO Reply SCSIStatus values (SAM-2 status codes)
*/
#define MPI_SCSI_STATUS_SUCCESS 0x00
#define MPI_SCSI_STATUS_CHECK_CONDITION 0x02
#define MPI_SCSI_STATUS_CONDITION_MET 0x04
#define MPI_SCSI_STATUS_BUSY 0x08
#define MPI_SCSI_STATUS_INTERMEDIATE 0x10
#define MPI_SCSI_STATUS_INTERMEDIATE_CONDMET 0x14
#define MPI_SCSI_STATUS_RESERVATION_CONFLICT 0x18
#define MPI_SCSI_STATUS_COMMAND_TERMINATED 0x22
#define MPI_SCSI_STATUS_TASK_SET_FULL 0x28
#define MPI_SCSI_STATUS_ACA_ACTIVE 0x30
/*
* SCSIIO Reply SCSIState values
*/
#define MPI_SCSI_STATE_AUTOSENSE_VALID 0x01
#define MPI_SCSI_STATE_AUTOSENSE_FAILED 0x02
#define MPI_SCSI_STATE_NO_SCSI_STATUS 0x04
#define MPI_SCSI_STATE_TERMINATED 0x08
#define MPI_SCSI_STATE_RESPONSE_INFO_VALID 0x10
#define MPI_SCSI_STATE_QUEUE_TAG_REJECTED 0x20
/*
* SCSIIO Reply ResponseInfo values
* (FCP-1 RSP_CODE values and SPI-3 Packetized Failure codes)
*/
#define MPI_SCSI_RSP_INFO_FUNCTION_COMPLETE 0x00000000
#define MPI_SCSI_RSP_INFO_FCP_BURST_LEN_ERROR 0x01000000
#define MPI_SCSI_RSP_INFO_CMND_FIELDS_INVALID 0x02000000
#define MPI_SCSI_RSP_INFO_FCP_DATA_RO_ERROR 0x03000000
#define MPI_SCSI_RSP_INFO_TASK_MGMT_UNSUPPORTED 0x04000000
#define MPI_SCSI_RSP_INFO_TASK_MGMT_FAILED 0x05000000
#define MPI_SCSI_RSP_INFO_SPI_LQ_INVALID_TYPE 0x06000000
/*
* SCSI Task Management messages
*/
typedef struct msg_scsi_task_mgmt {
uint8_t TargetID;
uint8_t Bus;
uint8_t ChainOffset;
uint8_t Function;
uint8_t Reserved;
uint8_t TaskType;
uint8_t Reserved1;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t LUN[8];
uint32_t Reserved2[7];
uint32_t TaskMsgContext;
} msg_scsi_task_mgmt_t;
/*
* TaskType values
*/
#define MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK 0x00000001
#define MPI_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET 0x00000002
#define MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET 0x00000003
#define MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS 0x00000004
#define MPI_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET 0x00000005
/*
* MsgFlags bits
*/
#define MPI_SCSITASKMGMT_MSGFLAGS_TARGET_RESET_OPTION 0x00000000
#define MPI_SCSITASKMGMT_MSGFLAGS_LIP_RESET_OPTION 0x00000002
#define MPI_SCSITASKMGMT_MSGFLAGS_LIPRESET_RESET_OPTION 0x00000004
/* SCSI Task Management Reply */
typedef struct msg_scsi_task_mgmt_reply {
uint8_t TargetID;
uint8_t Bus;
uint8_t MsgLength;
uint8_t Function;
uint8_t Reserved;
uint8_t TaskType;
uint8_t Reserved1;
uint8_t MsgFlags;
uint32_t MsgContext;
uint8_t Reserved2[2];
uint16_t IOCStatus;
uint32_t IOCLogInfo;
uint32_t TerminationCount;
} msg_scsi_task_mgmt_reply_t;
/*
* SCSI enclosure processor messages
*/
typedef struct msg_sep_request {
uint8_t TargetID;
uint8_t Bus;
uint8_t ChainOffset;
uint8_t Function;
uint8_t Action;
uint8_t Reserved1;
uint8_t Reserved2;
uint8_t MsgFlags;
uint32_t MsgContext;
uint32_t SlotStatus;
} msg_sep_request_t;
#define MPI_SEP_REQ_ACTION_WRITE_STATUS 0x00
#define MPI_SEP_REQ_ACTION_READ_STATUS 0x01
#define MPI_SEP_REQ_SLOTSTATUS_NO_ERROR 0x00000001
#define MPI_SEP_REQ_SLOTSTATUS_DEV_FAULTY 0x00000002
#define MPI_SEP_REQ_SLOTSTATUS_DEV_REBUILDING 0x00000004
#ifdef __cplusplus
}
#endif
#endif /* _SYS_MPI_INIT_H */
|