Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
0002 /* QLogic qed NIC Driver
0003  * Copyright (c) 2015-2017  QLogic Corporation
0004  * Copyright (c) 2019-2020 Marvell International Ltd.
0005  */
0006 
0007 #ifndef __STORAGE_COMMON__
0008 #define __STORAGE_COMMON__
0009 
0010 /*********************/
0011 /* SCSI CONSTANTS */
0012 /*********************/
0013 
0014 #define SCSI_MAX_NUM_OF_CMDQS       (NUM_OF_GLOBAL_QUEUES / 2)
0015 #define BDQ_NUM_RESOURCES       (4)
0016 
0017 #define BDQ_ID_RQ           (0)
0018 #define BDQ_ID_IMM_DATA         (1)
0019 #define BDQ_ID_TQ           (2)
0020 #define BDQ_NUM_IDS         (3)
0021 
0022 #define SCSI_NUM_SGES_SLOW_SGL_THR  8
0023 
0024 #define BDQ_MAX_EXTERNAL_RING_SIZE  BIT(15)
0025 
0026 /* SCSI op codes */
0027 #define SCSI_OPCODE_COMPARE_AND_WRITE   (0x89)
0028 #define SCSI_OPCODE_READ_10     (0x28)
0029 #define SCSI_OPCODE_WRITE_6     (0x0A)
0030 #define SCSI_OPCODE_WRITE_10        (0x2A)
0031 #define SCSI_OPCODE_WRITE_12        (0xAA)
0032 #define SCSI_OPCODE_WRITE_16        (0x8A)
0033 #define SCSI_OPCODE_WRITE_AND_VERIFY_10 (0x2E)
0034 #define SCSI_OPCODE_WRITE_AND_VERIFY_12 (0xAE)
0035 #define SCSI_OPCODE_WRITE_AND_VERIFY_16 (0x8E)
0036 
0037 /* iSCSI Drv opaque */
0038 struct iscsi_drv_opaque {
0039     __le16 reserved_zero[3];
0040     __le16 opaque;
0041 };
0042 
0043 /* Scsi 2B/8B opaque union */
0044 union scsi_opaque {
0045     struct regpair fcoe_opaque;
0046     struct iscsi_drv_opaque iscsi_opaque;
0047 };
0048 
0049 /* SCSI buffer descriptor */
0050 struct scsi_bd {
0051     struct regpair address;
0052     union scsi_opaque opaque;
0053 };
0054 
0055 /* Scsi Drv BDQ struct */
0056 struct scsi_bdq_ram_drv_data {
0057     __le16 external_producer;
0058     __le16 reserved0[3];
0059 };
0060 
0061 /* SCSI SGE entry */
0062 struct scsi_sge {
0063     struct regpair sge_addr;
0064     __le32 sge_len;
0065     __le32 reserved;
0066 };
0067 
0068 /* Cached SGEs section */
0069 struct scsi_cached_sges {
0070     struct scsi_sge sge[4];
0071 };
0072 
0073 /* Scsi Drv CMDQ struct */
0074 struct scsi_drv_cmdq {
0075     __le16 cmdq_cons;
0076     __le16 reserved0;
0077     __le32 reserved1;
0078 };
0079 
0080 /* Common SCSI init params passed by driver to FW in function init ramrod */
0081 struct scsi_init_func_params {
0082     __le16 num_tasks;
0083     u8 log_page_size;
0084     u8 log_page_size_conn;
0085     u8 debug_mode;
0086     u8 reserved2[11];
0087 };
0088 
0089 /* SCSI RQ/CQ/CMDQ firmware function init parameters */
0090 struct scsi_init_func_queues {
0091     struct regpair glbl_q_params_addr;
0092     __le16 rq_buffer_size;
0093     __le16 cq_num_entries;
0094     __le16 cmdq_num_entries;
0095     u8 bdq_resource_id;
0096     u8 q_validity;
0097 #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_MASK         0x1
0098 #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_SHIFT            0
0099 #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_MASK       0x1
0100 #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_SHIFT      1
0101 #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_MASK            0x1
0102 #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_SHIFT           2
0103 #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_MASK         0x1
0104 #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_SHIFT            3
0105 #define SCSI_INIT_FUNC_QUEUES_SOC_EN_MASK           0x1
0106 #define SCSI_INIT_FUNC_QUEUES_SOC_EN_SHIFT          4
0107 #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_MASK    0x7
0108 #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_SHIFT   5
0109     __le16 cq_cmdq_sb_num_arr[SCSI_MAX_NUM_OF_CMDQS];
0110     u8 num_queues;
0111     u8 queue_relative_offset;
0112     u8 cq_sb_pi;
0113     u8 cmdq_sb_pi;
0114     u8 bdq_pbl_num_entries[BDQ_NUM_IDS];
0115     u8 reserved1;
0116     struct regpair bdq_pbl_base_address[BDQ_NUM_IDS];
0117     __le16 bdq_xoff_threshold[BDQ_NUM_IDS];
0118     __le16 cmdq_xoff_threshold;
0119     __le16 bdq_xon_threshold[BDQ_NUM_IDS];
0120     __le16 cmdq_xon_threshold;
0121 };
0122 
0123 /* Scsi Drv BDQ Data struct (2 BDQ IDs: 0 - RQ, 1 - Immediate Data) */
0124 struct scsi_ram_per_bdq_resource_drv_data {
0125     struct scsi_bdq_ram_drv_data drv_data_per_bdq_id[BDQ_NUM_IDS];
0126 };
0127 
0128 /* SCSI SGL types */
0129 enum scsi_sgl_mode {
0130     SCSI_TX_SLOW_SGL,
0131     SCSI_FAST_SGL,
0132     MAX_SCSI_SGL_MODE
0133 };
0134 
0135 /* SCSI SGL parameters */
0136 struct scsi_sgl_params {
0137     struct regpair sgl_addr;
0138     __le32 sgl_total_length;
0139     __le32 sge_offset;
0140     __le16 sgl_num_sges;
0141     u8 sgl_index;
0142     u8 reserved;
0143 };
0144 
0145 /* SCSI terminate connection params */
0146 struct scsi_terminate_extra_params {
0147     __le16 unsolicited_cq_count;
0148     __le16 cmdq_count;
0149     u8 reserved[4];
0150 };
0151 
0152 /* SCSI Task Queue Element */
0153 struct scsi_tqe {
0154     __le16 itid;
0155 };
0156 
0157 #endif /* __STORAGE_COMMON__ */