1 /* 2 * Copyright (c) 2017-2018 Cavium, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 * 29 */ 30 31 #ifndef __ECORE_ISCSI_H__ 32 #define __ECORE_ISCSI_H__ 33 34 #include "ecore.h" 35 #include "ecore_chain.h" 36 #include "ecore_hsi_common.h" 37 #include "tcp_common.h" 38 #include "ecore_hsi_iscsi.h" 39 #include "ecore_sp_commands.h" 40 #include "ecore_iscsi_api.h" 41 42 #ifndef __EXTRACT__LINUX__H__ 43 struct ecore_iscsi_info { 44 osal_spinlock_t lock; 45 osal_list_t free_list; 46 u16 max_num_outstanding_tasks; 47 void *event_context; 48 iscsi_event_cb_t event_cb; 49 }; 50 51 #ifdef CONFIG_ECORE_ISCSI 52 enum _ecore_status_t ecore_iscsi_alloc(struct ecore_hwfn *p_hwfn); 53 54 void ecore_iscsi_setup(struct ecore_hwfn *p_hwfn); 55 56 void ecore_iscsi_free(struct ecore_hwfn *p_hwfn); 57 #else 58 static inline enum _ecore_status_t 59 ecore_iscsi_alloc(struct ecore_hwfn OSAL_UNUSED *p_hwfn) 60 { 61 return ECORE_INVAL; 62 } 63 64 static inline void 65 ecore_iscsi_setup(struct ecore_hwfn OSAL_UNUSED *p_hwfn) {} 66 67 static inline void 68 ecore_iscsi_free(struct ecore_hwfn OSAL_UNUSED *p_hwfn) {} 69 #endif 70 #endif 71 72 void ecore_iscsi_free_connection(struct ecore_hwfn *p_hwfn, 73 struct ecore_iscsi_conn *p_conn); 74 75 /** 76 * @brief ecore_sp_iscsi_conn_offload - iSCSI connection offload 77 * 78 * This ramrod offloads iSCSI connection to FW 79 * 80 * @param p_path 81 * @param p_conn 82 * @param comp_mode 83 * @param comp_addr 84 * 85 * @return enum _ecore_status_t 86 */ 87 enum _ecore_status_t 88 ecore_sp_iscsi_conn_offload(struct ecore_hwfn *p_hwfn, 89 struct ecore_iscsi_conn *p_conn, 90 enum spq_mode comp_mode, 91 struct ecore_spq_comp_cb *p_comp_addr); 92 93 /** 94 * @brief ecore_sp_iscsi_conn_update - iSCSI connection update 95 * 96 * This ramrod updatess iSCSI ofloadedconnection in FW 97 * 98 * @param p_path 99 * @param p_conn 100 * @param comp_mode 101 * @param comp_addr 102 * 103 * @return enum _ecore_status_t 104 */ 105 enum _ecore_status_t 106 ecore_sp_iscsi_conn_update(struct ecore_hwfn *p_hwfn, 107 struct ecore_iscsi_conn *p_conn, 108 enum spq_mode comp_mode, 109 struct ecore_spq_comp_cb *p_comp_addr); 110 111 /** 112 * @brief ecore_sp_iscsi_mac_update - iSCSI connection's MAC update 113 * 114 * This ramrod updates remote MAC for iSCSI offloaded connection in FW 115 * 116 * @param p_path 117 * @param p_conn 118 * @param comp_mode 119 * @param comp_addr 120 * 121 * @return enum _ecore_status_t 122 */ 123 enum _ecore_status_t 124 ecore_sp_iscsi_mac_update(struct ecore_hwfn *p_hwfn, 125 struct ecore_iscsi_conn *p_conn, 126 enum spq_mode comp_mode, 127 struct ecore_spq_comp_cb *p_comp_addr); 128 129 /** 130 * @brief ecore_sp_iscsi_mac_update - iSCSI connection's MAC update 131 * 132 * This ramrod updates remote MAC for iSCSI offloaded connection in FW 133 * 134 * @param p_path 135 * @param p_conn 136 * @param reset 137 * @param comp_mode 138 * @param comp_addr 139 * 140 * @return enum _ecore_status_t 141 */ 142 enum _ecore_status_t 143 ecore_sp_iscsi_stats_tcp_update(struct ecore_hwfn *p_hwfn, 144 struct ecore_iscsi_conn *p_conn, 145 bool reset, 146 enum spq_mode comp_mode, 147 struct ecore_spq_comp_cb *p_comp_addr); 148 149 /** 150 * @brief ecore_sp_iscsi_conn_terminate - iSCSI connection 151 * terminate 152 * 153 * This ramrod deletes iSCSI offloaded connection in FW 154 * 155 * @param p_path 156 * @param p_conn 157 * @param comp_mode 158 * @param comp_addr 159 * 160 * @return enum _ecore_status_t 161 */ 162 enum _ecore_status_t 163 ecore_sp_iscsi_conn_terminate(struct ecore_hwfn *p_hwfn, 164 struct ecore_iscsi_conn *p_conn, 165 enum spq_mode comp_mode, 166 struct ecore_spq_comp_cb *p_comp_addr); 167 168 /** 169 * @brief ecore_sp_iscsi_conn_clear_sq - iSCSI connection 170 * clear SQ 171 * 172 * This ramrod clears connection's SQ in FW 173 * 174 * @param p_path 175 * @param p_conn 176 * @param comp_mode 177 * @param comp_addr 178 * 179 * @return enum _ecore_status_t 180 */ 181 enum _ecore_status_t 182 ecore_sp_iscsi_conn_clear_sq(struct ecore_hwfn *p_hwfn, 183 struct ecore_iscsi_conn *p_conn, 184 enum spq_mode comp_mode, 185 struct ecore_spq_comp_cb *p_comp_addr); 186 187 #endif /*__ECORE_ISCSI_H__*/ 188