1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
3 *
4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5 *that the following conditions are met:
6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7 *following disclaimer.
8 *2. Redistributions in binary form must reproduce the above copyright notice,
9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10 *with the distribution.
11 *
12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20 *
21 * $FreeBSD$
22 *
23 ********************************************************************************/
24 /********************************************************************************
25 **
26 ** Version Control Information:
27 **
28 **
29 *******************************************************************************/
30 /********************************************************************************
31 **
32 * tidefs.h
33 *
34 * Abstract: This module contains enum and #define definition used
35 * by Transport Independent API (TIAPI) Layer.
36 *
37 ********************************************************************************/
38
39 #ifndef TIDEFS_H
40
41 #define TIDEFS_H
42
43 #include <dev/pms/freebsd/driver/common/osenv.h>
44 #include <dev/pms/freebsd/driver/common/ostypes.h>
45 #include <dev/pms/freebsd/driver/common/osdebug.h>
46
47 /*****************************************************************************
48 * INITIATOR/TARGET SHARED DEFINES AND ENUMS
49 *****************************************************************************/
50
51 /*
52 * Option mask parameter for tiCOMPortStart()
53 */
54 #define PORTAL_ADD_MASK 0x00000001
55
56 /*
57 * Maximum memory descriptor for Low-Level layer.
58 */
59 #define MAX_LL_LAYER_MEM_DESCRIPTORS 64
60
61
62 /*
63 * TI API function return types
64 */
65 typedef enum
66 {
67 tiSuccess,
68 tiError,
69 tiBusy,
70 tiIONoDevice,
71 tiMemoryTooLarge,
72 tiMemoryNotAvail,
73 tiInvalidHandle,
74 tiNotSupported,
75 tiReject,
76 tiIncorrectLun,
77 tiDeviceBusy,
78 } tiStatus_t;
79
80 /*
81 * Type of memory, OR-ed the bit fields.
82 */
83
84 /* Bit 0-1, cached or dma-uncached dma-cached */
85
86 #define TI_DMA_MEM 0x00000000 /* uncached DMA capable memory */
87 #define TI_CACHED_MEM 0x00000001 /* cached non-DMA capable memory */
88 #define TI_CACHED_DMA_MEM 0x00000002 /* cached DMA capable memory */
89 #define TI_DMA_MEM_CHIP 0x00000003 /* Internal HW/chip memory */
90
91 /* Bit2-3: location of memory */
92 #define TI_LOC_HOST 0x00000000 /* default, allocated from host */
93 #define TI_LOC_ON_CHIP 0x00000004 /* memory is from on-chip RAM */
94 #define TI_LOC_ON_CARD 0x00000008 /* memory is from on-card RAM */
95
96 /* Type of SGL list
97 *
98 */
99 typedef enum
100 {
101 tiSgl=0,
102 tiSglList=0x80000000,
103 tiExtHdr
104 }tiSglType_t;
105
106 /*
107 * Type of mutex semaphoring/synchronization
108 */
109 typedef enum
110 {
111 tiSingleMutexLockPerPort,
112 tiOneMutexLockPerQueue
113 }tiMutexType_t;
114
115 /*
116 * Context (interrupt or non-interrupt)
117 */
118 typedef enum
119 {
120 tiInterruptContext,
121 tiNonInterruptContext
122 }tiIntContextType_t;
123
124 /*
125 * Port Event type.
126 */
127 typedef enum
128 {
129 tiPortPanic,
130 tiPortResetComplete,
131 tiPortNameServerDown,
132 tiPortLinkDown,
133 tiPortLinkUp,
134 tiPortStarted,
135 tiPortStopped,
136 tiPortShutdown,
137 tiPortDiscoveryReady,
138 tiPortResetNeeded,
139 tiEncryptOperation,
140 tiModePageOperation
141 } tiPortEvent_t;
142
143 /*
144 * tiEncryptOperation Event types
145 */
146 typedef enum
147 {
148 tiEncryptGetInfo,
149 tiEncryptSetMode,
150 tiEncryptKekAdd,
151 tiEncryptDekInvalidate,
152 tiEncryptKekStore,
153 tiEncryptKekLoad,
154 tiEncryptAttribRegUpdate,
155 tiEncryptDekAdd,
156 /* new */
157 tiEncryptOperatorManagement,
158 tiEncryptSelfTest,
159 tiEncryptSetOperator,
160 tiEncryptGetOperator
161 } tiEncryptOp_t;
162
163 /*
164 * ostiPortEvent() status values for tiCOMOperatorManagement()
165 */
166 typedef enum
167 {
168 tiOMNotSupported,
169 tiOMIllegalParam,
170 tiOMKENUnwrapFail,
171 tiOMNvramOpFailure,
172 } tiOperatorManagementStatus_t;
173
174 /*
175 * ostiInitiatorIOCompleted() and ostiTargetIOError() status values
176 */
177 typedef enum
178 {
179 tiIOSuccess,
180 tiIOOverRun,
181 tiIOUnderRun,
182 tiIOFailed,
183 tiIODifError,
184 tiIOEncryptError,
185 } tiIOStatus_t;
186
187 /*
188 * ostiInitiatorIOCompleted() and ostiTargetIOError() statusDetail values
189 */
190 typedef enum
191 {
192 tiSMPSuccess,
193 tiSMPAborted,
194 tiSMPFailed,
195 } tiSMPStatus_t;
196
197 typedef enum
198 {
199 tiDetailBusy,
200 tiDetailNotValid,
201 tiDetailNoLogin,
202 tiDetailAbortLogin,
203 tiDetailAbortReset,
204 tiDetailAborted,
205 tiDetailDifMismatch,
206 tiDetailDifAppTagMismatch,
207 tiDetailDifRefTagMismatch,
208 tiDetailDifCrcMismatch,
209 tiDetailDekKeyCacheMiss,
210 tiDetailCipherModeInvalid,
211 tiDetailDekIVMismatch,
212 tiDetailDekRamInterfaceError,
213 tiDetailDekIndexOutofBounds,
214 tiDetailOtherError,
215 tiDetailOtherErrorNoRetry,
216 } tiIOStatusDetail_t;
217
218 /*
219 * IOCTL Status Codes
220 */
221 #define IOCTL_ERR_STATUS_OK 0x00
222 #define IOCTL_ERR_STATUS_MORE_DATA 0x01
223 #define IOCTL_ERR_STATUS_NO_MORE_DATA 0x02
224 #define IOCTL_ERR_STATUS_INVALID_CODE 0x03
225 #define IOCTL_ERR_STATUS_INVALID_DEVICE 0x04
226 #define IOCTL_ERR_STATUS_NOT_RESPONDING 0x05
227 #define IOCTL_ERR_STATUS_INTERNAL_ERROR 0x06
228 #define IOCTL_ERR_STATUS_NOT_SUPPORTED 0x07
229 #define IOCTL_ERR_FW_EVENTLOG_DISABLED 0x08
230 #define IOCTL_MJ_FATAL_ERROR_SOFT_RESET_TRIG 0x72
231 #define IOCTL_MJ_FATAL_ERR_CHK_SEND_TRUE 0x77
232 #define IOCTL_MJ_FATAL_ERR_CHK_SEND_FALSE 0x76
233 #define IOCTL_ERROR_NO_FATAL_ERROR 0x77
234
235 #define ADAPTER_WWN_START_OFFSET 0x804
236 #define ADAPTER_WWN_END_OFFSET 0x80b
237 #define ADAPTER_WWN_SPC_START_OFFSET 0x704
238 #define ADAPTER_WWN_SPC_END_OFFSET 0x70b
239
240 /*
241 * IOCTL Return Codes
242 */
243 #define IOCTL_CALL_SUCCESS 0x00
244 #define IOCTL_CALL_FAIL 0x01
245 #define IOCTL_CALL_PENDING 0x02
246 #define IOCTL_CALL_INVALID_CODE 0x03
247 #define IOCTL_CALL_INVALID_DEVICE 0x04
248 #define IOCTL_CALL_TIMEOUT 0x08
249
250 /*
251 * DIF operation
252 */
253 #define DIF_INSERT 0
254 #define DIF_VERIFY_FORWARD 1
255 #define DIF_VERIFY_DELETE 2
256 #define DIF_VERIFY_REPLACE 3
257
258 #define DIF_UDT_SIZE 6
259
260 /*
261 * Login state in tiDeviceInfo_t
262 */
263 #define INI_LGN_STATE_FREE 0x00000000
264 #define INI_LGN_STATE_LOGIN 0x00000001
265 #define INI_LGN_STATE_FAIL 0x00000002
266 #define INI_LGN_STATE_OTHERS 0x0000000F
267
268 /*
269 * SecurityCipherMode in tiEncryptInfo_t and tiCOMEncryptSetMode()
270 */
271 #define TI_ENCRYPT_SEC_MODE_FACT_INIT 0x00000000
272 #define TI_ENCRYPT_SEC_MODE_A 0x40000000
273 #define TI_ENCRYPT_SEC_MODE_B 0x80000000
274 #define TI_ENCRYPT_ATTRIB_ALLOW_SMF 0x00000200
275 #define TI_ENCRYPT_ATTRIB_AUTH_REQ 0x00000100
276 #define TI_ENCRYPT_ATTRIB_CIPHER_XTS 0x00000002
277 #define TI_ENCRYPT_ATTRIB_CIPHER_ECB 0x00000001
278
279 /*
280 * Status in tiEncryptInfo_t
281 */
282 #define TI_ENCRYPT_STATUS_NO_NVRAM 0x00000001
283 #define TI_ENCRYPT_STATUS_NVRAM_ERROR 0x00000002
284 #define TI_ENCRYPT_STATUS_ENGINE_ERROR 0x00000004
285
286 /*
287 * EncryptMode in tiEncrypt_t
288 */
289 #define TI_ENCRYPT_MODE_XTS_AES 0x00400000
290 #define TI_ENCRYPT_MODE_ECB_AES 0x00000000
291
292 /*
293 * Encrypt blob types
294 */
295 #define TI_PLAINTEXT 0
296 #define TI_ENCRYPTED_KEK_PMCA 1
297 #define TI_ENCRYPTED_KEK_PMCB 2
298
299 /*
300 * Encrypt DEK table key entry sizes
301 */
302 #define TI_DEK_TABLE_KEY_SIZE16 0
303 #define TI_DEK_TABLE_KEY_SIZE24 1
304 #define TI_DEK_TABLE_KEY_SIZE32 2
305 #define TI_DEK_TABLE_KEY_SIZE40 3
306 #define TI_DEK_TABLE_KEY_SIZE48 4
307 #define TI_DEK_TABLE_KEY_SIZE56 5
308 #define TI_DEK_TABLE_KEY_SIZE64 6
309 #define TI_DEK_TABLE_KEY_SIZE72 7
310 #define TI_DEK_TABLE_KEY_SIZE80 8
311
312 /* KEK blob size and DEK blob size and host DEK table entry number */
313 #define TI_KEK_BLOB_SIZE 48
314 #define TI_KEK_MAX_TABLE_ENTRIES 8
315
316 #define TI_DEK_MAX_TABLES 2
317 #define TI_DEK_MAX_TABLE_ENTRIES (1024*4)
318
319 #define TI_DEK_BLOB_SIZE 80
320
321
322 /************************************************************
323 * tiHWEventMode_t page operation definitions
324 ************************************************************/
325 #define tiModePageGet 1
326 #define tiModePageSet 2
327
328 /* controller configuration page code */
329 #define TI_SAS_PROTOCOL_TIMER_CONFIG_PAGE 0x04
330 #define TI_INTERRUPT_CONFIGURATION_PAGE 0x05
331 #define TI_ENCRYPTION_GENERAL_CONFIG_PAGE 0x20
332 #define TI_ENCRYPTION_DEK_CONFIG_PAGE 0x21
333 #define TI_ENCRYPTION_CONTROL_PARM_PAGE 0x22
334 #define TI_ENCRYPTION_HMAC_CONFIG_PAGE 0x23
335
336
337 /* encryption self test type */
338 #define TI_ENCRYPTION_TEST_TYPE_BIST 0x01
339 #define TI_ENCRYPTION_TEST_TYPE_HMAC 0x02
340
341 /* SHA algorithm type */
342 #define TI_SHA_ALG_1 0x04
343 #define TI_SHA_ALG_256 0x08
344 #define TI_SHA_ALG_224 0x10
345 #define TI_SHA_ALG_512 0x20
346 #define TI_SHA_ALG_384 0x40
347
348 #define TI_SHA_1_DIGEST_SIZE 20
349 #define TI_SHA_256_DIGEST_SIZE 32
350 #define TI_SHA_224_DIGEST_SIZE 28
351 #define TI_SHA_512_DIGEST_SIZE 64
352 #define TI_SHA_384_DIGEST_SIZE 48
353
354
355 /*****************************************************************************
356 * INITIATOR SPECIFIC DEFINES AND ENUMS
357 *****************************************************************************/
358
359 /*
360 * ostiInitiatorIOCompleted() statusDetail contains SCSI status,
361 * when status passed in ostiInitiatorIOCompleted() is tiIOSuccess.
362 */
363 #define SCSI_STAT_GOOD 0x00
364 #define SCSI_STAT_CHECK_CONDITION 0x02
365 #define SCSI_STAT_CONDITION_MET 0x04
366 #define SCSI_STAT_BUSY 0x08
367 #define SCSI_STAT_INTERMEDIATE 0x10
368 #define SCSI_STAT_INTER_CONDIT_MET 0x14
369 #define SCSI_STAT_RESV_CONFLICT 0x18
370 #define SCSI_STAT_COMMANDTERMINATED 0x22
371 #define SCSI_STAT_TASK_SET_FULL 0x28
372 #define SCSI_STAT_ACA_ACTIVE 0x30
373 #define SCSI_STAT_TASK_ABORTED 0x40
374
375 /*
376 01: soft error
377 02: not ready
378 03: medium error
379 04: hardware error
380 05: illegal request
381 06: unit attention
382 0b: abort command
383 */
384 #define SCSI_SENSE_KEY_NO_SENSE 0x00
385 #define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01
386 #define SCSI_SENSE_KEY_NOT_READY 0x02
387 #define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03
388 #define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04
389 #define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05
390 #define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06
391 #define SCSI_SENSE_KEY_DATA_PROTECT 0x07
392 #define SCSI_SENSE_KEY_BLANK_CHECK 0x08
393 #define SCSI_SENSE_KEY_UNIQUE 0x09
394 #define SCSI_SENSE_KEY_COPY_ABORTED 0x0A
395 #define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B
396 #define SCSI_SENSE_KEY_EQUAL 0x0C
397 #define SCSI_SENSE_KEY_VOL_OVERFLOW 0x0D
398 #define SCSI_SENSE_KEY_MISCOMPARE 0x0E
399 #define SCSI_SENSE_KEY_RESERVED 0x0F
400
401
402
403
404 /*
405 * Reset option in tiCOMReset()
406 */
407 typedef enum
408 {
409 tiSoftReset,
410 tiHardReset,
411 tiAutoReset
412 } tiReset_t;
413
414 /*
415 * Bit 0 Mask for the persistent option in tiINIDiscoverTargets()
416 */
417 #define NORMAL_ASSIGN_MASK 0x00000000
418 #define FORCE_PERSISTENT_ASSIGN_MASK 0x00000001
419
420 /*
421 * Bit 1 Mask for the auto login option in tiINIDiscoverTargets()
422 */
423 #define AUTO_LOGIN_MASK 0x00000000
424 #define NO_AUTO_LOGIN_MASK 0x00000002
425
426
427 /*
428 * Task Management task used in tiINITaskManagement()
429 *
430 * 1 AG_ABORT TASK - aborts the task identified by the Referenced Task Tag field.
431 * 2 AG_ABORT TASK SET - aborts all Tasks issued by this initiator on the Logical Unit
432 * 3 AG_CLEAR ACA - clears the Auto Contingent Allegiance condition.
433 * 4 AG_CLEAR TASK SET - Aborts all Tasks (from all initiators) for the Logical Unit.
434 * 5 AG_LOGICAL UNIT RESET
435 * 6 AG_TARGET WARM RESET - iSCSI only
436 * 7 AG_TARGET_COLD_RESET - iSCSI only
437 * 8 AG_TASK_REASSIGN - iSCSI only
438 * 9 AG_QUERY_TASK - SAS only
439 */
440
441 #define AG_ABORT_TASK 1
442 #define AG_ABORT_TASK_SET 2
443 #define AG_CLEAR_ACA 3
444 #define AG_CLEAR_TASK_SET 4
445 #define AG_LOGICAL_UNIT_RESET 5
446 #define AG_TARGET_WARM_RESET 6 /* iSCSI only */
447 #define AG_TARGET_COLD_RESET 7 /* iSCSI only */
448 #define AG_TASK_REASSIGN 8 /* iSCSI only */
449 #define AG_QUERY_TASK 9 /* SAS only */
450
451
452 /*
453 * Event types for ostiInitiatorEvent()
454 */
455 typedef enum
456 {
457 tiIntrEventTypeCnxError,
458 tiIntrEventTypeDiscovery,
459 tiIntrEventTypeTransportRecovery,
460 tiIntrEventTypeTaskManagement,
461 tiIntrEventTypeDeviceChange,
462 tiIntrEventTypeLogin,
463 tiIntrEventTypeLocalAbort
464 } tiIntrEventType_t;
465
466 /*
467 * Event status for ostiInitiatorEvent()
468 */
469 typedef enum
470 {
471 tiCnxUp,
472 tiCnxDown
473 } tiCnxEventStatus_t;
474
475 typedef enum
476 {
477 tiDiscOK,
478 tiDiscFailed
479 } tiDiscEventStatus_t;
480
481 typedef enum
482 {
483 tiLoginOK,
484 tiLoginFailed,
485 tiLogoutOK,
486 tiLogoutFailed
487 } tiLoginEventStatus_t;
488
489 typedef enum
490 {
491 tiRecOK,
492 tiRecFailed,
493 tiRecStarted
494 } tiRecEventStatus_t;
495
496 typedef enum
497 {
498 tiTMOK,
499 tiTMFailed
500 } tiTMEventStatus_t;
501
502 typedef enum
503 {
504 tiDeviceRemoval,
505 tiDeviceArrival,
506 tiDeviceLoginReceived
507 } tiDevEventStatus_t;
508
509 typedef enum
510 {
511 tiAbortOK,
512 tiAbortFailed,
513 tiAbortDelayed,
514 tiAbortInProgress
515 } tiAbortEventStatus_t;
516
517 /*
518 * SCSI SAM-2 Task Attribute
519 */
520 #define TASK_UNTAGGED 0 /* Untagged */
521 #define TASK_SIMPLE 1 /* Simple */
522 #define TASK_ORDERED 2 /* Ordered */
523 #define TASK_HEAD_OF_QUEUE 3 /* Head of Queue */
524 #define TASK_ACA 4 /* ACA */
525
526 /*
527 * Data direction for I/O request
528 */
529 typedef enum
530 {
531 tiDirectionIn = 0x0000,
532 tiDirectionOut = 0x0001
533 }tiDataDirection_t;
534
535 /*
536 * NVRAM error subEvents for encryption
537 */
538 typedef enum
539 {
540 tiNVRAMSuccess = 0x0000,
541 tiNVRAMWriteFail = 0x0001,
542 tiNVRAMReadFail = 0x0002,
543 tiNVRAMNotFound = 0x0003,
544 tiNVRAMAccessTimeout = 0x0004
545 }tiEncryptSubEvent_t;
546
547 /* Event Logging */
548
549 /* Event Severity Codes */
550 #define IOCTL_EVT_SEV_OFF 0x00
551 #define IOCTL_EVT_SEV_ALWAYS_ON 0x01
552 #define IOCTL_EVT_SEV_ERROR 0x02
553 #define IOCTL_EVT_SEV_WARNING 0x03
554 #define IOCTL_EVT_SEV_INFORMATIONAL 0x04
555 #define IOCTL_EVT_SEV_DEBUG_L1 0x05
556 #define IOCTL_EVT_SEV_DEBUG_L2 0x06
557 #define IOCTL_EVT_SEV_DEBUG_L3 0x07
558
559 /* Event Source */
560 #define IOCTL_EVT_SRC_HW 0xF0000000
561 #define IOCTL_EVT_SRC_ITSDK 0x0F000000
562 #define IOCTL_EVT_SRC_FW 0x00F00000
563 #define IOCTL_EVT_SRC_TD_LAYER 0x000F0000
564 #define IOCTL_EVT_SRC_TARGET 0x0000F000
565 #define IOCTL_EVT_SRC_OSLAYER 0x00000F00
566 #define IOCTL_EVT_SRC_RESERVED 0x000000F0
567 #define IOCTL_EVT_SRC_RESERVED1 0x0000000F
568 /* Event Shifter */
569 #define IOCTL_EVT_SRC_HW_SHIFTER 28
570 #define IOCTL_EVT_SRC_ITSDK_SHIFTER 24
571 #define IOCTL_EVT_SRC_FW_SHIFTER 20
572 #define IOCTL_EVT_SRC_COMMON_LAYER_SHIFTER 16
573 #define IOCTL_EVT_SRC_TARGET_SHIFTER 12
574 #define IOCTL_EVT_SRC_OSLAYER_SHIFTER 8
575 #define IOCTL_EVT_SRC_RESERVED_SHIFTER 4
576 #define IOCTL_EVT_SRC_RESERVED1_SHIFTER 0
577
578 #define EVENTLOG_MAX_MSG_LEN 110
579
580 #define EVENT_ID_MAX 0xffffffff
581
582 #define DISCOVERY_IN_PROGRESS 0xFFFFFFFF
583
584 #define TI_SSP_INDIRECT_CDB_SIZE 64
585 /*
586 * Flags in tiSuperScsiInitiatorRequest_t
587 */
588 #define TI_SCSI_INITIATOR_DIF 0x00000001
589 #define TI_SCSI_INITIATOR_ENCRYPT 0x00000002
590 #define TI_SCSI_INITIATOR_INDIRECT_CDB 0x00000004
591 /*****************************************************************************
592 * TARGET SPECIFIC DEFINES AND ENUMS
593 *****************************************************************************/
594
595 /*
596 * Event types for ostiTargetEvent()
597 */
598 typedef enum
599 {
600 tiTgtEventTypeCnxError,
601 tiTgtEventTypeDeviceChange
602 } tiTgtEventType_t;
603
604 /*
605 * Flags in tiSuperScsiTargetRequest_t
606 */
607 #define TI_SCSI_TARGET_DIF 0x00000001
608 #define TI_SCSI_TARGET_MIRROR 0x00000002
609 #define TI_SCSI_TARGET_ENCRYPT 0x00000004
610 #endif /* TIDEFS_H */
Cache object: c0ae70a3f466b56dc53cd7395119d436
|