Print this page
Code review comments
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/io/mr_sas/ld_pd_map.h
+++ new/usr/src/uts/common/io/mr_sas/ld_pd_map.h
1 1 /*
2 2 * ld_pd_map.h
3 3 *
4 4 * Solaris MegaRAID device driver for SAS2.0 controllers
5 5 * Copyright (c) 2008-2012, LSI Logic Corporation.
6 6 * All rights reserved.
7 7 *
8 8 * Version:
9 9 * Author:
10 10 * Swaminathan K S
11 11 * Arun Chandrashekhar
12 12 * Manju R
13 13 * Rasheed
14 14 * Shakeel Bukhari
15 15 */
16 16
17 17 #ifndef _LD_PD_MAP
18 18 #define _LD_PD_MAP
19 19 #include <sys/scsi/scsi.h>
20 20 #include "fusion.h"
21 21
22 22 struct mrsas_instance; /* This will be defined in mr_sas.h */
23 23
24 24 /* raid->write_mode; raid->read_ahead; dcmd->state */
25 25 /* Write through */
26 26 #define WRITE_THROUGH 0
27 27 /* Delayed Write */
28 28 #define WRITE_BACK 1
29 29
30 30 /* SCSI CDB definitions */
31 31 #define READ_6 0x08
32 32 #define READ_16 0x88
33 33 #define READ_10 0x28
34 34 #define READ_12 0xA8
35 35 #define WRITE_16 0x8A
36 36 #define WRITE_10 0x2A
37 37
38 38 /* maximum disks per array */
39 39 #define MAX_ROW_SIZE 32
40 40 /* maximum spans per logical drive */
41 41 #define MAX_SPAN_DEPTH 8
42 42 #define MEGASAS_LOAD_BALANCE_FLAG 0x1
43 43 #define MR_DEFAULT_IO_TIMEOUT 20
44 44
45 45
46 46 union desc_value {
47 47 U64 word;
48 48 struct {
49 49 U32 low;
50 50 U32 high;
51 51 } u1;
52 52 };
53 53
54 54 typedef struct _LD_LOAD_BALANCE_INFO
55 55 {
56 56 U8 loadBalanceFlag;
57 57 U8 reserved1;
58 58 U16 raid1DevHandle[2];
59 59 U16 scsi_pending_cmds[2];
|
↓ open down ↓ |
59 lines elided |
↑ open up ↑ |
60 60 U64 last_accessed_block[2];
61 61 } LD_LOAD_BALANCE_INFO, *PLD_LOAD_BALANCE_INFO;
62 62
63 63 #pragma pack(1)
64 64 typedef struct _MR_FW_RAID_MAP_ALL {
65 65 MR_FW_RAID_MAP raidMap;
66 66 MR_LD_SPAN_MAP ldSpanMap[MAX_LOGICAL_DRIVES - 1];
67 67 } MR_FW_RAID_MAP_ALL;
68 68
69 69 /*
70 - * Raid Context structure which describes MegaRAID specific IO Paramenters
70 + * Raid Context structure which describes MegaRAID specific IO Parameters
71 71 * This resides at offset 0x60 where the SGL normally starts in MPT IO Frames
72 72 */
73 73 typedef struct _MPI2_SCSI_IO_VENDOR_UNIQUE {
74 74 U8 nsegType; /* 0x00 nseg[7:4], Type[3:0] */
75 75 U8 resvd0; /* 0x01 */
76 76 U16 timeoutValue; /* 0x02 -0x03 */
77 77 U8 regLockFlags; /* 0x04 */
78 78 U8 reservedForHw1; /* 0x05 */
79 79 U16 ldTargetId; /* 0x06 - 0x07 */
80 80 U64 regLockRowLBA; /* 0x08 - 0x0F */
81 81 U32 regLockLength; /* 0x10 - 0x13 */
82 82 U16 nextLMId; /* 0x14 - 0x15 */
83 83 U8 extStatus; /* 0x16 */
84 84 U8 status; /* 0x17 status */
85 85 U8 RAIDFlags; /* 0x18 resvd[7:6], ioSubType[5:4], */
86 86 /* resvd[3:1], preferredCpu[0] */
87 87 U8 numSGE; /* 0x19 numSge; not including chain entries */
88 88 U16 configSeqNum; /* 0x1A -0x1B */
89 89 U8 spanArm; /* 0x1C span[7:5], arm[4:0] */
90 90 U8 resvd2[3]; /* 0x1D-0x1f */
91 91 } MPI2_SCSI_IO_VENDOR_UNIQUE, MPI25_SCSI_IO_VENDOR_UNIQUE;
92 92
93 93 #define RAID_CTX_SPANARM_ARM_SHIFT (0)
94 94 #define RAID_CTX_SPANARM_ARM_MASK (0x1f)
95 95
96 96 #define RAID_CTX_SPANARM_SPAN_SHIFT (5)
97 97 #define RAID_CTX_SPANARM_SPAN_MASK (0xE0)
98 98
99 99
100 100 /*
101 101 * RAID SCSI IO Request Message
102 102 * Total SGE count will be one less
103 103 * than _MPI2_SCSI_IO_REQUEST
104 104 */
105 105 typedef struct _MPI2_RAID_SCSI_IO_REQUEST
106 106 {
107 107 uint16_t DevHandle; /* 0x00 */
108 108 uint8_t ChainOffset; /* 0x02 */
109 109 uint8_t Function; /* 0x03 */
110 110 uint16_t Reserved1; /* 0x04 */
111 111 uint8_t Reserved2; /* 0x06 */
112 112 uint8_t MsgFlags; /* 0x07 */
113 113 uint8_t VP_ID; /* 0x08 */
114 114 uint8_t VF_ID; /* 0x09 */
115 115 uint16_t Reserved3; /* 0x0A */
116 116 uint32_t SenseBufferLowAddress; /* 0x0C */
117 117 uint16_t SGLFlags; /* 0x10 */
118 118 uint8_t SenseBufferLength; /* 0x12 */
119 119 uint8_t Reserved4; /* 0x13 */
120 120 uint8_t SGLOffset0; /* 0x14 */
121 121 uint8_t SGLOffset1; /* 0x15 */
122 122 uint8_t SGLOffset2; /* 0x16 */
123 123 uint8_t SGLOffset3; /* 0x17 */
124 124 uint32_t SkipCount; /* 0x18 */
125 125 uint32_t DataLength; /* 0x1C */
126 126 uint32_t BidirectionalDataLength; /* 0x20 */
127 127 uint16_t IoFlags; /* 0x24 */
128 128 uint16_t EEDPFlags; /* 0x26 */
129 129 uint32_t EEDPBlockSize; /* 0x28 */
130 130 uint32_t SecondaryReferenceTag; /* 0x2C */
131 131 uint16_t SecondaryApplicationTag; /* 0x30 */
132 132 uint16_t ApplicationTagTranslationMask; /* 0x32 */
133 133 uint8_t LUN[8]; /* 0x34 */
134 134 uint32_t Control; /* 0x3C */
135 135 Mpi2ScsiIoCdb_t CDB; /* 0x40 */
136 136 MPI2_SCSI_IO_VENDOR_UNIQUE RaidContext; /* 0x60 */
137 137 Mpi2SGEIOUnion_t SGL; /* 0x80 */
138 138 } MPI2_RAID_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_RAID_SCSI_IO_REQUEST,
139 139 Mpi2RaidSCSIIORequest_t, MPI2_POINTER pMpi2RaidSCSIIORequest_t;
140 140
141 141 /*
142 142 * define region lock types
143 143 */
144 144 typedef enum _REGION_TYPE {
145 145 REGION_TYPE_UNUSED = 0, /* lock is currently not active */
146 146 REGION_TYPE_SHARED_READ = 1, /* shared lock (for reads) */
147 147 REGION_TYPE_SHARED_WRITE = 2,
148 148 REGION_TYPE_EXCLUSIVE = 3 /* exclusive lock (for writes) */
149 149 } REGION_TYPE;
150 150
151 151
152 152 #define DM_PATH_MAXPATH 2
153 153 #define DM_PATH_FIRSTPATH 0
154 154 #define DM_PATH_SECONDPATH 1
155 155
156 156 /* declare valid Region locking values */
157 157 typedef enum _REGION_LOCK {
158 158 REGION_LOCK_BYPASS = 0,
159 159 /* for RAID 6 single-drive failure */
160 160 REGION_LOCK_UNCOND_SHARED_READ = 1,
161 161 REGION_LOCK_UNCOND_SHARED_WRITE = 2,
162 162 REGION_LOCK_UNCOND_SHARED_OTHER = 3,
163 163 REGION_LOCK_UNCOND_SHARED_EXCLUSIVE = 0xFF
164 164 } REGION_LOCK;
165 165
166 166
167 167 struct mrsas_init_frame2 {
168 168 uint8_t cmd; /* 00h */
169 169 uint8_t reserved_0; /* 01h */
170 170 uint8_t cmd_status; /* 02h */
171 171
172 172 uint8_t reserved_1; /* 03h */
173 173 uint32_t reserved_2; /* 04h */
174 174
175 175 uint32_t context; /* 08h */
176 176 uint32_t pad_0; /* 0Ch */
177 177
178 178 uint16_t flags; /* 10h */
179 179 uint16_t reserved_3; /* 12h */
180 180 uint32_t data_xfer_len; /* 14h */
181 181
182 182 uint32_t queue_info_new_phys_addr_lo; /* 18h */
183 183 uint32_t queue_info_new_phys_addr_hi; /* 1Ch */
184 184 uint32_t queue_info_old_phys_addr_lo; /* 20h */
185 185 uint32_t queue_info_old_phys_addr_hi; /* 24h */
186 186 uint64_t driverversion; /* 28h */
187 187 uint32_t reserved_4[4]; /* 30h */
188 188 };
189 189
190 190
191 191 /*
192 192 * Request descriptor types
193 193 */
194 194 #define MPI2_REQ_DESCRIPT_FLAGS_LD_IO 0x7
195 195 #define MPI2_REQ_DESCRIPT_FLAGS_MFA 0x1
196 196 #define MPI2_REQ_DESCRIPT_FLAGS_NO_LOCK 0x2
197 197
198 198 #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_SHIFT 1
199 199
200 200
201 201 /*
202 202 * MPT RAID MFA IO Descriptor.
203 203 */
204 204 typedef struct _MR_RAID_MFA_IO_DESCRIPTOR {
205 205 uint32_t RequestFlags : 8;
206 206 uint32_t MessageAddress1 : 24; /* bits 31:8 */
207 207 uint32_t MessageAddress2; /* bits 61:32 */
208 208 } MR_RAID_MFA_IO_REQUEST_DESCRIPTOR,
209 209 *PMR_RAID_MFA_IO_REQUEST_DESCRIPTOR;
210 210
211 211 /* union of Request Descriptors */
212 212 typedef union _MRSAS_REQUEST_DESCRIPTOR_UNION
213 213 {
214 214 MPI2_DEFAULT_REQUEST_DESCRIPTOR Default;
215 215 MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority;
216 216 MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO;
217 217 MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget;
218 218 MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator;
219 219 MR_RAID_MFA_IO_REQUEST_DESCRIPTOR MFAIo;
220 220 U64 Words;
221 221 } MRSAS_REQUEST_DESCRIPTOR_UNION;
222 222
223 223 #pragma pack()
224 224
225 225 enum {
226 226 MRSAS_SCSI_VARIABLE_LENGTH_CMD = 0x7F,
227 227 MRSAS_SCSI_SERVICE_ACTION_READ32 = 0x9,
228 228 MRSAS_SCSI_SERVICE_ACTION_WRITE32 = 0xB,
229 229 MRSAS_SCSI_ADDL_CDB_LEN = 0x18,
230 230 MRSAS_RD_WR_PROTECT = 0x20,
231 231 MRSAS_EEDPBLOCKSIZE = 512
232 232 };
233 233
234 234
235 235 #define IEEE_SGE_FLAGS_ADDR_MASK (0x03)
236 236 #define IEEE_SGE_FLAGS_SYSTEM_ADDR (0x00)
237 237 #define IEEE_SGE_FLAGS_IOCDDR_ADDR (0x01)
238 238 #define IEEE_SGE_FLAGS_IOCPLB_ADDR (0x02)
239 239 #define IEEE_SGE_FLAGS_IOCPLBNTA_ADDR (0x03)
240 240 #define IEEE_SGE_FLAGS_CHAIN_ELEMENT (0x80)
241 241 #define IEEE_SGE_FLAGS_END_OF_LIST (0x40)
242 242
243 243
244 244 U8 MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo);
245 245 U16 MR_CheckDIF(U32, MR_FW_RAID_MAP_ALL *);
246 246 U8 MR_BuildRaidContext(struct mrsas_instance *, struct IO_REQUEST_INFO *,
247 247 MPI2_SCSI_IO_VENDOR_UNIQUE *, MR_FW_RAID_MAP_ALL *);
248 248
249 249 #endif /* _LD_PD_MAP */
|
↓ open down ↓ |
169 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX