0001
0002
0003
0004
0005
0006
0007 #ifndef __STORAGE_COMMON__
0008 #define __STORAGE_COMMON__
0009
0010
0011
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
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
0038 struct iscsi_drv_opaque {
0039 __le16 reserved_zero[3];
0040 __le16 opaque;
0041 };
0042
0043
0044 union scsi_opaque {
0045 struct regpair fcoe_opaque;
0046 struct iscsi_drv_opaque iscsi_opaque;
0047 };
0048
0049
0050 struct scsi_bd {
0051 struct regpair address;
0052 union scsi_opaque opaque;
0053 };
0054
0055
0056 struct scsi_bdq_ram_drv_data {
0057 __le16 external_producer;
0058 __le16 reserved0[3];
0059 };
0060
0061
0062 struct scsi_sge {
0063 struct regpair sge_addr;
0064 __le32 sge_len;
0065 __le32 reserved;
0066 };
0067
0068
0069 struct scsi_cached_sges {
0070 struct scsi_sge sge[4];
0071 };
0072
0073
0074 struct scsi_drv_cmdq {
0075 __le16 cmdq_cons;
0076 __le16 reserved0;
0077 __le32 reserved1;
0078 };
0079
0080
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
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
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
0129 enum scsi_sgl_mode {
0130 SCSI_TX_SLOW_SGL,
0131 SCSI_FAST_SGL,
0132 MAX_SCSI_SGL_MODE
0133 };
0134
0135
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
0146 struct scsi_terminate_extra_params {
0147 __le16 unsolicited_cq_count;
0148 __le16 cmdq_count;
0149 u8 reserved[4];
0150 };
0151
0152
0153 struct scsi_tqe {
0154 __le16 itid;
0155 };
0156
0157 #endif