xref: /illumos-gate/usr/src/uts/common/sys/mpt/mpi_raid.h (revision 5422785d352a2bb398daceab3d1898a8aa64d006)
1 /*
2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #ifndef	_SYS_MPI_RAID_H
7 #define	_SYS_MPI_RAID_H
8 
9 #pragma ident	"%Z%%M%	%I%	%E% SMI"
10 
11 #ifdef	__cplusplus
12 extern "C" {
13 #endif
14 
15 /*
16  * RAID Volume Request
17  */
18 typedef struct msg_raid_action {
19 	uint8_t			Action;
20 	uint8_t			Reserved1;
21 	uint8_t			ChainOffset;
22 	uint8_t			Function;
23 	uint8_t			VolumeID;
24 	uint8_t			VolumeBus;
25 	uint8_t			PhysDiskNum;
26 	uint8_t			MsgFlags;
27 	uint32_t		MsgContext;
28 	uint32_t		Reserved2;
29 	uint32_t		ActionDataWord;
30 	sge_simple_union_t	ActionDataSGE;
31 } msg_raid_action_t;
32 
33 
34 /* RAID Volume Action values */
35 
36 #define	MPI_RAID_ACTION_STATUS				0x00
37 #define	MPI_RAID_ACTION_INDICATOR_STRUCT		0x01
38 #define	MPI_RAID_ACTION_CREATE_VOLUME			0x02
39 #define	MPI_RAID_ACTION_DELETE_VOLUME			0x03
40 #define	MPI_RAID_ACTION_DISABLE_VOLUME			0x04
41 #define	MPI_RAID_ACTION_ENABLE_VOLUME			0x05
42 #define	MPI_RAID_ACTION_QUIESCE_PHYS_IO			0x06
43 #define	MPI_RAID_ACTION_ENABLE_PHYS_IO			0x07
44 #define	MPI_RAID_ACTION_CHANGE_VOLUME_SETTINGS		0x08
45 #define	MPI_RAID_ACTION_PHYSDISK_OFFLINE		0x0A
46 #define	MPI_RAID_ACTION_PHYSDISK_ONLINE			0x0B
47 #define	MPI_RAID_ACTION_CHANGE_PHYSDISK_SETTINGS	0x0C
48 #define	MPI_RAID_ACTION_CREATE_PHYSDISK			0x0D
49 #define	MPI_RAID_ACTION_DELETE_PHYSDISK			0x0E
50 #define	MPI_RAID_ACTION_FAIL_PHYSDISK			0x0F
51 #define	MPI_RAID_ACTION_REPLACE_PHYSDISK		0x10
52 #define	MPI_RAID_ACTION_ACTIVATE_VOLUME			0x11
53 #define	MPI_RAID_ACTION_INACTIVATE_VOLUME		0x12
54 
55 #define	MPI_RAID_ACTION_ADATA_DO_NOT_SYNC		0x00000001
56 
57 #define	MPI_RAID_ACTION_ADATA_KEEP_PHYS_DISKS		0x00000000
58 #define	MPI_RAID_ACTION_ADATA_DEL_PHYS_DISKS		0x00000001
59 
60 /* RAID Volume reply message */
61 
62 typedef struct msg_raid_action_reply {
63 	uint8_t			Action;
64 	uint8_t			Reserved;
65 	uint8_t			MsgLength;
66 	uint8_t			Function;
67 	uint8_t			VolumeID;
68 	uint8_t			VolumeBus;
69 	uint8_t			PhysDiskNum;
70 	uint8_t			MsgFlags;
71 	uint32_t		MsgContext;
72 	uint16_t		ActionStatus;
73 	uint16_t		IOCStatus;
74 	uint32_t		IOCLogInfo;
75 	uint32_t		VolumeStatus;
76 	uint32_t		ActionData;
77 } msg_raid_action_reply_t;
78 
79 
80 /* RAID Volume reply ActionStatus values */
81 
82 #define	MPI_RAID_VOL_ASTATUS_SUCCESS		0x0000
83 #define	MPI_RAID_VOL_ASTATUS_INVALID_ACTION	0x0001
84 #define	MPI_RAID_VOL_ASTATUS_FAILURE		0x0002
85 #define	MPI_RAID_VOL_ASTATUS_IN_PROGRESS	0x0003
86 
87 
88 /* RAID Volume reply RAID Volume Indicator structure */
89 
90 typedef struct mpi_raid_vol_indicator {
91 	uint64_t		TotalBlocks;
92 	uint64_t		BlocksRemaining;
93 } mpi_raid_vol_indicator_t;
94 
95 
96 /*
97  * SCSI IO RAID Passthrough Request
98  */
99 typedef struct msg_scsi_io_raid_pt_request {
100 	uint8_t			PhysDiskNum;
101 	uint8_t			Reserved1;
102 	uint8_t			ChainOffset;
103 	uint8_t			Function;
104 	uint8_t			CDBLength;
105 	uint8_t			SenseBufferLength;
106 	uint8_t			Reserved2;
107 	uint8_t			MsgFlags;
108 	uint32_t		MsgContext;
109 	uint8_t			LUN[8];
110 	uint32_t		Control;
111 	uint8_t			CDB[16];
112 	uint32_t		DataLength;
113 	uint32_t		SenseBufferLowAddr;
114 	sge_io_union_t		SGL;
115 } msg_scsi_io_raid_pt_request_t;
116 
117 
118 /* SCSI IO RAID Passthrough reply structure */
119 
120 typedef struct msg_scsi_io_raid_pt_reply {
121 	uint8_t			PhysDiskNum;
122 	uint8_t			Reserved1;
123 	uint8_t			MsgLength;
124 	uint8_t			Function;
125 	uint8_t			CDBLength;
126 	uint8_t			SenseBufferLength;
127 	uint8_t			Reserved2;
128 	uint8_t			MsgFlags;
129 	uint32_t		MsgContext;
130 	uint8_t			SCSIStatus;
131 	uint8_t			SCSIState;
132 	uint16_t		IOCStatus;
133 	uint32_t		IOCLogInfo;
134 	uint32_t		TransferCount;
135 	uint32_t		SenseCount;
136 	uint32_t		ResponseInfo;
137 } msg_scsi_io_raid_pt_reply_t;
138 
139 #ifdef	__cplusplus
140 }
141 #endif
142 
143 #endif	/* _SYS_MPI_RAID_H */
144