linux/drivers/scsi/mpi3mr/mpi/mpi30_init.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 *  Copyright 2016-2021 Broadcom Inc. All rights reserved.
   4 *
   5 */
   6#ifndef MPI30_INIT_H
   7#define MPI30_INIT_H     1
   8struct mpi3_scsi_io_cdb_eedp32 {
   9        u8                 cdb[20];
  10        __be32          primary_reference_tag;
  11        __le16             primary_application_tag;
  12        __le16             primary_application_tag_mask;
  13        __le32             transfer_length;
  14};
  15
  16union mpi3_scso_io_cdb_union {
  17        u8                         cdb32[32];
  18        struct mpi3_scsi_io_cdb_eedp32 eedp32;
  19        struct mpi3_sge_common         sge;
  20};
  21
  22struct mpi3_scsi_io_request {
  23        __le16                     host_tag;
  24        u8                         ioc_use_only02;
  25        u8                         function;
  26        __le16                     ioc_use_only04;
  27        u8                         ioc_use_only06;
  28        u8                         msg_flags;
  29        __le16                     change_count;
  30        __le16                     dev_handle;
  31        __le32                     flags;
  32        __le32                     skip_count;
  33        __le32                     data_length;
  34        u8                         lun[8];
  35        union mpi3_scso_io_cdb_union  cdb;
  36        union mpi3_sge_union          sgl[4];
  37};
  38
  39#define MPI3_SCSIIO_MSGFLAGS_METASGL_VALID                  (0x80)
  40#define MPI3_SCSIIO_FLAGS_LARGE_CDB                         (0x60000000)
  41#define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS                    (0x00000000)
  42#define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16               (0x20000000)
  43#define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER            (0x40000000)
  44#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK                (0x07000000)
  45#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ             (0x00000000)
  46#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ             (0x01000000)
  47#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ORDEREDQ            (0x02000000)
  48#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ACAQ                (0x04000000)
  49#define MPI3_SCSIIO_FLAGS_CMDPRI_MASK                       (0x00f00000)
  50#define MPI3_SCSIIO_FLAGS_CMDPRI_SHIFT                      (20)
  51#define MPI3_SCSIIO_FLAGS_DATADIRECTION_MASK                (0x000c0000)
  52#define MPI3_SCSIIO_FLAGS_DATADIRECTION_NO_DATA_TRANSFER    (0x00000000)
  53#define MPI3_SCSIIO_FLAGS_DATADIRECTION_WRITE               (0x00040000)
  54#define MPI3_SCSIIO_FLAGS_DATADIRECTION_READ                (0x00080000)
  55#define MPI3_SCSIIO_FLAGS_DMAOPERATION_MASK                 (0x00030000)
  56#define MPI3_SCSIIO_FLAGS_DMAOPERATION_HOST_PI              (0x00010000)
  57#define MPI3_SCSIIO_METASGL_INDEX                           (3)
  58struct 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
  83#define MPI3_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID        (0x01)
  84#define MPI3_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID        (0x02)
  85#define MPI3_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID         (0x04)
  86#define MPI3_SCSI_STATUS_GOOD                   (0x00)
  87#define MPI3_SCSI_STATUS_CHECK_CONDITION        (0x02)
  88#define MPI3_SCSI_STATUS_CONDITION_MET          (0x04)
  89#define MPI3_SCSI_STATUS_BUSY                   (0x08)
  90#define MPI3_SCSI_STATUS_INTERMEDIATE           (0x10)
  91#define MPI3_SCSI_STATUS_INTERMEDIATE_CONDMET   (0x14)
  92#define MPI3_SCSI_STATUS_RESERVATION_CONFLICT   (0x18)
  93#define MPI3_SCSI_STATUS_COMMAND_TERMINATED     (0x22)
  94#define MPI3_SCSI_STATUS_TASK_SET_FULL          (0x28)
  95#define MPI3_SCSI_STATUS_ACA_ACTIVE             (0x30)
  96#define MPI3_SCSI_STATUS_TASK_ABORTED           (0x40)
  97#define MPI3_SCSI_STATE_SENSE_MASK              (0x03)
  98#define MPI3_SCSI_STATE_SENSE_VALID             (0x00)
  99#define MPI3_SCSI_STATE_SENSE_FAILED            (0x01)
 100#define MPI3_SCSI_STATE_SENSE_BUFF_Q_EMPTY      (0x02)
 101#define MPI3_SCSI_STATE_SENSE_NOT_AVAILABLE     (0x03)
 102#define MPI3_SCSI_STATE_NO_SCSI_STATUS          (0x04)
 103#define MPI3_SCSI_STATE_TERMINATED              (0x08)
 104#define MPI3_SCSI_STATE_RESPONSE_DATA_VALID     (0x10)
 105#define MPI3_SCSI_RSP_RESPONSECODE_MASK         (0x000000ff)
 106#define MPI3_SCSI_RSP_RESPONSECODE_SHIFT        (0)
 107#define MPI3_SCSI_RSP_ARI2_MASK                 (0x0000ff00)
 108#define MPI3_SCSI_RSP_ARI2_SHIFT                (8)
 109#define MPI3_SCSI_RSP_ARI1_MASK                 (0x00ff0000)
 110#define MPI3_SCSI_RSP_ARI1_SHIFT                (16)
 111#define MPI3_SCSI_RSP_ARI0_MASK                 (0xff000000)
 112#define MPI3_SCSI_RSP_ARI0_SHIFT                (24)
 113#define MPI3_SCSI_TASKTAG_UNKNOWN               (0xffff)
 114struct mpi3_scsi_task_mgmt_request {
 115        __le16                     host_tag;
 116        u8                         ioc_use_only02;
 117        u8                         function;
 118        __le16                     ioc_use_only04;
 119        u8                         ioc_use_only06;
 120        u8                         msg_flags;
 121        __le16                     change_count;
 122        __le16                     dev_handle;
 123        __le16                     task_host_tag;
 124        u8                         task_type;
 125        u8                         reserved0f;
 126        __le16                     task_request_queue_id;
 127        __le16                     reserved12;
 128        __le32                     reserved14;
 129        u8                         lun[8];
 130};
 131
 132#define MPI3_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU      (0x08)
 133#define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK               (0x01)
 134#define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK_SET           (0x02)
 135#define MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET             (0x03)
 136#define MPI3_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET       (0x05)
 137#define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET           (0x06)
 138#define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK               (0x07)
 139#define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_ACA                (0x08)
 140#define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK_SET           (0x09)
 141#define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_ASYNC_EVENT        (0x0a)
 142#define MPI3_SCSITASKMGMT_TASKTYPE_I_T_NEXUS_RESET          (0x0b)
 143struct mpi3_scsi_task_mgmt_reply {
 144        __le16                     host_tag;
 145        u8                         ioc_use_only02;
 146        u8                         function;
 147        __le16                     ioc_use_only04;
 148        u8                         ioc_use_only06;
 149        u8                         msg_flags;
 150        __le16                     ioc_use_only08;
 151        __le16                     ioc_status;
 152        __le32                     ioc_log_info;
 153        __le32                     termination_count;
 154        __le32                     response_data;
 155        __le32                     reserved18;
 156};
 157
 158#define MPI3_SCSITASKMGMT_RSPCODE_IO_QUEUED_ON_IOC      (0x80)
 159#endif
 160