0001
0002
0003
0004 #ifndef _QED_NVMETCP_IF_H
0005 #define _QED_NVMETCP_IF_H
0006 #include <linux/types.h>
0007 #include <linux/qed/qed_if.h>
0008 #include <linux/qed/storage_common.h>
0009 #include <linux/qed/nvmetcp_common.h>
0010
0011 #define QED_NVMETCP_MAX_IO_SIZE 0x800000
0012 #define QED_NVMETCP_CMN_HDR_SIZE (sizeof(struct nvme_tcp_hdr))
0013 #define QED_NVMETCP_CMD_HDR_SIZE (sizeof(struct nvme_tcp_cmd_pdu))
0014 #define QED_NVMETCP_NON_IO_HDR_SIZE ((QED_NVMETCP_CMN_HDR_SIZE + 16))
0015
0016 typedef int (*nvmetcp_event_cb_t) (void *context,
0017 u8 fw_event_code, void *fw_handle);
0018
0019 struct qed_dev_nvmetcp_info {
0020 struct qed_dev_info common;
0021 u8 port_id;
0022 u8 num_cqs;
0023 };
0024
0025 #define MAX_TID_BLOCKS_NVMETCP (512)
0026 struct qed_nvmetcp_tid {
0027 u32 size;
0028 u32 num_tids_per_block;
0029 u8 *blocks[MAX_TID_BLOCKS_NVMETCP];
0030 };
0031
0032 struct qed_nvmetcp_id_params {
0033 u8 mac[ETH_ALEN];
0034 u32 ip[4];
0035 u16 port;
0036 };
0037
0038 struct qed_nvmetcp_params_offload {
0039
0040 dma_addr_t sq_pbl_addr;
0041 dma_addr_t nvmetcp_cccid_itid_table_addr;
0042 u16 nvmetcp_cccid_max_range;
0043 u8 default_cq;
0044
0045
0046 struct qed_nvmetcp_id_params src;
0047 struct qed_nvmetcp_id_params dst;
0048 u32 ka_timeout;
0049 u32 ka_interval;
0050 u32 max_rt_time;
0051 u32 cwnd;
0052 u16 mss;
0053 u16 vlan_id;
0054 bool timestamp_en;
0055 bool delayed_ack_en;
0056 bool tcp_keep_alive_en;
0057 bool ecn_en;
0058 u8 ip_version;
0059 u8 ka_max_probe_cnt;
0060 u8 ttl;
0061 u8 tos_or_tc;
0062 u8 rcv_wnd_scale;
0063 };
0064
0065 struct qed_nvmetcp_params_update {
0066 u32 max_io_size;
0067 u32 max_recv_pdu_length;
0068 u32 max_send_pdu_length;
0069
0070
0071
0072 bool hdr_digest_en;
0073 bool data_digest_en;
0074 };
0075
0076 struct qed_nvmetcp_cb_ops {
0077 struct qed_common_cb_ops common;
0078 };
0079
0080 struct nvmetcp_sge {
0081 struct regpair sge_addr;
0082 __le32 sge_len;
0083 __le32 reserved;
0084 };
0085
0086
0087 struct storage_sgl_task_params {
0088 struct nvmetcp_sge *sgl;
0089 struct regpair sgl_phys_addr;
0090 u32 total_buffer_size;
0091 u16 num_sges;
0092 bool small_mid_sge;
0093 };
0094
0095
0096 struct nvmetcp_task_params {
0097 void *context;
0098 struct nvmetcp_wqe *sqe;
0099 u32 tx_io_size;
0100 u32 rx_io_size;
0101 u16 conn_icid;
0102 u16 itid;
0103 struct regpair opq;
0104 u16 host_cccid;
0105 u8 cq_rss_number;
0106 bool send_write_incapsule;
0107 };
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192 struct qed_nvmetcp_ops {
0193 const struct qed_common_ops *common;
0194
0195 const struct qed_ll2_ops *ll2;
0196
0197 int (*fill_dev_info)(struct qed_dev *cdev,
0198 struct qed_dev_nvmetcp_info *info);
0199
0200 void (*register_ops)(struct qed_dev *cdev,
0201 struct qed_nvmetcp_cb_ops *ops, void *cookie);
0202
0203 int (*start)(struct qed_dev *cdev,
0204 struct qed_nvmetcp_tid *tasks,
0205 void *event_context, nvmetcp_event_cb_t async_event_cb);
0206
0207 int (*stop)(struct qed_dev *cdev);
0208
0209 int (*acquire_conn)(struct qed_dev *cdev,
0210 u32 *handle,
0211 u32 *fw_cid, void __iomem **p_doorbell);
0212
0213 int (*release_conn)(struct qed_dev *cdev, u32 handle);
0214
0215 int (*offload_conn)(struct qed_dev *cdev,
0216 u32 handle,
0217 struct qed_nvmetcp_params_offload *conn_info);
0218
0219 int (*update_conn)(struct qed_dev *cdev,
0220 u32 handle,
0221 struct qed_nvmetcp_params_update *conn_info);
0222
0223 int (*destroy_conn)(struct qed_dev *cdev, u32 handle, u8 abrt_conn);
0224
0225 int (*clear_sq)(struct qed_dev *cdev, u32 handle);
0226
0227 int (*add_src_tcp_port_filter)(struct qed_dev *cdev, u16 src_port);
0228
0229 void (*remove_src_tcp_port_filter)(struct qed_dev *cdev, u16 src_port);
0230
0231 int (*add_dst_tcp_port_filter)(struct qed_dev *cdev, u16 dest_port);
0232
0233 void (*remove_dst_tcp_port_filter)(struct qed_dev *cdev, u16 dest_port);
0234
0235 void (*clear_all_filters)(struct qed_dev *cdev);
0236
0237 void (*init_read_io)(struct nvmetcp_task_params *task_params,
0238 struct nvme_tcp_cmd_pdu *cmd_pdu_header,
0239 struct nvme_command *nvme_cmd,
0240 struct storage_sgl_task_params *sgl_task_params);
0241
0242 void (*init_write_io)(struct nvmetcp_task_params *task_params,
0243 struct nvme_tcp_cmd_pdu *cmd_pdu_header,
0244 struct nvme_command *nvme_cmd,
0245 struct storage_sgl_task_params *sgl_task_params);
0246
0247 void (*init_icreq_exchange)(struct nvmetcp_task_params *task_params,
0248 struct nvme_tcp_icreq_pdu *init_conn_req_pdu_hdr,
0249 struct storage_sgl_task_params *tx_sgl_task_params,
0250 struct storage_sgl_task_params *rx_sgl_task_params);
0251
0252 void (*init_task_cleanup)(struct nvmetcp_task_params *task_params);
0253 };
0254
0255 const struct qed_nvmetcp_ops *qed_get_nvmetcp_ops(void);
0256 void qed_put_nvmetcp_ops(void);
0257 #endif