Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
0002 /* Copyright 2021 Marvell. All rights reserved. */
0003 
0004 #ifndef _QED_NVMETCP_H
0005 #define _QED_NVMETCP_H
0006 
0007 #include <linux/types.h>
0008 #include <linux/list.h>
0009 #include <linux/slab.h>
0010 #include <linux/spinlock.h>
0011 #include <linux/qed/tcp_common.h>
0012 #include <linux/qed/qed_nvmetcp_if.h>
0013 #include <linux/qed/qed_chain.h>
0014 #include "qed.h"
0015 #include "qed_hsi.h"
0016 #include "qed_mcp.h"
0017 #include "qed_sp.h"
0018 
0019 #define QED_NVMETCP_FW_CQ_SIZE (4 * 1024)
0020 
0021 /* tcp parameters */
0022 #define QED_TCP_FLOW_LABEL 0
0023 #define QED_TCP_TWO_MSL_TIMER 4000
0024 #define QED_TCP_HALF_WAY_CLOSE_TIMEOUT 10
0025 #define QED_TCP_MAX_FIN_RT 2
0026 #define QED_TCP_SWS_TIMER 5000
0027 
0028 struct qed_nvmetcp_info {
0029     spinlock_t lock; /* Connection resources. */
0030     struct list_head free_list;
0031     u16 max_num_outstanding_tasks;
0032     void *event_context;
0033     nvmetcp_event_cb_t event_cb;
0034 };
0035 
0036 struct qed_hash_nvmetcp_con {
0037     struct hlist_node node;
0038     struct qed_nvmetcp_conn *con;
0039 };
0040 
0041 struct qed_nvmetcp_conn {
0042     struct list_head list_entry;
0043     bool free_on_delete;
0044     u16 conn_id;
0045     u32 icid;
0046     u32 fw_cid;
0047     u8 layer_code;
0048     u8 offl_flags;
0049     u8 connect_mode;
0050     dma_addr_t sq_pbl_addr;
0051     struct qed_chain r2tq;
0052     struct qed_chain xhq;
0053     struct qed_chain uhq;
0054     u8 local_mac[6];
0055     u8 remote_mac[6];
0056     u8 ip_version;
0057     u8 ka_max_probe_cnt;
0058     u16 vlan_id;
0059     u16 tcp_flags;
0060     u32 remote_ip[4];
0061     u32 local_ip[4];
0062     u32 flow_label;
0063     u32 ka_timeout;
0064     u32 ka_interval;
0065     u32 max_rt_time;
0066     u8 ttl;
0067     u8 tos_or_tc;
0068     u16 remote_port;
0069     u16 local_port;
0070     u16 mss;
0071     u8 rcv_wnd_scale;
0072     u32 rcv_wnd;
0073     u32 cwnd;
0074     u8 update_flag;
0075     u8 default_cq;
0076     u8 abortive_dsconnect;
0077     u32 max_seq_size;
0078     u32 max_recv_pdu_length;
0079     u32 max_send_pdu_length;
0080     u32 first_seq_length;
0081     u16 physical_q0;
0082     u16 physical_q1;
0083     u16 nvmetcp_cccid_max_range;
0084     dma_addr_t nvmetcp_cccid_itid_table_addr;
0085 };
0086 
0087 #if IS_ENABLED(CONFIG_QED_NVMETCP)
0088 int qed_nvmetcp_alloc(struct qed_hwfn *p_hwfn);
0089 void qed_nvmetcp_setup(struct qed_hwfn *p_hwfn);
0090 void qed_nvmetcp_free(struct qed_hwfn *p_hwfn);
0091 
0092 #else /* IS_ENABLED(CONFIG_QED_NVMETCP) */
0093 static inline int qed_nvmetcp_alloc(struct qed_hwfn *p_hwfn)
0094 {
0095     return -EINVAL;
0096 }
0097 
0098 static inline void qed_nvmetcp_setup(struct qed_hwfn *p_hwfn) {}
0099 static inline void qed_nvmetcp_free(struct qed_hwfn *p_hwfn) {}
0100 
0101 #endif /* IS_ENABLED(CONFIG_QED_NVMETCP) */
0102 
0103 #endif