root/drivers/scsi/qla2xxx/qla_nvme.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * QLogic Fibre Channel HBA Driver
   3  * Copyright (c)  2003-2017 QLogic Corporation
   4  *
   5  * See LICENSE.qla2xxx for copyright and licensing details.
   6  */
   7 #ifndef __QLA_NVME_H
   8 #define __QLA_NVME_H
   9 
  10 #include <uapi/scsi/fc/fc_fs.h>
  11 #include <uapi/scsi/fc/fc_els.h>
  12 #include <linux/nvme-fc-driver.h>
  13 
  14 #include "qla_def.h"
  15 #include "qla_dsd.h"
  16 
  17 /* default dev loss time (seconds) before transport tears down ctrl */
  18 #define NVME_FC_DEV_LOSS_TMO  30
  19 
  20 #define NVME_ATIO_CMD_OFF 32
  21 #define NVME_FIRST_PACKET_CMDLEN (64 - NVME_ATIO_CMD_OFF)
  22 #define Q2T_NVME_NUM_TAGS 2048
  23 #define QLA_MAX_FC_SEGMENTS 64
  24 
  25 struct scsi_qla_host;
  26 struct qla_hw_data;
  27 struct req_que;
  28 struct srb;
  29 
  30 struct nvme_private {
  31         struct srb      *sp;
  32         struct nvmefc_ls_req *fd;
  33         struct work_struct ls_work;
  34         struct work_struct abort_work;
  35         int comp_status;
  36         spinlock_t cmd_lock;
  37 };
  38 
  39 struct qla_nvme_rport {
  40         struct fc_port *fcport;
  41 };
  42 
  43 #define COMMAND_NVME    0x88            /* Command Type FC-NVMe IOCB */
  44 struct cmd_nvme {
  45         uint8_t entry_type;             /* Entry type. */
  46         uint8_t entry_count;            /* Entry count. */
  47         uint8_t sys_define;             /* System defined. */
  48         uint8_t entry_status;           /* Entry Status. */
  49 
  50         uint32_t handle;                /* System handle. */
  51         uint16_t nport_handle;          /* N_PORT handle. */
  52         uint16_t timeout;               /* Command timeout. */
  53 
  54         uint16_t dseg_count;            /* Data segment count. */
  55         uint16_t nvme_rsp_dsd_len;      /* NVMe RSP DSD length */
  56 
  57         uint64_t rsvd;
  58 
  59         uint16_t control_flags;         /* Control Flags */
  60 #define CF_NVME_FIRST_BURST_ENABLE      BIT_11
  61 #define CF_DIF_SEG_DESCR_ENABLE         BIT_3
  62 #define CF_DATA_SEG_DESCR_ENABLE        BIT_2
  63 #define CF_READ_DATA                    BIT_1
  64 #define CF_WRITE_DATA                   BIT_0
  65 
  66         uint16_t nvme_cmnd_dseg_len;             /* Data segment length. */
  67         __le64   nvme_cmnd_dseg_address __packed;/* Data segment address. */
  68         __le64   nvme_rsp_dseg_address __packed; /* Data segment address. */
  69 
  70         uint32_t byte_count;            /* Total byte count. */
  71 
  72         uint8_t port_id[3];             /* PortID of destination port. */
  73         uint8_t vp_index;
  74 
  75         struct dsd64 nvme_dsd;
  76 };
  77 
  78 #define PT_LS4_REQUEST 0x89     /* Link Service pass-through IOCB (request) */
  79 struct pt_ls4_request {
  80         uint8_t entry_type;
  81         uint8_t entry_count;
  82         uint8_t sys_define;
  83         uint8_t entry_status;
  84         uint32_t handle;
  85         uint16_t status;
  86         uint16_t nport_handle;
  87         uint16_t tx_dseg_count;
  88         uint8_t  vp_index;
  89         uint8_t  rsvd;
  90         uint16_t timeout;
  91         uint16_t control_flags;
  92 #define CF_LS4_SHIFT            13
  93 #define CF_LS4_ORIGINATOR       0
  94 #define CF_LS4_RESPONDER        1
  95 #define CF_LS4_RESPONDER_TERM   2
  96 
  97         uint16_t rx_dseg_count;
  98         uint16_t rsvd2;
  99         uint32_t exchange_address;
 100         uint32_t rsvd3;
 101         uint32_t rx_byte_count;
 102         uint32_t tx_byte_count;
 103         struct dsd64 dsd[2];
 104 };
 105 
 106 #define PT_LS4_UNSOL 0x56       /* pass-up unsolicited rec FC-NVMe request */
 107 struct pt_ls4_rx_unsol {
 108         uint8_t entry_type;
 109         uint8_t entry_count;
 110         uint16_t rsvd0;
 111         uint16_t rsvd1;
 112         uint8_t vp_index;
 113         uint8_t rsvd2;
 114         uint16_t rsvd3;
 115         uint16_t nport_handle;
 116         uint16_t frame_size;
 117         uint16_t rsvd4;
 118         uint32_t exchange_address;
 119         uint8_t d_id[3];
 120         uint8_t r_ctl;
 121         be_id_t s_id;
 122         uint8_t cs_ctl;
 123         uint8_t f_ctl[3];
 124         uint8_t type;
 125         uint16_t seq_cnt;
 126         uint8_t df_ctl;
 127         uint8_t seq_id;
 128         uint16_t rx_id;
 129         uint16_t ox_id;
 130         uint32_t param;
 131         uint32_t desc0;
 132 #define PT_LS4_PAYLOAD_OFFSET 0x2c
 133 #define PT_LS4_FIRST_PACKET_LEN 20
 134         uint32_t desc_len;
 135         uint32_t payload[3];
 136 };
 137 
 138 /*
 139  * Global functions prototype in qla_nvme.c source file.
 140  */
 141 int qla_nvme_register_hba(struct scsi_qla_host *);
 142 int  qla_nvme_register_remote(struct scsi_qla_host *, struct fc_port *);
 143 void qla_nvme_delete(struct scsi_qla_host *);
 144 void qla24xx_nvme_ls4_iocb(struct scsi_qla_host *, struct pt_ls4_request *,
 145     struct req_que *);
 146 void qla24xx_async_gffid_sp_done(struct srb *sp, int);
 147 #endif

/* [<][>][^][v][top][bottom][index][help] */