1*9162SPeter.Dunlap@Sun.COM /* 2*9162SPeter.Dunlap@Sun.COM * CDDL HEADER START 3*9162SPeter.Dunlap@Sun.COM * 4*9162SPeter.Dunlap@Sun.COM * The contents of this file are subject to the terms of the 5*9162SPeter.Dunlap@Sun.COM * Common Development and Distribution License (the "License"). 6*9162SPeter.Dunlap@Sun.COM * You may not use this file except in compliance with the License. 7*9162SPeter.Dunlap@Sun.COM * 8*9162SPeter.Dunlap@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*9162SPeter.Dunlap@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*9162SPeter.Dunlap@Sun.COM * See the License for the specific language governing permissions 11*9162SPeter.Dunlap@Sun.COM * and limitations under the License. 12*9162SPeter.Dunlap@Sun.COM * 13*9162SPeter.Dunlap@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*9162SPeter.Dunlap@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*9162SPeter.Dunlap@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*9162SPeter.Dunlap@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*9162SPeter.Dunlap@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*9162SPeter.Dunlap@Sun.COM * 19*9162SPeter.Dunlap@Sun.COM * CDDL HEADER END 20*9162SPeter.Dunlap@Sun.COM */ 21*9162SPeter.Dunlap@Sun.COM /* 22*9162SPeter.Dunlap@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*9162SPeter.Dunlap@Sun.COM * Use is subject to license terms. 24*9162SPeter.Dunlap@Sun.COM */ 25*9162SPeter.Dunlap@Sun.COM 26*9162SPeter.Dunlap@Sun.COM #ifndef _ISER_XFER_H 27*9162SPeter.Dunlap@Sun.COM #define _ISER_XFER_H 28*9162SPeter.Dunlap@Sun.COM 29*9162SPeter.Dunlap@Sun.COM #ifdef __cplusplus 30*9162SPeter.Dunlap@Sun.COM extern "C" { 31*9162SPeter.Dunlap@Sun.COM #endif 32*9162SPeter.Dunlap@Sun.COM 33*9162SPeter.Dunlap@Sun.COM #include <sys/types.h> 34*9162SPeter.Dunlap@Sun.COM #include <sys/ib/ibtl/ibti.h> 35*9162SPeter.Dunlap@Sun.COM #include <sys/ib/ibtl/ibtl_types.h> 36*9162SPeter.Dunlap@Sun.COM #include <sys/iscsi_protocol.h> 37*9162SPeter.Dunlap@Sun.COM 38*9162SPeter.Dunlap@Sun.COM /* 39*9162SPeter.Dunlap@Sun.COM * iser_xfer.h 40*9162SPeter.Dunlap@Sun.COM * Definitions and functions related to data transfer across the RC channel 41*9162SPeter.Dunlap@Sun.COM * This includes the posting of the Hello Message, the HelloReply Message, the 42*9162SPeter.Dunlap@Sun.COM * RC Send Message for the iSCSI Control PDU. 43*9162SPeter.Dunlap@Sun.COM */ 44*9162SPeter.Dunlap@Sun.COM 45*9162SPeter.Dunlap@Sun.COM /* 46*9162SPeter.Dunlap@Sun.COM * iser_private_data_s contains parameters relating to the iSER connection and 47*9162SPeter.Dunlap@Sun.COM * IB options support status. This data conforms to the 'iSER CM REQ Message 48*9162SPeter.Dunlap@Sun.COM * Private Data Format' from the Annex A12 - Support for iSCSI Extensions for 49*9162SPeter.Dunlap@Sun.COM * RDMA. 50*9162SPeter.Dunlap@Sun.COM */ 51*9162SPeter.Dunlap@Sun.COM #pragma pack(1) 52*9162SPeter.Dunlap@Sun.COM typedef struct iser_private_data_s { 53*9162SPeter.Dunlap@Sun.COM uint8_t ip_pvt[IBT_IP_HDR_PRIV_DATA_SZ]; 54*9162SPeter.Dunlap@Sun.COM #if defined(_BIT_FIELDS_LTOH) 55*9162SPeter.Dunlap@Sun.COM uint32_t rsvd1 :30, 56*9162SPeter.Dunlap@Sun.COM sie :1, 57*9162SPeter.Dunlap@Sun.COM zbvae :1; 58*9162SPeter.Dunlap@Sun.COM #elif defined(_BIT_FIELDS_HTOL) 59*9162SPeter.Dunlap@Sun.COM uint32_t zbvae :1, 60*9162SPeter.Dunlap@Sun.COM sie :1, 61*9162SPeter.Dunlap@Sun.COM rsvd1 :30; 62*9162SPeter.Dunlap@Sun.COM #else 63*9162SPeter.Dunlap@Sun.COM #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 64*9162SPeter.Dunlap@Sun.COM #endif /* _BIT_FIELDS_LTOH */ 65*9162SPeter.Dunlap@Sun.COM uint8_t rsvd2[52]; 66*9162SPeter.Dunlap@Sun.COM } iser_private_data_t; 67*9162SPeter.Dunlap@Sun.COM 68*9162SPeter.Dunlap@Sun.COM /* iSER Message Opcodes */ 69*9162SPeter.Dunlap@Sun.COM #define ISER_OPCODE_CTRL_TYPE_PDU 1 70*9162SPeter.Dunlap@Sun.COM #define ISER_OPCODE_HELLO_MSG 2 71*9162SPeter.Dunlap@Sun.COM #define ISER_OPCODE_HELLOREPLY_MSG 3 72*9162SPeter.Dunlap@Sun.COM 73*9162SPeter.Dunlap@Sun.COM /* 74*9162SPeter.Dunlap@Sun.COM * When ZBVA is not supported, both the initiator and the target shall use the 75*9162SPeter.Dunlap@Sun.COM * expanded iSER header as defined in the IB Spec Table 540 for iSCSI control- 76*9162SPeter.Dunlap@Sun.COM * type PDUs in the connection 77*9162SPeter.Dunlap@Sun.COM */ 78*9162SPeter.Dunlap@Sun.COM typedef struct iser_ctrl_hdr_s { 79*9162SPeter.Dunlap@Sun.COM #if defined(_BIT_FIELDS_LTOH) 80*9162SPeter.Dunlap@Sun.COM uint8_t rsvd1: 2, 81*9162SPeter.Dunlap@Sun.COM rsv_flag: 1, /* RStag valid bit */ 82*9162SPeter.Dunlap@Sun.COM wsv_flag: 1, /* WStag valid bit */ 83*9162SPeter.Dunlap@Sun.COM opcode: 4; /* iSER opcode */ 84*9162SPeter.Dunlap@Sun.COM uint8_t rsvd[3]; 85*9162SPeter.Dunlap@Sun.COM #elif defined(_BIT_FIELDS_HTOL) 86*9162SPeter.Dunlap@Sun.COM uint8_t opcode: 4, 87*9162SPeter.Dunlap@Sun.COM wsv_flag: 1, 88*9162SPeter.Dunlap@Sun.COM rsv_flag: 1, 89*9162SPeter.Dunlap@Sun.COM rsvd1: 2; 90*9162SPeter.Dunlap@Sun.COM uint8_t rsvd[3]; 91*9162SPeter.Dunlap@Sun.COM #else 92*9162SPeter.Dunlap@Sun.COM #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 93*9162SPeter.Dunlap@Sun.COM #endif /* _BIT_FIELDS_LTOH */ 94*9162SPeter.Dunlap@Sun.COM uint32_t wstag; /* IB R-key for SCSI Write */ 95*9162SPeter.Dunlap@Sun.COM uint64_t wva; /* IB VA for SCSI Write */ 96*9162SPeter.Dunlap@Sun.COM uint32_t rstag; /* IB R-key for SCSI Read */ 97*9162SPeter.Dunlap@Sun.COM uint64_t rva; /* IB VA for SCSI Read */ 98*9162SPeter.Dunlap@Sun.COM } iser_ctrl_hdr_t; 99*9162SPeter.Dunlap@Sun.COM 100*9162SPeter.Dunlap@Sun.COM /* iSER Header Format for the iSER Hello Message */ 101*9162SPeter.Dunlap@Sun.COM typedef struct iser_hello_hdr_s { 102*9162SPeter.Dunlap@Sun.COM #if defined(_BIT_FIELDS_LTOH) 103*9162SPeter.Dunlap@Sun.COM uint8_t rsvd1 : 4, 104*9162SPeter.Dunlap@Sun.COM opcode : 4; 105*9162SPeter.Dunlap@Sun.COM uint8_t minver : 4, 106*9162SPeter.Dunlap@Sun.COM maxver : 4; 107*9162SPeter.Dunlap@Sun.COM #elif defined(_BIT_FIELDS_HTOL) 108*9162SPeter.Dunlap@Sun.COM uint8_t opcode : 4, 109*9162SPeter.Dunlap@Sun.COM rsvd1 : 4; 110*9162SPeter.Dunlap@Sun.COM uint8_t maxver : 4, 111*9162SPeter.Dunlap@Sun.COM minver : 4; 112*9162SPeter.Dunlap@Sun.COM #else 113*9162SPeter.Dunlap@Sun.COM #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 114*9162SPeter.Dunlap@Sun.COM #endif /* _BIT_FIELDS_LTOH */ 115*9162SPeter.Dunlap@Sun.COM uint16_t iser_ird; 116*9162SPeter.Dunlap@Sun.COM uint32_t rsvd2[2]; 117*9162SPeter.Dunlap@Sun.COM } iser_hello_hdr_t; 118*9162SPeter.Dunlap@Sun.COM 119*9162SPeter.Dunlap@Sun.COM /* iSER Header Format for the iSER HelloReply Message */ 120*9162SPeter.Dunlap@Sun.COM typedef struct iser_helloreply_hdr_s { 121*9162SPeter.Dunlap@Sun.COM #if defined(_BIT_FIELDS_LTOH) 122*9162SPeter.Dunlap@Sun.COM uint8_t flag : 1, 123*9162SPeter.Dunlap@Sun.COM rsvd1 : 3, 124*9162SPeter.Dunlap@Sun.COM opcode : 4; 125*9162SPeter.Dunlap@Sun.COM uint8_t curver : 4, 126*9162SPeter.Dunlap@Sun.COM maxver : 4; 127*9162SPeter.Dunlap@Sun.COM #elif defined(_BIT_FIELDS_HTOL) 128*9162SPeter.Dunlap@Sun.COM uint8_t opcode : 4, 129*9162SPeter.Dunlap@Sun.COM rsvd1 : 3, 130*9162SPeter.Dunlap@Sun.COM flag : 1; 131*9162SPeter.Dunlap@Sun.COM uint8_t maxver : 4, 132*9162SPeter.Dunlap@Sun.COM curver : 4; 133*9162SPeter.Dunlap@Sun.COM #else 134*9162SPeter.Dunlap@Sun.COM #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 135*9162SPeter.Dunlap@Sun.COM #endif /* _BIT_FIELDS_LTOH */ 136*9162SPeter.Dunlap@Sun.COM uint16_t iser_ord; 137*9162SPeter.Dunlap@Sun.COM uint32_t rsvd2[2]; 138*9162SPeter.Dunlap@Sun.COM } iser_helloreply_hdr_t; 139*9162SPeter.Dunlap@Sun.COM #pragma pack() 140*9162SPeter.Dunlap@Sun.COM 141*9162SPeter.Dunlap@Sun.COM struct iser_state_s; 142*9162SPeter.Dunlap@Sun.COM 143*9162SPeter.Dunlap@Sun.COM int iser_xfer_hello_msg(iser_chan_t *chan); 144*9162SPeter.Dunlap@Sun.COM 145*9162SPeter.Dunlap@Sun.COM int iser_xfer_helloreply_msg(iser_chan_t *chan); 146*9162SPeter.Dunlap@Sun.COM 147*9162SPeter.Dunlap@Sun.COM int iser_xfer_ctrlpdu(iser_chan_t *chan, idm_pdu_t *pdu); 148*9162SPeter.Dunlap@Sun.COM 149*9162SPeter.Dunlap@Sun.COM int iser_xfer_buf_to_ini(idm_task_t *idt, idm_buf_t *buf); 150*9162SPeter.Dunlap@Sun.COM 151*9162SPeter.Dunlap@Sun.COM int iser_xfer_buf_from_ini(idm_task_t *idt, idm_buf_t *buf); 152*9162SPeter.Dunlap@Sun.COM 153*9162SPeter.Dunlap@Sun.COM #ifdef __cplusplus 154*9162SPeter.Dunlap@Sun.COM } 155*9162SPeter.Dunlap@Sun.COM #endif 156*9162SPeter.Dunlap@Sun.COM 157*9162SPeter.Dunlap@Sun.COM #endif /* _ISER_XFER_H */ 158