1009ea47eSEdward Tomasz Napierala /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3bec9534dSPedro F. Giffuni * 4009ea47eSEdward Tomasz Napierala * Copyright (c) 2012 The FreeBSD Foundation 5009ea47eSEdward Tomasz Napierala * 6009ea47eSEdward Tomasz Napierala * This software was developed by Edward Tomasz Napierala under sponsorship 7009ea47eSEdward Tomasz Napierala * from the FreeBSD Foundation. 8009ea47eSEdward Tomasz Napierala * 9009ea47eSEdward Tomasz Napierala * Redistribution and use in source and binary forms, with or without 10009ea47eSEdward Tomasz Napierala * modification, are permitted provided that the following conditions 11009ea47eSEdward Tomasz Napierala * are met: 12009ea47eSEdward Tomasz Napierala * 1. Redistributions of source code must retain the above copyright 13009ea47eSEdward Tomasz Napierala * notice, this list of conditions and the following disclaimer. 14009ea47eSEdward Tomasz Napierala * 2. Redistributions in binary form must reproduce the above copyright 15009ea47eSEdward Tomasz Napierala * notice, this list of conditions and the following disclaimer in the 16009ea47eSEdward Tomasz Napierala * documentation and/or other materials provided with the distribution. 17009ea47eSEdward Tomasz Napierala * 18009ea47eSEdward Tomasz Napierala * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19009ea47eSEdward Tomasz Napierala * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20009ea47eSEdward Tomasz Napierala * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21009ea47eSEdward Tomasz Napierala * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22009ea47eSEdward Tomasz Napierala * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23009ea47eSEdward Tomasz Napierala * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24009ea47eSEdward Tomasz Napierala * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25009ea47eSEdward Tomasz Napierala * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26009ea47eSEdward Tomasz Napierala * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27009ea47eSEdward Tomasz Napierala * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28009ea47eSEdward Tomasz Napierala * SUCH DAMAGE. 29009ea47eSEdward Tomasz Napierala */ 30009ea47eSEdward Tomasz Napierala 31009ea47eSEdward Tomasz Napierala #ifndef CTL_FRONTEND_ISCSI_H 32009ea47eSEdward Tomasz Napierala #define CTL_FRONTEND_ISCSI_H 33009ea47eSEdward Tomasz Napierala 34917d38fbSAlexander Motin #define CFISCSI_TARGET_STATE_INVALID 0 35917d38fbSAlexander Motin #define CFISCSI_TARGET_STATE_ACTIVE 1 36917d38fbSAlexander Motin #define CFISCSI_TARGET_STATE_DYING 2 37917d38fbSAlexander Motin 38009ea47eSEdward Tomasz Napierala struct cfiscsi_target { 39009ea47eSEdward Tomasz Napierala TAILQ_ENTRY(cfiscsi_target) ct_next; 40009ea47eSEdward Tomasz Napierala struct cfiscsi_softc *ct_softc; 41009ea47eSEdward Tomasz Napierala volatile u_int ct_refcount; 42009ea47eSEdward Tomasz Napierala char ct_name[CTL_ISCSI_NAME_LEN]; 43009ea47eSEdward Tomasz Napierala char ct_alias[CTL_ISCSI_ALIAS_LEN]; 446b31e130SAlexander Motin uint16_t ct_tag; 45917d38fbSAlexander Motin int ct_state; 46917d38fbSAlexander Motin int ct_online; 479045dbb2SAlexander Motin int ct_target_id; 48917d38fbSAlexander Motin struct ctl_port ct_port; 49009ea47eSEdward Tomasz Napierala }; 50009ea47eSEdward Tomasz Napierala 51009ea47eSEdward Tomasz Napierala struct cfiscsi_data_wait { 52009ea47eSEdward Tomasz Napierala TAILQ_ENTRY(cfiscsi_data_wait) cdw_next; 53009ea47eSEdward Tomasz Napierala union ctl_io *cdw_ctl_io; 54009ea47eSEdward Tomasz Napierala uint32_t cdw_target_transfer_tag; 55009ea47eSEdward Tomasz Napierala uint32_t cdw_initiator_task_tag; 56009ea47eSEdward Tomasz Napierala int cdw_sg_index; 57009ea47eSEdward Tomasz Napierala char *cdw_sg_addr; 58009ea47eSEdward Tomasz Napierala size_t cdw_sg_len; 5904f10b6cSAlexander Motin uint32_t cdw_r2t_end; 602124e3b0SAlexander Motin uint32_t cdw_datasn; 617a03d007SEdward Tomasz Napierala void *cdw_icl_prv; 62009ea47eSEdward Tomasz Napierala }; 63009ea47eSEdward Tomasz Napierala 64009ea47eSEdward Tomasz Napierala #define CFISCSI_SESSION_STATE_INVALID 0 65009ea47eSEdward Tomasz Napierala #define CFISCSI_SESSION_STATE_BHS 1 66009ea47eSEdward Tomasz Napierala #define CFISCSI_SESSION_STATE_AHS 2 67009ea47eSEdward Tomasz Napierala #define CFISCSI_SESSION_STATE_HEADER_DIGEST 3 68009ea47eSEdward Tomasz Napierala #define CFISCSI_SESSION_STATE_DATA 4 69009ea47eSEdward Tomasz Napierala #define CFISCSI_SESSION_STATE_DATA_DIGEST 5 70009ea47eSEdward Tomasz Napierala 71009ea47eSEdward Tomasz Napierala struct cfiscsi_session { 72009ea47eSEdward Tomasz Napierala TAILQ_ENTRY(cfiscsi_session) cs_next; 73009ea47eSEdward Tomasz Napierala struct mtx cs_lock; 74009ea47eSEdward Tomasz Napierala struct icl_conn *cs_conn; 75009ea47eSEdward Tomasz Napierala uint32_t cs_cmdsn; 76009ea47eSEdward Tomasz Napierala uint32_t cs_statsn; 77009ea47eSEdward Tomasz Napierala uint32_t cs_target_transfer_tag; 78009ea47eSEdward Tomasz Napierala volatile u_int cs_outstanding_ctl_pdus; 79009ea47eSEdward Tomasz Napierala TAILQ_HEAD(, cfiscsi_data_wait) cs_waiting_for_data_out; 80009ea47eSEdward Tomasz Napierala struct cfiscsi_target *cs_target; 81009ea47eSEdward Tomasz Napierala struct callout cs_callout; 82009ea47eSEdward Tomasz Napierala int cs_timeout; 83009ea47eSEdward Tomasz Napierala struct cv cs_maintenance_cv; 842af142caSEdward Tomasz Napierala bool cs_terminating; 85a3af69faSJohn Baldwin bool cs_terminating_tasks; 866616539dSEdward Tomasz Napierala bool cs_handoff_in_progress; 872c6c9e47SAlexander Motin bool cs_tasks_aborted; 8897b84d34SNavdeep Parhar int cs_max_burst_length; 8997b84d34SNavdeep Parhar int cs_first_burst_length; 90009ea47eSEdward Tomasz Napierala bool cs_immediate_data; 91009ea47eSEdward Tomasz Napierala char cs_initiator_name[CTL_ISCSI_NAME_LEN]; 92009ea47eSEdward Tomasz Napierala char cs_initiator_addr[CTL_ISCSI_ADDR_LEN]; 93009ea47eSEdward Tomasz Napierala char cs_initiator_alias[CTL_ISCSI_ALIAS_LEN]; 946d81c129SAlexander Motin char cs_initiator_isid[6]; 956d81c129SAlexander Motin char cs_initiator_id[CTL_ISCSI_NAME_LEN + 5 + 6 + 1]; 96009ea47eSEdward Tomasz Napierala unsigned int cs_id; 97009ea47eSEdward Tomasz Napierala int cs_ctl_initid; 98009ea47eSEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY 998eab95d6SEdward Tomasz Napierala struct sockaddr *cs_initiator_sa; 1008cab2ed4SEdward Tomasz Napierala int cs_portal_id; 101009ea47eSEdward Tomasz Napierala bool cs_login_phase; 102009ea47eSEdward Tomasz Napierala bool cs_waiting_for_ctld; 103009ea47eSEdward Tomasz Napierala struct cv cs_login_cv; 104009ea47eSEdward Tomasz Napierala struct icl_pdu *cs_login_pdu; 105009ea47eSEdward Tomasz Napierala #endif 106009ea47eSEdward Tomasz Napierala }; 107009ea47eSEdward Tomasz Napierala 108009ea47eSEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY 109009ea47eSEdward Tomasz Napierala struct icl_listen; 110009ea47eSEdward Tomasz Napierala #endif 111009ea47eSEdward Tomasz Napierala 112009ea47eSEdward Tomasz Napierala struct cfiscsi_softc { 113009ea47eSEdward Tomasz Napierala struct mtx lock; 114009ea47eSEdward Tomasz Napierala char port_name[32]; 115009ea47eSEdward Tomasz Napierala int online; 1169045dbb2SAlexander Motin int last_target_id; 117009ea47eSEdward Tomasz Napierala unsigned int last_session_id; 118009ea47eSEdward Tomasz Napierala TAILQ_HEAD(, cfiscsi_target) targets; 119009ea47eSEdward Tomasz Napierala TAILQ_HEAD(, cfiscsi_session) sessions; 1206f58afedSAlexander Motin struct cv sessions_cv; 121009ea47eSEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY 122009ea47eSEdward Tomasz Napierala struct icl_listen *listener; 123009ea47eSEdward Tomasz Napierala struct cv accept_cv; 124009ea47eSEdward Tomasz Napierala #endif 125009ea47eSEdward Tomasz Napierala }; 126009ea47eSEdward Tomasz Napierala 127009ea47eSEdward Tomasz Napierala #endif /* !CTL_FRONTEND_ISCSI_H */ 128