1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
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
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.
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
23 ********************************************************************************/
24 /********************************************************************************
26 ** Version Control Information:
29 *******************************************************************************/
30 /********************************************************************************
34 * Abstract: This module contains enum and #define definition used
35 * by Transport Independent API (TIAPI) Layer.
37 ********************************************************************************/
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>
47 /*****************************************************************************
48 * INITIATOR/TARGET SHARED DEFINES AND ENUMS
49 *****************************************************************************/
52 * Option mask parameter for tiCOMPortStart()
54 #define PORTAL_ADD_MASK 0x00000001
57 * Maximum memory descriptor for Low-Level layer.
59 #define MAX_LL_LAYER_MEM_DESCRIPTORS 64
63 * TI API function return types
81 * Type of memory, OR-ed the bit fields.
84 /* Bit 0-1, cached or dma-uncached dma-cached */
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 */
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 */
102 tiSglList=0x80000000,
107 * Type of mutex semaphoring/synchronization
111 tiSingleMutexLockPerPort,
112 tiOneMutexLockPerQueue
116 * Context (interrupt or non-interrupt)
121 tiNonInterruptContext
131 tiPortNameServerDown,
137 tiPortDiscoveryReady,
144 * tiEncryptOperation Event types
151 tiEncryptDekInvalidate,
154 tiEncryptAttribRegUpdate,
157 tiEncryptOperatorManagement,
159 tiEncryptSetOperator,
164 * ostiPortEvent() status values for tiCOMOperatorManagement()
172 } tiOperatorManagementStatus_t;
175 * ostiInitiatorIOCompleted() and ostiTargetIOError() status values
188 * ostiInitiatorIOCompleted() and ostiTargetIOError() statusDetail values
206 tiDetailDifAppTagMismatch,
207 tiDetailDifRefTagMismatch,
208 tiDetailDifCrcMismatch,
209 tiDetailDekKeyCacheMiss,
210 tiDetailCipherModeInvalid,
211 tiDetailDekIVMismatch,
212 tiDetailDekRamInterfaceError,
213 tiDetailDekIndexOutofBounds,
215 tiDetailOtherErrorNoRetry,
216 } tiIOStatusDetail_t;
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
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
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
254 #define DIF_VERIFY_FORWARD 1
255 #define DIF_VERIFY_DELETE 2
256 #define DIF_VERIFY_REPLACE 3
258 #define DIF_UDT_SIZE 6
261 * Login state in tiDeviceInfo_t
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
269 * SecurityCipherMode in tiEncryptInfo_t and tiCOMEncryptSetMode()
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
280 * Status in tiEncryptInfo_t
282 #define TI_ENCRYPT_STATUS_NO_NVRAM 0x00000001
283 #define TI_ENCRYPT_STATUS_NVRAM_ERROR 0x00000002
284 #define TI_ENCRYPT_STATUS_ENGINE_ERROR 0x00000004
287 * EncryptMode in tiEncrypt_t
289 #define TI_ENCRYPT_MODE_XTS_AES 0x00400000
290 #define TI_ENCRYPT_MODE_ECB_AES 0x00000000
295 #define TI_PLAINTEXT 0
296 #define TI_ENCRYPTED_KEK_PMCA 1
297 #define TI_ENCRYPTED_KEK_PMCB 2
300 * Encrypt DEK table key entry sizes
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
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
316 #define TI_DEK_MAX_TABLES 2
317 #define TI_DEK_MAX_TABLE_ENTRIES (1024*4)
319 #define TI_DEK_BLOB_SIZE 80
322 /************************************************************
323 * tiHWEventMode_t page operation definitions
324 ************************************************************/
325 #define tiModePageGet 1
326 #define tiModePageSet 2
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
337 /* encryption self test type */
338 #define TI_ENCRYPTION_TEST_TYPE_BIST 0x01
339 #define TI_ENCRYPTION_TEST_TYPE_HMAC 0x02
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
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
355 /*****************************************************************************
356 * INITIATOR SPECIFIC DEFINES AND ENUMS
357 *****************************************************************************/
360 * ostiInitiatorIOCompleted() statusDetail contains SCSI status,
361 * when status passed in ostiInitiatorIOCompleted() is tiIOSuccess.
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
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
405 * Reset option in tiCOMReset()
415 * Bit 0 Mask for the persistent option in tiINIDiscoverTargets()
417 #define NORMAL_ASSIGN_MASK 0x00000000
418 #define FORCE_PERSISTENT_ASSIGN_MASK 0x00000001
421 * Bit 1 Mask for the auto login option in tiINIDiscoverTargets()
423 #define AUTO_LOGIN_MASK 0x00000000
424 #define NO_AUTO_LOGIN_MASK 0x00000002
428 * Task Management task used in tiINITaskManagement()
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
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 */
453 * Event types for ostiInitiatorEvent()
457 tiIntrEventTypeCnxError,
458 tiIntrEventTypeDiscovery,
459 tiIntrEventTypeTransportRecovery,
460 tiIntrEventTypeTaskManagement,
461 tiIntrEventTypeDeviceChange,
462 tiIntrEventTypeLogin,
463 tiIntrEventTypeLocalAbort
467 * Event status for ostiInitiatorEvent()
473 } tiCnxEventStatus_t;
479 } tiDiscEventStatus_t;
487 } tiLoginEventStatus_t;
494 } tiRecEventStatus_t;
506 tiDeviceLoginReceived
507 } tiDevEventStatus_t;
515 } tiAbortEventStatus_t;
518 * SCSI SAM-2 Task Attribute
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 */
527 * Data direction for I/O request
531 tiDirectionIn = 0x0000,
532 tiDirectionOut = 0x0001
536 * NVRAM error subEvents for encryption
540 tiNVRAMSuccess = 0x0000,
541 tiNVRAMWriteFail = 0x0001,
542 tiNVRAMReadFail = 0x0002,
543 tiNVRAMNotFound = 0x0003,
544 tiNVRAMAccessTimeout = 0x0004
545 }tiEncryptSubEvent_t;
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
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
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
578 #define EVENTLOG_MAX_MSG_LEN 110
580 #define EVENT_ID_MAX 0xffffffff
582 #define DISCOVERY_IN_PROGRESS 0xFFFFFFFF
584 #define TI_SSP_INDIRECT_CDB_SIZE 64
586 * Flags in tiSuperScsiInitiatorRequest_t
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 *****************************************************************************/
596 * Event types for ostiTargetEvent()
600 tiTgtEventTypeCnxError,
601 tiTgtEventTypeDeviceChange
605 * Flags in tiSuperScsiTargetRequest_t
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 */