19829SCharles.Ting@Sun.COM /* 29829SCharles.Ting@Sun.COM * CDDL HEADER START 39829SCharles.Ting@Sun.COM * 49829SCharles.Ting@Sun.COM * The contents of this file are subject to the terms of the 59829SCharles.Ting@Sun.COM * Common Development and Distribution License (the "License"). 69829SCharles.Ting@Sun.COM * You may not use this file except in compliance with the License. 79829SCharles.Ting@Sun.COM * 89829SCharles.Ting@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 99829SCharles.Ting@Sun.COM * or http://www.opensolaris.org/os/licensing. 109829SCharles.Ting@Sun.COM * See the License for the specific language governing permissions 119829SCharles.Ting@Sun.COM * and limitations under the License. 129829SCharles.Ting@Sun.COM * 139829SCharles.Ting@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 149829SCharles.Ting@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 159829SCharles.Ting@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 169829SCharles.Ting@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 179829SCharles.Ting@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 189829SCharles.Ting@Sun.COM * 199829SCharles.Ting@Sun.COM * CDDL HEADER END 209829SCharles.Ting@Sun.COM */ 219829SCharles.Ting@Sun.COM 229829SCharles.Ting@Sun.COM /* 239829SCharles.Ting@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 249829SCharles.Ting@Sun.COM * Use is subject to license terms. 259829SCharles.Ting@Sun.COM */ 269829SCharles.Ting@Sun.COM 279829SCharles.Ting@Sun.COM #pragma D depends_on library net.d 289829SCharles.Ting@Sun.COM #pragma D depends_on library scsi.d 299829SCharles.Ting@Sun.COM #pragma D depends_on module genunix 309829SCharles.Ting@Sun.COM #pragma D depends_on module srpt 319829SCharles.Ting@Sun.COM 329829SCharles.Ting@Sun.COM typedef struct srp_portinfo { 339829SCharles.Ting@Sun.COM /* initiator */ 349829SCharles.Ting@Sun.COM string pi_initiator; /* Initiator: eui.xxxxxxxxxxxxxxx */ 359829SCharles.Ting@Sun.COM string pi_i_sid; /* Initiator session id */ 369829SCharles.Ting@Sun.COM 379829SCharles.Ting@Sun.COM /* target */ 389829SCharles.Ting@Sun.COM string pi_target; /* Target: eui.xxxxxxxxxxxxxxx */ 399829SCharles.Ting@Sun.COM string pi_t_sid; /* Target session id */ 409829SCharles.Ting@Sun.COM 419829SCharles.Ting@Sun.COM uintptr_t pi_chan_id; /* Channel identifier */ 429829SCharles.Ting@Sun.COM } srp_portinfo_t; 439829SCharles.Ting@Sun.COM 449829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 459829SCharles.Ting@Sun.COM translator conninfo_t < srpt_session_t *P > { 469829SCharles.Ting@Sun.COM ci_local = P->ss_t_gid; 479829SCharles.Ting@Sun.COM ci_remote = P->ss_i_gid; 489829SCharles.Ting@Sun.COM ci_protocol = "ib"; 499829SCharles.Ting@Sun.COM }; 509829SCharles.Ting@Sun.COM 519829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 529829SCharles.Ting@Sun.COM translator srp_portinfo_t < srpt_session_t *P > { 539829SCharles.Ting@Sun.COM pi_initiator = P->ss_i_name; 549829SCharles.Ting@Sun.COM pi_i_sid = P->ss_i_alias; 559829SCharles.Ting@Sun.COM pi_target = P->ss_t_name; 569829SCharles.Ting@Sun.COM pi_t_sid = P->ss_t_alias; 579829SCharles.Ting@Sun.COM pi_chan_id = 0; 589829SCharles.Ting@Sun.COM }; 599829SCharles.Ting@Sun.COM 609829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 619829SCharles.Ting@Sun.COM translator conninfo_t < srpt_channel_t *P > { 629829SCharles.Ting@Sun.COM ci_local = P->ch_session->ss_i_gid; 639829SCharles.Ting@Sun.COM ci_remote = P->ch_session->ss_t_gid; 649829SCharles.Ting@Sun.COM }; 659829SCharles.Ting@Sun.COM 669829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 679829SCharles.Ting@Sun.COM translator srp_portinfo_t < srpt_channel_t *P > { 689829SCharles.Ting@Sun.COM pi_initiator = P->ch_session->ss_i_name; 699829SCharles.Ting@Sun.COM pi_i_sid = P->ch_session->ss_i_alias; 709829SCharles.Ting@Sun.COM pi_target = P->ch_session->ss_t_name; 719829SCharles.Ting@Sun.COM pi_t_sid = P->ch_session->ss_t_alias; 72*9881SCharles.Ting@Sun.COM pi_chan_id = (uintptr_t)P->ch_chan_hdl; 739829SCharles.Ting@Sun.COM }; 749829SCharles.Ting@Sun.COM 759829SCharles.Ting@Sun.COM typedef struct srp_logininfo { 769829SCharles.Ting@Sun.COM uint64_t li_task_tag; /* SRP task tag */ 779829SCharles.Ting@Sun.COM uint32_t li_max_it_iu_len; /* Maximum iu length that initiator can 789829SCharles.Ting@Sun.COM send to target */ 799829SCharles.Ting@Sun.COM uint32_t li_max_ti_iu_len; /* Maximum iu length that target can 809829SCharles.Ting@Sun.COM send to initiator */ 819829SCharles.Ting@Sun.COM uint32_t li_request_limit; /* Maximun number of SRP requests 829829SCharles.Ting@Sun.COM that initiator can send on a channel */ 839829SCharles.Ting@Sun.COM uint32_t li_reason_code; /* Reason code */ 849829SCharles.Ting@Sun.COM } srp_logininfo_t; 859829SCharles.Ting@Sun.COM 869829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 879829SCharles.Ting@Sun.COM translator srp_logininfo_t < srp_login_req_t *P > { 889829SCharles.Ting@Sun.COM li_task_tag = P->lreq_tag; 899829SCharles.Ting@Sun.COM li_max_it_iu_len = ntohl(P->lreq_req_it_iu_len); 909829SCharles.Ting@Sun.COM li_max_ti_iu_len = 0; 919829SCharles.Ting@Sun.COM li_request_limit = 0; 929829SCharles.Ting@Sun.COM li_reason_code = 0; 939829SCharles.Ting@Sun.COM }; 949829SCharles.Ting@Sun.COM 959829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 969829SCharles.Ting@Sun.COM translator srp_logininfo_t < srp_login_rsp_t *P > { 979829SCharles.Ting@Sun.COM li_task_tag = P->lrsp_tag; 989829SCharles.Ting@Sun.COM li_max_it_iu_len = ntohl(P->lrsp_max_it_iu_len); 999829SCharles.Ting@Sun.COM li_max_ti_iu_len = ntohl(P->lrsp_max_ti_iu_len); 1009829SCharles.Ting@Sun.COM li_request_limit = ntohl(P->lrsp_req_limit_delta); 101*9881SCharles.Ting@Sun.COM li_reason_code = ntohl(((srp_login_rej_t *)arg2)->lrej_reason); 1029829SCharles.Ting@Sun.COM }; 1039829SCharles.Ting@Sun.COM 1049829SCharles.Ting@Sun.COM typedef struct srp_taskinfo { 1059829SCharles.Ting@Sun.COM uint64_t ti_task_tag; /* SRP task tag */ 1069829SCharles.Ting@Sun.COM uint64_t ti_lun; /* Target logical unit number */ 1079829SCharles.Ting@Sun.COM uint8_t ti_function; /* Task management function */ 1089829SCharles.Ting@Sun.COM uint32_t ti_req_limit_delta; /* Increment of channel's request limit */ 1099829SCharles.Ting@Sun.COM uint8_t ti_flag; /* bit 2: DOOVER */ 1109829SCharles.Ting@Sun.COM /* bit 3: DOUNDER */ 1119829SCharles.Ting@Sun.COM /* bit 4: DIOVER */ 1129829SCharles.Ting@Sun.COM /* bit 5: DIUNDER */ 1139829SCharles.Ting@Sun.COM uint32_t ti_do_resid_cnt; /* Data-out residual count */ 1149829SCharles.Ting@Sun.COM uint32_t ti_di_resid_cnt; /* Data-in residual count */ 1159829SCharles.Ting@Sun.COM uint8_t ti_status; /* Status of this task */ 1169829SCharles.Ting@Sun.COM } srp_taskinfo_t; 1179829SCharles.Ting@Sun.COM 1189829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 1199829SCharles.Ting@Sun.COM translator srp_taskinfo_t < srp_cmd_req_t *P > { 1209829SCharles.Ting@Sun.COM ti_task_tag = P->cr_tag; 121*9881SCharles.Ting@Sun.COM ti_lun = (ntohl(*((uint32_t *)P->cr_lun)) << 32) + 1229829SCharles.Ting@Sun.COM ntohl(*((uint32_t *)&P->cr_lun[4])); 1239829SCharles.Ting@Sun.COM ti_function = P->cr_type == 1 ? /* 1: MGMT CMD 2: SRP CMD */ 1249829SCharles.Ting@Sun.COM ((srp_tsk_mgmt_t *)P)->tm_function : 0; 1259829SCharles.Ting@Sun.COM ti_req_limit_delta = 0; 1269829SCharles.Ting@Sun.COM ti_flag = 0; 1279829SCharles.Ting@Sun.COM ti_do_resid_cnt = 0; 1289829SCharles.Ting@Sun.COM ti_di_resid_cnt = 0; 1299829SCharles.Ting@Sun.COM ti_status = 0; 1309829SCharles.Ting@Sun.COM }; 1319829SCharles.Ting@Sun.COM 1329829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 1339829SCharles.Ting@Sun.COM translator srp_taskinfo_t < srp_rsp_t *P > { 1349829SCharles.Ting@Sun.COM ti_task_tag = P->rsp_tag; 135*9881SCharles.Ting@Sun.COM ti_lun = ntohll(*(uint64_t *)((scsi_task_t *)arg2)->task_lun_no); 136*9881SCharles.Ting@Sun.COM ti_function = ((scsi_task_t *)arg2)->task_mgmt_function; 1379829SCharles.Ting@Sun.COM ti_req_limit_delta = ntohl(P->rsp_req_limit_delta); 1389829SCharles.Ting@Sun.COM ti_flag = P->rsp_flags; 1399829SCharles.Ting@Sun.COM ti_do_resid_cnt = ntohl(P->rsp_do_resid_cnt); 1409829SCharles.Ting@Sun.COM ti_di_resid_cnt = ntohl(P->rsp_di_resid_cnt); 1419829SCharles.Ting@Sun.COM ti_status = arg3; 1429829SCharles.Ting@Sun.COM }; 1439829SCharles.Ting@Sun.COM 1449829SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 145*9881SCharles.Ting@Sun.COM translator srp_taskinfo_t < srpt_iu_t *P > { 146*9881SCharles.Ting@Sun.COM ti_task_tag = P->iu_tag; 147*9881SCharles.Ting@Sun.COM ti_lun = ntohll(*(uint64_t *)P->iu_stmf_task->task_lun_no); 148*9881SCharles.Ting@Sun.COM ti_function = 0; 149*9881SCharles.Ting@Sun.COM ti_req_limit_delta = 0; 150*9881SCharles.Ting@Sun.COM ti_flag = 0; 151*9881SCharles.Ting@Sun.COM ti_do_resid_cnt = 0; 152*9881SCharles.Ting@Sun.COM ti_di_resid_cnt = 0; 153*9881SCharles.Ting@Sun.COM ti_status = 0; 154*9881SCharles.Ting@Sun.COM }; 155*9881SCharles.Ting@Sun.COM 156*9881SCharles.Ting@Sun.COM #pragma D binding "1.5" translator 1579829SCharles.Ting@Sun.COM translator xferinfo_t < ibt_wr_ds_t *P > { 1589829SCharles.Ting@Sun.COM xfer_laddr = P->ds_va + arg4; 1599829SCharles.Ting@Sun.COM xfer_lkey = P->ds_key; 160*9881SCharles.Ting@Sun.COM xfer_raddr = (arg3 == 0) ? 0 : 161*9881SCharles.Ting@Sun.COM ((ibt_send_wr_t *)arg3)->wr.rc.rcwr.rdma.rdma_raddr; 162*9881SCharles.Ting@Sun.COM xfer_rkey = (arg3 == 0) ? 0 : 163*9881SCharles.Ting@Sun.COM ((ibt_send_wr_t *)arg3)->wr.rc.rcwr.rdma.rdma_rkey; 164*9881SCharles.Ting@Sun.COM xfer_len = arg4; 165*9881SCharles.Ting@Sun.COM xfer_loffset = arg5; 166*9881SCharles.Ting@Sun.COM xfer_roffset = arg6; 167*9881SCharles.Ting@Sun.COM xfer_type = arg7; 1689829SCharles.Ting@Sun.COM }; 169