1*12965SWilliam.Taylor@Oracle.COM /* 2*12965SWilliam.Taylor@Oracle.COM * CDDL HEADER START 3*12965SWilliam.Taylor@Oracle.COM * 4*12965SWilliam.Taylor@Oracle.COM * The contents of this file are subject to the terms of the 5*12965SWilliam.Taylor@Oracle.COM * Common Development and Distribution License (the "License"). 6*12965SWilliam.Taylor@Oracle.COM * You may not use this file except in compliance with the License. 7*12965SWilliam.Taylor@Oracle.COM * 8*12965SWilliam.Taylor@Oracle.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*12965SWilliam.Taylor@Oracle.COM * or http://www.opensolaris.org/os/licensing. 10*12965SWilliam.Taylor@Oracle.COM * See the License for the specific language governing permissions 11*12965SWilliam.Taylor@Oracle.COM * and limitations under the License. 12*12965SWilliam.Taylor@Oracle.COM * 13*12965SWilliam.Taylor@Oracle.COM * When distributing Covered Code, include this CDDL HEADER in each 14*12965SWilliam.Taylor@Oracle.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*12965SWilliam.Taylor@Oracle.COM * If applicable, add the following below this CDDL HEADER, with the 16*12965SWilliam.Taylor@Oracle.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*12965SWilliam.Taylor@Oracle.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*12965SWilliam.Taylor@Oracle.COM * 19*12965SWilliam.Taylor@Oracle.COM * CDDL HEADER END 20*12965SWilliam.Taylor@Oracle.COM */ 21*12965SWilliam.Taylor@Oracle.COM 22*12965SWilliam.Taylor@Oracle.COM /* 23*12965SWilliam.Taylor@Oracle.COM * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 24*12965SWilliam.Taylor@Oracle.COM */ 25*12965SWilliam.Taylor@Oracle.COM 26*12965SWilliam.Taylor@Oracle.COM #ifndef _SYS_IB_ADAPTERS_HERMON_FCOIB_H 27*12965SWilliam.Taylor@Oracle.COM #define _SYS_IB_ADAPTERS_HERMON_FCOIB_H 28*12965SWilliam.Taylor@Oracle.COM 29*12965SWilliam.Taylor@Oracle.COM /* 30*12965SWilliam.Taylor@Oracle.COM * hermon_fcoib.h 31*12965SWilliam.Taylor@Oracle.COM */ 32*12965SWilliam.Taylor@Oracle.COM 33*12965SWilliam.Taylor@Oracle.COM #ifdef __cplusplus 34*12965SWilliam.Taylor@Oracle.COM extern "C" { 35*12965SWilliam.Taylor@Oracle.COM #endif 36*12965SWilliam.Taylor@Oracle.COM 37*12965SWilliam.Taylor@Oracle.COM typedef struct hermon_fcoib_qp_s { 38*12965SWilliam.Taylor@Oracle.COM hermon_rsrc_t hfc_qp_rsrc; 39*12965SWilliam.Taylor@Oracle.COM vmem_t *hfc_qp_vmp; 40*12965SWilliam.Taylor@Oracle.COM } hermon_fcoib_qp_t; 41*12965SWilliam.Taylor@Oracle.COM 42*12965SWilliam.Taylor@Oracle.COM typedef struct hermon_fcoib_s { 43*12965SWilliam.Taylor@Oracle.COM uint8_t hfc_log2_max_port_ids_queried; 44*12965SWilliam.Taylor@Oracle.COM uint8_t hfc_log2_max_fexch_queried; 45*12965SWilliam.Taylor@Oracle.COM uint8_t hfc_log2_max_rfci_queried; 46*12965SWilliam.Taylor@Oracle.COM kmutex_t hfc_lock; 47*12965SWilliam.Taylor@Oracle.COM hermon_rsrc_t *hfc_mpt_rsrc; /* FEXCH MPTs for all ports */ 48*12965SWilliam.Taylor@Oracle.COM hermon_rsrc_t *hfc_mtt_rsrc; /* FEXCH MTTs for all MPTs */ 49*12965SWilliam.Taylor@Oracle.COM hermon_rsrc_t *hfc_fexch_rsrc; /* FEXCH QPs for all ports */ 50*12965SWilliam.Taylor@Oracle.COM hermon_rsrc_t *hfc_rfci_rsrc; /* RFCI QPs for all ports */ 51*12965SWilliam.Taylor@Oracle.COM uint8_t hfc_nports; /* #HCA ports */ 52*12965SWilliam.Taylor@Oracle.COM uint8_t hfc_port_enabled[HERMON_MAX_PORTS]; 53*12965SWilliam.Taylor@Oracle.COM uint_t hfc_mpts_per_port; 54*12965SWilliam.Taylor@Oracle.COM uint_t hfc_mtts_per_mpt; 55*12965SWilliam.Taylor@Oracle.COM uint_t hfc_fexch_qps_per_port; 56*12965SWilliam.Taylor@Oracle.COM uint_t hfc_rfci_qps_per_port; 57*12965SWilliam.Taylor@Oracle.COM vmem_t *hfc_rfci_vmemp[HERMON_MAX_PORTS]; 58*12965SWilliam.Taylor@Oracle.COM vmem_t *hfc_fexch_vmemp[HERMON_MAX_PORTS]; 59*12965SWilliam.Taylor@Oracle.COM uintptr_t hfc_vmemstart; 60*12965SWilliam.Taylor@Oracle.COM uint32_t *hfc_n_port_ids[HERMON_MAX_PORTS]; 61*12965SWilliam.Taylor@Oracle.COM 62*12965SWilliam.Taylor@Oracle.COM /* Convenient, but redundant values */ 63*12965SWilliam.Taylor@Oracle.COM uint32_t hfc_mpt_base[HERMON_MAX_PORTS]; 64*12965SWilliam.Taylor@Oracle.COM uint32_t hfc_mtt_base[HERMON_MAX_PORTS]; 65*12965SWilliam.Taylor@Oracle.COM uint32_t hfc_fexch_base[HERMON_MAX_PORTS]; 66*12965SWilliam.Taylor@Oracle.COM uint32_t hfc_rfci_base[HERMON_MAX_PORTS]; 67*12965SWilliam.Taylor@Oracle.COM } hermon_fcoib_t; 68*12965SWilliam.Taylor@Oracle.COM 69*12965SWilliam.Taylor@Oracle.COM _NOTE(DATA_READABLE_WITHOUT_LOCK(hermon_fcoib_s::hfc_fexch_rsrc 70*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_nports 71*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_mpts_per_port 72*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_mtts_per_mpt 73*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_fexch_qps_per_port 74*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_rfci_qps_per_port 75*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_mpt_base 76*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_mtt_base 77*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_fexch_base 78*12965SWilliam.Taylor@Oracle.COM hermon_fcoib_s::hfc_rfci_base)) 79*12965SWilliam.Taylor@Oracle.COM 80*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_set_id(hermon_state_t *state, int port, uint32_t rfci_qpn, 81*12965SWilliam.Taylor@Oracle.COM uint32_t src_id); 82*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_get_id_idx(hermon_state_t *state, int port, 83*12965SWilliam.Taylor@Oracle.COM ibt_fc_attr_t *fcp); 84*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_check_exch_base_off(hermon_state_t *state, int port, 85*12965SWilliam.Taylor@Oracle.COM ibt_fc_attr_t *fcp); 86*12965SWilliam.Taylor@Oracle.COM uint_t hermon_fcoib_qpnum_from_fexch(hermon_state_t *state, int port, 87*12965SWilliam.Taylor@Oracle.COM uint16_t fexch); 88*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_is_fexch_qpn(hermon_state_t *state, uint_t qpnum); 89*12965SWilliam.Taylor@Oracle.COM uint32_t hermon_fcoib_qpn_to_mkey(hermon_state_t *state, uint_t qpnum); 90*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_fexch_mkey_init(hermon_state_t *state, hermon_pdhdl_t pd, 91*12965SWilliam.Taylor@Oracle.COM uint8_t port, uint32_t qp_indx, uint_t sleep); 92*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_fexch_mkey_fini(hermon_state_t *state, hermon_pdhdl_t pd, 93*12965SWilliam.Taylor@Oracle.COM uint32_t qpnum, uint_t sleep); 94*12965SWilliam.Taylor@Oracle.COM uint32_t hermon_fcoib_fexch_relative_qpn(hermon_state_t *state, uint8_t port, 95*12965SWilliam.Taylor@Oracle.COM uint32_t qpnum); 96*12965SWilliam.Taylor@Oracle.COM int hermon_fcoib_init(hermon_state_t *state); 97*12965SWilliam.Taylor@Oracle.COM void hermon_fcoib_fini(hermon_state_t *state); 98*12965SWilliam.Taylor@Oracle.COM 99*12965SWilliam.Taylor@Oracle.COM 100*12965SWilliam.Taylor@Oracle.COM #ifdef __cplusplus 101*12965SWilliam.Taylor@Oracle.COM } 102*12965SWilliam.Taylor@Oracle.COM #endif 103*12965SWilliam.Taylor@Oracle.COM 104*12965SWilliam.Taylor@Oracle.COM #endif /* _SYS_IB_ADAPTERS_HERMON_FCOIB_H */ 105