1897e87a1SShai Malin /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2897e87a1SShai Malin /* Copyright 2021 Marvell. All rights reserved. */ 3897e87a1SShai Malin 4897e87a1SShai Malin #ifndef _QED_NVMETCP_H 5897e87a1SShai Malin #define _QED_NVMETCP_H 6897e87a1SShai Malin 7897e87a1SShai Malin #include <linux/types.h> 8897e87a1SShai Malin #include <linux/list.h> 9897e87a1SShai Malin #include <linux/slab.h> 10897e87a1SShai Malin #include <linux/spinlock.h> 11897e87a1SShai Malin #include <linux/qed/tcp_common.h> 12897e87a1SShai Malin #include <linux/qed/qed_nvmetcp_if.h> 13897e87a1SShai Malin #include <linux/qed/qed_chain.h> 14897e87a1SShai Malin #include "qed.h" 15897e87a1SShai Malin #include "qed_hsi.h" 16897e87a1SShai Malin #include "qed_mcp.h" 17897e87a1SShai Malin #include "qed_sp.h" 18897e87a1SShai Malin 19897e87a1SShai Malin #define QED_NVMETCP_FW_CQ_SIZE (4 * 1024) 20897e87a1SShai Malin 21897e87a1SShai Malin /* tcp parameters */ 22*76684ab8SShai Malin #define QED_TCP_FLOW_LABEL 0 23897e87a1SShai Malin #define QED_TCP_TWO_MSL_TIMER 4000 24897e87a1SShai Malin #define QED_TCP_HALF_WAY_CLOSE_TIMEOUT 10 25897e87a1SShai Malin #define QED_TCP_MAX_FIN_RT 2 26897e87a1SShai Malin #define QED_TCP_SWS_TIMER 5000 27897e87a1SShai Malin 28897e87a1SShai Malin struct qed_nvmetcp_info { 29897e87a1SShai Malin spinlock_t lock; /* Connection resources. */ 30897e87a1SShai Malin struct list_head free_list; 31897e87a1SShai Malin u16 max_num_outstanding_tasks; 32897e87a1SShai Malin void *event_context; 33897e87a1SShai Malin nvmetcp_event_cb_t event_cb; 34897e87a1SShai Malin }; 35897e87a1SShai Malin 36*76684ab8SShai Malin struct qed_hash_nvmetcp_con { 37*76684ab8SShai Malin struct hlist_node node; 38*76684ab8SShai Malin struct qed_nvmetcp_conn *con; 39*76684ab8SShai Malin }; 40*76684ab8SShai Malin 41*76684ab8SShai Malin struct qed_nvmetcp_conn { 42*76684ab8SShai Malin struct list_head list_entry; 43*76684ab8SShai Malin bool free_on_delete; 44*76684ab8SShai Malin u16 conn_id; 45*76684ab8SShai Malin u32 icid; 46*76684ab8SShai Malin u32 fw_cid; 47*76684ab8SShai Malin u8 layer_code; 48*76684ab8SShai Malin u8 offl_flags; 49*76684ab8SShai Malin u8 connect_mode; 50*76684ab8SShai Malin dma_addr_t sq_pbl_addr; 51*76684ab8SShai Malin struct qed_chain r2tq; 52*76684ab8SShai Malin struct qed_chain xhq; 53*76684ab8SShai Malin struct qed_chain uhq; 54*76684ab8SShai Malin u8 local_mac[6]; 55*76684ab8SShai Malin u8 remote_mac[6]; 56*76684ab8SShai Malin u8 ip_version; 57*76684ab8SShai Malin u8 ka_max_probe_cnt; 58*76684ab8SShai Malin u16 vlan_id; 59*76684ab8SShai Malin u16 tcp_flags; 60*76684ab8SShai Malin u32 remote_ip[4]; 61*76684ab8SShai Malin u32 local_ip[4]; 62*76684ab8SShai Malin u32 flow_label; 63*76684ab8SShai Malin u32 ka_timeout; 64*76684ab8SShai Malin u32 ka_interval; 65*76684ab8SShai Malin u32 max_rt_time; 66*76684ab8SShai Malin u8 ttl; 67*76684ab8SShai Malin u8 tos_or_tc; 68*76684ab8SShai Malin u16 remote_port; 69*76684ab8SShai Malin u16 local_port; 70*76684ab8SShai Malin u16 mss; 71*76684ab8SShai Malin u8 rcv_wnd_scale; 72*76684ab8SShai Malin u32 rcv_wnd; 73*76684ab8SShai Malin u32 cwnd; 74*76684ab8SShai Malin u8 update_flag; 75*76684ab8SShai Malin u8 default_cq; 76*76684ab8SShai Malin u8 abortive_dsconnect; 77*76684ab8SShai Malin u32 max_seq_size; 78*76684ab8SShai Malin u32 max_recv_pdu_length; 79*76684ab8SShai Malin u32 max_send_pdu_length; 80*76684ab8SShai Malin u32 first_seq_length; 81*76684ab8SShai Malin u16 physical_q0; 82*76684ab8SShai Malin u16 physical_q1; 83*76684ab8SShai Malin u16 nvmetcp_cccid_max_range; 84*76684ab8SShai Malin dma_addr_t nvmetcp_cccid_itid_table_addr; 85*76684ab8SShai Malin }; 86*76684ab8SShai Malin 87897e87a1SShai Malin #if IS_ENABLED(CONFIG_QED_NVMETCP) 88897e87a1SShai Malin int qed_nvmetcp_alloc(struct qed_hwfn *p_hwfn); 89897e87a1SShai Malin void qed_nvmetcp_setup(struct qed_hwfn *p_hwfn); 90897e87a1SShai Malin void qed_nvmetcp_free(struct qed_hwfn *p_hwfn); 91897e87a1SShai Malin 92897e87a1SShai Malin #else /* IS_ENABLED(CONFIG_QED_NVMETCP) */ qed_nvmetcp_alloc(struct qed_hwfn * p_hwfn)93897e87a1SShai Malinstatic inline int qed_nvmetcp_alloc(struct qed_hwfn *p_hwfn) 94897e87a1SShai Malin { 95897e87a1SShai Malin return -EINVAL; 96897e87a1SShai Malin } 97897e87a1SShai Malin qed_nvmetcp_setup(struct qed_hwfn * p_hwfn)98897e87a1SShai Malinstatic inline void qed_nvmetcp_setup(struct qed_hwfn *p_hwfn) {} qed_nvmetcp_free(struct qed_hwfn * p_hwfn)99897e87a1SShai Malinstatic inline void qed_nvmetcp_free(struct qed_hwfn *p_hwfn) {} 100897e87a1SShai Malin 101897e87a1SShai Malin #endif /* IS_ENABLED(CONFIG_QED_NVMETCP) */ 102897e87a1SShai Malin 103897e87a1SShai Malin #endif 104