linux/drivers/scsi/qla2xxx/qla_nvme.h
<<
>>
Prefs
   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 <linux/blk-mq.h>
  11#include <uapi/scsi/fc/fc_fs.h>
  12#include <uapi/scsi/fc/fc_els.h>
  13#include <linux/nvme-fc-driver.h>
  14
  15#define NVME_ATIO_CMD_OFF 32
  16#define NVME_FIRST_PACKET_CMDLEN (64 - NVME_ATIO_CMD_OFF)
  17#define Q2T_NVME_NUM_TAGS 2048
  18#define QLA_MAX_FC_SEGMENTS 64
  19
  20struct srb;
  21struct nvme_private {
  22        struct srb      *sp;
  23        struct nvmefc_ls_req *fd;
  24        struct work_struct ls_work;
  25        int comp_status;
  26};
  27
  28struct nvme_rport {
  29        struct nvme_fc_port_info req;
  30        struct list_head list;
  31        struct fc_port *fcport;
  32};
  33
  34#define COMMAND_NVME    0x88            /* Command Type FC-NVMe IOCB */
  35struct cmd_nvme {
  36        uint8_t entry_type;             /* Entry type. */
  37        uint8_t entry_count;            /* Entry count. */
  38        uint8_t sys_define;             /* System defined. */
  39        uint8_t entry_status;           /* Entry Status. */
  40
  41        uint32_t handle;                /* System handle. */
  42        uint16_t nport_handle;          /* N_PORT handle. */
  43        uint16_t timeout;               /* Command timeout. */
  44
  45        uint16_t dseg_count;            /* Data segment count. */
  46        uint16_t nvme_rsp_dsd_len;      /* NVMe RSP DSD length */
  47
  48        uint64_t rsvd;
  49
  50        uint16_t control_flags;         /* Control Flags */
  51#define CF_NVME_ENABLE                  BIT_9
  52#define CF_DIF_SEG_DESCR_ENABLE         BIT_3
  53#define CF_DATA_SEG_DESCR_ENABLE        BIT_2
  54#define CF_READ_DATA                    BIT_1
  55#define CF_WRITE_DATA                   BIT_0
  56
  57        uint16_t nvme_cmnd_dseg_len;             /* Data segment length. */
  58        uint32_t nvme_cmnd_dseg_address[2];      /* Data segment address. */
  59        uint32_t nvme_rsp_dseg_address[2];       /* Data segment address. */
  60
  61        uint32_t byte_count;            /* Total byte count. */
  62
  63        uint8_t port_id[3];             /* PortID of destination port. */
  64        uint8_t vp_index;
  65
  66        uint32_t nvme_data_dseg_address[2];      /* Data segment address. */
  67        uint32_t nvme_data_dseg_len;             /* Data segment length. */
  68};
  69
  70#define PT_LS4_REQUEST 0x89     /* Link Service pass-through IOCB (request) */
  71struct pt_ls4_request {
  72        uint8_t entry_type;
  73        uint8_t entry_count;
  74        uint8_t sys_define;
  75        uint8_t entry_status;
  76        uint32_t handle;
  77        uint16_t status;
  78        uint16_t nport_handle;
  79        uint16_t tx_dseg_count;
  80        uint8_t  vp_index;
  81        uint8_t  rsvd;
  82        uint16_t timeout;
  83        uint16_t control_flags;
  84#define CF_LS4_SHIFT            13
  85#define CF_LS4_ORIGINATOR       0
  86#define CF_LS4_RESPONDER        1
  87#define CF_LS4_RESPONDER_TERM   2
  88
  89        uint16_t rx_dseg_count;
  90        uint16_t rsvd2;
  91        uint32_t exchange_address;
  92        uint32_t rsvd3;
  93        uint32_t rx_byte_count;
  94        uint32_t tx_byte_count;
  95        uint32_t dseg0_address[2];
  96        uint32_t dseg0_len;
  97        uint32_t dseg1_address[2];
  98        uint32_t dseg1_len;
  99};
 100
 101#define PT_LS4_UNSOL 0x56       /* pass-up unsolicited rec FC-NVMe request */
 102struct pt_ls4_rx_unsol {
 103        uint8_t entry_type;
 104        uint8_t entry_count;
 105        uint16_t rsvd0;
 106        uint16_t rsvd1;
 107        uint8_t vp_index;
 108        uint8_t rsvd2;
 109        uint16_t rsvd3;
 110        uint16_t nport_handle;
 111        uint16_t frame_size;
 112        uint16_t rsvd4;
 113        uint32_t exchange_address;
 114        uint8_t d_id[3];
 115        uint8_t r_ctl;
 116        uint8_t s_id[3];
 117        uint8_t cs_ctl;
 118        uint8_t f_ctl[3];
 119        uint8_t type;
 120        uint16_t seq_cnt;
 121        uint8_t df_ctl;
 122        uint8_t seq_id;
 123        uint16_t rx_id;
 124        uint16_t ox_id;
 125        uint32_t param;
 126        uint32_t desc0;
 127#define PT_LS4_PAYLOAD_OFFSET 0x2c
 128#define PT_LS4_FIRST_PACKET_LEN 20
 129        uint32_t desc_len;
 130        uint32_t payload[3];
 131};
 132#endif
 133