1*14b24e2bSVaishali Kulkarni /* 2*14b24e2bSVaishali Kulkarni * CDDL HEADER START 3*14b24e2bSVaishali Kulkarni * 4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the 5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1, (the "License"). 6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 7*14b24e2bSVaishali Kulkarni * 8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0. 10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions 11*14b24e2bSVaishali Kulkarni * and limitations under the License. 12*14b24e2bSVaishali Kulkarni * 13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each 14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the 16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying 17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner] 18*14b24e2bSVaishali Kulkarni * 19*14b24e2bSVaishali Kulkarni * CDDL HEADER END 20*14b24e2bSVaishali Kulkarni */ 21*14b24e2bSVaishali Kulkarni 22*14b24e2bSVaishali Kulkarni /* 23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc. 24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development 25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1, (the "License"). 26*14b24e2bSVaishali Kulkarni 27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 28*14b24e2bSVaishali Kulkarni 29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available 30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0 31*14b24e2bSVaishali Kulkarni 32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and 33*14b24e2bSVaishali Kulkarni * limitations under the License. 34*14b24e2bSVaishali Kulkarni */ 35*14b24e2bSVaishali Kulkarni 36*14b24e2bSVaishali Kulkarni #ifndef __ECORE_ISCSI_API_H__ 37*14b24e2bSVaishali Kulkarni #define __ECORE_ISCSI_API_H__ 38*14b24e2bSVaishali Kulkarni 39*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__ 40*14b24e2bSVaishali Kulkarni typedef enum _ecore_status_t (*iscsi_event_cb_t)(void *context, 41*14b24e2bSVaishali Kulkarni u8 fw_event_code, 42*14b24e2bSVaishali Kulkarni void *fw_handle); 43*14b24e2bSVaishali Kulkarni #endif 44*14b24e2bSVaishali Kulkarni 45*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn { 46*14b24e2bSVaishali Kulkarni osal_list_entry_t list_entry; 47*14b24e2bSVaishali Kulkarni bool free_on_delete; 48*14b24e2bSVaishali Kulkarni 49*14b24e2bSVaishali Kulkarni u16 conn_id; 50*14b24e2bSVaishali Kulkarni u32 icid; 51*14b24e2bSVaishali Kulkarni u32 fw_cid; 52*14b24e2bSVaishali Kulkarni 53*14b24e2bSVaishali Kulkarni u8 layer_code; 54*14b24e2bSVaishali Kulkarni u8 offl_flags; 55*14b24e2bSVaishali Kulkarni u8 connect_mode; 56*14b24e2bSVaishali Kulkarni u32 initial_ack; 57*14b24e2bSVaishali Kulkarni dma_addr_t sq_pbl_addr; 58*14b24e2bSVaishali Kulkarni struct ecore_chain r2tq; 59*14b24e2bSVaishali Kulkarni struct ecore_chain xhq; 60*14b24e2bSVaishali Kulkarni struct ecore_chain uhq; 61*14b24e2bSVaishali Kulkarni 62*14b24e2bSVaishali Kulkarni struct tcp_upload_params *tcp_upload_params_virt_addr; 63*14b24e2bSVaishali Kulkarni dma_addr_t tcp_upload_params_phys_addr; 64*14b24e2bSVaishali Kulkarni struct scsi_terminate_extra_params *queue_cnts_virt_addr; 65*14b24e2bSVaishali Kulkarni dma_addr_t queue_cnts_phys_addr; 66*14b24e2bSVaishali Kulkarni dma_addr_t syn_phy_addr; 67*14b24e2bSVaishali Kulkarni 68*14b24e2bSVaishali Kulkarni u16 syn_ip_payload_length; 69*14b24e2bSVaishali Kulkarni u8 local_mac[6]; 70*14b24e2bSVaishali Kulkarni u8 remote_mac[6]; 71*14b24e2bSVaishali Kulkarni u16 vlan_id; 72*14b24e2bSVaishali Kulkarni u8 tcp_flags; 73*14b24e2bSVaishali Kulkarni u8 ip_version; 74*14b24e2bSVaishali Kulkarni u32 remote_ip[4]; 75*14b24e2bSVaishali Kulkarni u32 local_ip[4]; 76*14b24e2bSVaishali Kulkarni u8 ka_max_probe_cnt; 77*14b24e2bSVaishali Kulkarni u8 dup_ack_theshold; 78*14b24e2bSVaishali Kulkarni u32 rcv_next; 79*14b24e2bSVaishali Kulkarni u32 snd_una; 80*14b24e2bSVaishali Kulkarni u32 snd_next; 81*14b24e2bSVaishali Kulkarni u32 snd_max; 82*14b24e2bSVaishali Kulkarni u32 snd_wnd; 83*14b24e2bSVaishali Kulkarni u32 rcv_wnd; 84*14b24e2bSVaishali Kulkarni u32 snd_wl1; 85*14b24e2bSVaishali Kulkarni u32 cwnd; 86*14b24e2bSVaishali Kulkarni u32 ss_thresh; 87*14b24e2bSVaishali Kulkarni u16 srtt; 88*14b24e2bSVaishali Kulkarni u16 rtt_var; 89*14b24e2bSVaishali Kulkarni u32 ts_recent; 90*14b24e2bSVaishali Kulkarni u32 ts_recent_age; 91*14b24e2bSVaishali Kulkarni u32 total_rt; 92*14b24e2bSVaishali Kulkarni u32 ka_timeout_delta; 93*14b24e2bSVaishali Kulkarni u32 rt_timeout_delta; 94*14b24e2bSVaishali Kulkarni u8 dup_ack_cnt; 95*14b24e2bSVaishali Kulkarni u8 snd_wnd_probe_cnt; 96*14b24e2bSVaishali Kulkarni u8 ka_probe_cnt; 97*14b24e2bSVaishali Kulkarni u8 rt_cnt; 98*14b24e2bSVaishali Kulkarni u32 flow_label; 99*14b24e2bSVaishali Kulkarni u32 ka_timeout; 100*14b24e2bSVaishali Kulkarni u32 ka_interval; 101*14b24e2bSVaishali Kulkarni u32 max_rt_time; 102*14b24e2bSVaishali Kulkarni u32 initial_rcv_wnd; 103*14b24e2bSVaishali Kulkarni u8 ttl; 104*14b24e2bSVaishali Kulkarni u8 tos_or_tc; 105*14b24e2bSVaishali Kulkarni u16 remote_port; 106*14b24e2bSVaishali Kulkarni u16 local_port; 107*14b24e2bSVaishali Kulkarni u16 mss; 108*14b24e2bSVaishali Kulkarni u8 snd_wnd_scale; 109*14b24e2bSVaishali Kulkarni u8 rcv_wnd_scale; 110*14b24e2bSVaishali Kulkarni u16 da_timeout_value; 111*14b24e2bSVaishali Kulkarni u8 ack_frequency; 112*14b24e2bSVaishali Kulkarni 113*14b24e2bSVaishali Kulkarni u8 update_flag; 114*14b24e2bSVaishali Kulkarni #define ECORE_ISCSI_CONN_HD_EN 0x01 115*14b24e2bSVaishali Kulkarni #define ECORE_ISCSI_CONN_DD_EN 0x02 116*14b24e2bSVaishali Kulkarni #define ECORE_ISCSI_CONN_INITIAL_R2T 0x04 117*14b24e2bSVaishali Kulkarni #define ECORE_ISCSI_CONN_IMMEDIATE_DATA 0x08 118*14b24e2bSVaishali Kulkarni 119*14b24e2bSVaishali Kulkarni u8 default_cq; 120*14b24e2bSVaishali Kulkarni u32 max_seq_size; 121*14b24e2bSVaishali Kulkarni u32 max_recv_pdu_length; 122*14b24e2bSVaishali Kulkarni u32 max_send_pdu_length; 123*14b24e2bSVaishali Kulkarni u32 first_seq_length; 124*14b24e2bSVaishali Kulkarni u32 exp_stat_sn; 125*14b24e2bSVaishali Kulkarni u32 stat_sn; 126*14b24e2bSVaishali Kulkarni u16 physical_q0; 127*14b24e2bSVaishali Kulkarni u16 physical_q1; 128*14b24e2bSVaishali Kulkarni u8 abortive_dsconnect; 129*14b24e2bSVaishali Kulkarni }; 130*14b24e2bSVaishali Kulkarni 131*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__ 132*14b24e2bSVaishali Kulkarni struct ecore_iscsi_stats 133*14b24e2bSVaishali Kulkarni { 134*14b24e2bSVaishali Kulkarni u64 iscsi_rx_bytes_cnt; 135*14b24e2bSVaishali Kulkarni u64 iscsi_rx_packet_cnt; 136*14b24e2bSVaishali Kulkarni u64 iscsi_rx_new_ooo_isle_events_cnt; 137*14b24e2bSVaishali Kulkarni u32 iscsi_cmdq_threshold_cnt; 138*14b24e2bSVaishali Kulkarni u32 iscsi_rq_threshold_cnt; 139*14b24e2bSVaishali Kulkarni u32 iscsi_immq_threshold_cnt; 140*14b24e2bSVaishali Kulkarni 141*14b24e2bSVaishali Kulkarni u64 iscsi_rx_dropped_pdus_task_not_valid; 142*14b24e2bSVaishali Kulkarni 143*14b24e2bSVaishali Kulkarni u64 iscsi_rx_data_pdu_cnt; 144*14b24e2bSVaishali Kulkarni u64 iscsi_rx_r2t_pdu_cnt; 145*14b24e2bSVaishali Kulkarni u64 iscsi_rx_total_pdu_cnt; 146*14b24e2bSVaishali Kulkarni 147*14b24e2bSVaishali Kulkarni u64 iscsi_tx_go_to_slow_start_event_cnt; 148*14b24e2bSVaishali Kulkarni u64 iscsi_tx_fast_retransmit_event_cnt; 149*14b24e2bSVaishali Kulkarni 150*14b24e2bSVaishali Kulkarni u64 iscsi_tx_data_pdu_cnt; 151*14b24e2bSVaishali Kulkarni u64 iscsi_tx_r2t_pdu_cnt; 152*14b24e2bSVaishali Kulkarni u64 iscsi_tx_total_pdu_cnt; 153*14b24e2bSVaishali Kulkarni 154*14b24e2bSVaishali Kulkarni u64 iscsi_tx_bytes_cnt; 155*14b24e2bSVaishali Kulkarni u64 iscsi_tx_packet_cnt; 156*14b24e2bSVaishali Kulkarni }; 157*14b24e2bSVaishali Kulkarni #endif 158*14b24e2bSVaishali Kulkarni 159*14b24e2bSVaishali Kulkarni /** 160*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_acquire_connection - allocate resources, 161*14b24e2bSVaishali Kulkarni * provides connecion handle (CID)as out parameter. 162*14b24e2bSVaishali Kulkarni * 163*14b24e2bSVaishali Kulkarni * @param p_path 164*14b24e2bSVaishali Kulkarni * @param p_conn partially initialized incoming container of 165*14b24e2bSVaishali Kulkarni * iSCSI connection data 166*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 167*14b24e2bSVaishali Kulkarni */ 168*14b24e2bSVaishali Kulkarni enum _ecore_status_t 169*14b24e2bSVaishali Kulkarni ecore_iscsi_acquire_connection(struct ecore_hwfn *p_hwfn, 170*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_in_conn, 171*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn **p_out_conn); 172*14b24e2bSVaishali Kulkarni 173*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_db_addr(struct ecore_hwfn *p_hwfn, 174*14b24e2bSVaishali Kulkarni u32 cid); 175*14b24e2bSVaishali Kulkarni 176*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_global_cmdq_cons(struct ecore_hwfn *p_hwfn, 177*14b24e2bSVaishali Kulkarni u8 relative_q_id); 178*14b24e2bSVaishali Kulkarni 179*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_primary_bdq_prod(struct ecore_hwfn *p_hwfn, 180*14b24e2bSVaishali Kulkarni u8 bdq_id); 181*14b24e2bSVaishali Kulkarni 182*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_iscsi_get_secondary_bdq_prod(struct ecore_hwfn *p_hwfn, 183*14b24e2bSVaishali Kulkarni u8 bdq_id); 184*14b24e2bSVaishali Kulkarni 185*14b24e2bSVaishali Kulkarni /** 186*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_offload_connection - offload previously 187*14b24e2bSVaishali Kulkarni * allocated iSCSI connection 188*14b24e2bSVaishali Kulkarni * 189*14b24e2bSVaishali Kulkarni * @param p_path 190*14b24e2bSVaishali Kulkarni * @param p_conn container of iSCSI connection data 191*14b24e2bSVaishali Kulkarni * 192*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 193*14b24e2bSVaishali Kulkarni */ 194*14b24e2bSVaishali Kulkarni enum _ecore_status_t 195*14b24e2bSVaishali Kulkarni ecore_iscsi_offload_connection(struct ecore_hwfn *p_hwfn, 196*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_conn); 197*14b24e2bSVaishali Kulkarni 198*14b24e2bSVaishali Kulkarni /** 199*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_release_connection - deletes connecton 200*14b24e2bSVaishali Kulkarni * resources (incliding container of iSCSI connection 201*14b24e2bSVaishali Kulkarni * data) 202*14b24e2bSVaishali Kulkarni * 203*14b24e2bSVaishali Kulkarni * @param p_path 204*14b24e2bSVaishali Kulkarni * @param p_conn container of iSCSI connection data 205*14b24e2bSVaishali Kulkarni */ 206*14b24e2bSVaishali Kulkarni void ecore_iscsi_release_connection(struct ecore_hwfn *p_hwfn, 207*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_conn); 208*14b24e2bSVaishali Kulkarni 209*14b24e2bSVaishali Kulkarni /** 210*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_terminate_connection - destroys previously 211*14b24e2bSVaishali Kulkarni * offloaded iSCSI connection 212*14b24e2bSVaishali Kulkarni * 213*14b24e2bSVaishali Kulkarni * @param p_path 214*14b24e2bSVaishali Kulkarni * @param p_conn container of iSCSI connection data 215*14b24e2bSVaishali Kulkarni * 216*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 217*14b24e2bSVaishali Kulkarni */ 218*14b24e2bSVaishali Kulkarni enum _ecore_status_t 219*14b24e2bSVaishali Kulkarni ecore_iscsi_terminate_connection(struct ecore_hwfn *p_hwfn, 220*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_conn); 221*14b24e2bSVaishali Kulkarni 222*14b24e2bSVaishali Kulkarni 223*14b24e2bSVaishali Kulkarni /** 224*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_update_connection - updates previously 225*14b24e2bSVaishali Kulkarni * offloaded iSCSI connection 226*14b24e2bSVaishali Kulkarni * 227*14b24e2bSVaishali Kulkarni * 228*14b24e2bSVaishali Kulkarni * @param p_path 229*14b24e2bSVaishali Kulkarni * @param p_conn container of iSCSI connection data 230*14b24e2bSVaishali Kulkarni * 231*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 232*14b24e2bSVaishali Kulkarni */ 233*14b24e2bSVaishali Kulkarni enum _ecore_status_t 234*14b24e2bSVaishali Kulkarni ecore_iscsi_update_connection(struct ecore_hwfn *p_hwfn, 235*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_conn); 236*14b24e2bSVaishali Kulkarni 237*14b24e2bSVaishali Kulkarni /** 238*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_mac_update_connection - updates remote MAC for previously 239*14b24e2bSVaishali Kulkarni * offloaded iSCSI connection 240*14b24e2bSVaishali Kulkarni * 241*14b24e2bSVaishali Kulkarni * 242*14b24e2bSVaishali Kulkarni * @param p_path 243*14b24e2bSVaishali Kulkarni * @param p_conn container of iSCSI connection data 244*14b24e2bSVaishali Kulkarni * 245*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 246*14b24e2bSVaishali Kulkarni */ 247*14b24e2bSVaishali Kulkarni enum _ecore_status_t 248*14b24e2bSVaishali Kulkarni ecore_iscsi_update_remote_mac(struct ecore_hwfn *p_hwfn, 249*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_conn); 250*14b24e2bSVaishali Kulkarni 251*14b24e2bSVaishali Kulkarni /** 252*14b24e2bSVaishali Kulkarni * @brief ecore_iscsi_clear_connection_sq - clear SQ 253*14b24e2bSVaishali Kulkarni * offloaded iSCSI connection 254*14b24e2bSVaishali Kulkarni * 255*14b24e2bSVaishali Kulkarni * 256*14b24e2bSVaishali Kulkarni * @param p_path 257*14b24e2bSVaishali Kulkarni * @param p_conn container of iSCSI connection data 258*14b24e2bSVaishali Kulkarni * 259*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 260*14b24e2bSVaishali Kulkarni */ 261*14b24e2bSVaishali Kulkarni enum _ecore_status_t 262*14b24e2bSVaishali Kulkarni ecore_iscsi_clear_connection_sq(struct ecore_hwfn *p_hwfn, 263*14b24e2bSVaishali Kulkarni struct ecore_iscsi_conn *p_conn); 264*14b24e2bSVaishali Kulkarni 265*14b24e2bSVaishali Kulkarni /** 266*14b24e2bSVaishali Kulkarni * @brief ecore_sp_iscsi_func_start 267*14b24e2bSVaishali Kulkarni * 268*14b24e2bSVaishali Kulkarni * This ramrod inits iSCSI functionality in FW 269*14b24e2bSVaishali Kulkarni * 270*14b24e2bSVaishali Kulkarni * @param p_path 271*14b24e2bSVaishali Kulkarni * @param comp_mode 272*14b24e2bSVaishali Kulkarni * @param comp_addr 273*14b24e2bSVaishali Kulkarni * 274*14b24e2bSVaishali Kulkarni * @return enum _ecore_status_t 275*14b24e2bSVaishali Kulkarni */ 276*14b24e2bSVaishali Kulkarni enum _ecore_status_t 277*14b24e2bSVaishali Kulkarni ecore_sp_iscsi_func_start(struct ecore_hwfn *p_hwfn, 278*14b24e2bSVaishali Kulkarni enum spq_mode comp_mode, 279*14b24e2bSVaishali Kulkarni struct ecore_spq_comp_cb *p_comp_addr, 280*14b24e2bSVaishali Kulkarni void *async_event_context, 281*14b24e2bSVaishali Kulkarni iscsi_event_cb_t async_event_cb); 282*14b24e2bSVaishali Kulkarni 283*14b24e2bSVaishali Kulkarni enum _ecore_status_t 284*14b24e2bSVaishali Kulkarni ecore_sp_iscsi_func_stop(struct ecore_hwfn *p_hwfn, 285*14b24e2bSVaishali Kulkarni enum spq_mode comp_mode, 286*14b24e2bSVaishali Kulkarni struct ecore_spq_comp_cb *p_comp_addr); 287*14b24e2bSVaishali Kulkarni 288*14b24e2bSVaishali Kulkarni enum _ecore_status_t 289*14b24e2bSVaishali Kulkarni ecore_iscsi_get_stats(struct ecore_hwfn *p_hwfn, 290*14b24e2bSVaishali Kulkarni struct ecore_iscsi_stats *stats); 291*14b24e2bSVaishali Kulkarni 292*14b24e2bSVaishali Kulkarni #endif 293