mpi30_init.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright 2016-2022 Broadcom Inc. All rights reserved.
  4. */
  5. #ifndef MPI30_INIT_H
  6. #define MPI30_INIT_H 1
  7. struct mpi3_scsi_io_cdb_eedp32 {
  8. u8 cdb[20];
  9. __be32 primary_reference_tag;
  10. __le16 primary_application_tag;
  11. __le16 primary_application_tag_mask;
  12. __le32 transfer_length;
  13. };
  14. union mpi3_scsi_io_cdb_union {
  15. u8 cdb32[32];
  16. struct mpi3_scsi_io_cdb_eedp32 eedp32;
  17. struct mpi3_sge_common sge;
  18. };
  19. struct mpi3_scsi_io_request {
  20. __le16 host_tag;
  21. u8 ioc_use_only02;
  22. u8 function;
  23. __le16 ioc_use_only04;
  24. u8 ioc_use_only06;
  25. u8 msg_flags;
  26. __le16 change_count;
  27. __le16 dev_handle;
  28. __le32 flags;
  29. __le32 skip_count;
  30. __le32 data_length;
  31. u8 lun[8];
  32. union mpi3_scsi_io_cdb_union cdb;
  33. union mpi3_sge_union sgl[4];
  34. };
  35. #define MPI3_SCSIIO_MSGFLAGS_METASGL_VALID (0x80)
  36. #define MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE (0x40)
  37. #define MPI3_SCSIIO_FLAGS_LARGE_CDB (0x60000000)
  38. #define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS (0x00000000)
  39. #define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16 (0x20000000)
  40. #define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER (0x40000000)
  41. #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK (0x07000000)
  42. #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ (0x00000000)
  43. #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ (0x01000000)
  44. #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ORDEREDQ (0x02000000)
  45. #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ACAQ (0x04000000)
  46. #define MPI3_SCSIIO_FLAGS_CMDPRI_MASK (0x00f00000)
  47. #define MPI3_SCSIIO_FLAGS_CMDPRI_SHIFT (20)
  48. #define MPI3_SCSIIO_FLAGS_DATADIRECTION_MASK (0x000c0000)
  49. #define MPI3_SCSIIO_FLAGS_DATADIRECTION_NO_DATA_TRANSFER (0x00000000)
  50. #define MPI3_SCSIIO_FLAGS_DATADIRECTION_WRITE (0x00040000)
  51. #define MPI3_SCSIIO_FLAGS_DATADIRECTION_READ (0x00080000)
  52. #define MPI3_SCSIIO_FLAGS_DMAOPERATION_MASK (0x00030000)
  53. #define MPI3_SCSIIO_FLAGS_DMAOPERATION_HOST_PI (0x00010000)
  54. #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_MASK (0x000000f0)
  55. #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_IO_THROTTLING (0x00000010)
  56. #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_PROD_SPECIFIC (0x00000080)
  57. #define MPI3_SCSIIO_METASGL_INDEX (3)
  58. struct mpi3_scsi_io_reply {
  59. __le16 host_tag;
  60. u8 ioc_use_only02;
  61. u8 function;
  62. __le16 ioc_use_only04;
  63. u8 ioc_use_only06;
  64. u8 msg_flags;
  65. __le16 ioc_use_only08;
  66. __le16 ioc_status;
  67. __le32 ioc_log_info;
  68. u8 scsi_status;
  69. u8 scsi_state;
  70. __le16 dev_handle;
  71. __le32 transfer_count;
  72. __le32 sense_count;
  73. __le32 response_data;
  74. __le16 task_tag;
  75. __le16 scsi_status_qualifier;
  76. __le32 eedp_error_offset;
  77. __le16 eedp_observed_app_tag;
  78. __le16 eedp_observed_guard;
  79. __le32 eedp_observed_ref_tag;
  80. __le64 sense_data_buffer_address;
  81. };
  82. #define MPI3_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID (0x01)
  83. #define MPI3_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID (0x02)
  84. #define MPI3_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID (0x04)
  85. #define MPI3_SCSI_STATUS_GOOD (0x00)
  86. #define MPI3_SCSI_STATUS_CHECK_CONDITION (0x02)
  87. #define MPI3_SCSI_STATUS_CONDITION_MET (0x04)
  88. #define MPI3_SCSI_STATUS_BUSY (0x08)
  89. #define MPI3_SCSI_STATUS_INTERMEDIATE (0x10)
  90. #define MPI3_SCSI_STATUS_INTERMEDIATE_CONDMET (0x14)
  91. #define MPI3_SCSI_STATUS_RESERVATION_CONFLICT (0x18)
  92. #define MPI3_SCSI_STATUS_COMMAND_TERMINATED (0x22)
  93. #define MPI3_SCSI_STATUS_TASK_SET_FULL (0x28)
  94. #define MPI3_SCSI_STATUS_ACA_ACTIVE (0x30)
  95. #define MPI3_SCSI_STATUS_TASK_ABORTED (0x40)
  96. #define MPI3_SCSI_STATE_SENSE_MASK (0x03)
  97. #define MPI3_SCSI_STATE_SENSE_VALID (0x00)
  98. #define MPI3_SCSI_STATE_SENSE_FAILED (0x01)
  99. #define MPI3_SCSI_STATE_SENSE_BUFF_Q_EMPTY (0x02)
  100. #define MPI3_SCSI_STATE_SENSE_NOT_AVAILABLE (0x03)
  101. #define MPI3_SCSI_STATE_NO_SCSI_STATUS (0x04)
  102. #define MPI3_SCSI_STATE_TERMINATED (0x08)
  103. #define MPI3_SCSI_STATE_RESPONSE_DATA_VALID (0x10)
  104. #define MPI3_SCSI_RSP_RESPONSECODE_MASK (0x000000ff)
  105. #define MPI3_SCSI_RSP_RESPONSECODE_SHIFT (0)
  106. #define MPI3_SCSI_RSP_ARI2_MASK (0x0000ff00)
  107. #define MPI3_SCSI_RSP_ARI2_SHIFT (8)
  108. #define MPI3_SCSI_RSP_ARI1_MASK (0x00ff0000)
  109. #define MPI3_SCSI_RSP_ARI1_SHIFT (16)
  110. #define MPI3_SCSI_RSP_ARI0_MASK (0xff000000)
  111. #define MPI3_SCSI_RSP_ARI0_SHIFT (24)
  112. #define MPI3_SCSI_TASKTAG_UNKNOWN (0xffff)
  113. #endif