summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/mpt/mpi_raid.h
blob: a4e825756681f0f0335854d5d4f6ec45ab58e5eb (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
/*
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SYS_MPI_RAID_H
#define	_SYS_MPI_RAID_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * RAID Volume Request
 */
typedef struct msg_raid_action {
	uint8_t			Action;
	uint8_t			Reserved1;
	uint8_t			ChainOffset;
	uint8_t			Function;
	uint8_t			VolumeID;
	uint8_t			VolumeBus;
	uint8_t			PhysDiskNum;
	uint8_t			MsgFlags;
	uint32_t		MsgContext;
	uint32_t		Reserved2;
	uint32_t		ActionDataWord;
	sge_simple_union_t	ActionDataSGE;
} msg_raid_action_t;


/* RAID Volume Action values */

#define	MPI_RAID_ACTION_STATUS				0x00
#define	MPI_RAID_ACTION_INDICATOR_STRUCT		0x01
#define	MPI_RAID_ACTION_CREATE_VOLUME			0x02
#define	MPI_RAID_ACTION_DELETE_VOLUME			0x03
#define	MPI_RAID_ACTION_DISABLE_VOLUME			0x04
#define	MPI_RAID_ACTION_ENABLE_VOLUME			0x05
#define	MPI_RAID_ACTION_QUIESCE_PHYS_IO			0x06
#define	MPI_RAID_ACTION_ENABLE_PHYS_IO			0x07
#define	MPI_RAID_ACTION_CHANGE_VOLUME_SETTINGS		0x08
#define	MPI_RAID_ACTION_PHYSDISK_OFFLINE		0x0A
#define	MPI_RAID_ACTION_PHYSDISK_ONLINE			0x0B
#define	MPI_RAID_ACTION_CHANGE_PHYSDISK_SETTINGS	0x0C
#define	MPI_RAID_ACTION_CREATE_PHYSDISK			0x0D
#define	MPI_RAID_ACTION_DELETE_PHYSDISK			0x0E
#define	MPI_RAID_ACTION_FAIL_PHYSDISK			0x0F
#define	MPI_RAID_ACTION_REPLACE_PHYSDISK		0x10
#define	MPI_RAID_ACTION_ACTIVATE_VOLUME			0x11
#define	MPI_RAID_ACTION_INACTIVATE_VOLUME		0x12

#define	MPI_RAID_ACTION_ADATA_DO_NOT_SYNC		0x00000001

#define	MPI_RAID_ACTION_ADATA_KEEP_PHYS_DISKS		0x00000000
#define	MPI_RAID_ACTION_ADATA_DEL_PHYS_DISKS		0x00000001

/* RAID Volume reply message */

typedef struct msg_raid_action_reply {
	uint8_t			Action;
	uint8_t			Reserved;
	uint8_t			MsgLength;
	uint8_t			Function;
	uint8_t			VolumeID;
	uint8_t			VolumeBus;
	uint8_t			PhysDiskNum;
	uint8_t			MsgFlags;
	uint32_t		MsgContext;
	uint16_t		ActionStatus;
	uint16_t		IOCStatus;
	uint32_t		IOCLogInfo;
	uint32_t		VolumeStatus;
	uint32_t		ActionData;
} msg_raid_action_reply_t;


/* RAID Volume reply ActionStatus values */

#define	MPI_RAID_VOL_ASTATUS_SUCCESS		0x0000
#define	MPI_RAID_VOL_ASTATUS_INVALID_ACTION	0x0001
#define	MPI_RAID_VOL_ASTATUS_FAILURE		0x0002
#define	MPI_RAID_VOL_ASTATUS_IN_PROGRESS	0x0003


/* RAID Volume reply RAID Volume Indicator structure */

typedef struct mpi_raid_vol_indicator {
	uint64_t		TotalBlocks;
	uint64_t		BlocksRemaining;
} mpi_raid_vol_indicator_t;


/*
 * SCSI IO RAID Passthrough Request
 */
typedef struct msg_scsi_io_raid_pt_request {
	uint8_t			PhysDiskNum;
	uint8_t			Reserved1;
	uint8_t			ChainOffset;
	uint8_t			Function;
	uint8_t			CDBLength;
	uint8_t			SenseBufferLength;
	uint8_t			Reserved2;
	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_raid_pt_request_t;


/* SCSI IO RAID Passthrough reply structure */

typedef struct msg_scsi_io_raid_pt_reply {
	uint8_t			PhysDiskNum;
	uint8_t			Reserved1;
	uint8_t			MsgLength;
	uint8_t			Function;
	uint8_t			CDBLength;
	uint8_t			SenseBufferLength;
	uint8_t			Reserved2;
	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;
} msg_scsi_io_raid_pt_reply_t;

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_MPI_RAID_H */