xref: /openbmc/linux/drivers/scsi/mpi3mr/mpi/mpi30_init.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1c4f7ac64SKashyap Desai /* SPDX-License-Identifier: GPL-2.0-or-later */
2c4f7ac64SKashyap Desai /*
3*e74f2fbdSRanjan Kumar  *  Copyright 2016-2023 Broadcom Inc. All rights reserved.
4c4f7ac64SKashyap Desai  */
5c4f7ac64SKashyap Desai #ifndef MPI30_INIT_H
6c4f7ac64SKashyap Desai #define MPI30_INIT_H     1
7c4f7ac64SKashyap Desai struct mpi3_scsi_io_cdb_eedp32 {
8c4f7ac64SKashyap Desai 	u8                 cdb[20];
9c4f7ac64SKashyap Desai 	__be32             primary_reference_tag;
10c4f7ac64SKashyap Desai 	__le16             primary_application_tag;
11c4f7ac64SKashyap Desai 	__le16             primary_application_tag_mask;
12c4f7ac64SKashyap Desai 	__le32             transfer_length;
13c4f7ac64SKashyap Desai };
14c4f7ac64SKashyap Desai 
15ec5ebd2cSSreekanth Reddy union mpi3_scsi_io_cdb_union {
16c4f7ac64SKashyap Desai 	u8                         cdb32[32];
17c4f7ac64SKashyap Desai 	struct mpi3_scsi_io_cdb_eedp32 eedp32;
18c4f7ac64SKashyap Desai 	struct mpi3_sge_common         sge;
19c4f7ac64SKashyap Desai };
20c4f7ac64SKashyap Desai 
21c4f7ac64SKashyap Desai struct mpi3_scsi_io_request {
22c4f7ac64SKashyap Desai 	__le16                     host_tag;
23c4f7ac64SKashyap Desai 	u8                         ioc_use_only02;
24c4f7ac64SKashyap Desai 	u8                         function;
25c4f7ac64SKashyap Desai 	__le16                     ioc_use_only04;
26c4f7ac64SKashyap Desai 	u8                         ioc_use_only06;
27c4f7ac64SKashyap Desai 	u8                         msg_flags;
28c4f7ac64SKashyap Desai 	__le16                     change_count;
29c4f7ac64SKashyap Desai 	__le16                     dev_handle;
30c4f7ac64SKashyap Desai 	__le32                     flags;
31c4f7ac64SKashyap Desai 	__le32                     skip_count;
32c4f7ac64SKashyap Desai 	__le32                     data_length;
33c4f7ac64SKashyap Desai 	u8                         lun[8];
34ec5ebd2cSSreekanth Reddy 	union mpi3_scsi_io_cdb_union  cdb;
35c4f7ac64SKashyap Desai 	union mpi3_sge_union          sgl[4];
36c4f7ac64SKashyap Desai };
37c4f7ac64SKashyap Desai 
38c4f7ac64SKashyap Desai #define MPI3_SCSIIO_MSGFLAGS_METASGL_VALID                  (0x80)
39ec5ebd2cSSreekanth Reddy #define MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE             (0x40)
40c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_LARGE_CDB                         (0x60000000)
41c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS                    (0x00000000)
42c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16               (0x20000000)
43c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER            (0x40000000)
44c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK                (0x07000000)
45c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ             (0x00000000)
46c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ             (0x01000000)
47c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ORDEREDQ            (0x02000000)
48c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ACAQ                (0x04000000)
49c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CMDPRI_MASK                       (0x00f00000)
50c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CMDPRI_SHIFT                      (20)
51c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_MASK                (0x000c0000)
52c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_NO_DATA_TRANSFER    (0x00000000)
53c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_WRITE               (0x00040000)
54c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_READ                (0x00080000)
55c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DMAOPERATION_MASK                 (0x00030000)
56c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DMAOPERATION_HOST_PI              (0x00010000)
5704b27e53SSreekanth Reddy #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_MASK                (0x000000f0)
5804b27e53SSreekanth Reddy #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_IO_THROTTLING       (0x00000010)
59e5f596bcSRanjan Kumar #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_WRITE_SAME_TOO_LARGE (0x00000020)
6004b27e53SSreekanth Reddy #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_PROD_SPECIFIC       (0x00000080)
61c4f7ac64SKashyap Desai #define MPI3_SCSIIO_METASGL_INDEX                           (3)
62c4f7ac64SKashyap Desai struct mpi3_scsi_io_reply {
63c4f7ac64SKashyap Desai 	__le16                     host_tag;
64c4f7ac64SKashyap Desai 	u8                         ioc_use_only02;
65c4f7ac64SKashyap Desai 	u8                         function;
66c4f7ac64SKashyap Desai 	__le16                     ioc_use_only04;
67c4f7ac64SKashyap Desai 	u8                         ioc_use_only06;
68c4f7ac64SKashyap Desai 	u8                         msg_flags;
69c4f7ac64SKashyap Desai 	__le16                     ioc_use_only08;
70c4f7ac64SKashyap Desai 	__le16                     ioc_status;
71c4f7ac64SKashyap Desai 	__le32                     ioc_log_info;
72c4f7ac64SKashyap Desai 	u8                         scsi_status;
73c4f7ac64SKashyap Desai 	u8                         scsi_state;
74c4f7ac64SKashyap Desai 	__le16                     dev_handle;
75c4f7ac64SKashyap Desai 	__le32                     transfer_count;
76c4f7ac64SKashyap Desai 	__le32                     sense_count;
77c4f7ac64SKashyap Desai 	__le32                     response_data;
78c4f7ac64SKashyap Desai 	__le16                     task_tag;
79c4f7ac64SKashyap Desai 	__le16                     scsi_status_qualifier;
80c4f7ac64SKashyap Desai 	__le32                     eedp_error_offset;
81c4f7ac64SKashyap Desai 	__le16                     eedp_observed_app_tag;
82c4f7ac64SKashyap Desai 	__le16                     eedp_observed_guard;
83c4f7ac64SKashyap Desai 	__le32                     eedp_observed_ref_tag;
84c4f7ac64SKashyap Desai 	__le64                     sense_data_buffer_address;
85c4f7ac64SKashyap Desai };
86c4f7ac64SKashyap Desai 
87c4f7ac64SKashyap Desai #define MPI3_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID        (0x01)
88c4f7ac64SKashyap Desai #define MPI3_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID        (0x02)
89c4f7ac64SKashyap Desai #define MPI3_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID         (0x04)
90c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_GOOD                   (0x00)
91c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_CHECK_CONDITION        (0x02)
92c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_CONDITION_MET          (0x04)
93c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_BUSY                   (0x08)
94c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_INTERMEDIATE           (0x10)
95c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_INTERMEDIATE_CONDMET   (0x14)
96c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_RESERVATION_CONFLICT   (0x18)
97c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_COMMAND_TERMINATED     (0x22)
98c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_TASK_SET_FULL          (0x28)
99c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_ACA_ACTIVE             (0x30)
100c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_TASK_ABORTED           (0x40)
101c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_MASK              (0x03)
102c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_VALID             (0x00)
103c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_FAILED            (0x01)
104c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_BUFF_Q_EMPTY      (0x02)
105c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_NOT_AVAILABLE     (0x03)
106c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_NO_SCSI_STATUS          (0x04)
107c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_TERMINATED              (0x08)
108c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_RESPONSE_DATA_VALID     (0x10)
109c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_RESPONSECODE_MASK         (0x000000ff)
110c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_RESPONSECODE_SHIFT        (0)
111c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI2_MASK                 (0x0000ff00)
112c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI2_SHIFT                (8)
113c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI1_MASK                 (0x00ff0000)
114c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI1_SHIFT                (16)
115c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI0_MASK                 (0xff000000)
116c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI0_SHIFT                (24)
117c4f7ac64SKashyap Desai #define MPI3_SCSI_TASKTAG_UNKNOWN               (0xffff)
118e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU      (0x08)
119e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK               (0x01)
120e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK_SET           (0x02)
121e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET             (0x03)
122e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET       (0x05)
123e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET           (0x06)
124e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK               (0x07)
125e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_ACA                (0x08)
126e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK_SET           (0x09)
127e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_ASYNC_EVENT        (0x0a)
128e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_I_T_NEXUS_RESET          (0x0b)
129e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_COMPLETE                (0x00)
130e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_INVALID_FRAME              (0x02)
131e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_FUNCTION_NOT_SUPPORTED  (0x04)
132e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_FAILED                  (0x05)
133e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_SUCCEEDED               (0x08)
134e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_INVALID_LUN             (0x09)
135e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_OVERLAPPED_TAG          (0x0a)
136e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_IO_QUEUED_ON_IOC           (0x80)
137e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_NVME_DENIED             (0x81)
138c4f7ac64SKashyap Desai #endif
139