ctl_frontend_iscsi.h revision 265509
1274955Ssvnmir/*- 2274955Ssvnmir * Copyright (c) 2012 The FreeBSD Foundation 3274955Ssvnmir * All rights reserved. 4274955Ssvnmir * 5274955Ssvnmir * This software was developed by Edward Tomasz Napierala under sponsorship 6274955Ssvnmir * from the FreeBSD Foundation. 7274955Ssvnmir * 8274955Ssvnmir * Redistribution and use in source and binary forms, with or without 9274955Ssvnmir * modification, are permitted provided that the following conditions 10274955Ssvnmir * are met: 11274955Ssvnmir * 1. Redistributions of source code must retain the above copyright 12274955Ssvnmir * notice, this list of conditions and the following disclaimer. 13274955Ssvnmir * 2. Redistributions in binary form must reproduce the above copyright 14274955Ssvnmir * notice, this list of conditions and the following disclaimer in the 15274955Ssvnmir * documentation and/or other materials provided with the distribution. 16274955Ssvnmir * 17274955Ssvnmir * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18274955Ssvnmir * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19274955Ssvnmir * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20274955Ssvnmir * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21274955Ssvnmir * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22274955Ssvnmir * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23274955Ssvnmir * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24274955Ssvnmir * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25274955Ssvnmir * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26274955Ssvnmir * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27274955Ssvnmir * SUCH DAMAGE. 28274955Ssvnmir * 29274955Ssvnmir * $FreeBSD: stable/10/sys/cam/ctl/ctl_frontend_iscsi.h 265509 2014-05-07 07:32:45Z trasz $ 30274955Ssvnmir */ 31274955Ssvnmir 32274955Ssvnmir#ifndef CTL_FRONTEND_ISCSI_H 33274955Ssvnmir#define CTL_FRONTEND_ISCSI_H 34274955Ssvnmir 35274955Ssvnmirstruct cfiscsi_target { 36274955Ssvnmir TAILQ_ENTRY(cfiscsi_target) ct_next; 37274955Ssvnmir int ct_luns[CTL_MAX_LUNS]; 38274955Ssvnmir struct cfiscsi_softc *ct_softc; 39274955Ssvnmir volatile u_int ct_refcount; 40274955Ssvnmir char ct_name[CTL_ISCSI_NAME_LEN]; 41274955Ssvnmir char ct_alias[CTL_ISCSI_ALIAS_LEN]; 42274955Ssvnmir}; 43274955Ssvnmir 44274955Ssvnmirstruct cfiscsi_data_wait { 45274955Ssvnmir TAILQ_ENTRY(cfiscsi_data_wait) cdw_next; 46274955Ssvnmir union ctl_io *cdw_ctl_io; 47274955Ssvnmir uint32_t cdw_target_transfer_tag; 48274955Ssvnmir uint32_t cdw_initiator_task_tag; 49274955Ssvnmir int cdw_sg_index; 50274955Ssvnmir char *cdw_sg_addr; 51274955Ssvnmir size_t cdw_sg_len; 52274955Ssvnmir}; 53274955Ssvnmir 54274955Ssvnmir#define CFISCSI_SESSION_STATE_INVALID 0 55274955Ssvnmir#define CFISCSI_SESSION_STATE_BHS 1 56274955Ssvnmir#define CFISCSI_SESSION_STATE_AHS 2 57274955Ssvnmir#define CFISCSI_SESSION_STATE_HEADER_DIGEST 3 58274955Ssvnmir#define CFISCSI_SESSION_STATE_DATA 4 59274955Ssvnmir#define CFISCSI_SESSION_STATE_DATA_DIGEST 5 60274955Ssvnmir 61274955Ssvnmirstruct cfiscsi_session { 62274955Ssvnmir TAILQ_ENTRY(cfiscsi_session) cs_next; 63274955Ssvnmir struct mtx cs_lock; 64274955Ssvnmir struct icl_conn *cs_conn; 65274955Ssvnmir uint32_t cs_cmdsn; 66274955Ssvnmir uint32_t cs_statsn; 67280031Sdim uint32_t cs_target_transfer_tag; 68274955Ssvnmir volatile u_int cs_outstanding_ctl_pdus; 69274955Ssvnmir TAILQ_HEAD(, cfiscsi_data_wait) cs_waiting_for_data_out; 70274955Ssvnmir struct cfiscsi_target *cs_target; 71274955Ssvnmir struct callout cs_callout; 72274955Ssvnmir int cs_timeout; 73274955Ssvnmir int cs_portal_group_tag; 74274955Ssvnmir struct cv cs_maintenance_cv; 75274955Ssvnmir int cs_terminating; 76274955Ssvnmir size_t cs_max_data_segment_length; 77274955Ssvnmir size_t cs_max_burst_length; 78274955Ssvnmir bool cs_immediate_data; 79274955Ssvnmir char cs_initiator_name[CTL_ISCSI_NAME_LEN]; 80274955Ssvnmir char cs_initiator_addr[CTL_ISCSI_ADDR_LEN]; 81274955Ssvnmir char cs_initiator_alias[CTL_ISCSI_ALIAS_LEN]; 82274955Ssvnmir unsigned int cs_id; 83274955Ssvnmir int cs_ctl_initid; 84274955Ssvnmir#ifdef ICL_KERNEL_PROXY 85274955Ssvnmir int cs_portal_id; 86274955Ssvnmir bool cs_login_phase; 87274955Ssvnmir bool cs_waiting_for_ctld; 88274955Ssvnmir struct cv cs_login_cv; 89274955Ssvnmir struct icl_pdu *cs_login_pdu; 90274955Ssvnmir#endif 91274955Ssvnmir}; 92274955Ssvnmir 93274955Ssvnmir#ifdef ICL_KERNEL_PROXY 94274955Ssvnmirstruct icl_listen; 95274955Ssvnmir#endif 96274955Ssvnmir 97274955Ssvnmirstruct cfiscsi_softc { 98274955Ssvnmir struct ctl_frontend fe; 99274955Ssvnmir struct mtx lock; 100274955Ssvnmir char port_name[32]; 101274955Ssvnmir int online; 102274955Ssvnmir unsigned int last_session_id; 103274955Ssvnmir TAILQ_HEAD(, cfiscsi_target) targets; 104274955Ssvnmir TAILQ_HEAD(, cfiscsi_session) sessions; 105274955Ssvnmir char ctl_initids[CTL_MAX_INIT_PER_PORT]; 106274955Ssvnmir int max_initiators; 107274955Ssvnmir#ifdef ICL_KERNEL_PROXY 108274955Ssvnmir struct icl_listen *listener; 109274955Ssvnmir struct cv accept_cv; 110274955Ssvnmir#endif 111274955Ssvnmir}; 112274955Ssvnmir 113274955Ssvnmir#endif /* !CTL_FRONTEND_ISCSI_H */ 114274955Ssvnmir