1*12303SRajkumar.Sivaprakasam@Sun.COM /*
2*12303SRajkumar.Sivaprakasam@Sun.COM * CDDL HEADER START
3*12303SRajkumar.Sivaprakasam@Sun.COM *
4*12303SRajkumar.Sivaprakasam@Sun.COM * The contents of this file are subject to the terms of the
5*12303SRajkumar.Sivaprakasam@Sun.COM * Common Development and Distribution License (the "License").
6*12303SRajkumar.Sivaprakasam@Sun.COM * You may not use this file except in compliance with the License.
7*12303SRajkumar.Sivaprakasam@Sun.COM *
8*12303SRajkumar.Sivaprakasam@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*12303SRajkumar.Sivaprakasam@Sun.COM * or http://www.opensolaris.org/os/licensing.
10*12303SRajkumar.Sivaprakasam@Sun.COM * See the License for the specific language governing permissions
11*12303SRajkumar.Sivaprakasam@Sun.COM * and limitations under the License.
12*12303SRajkumar.Sivaprakasam@Sun.COM *
13*12303SRajkumar.Sivaprakasam@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each
14*12303SRajkumar.Sivaprakasam@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*12303SRajkumar.Sivaprakasam@Sun.COM * If applicable, add the following below this CDDL HEADER, with the
16*12303SRajkumar.Sivaprakasam@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying
17*12303SRajkumar.Sivaprakasam@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner]
18*12303SRajkumar.Sivaprakasam@Sun.COM *
19*12303SRajkumar.Sivaprakasam@Sun.COM * CDDL HEADER END
20*12303SRajkumar.Sivaprakasam@Sun.COM */
21*12303SRajkumar.Sivaprakasam@Sun.COM /*
22*12303SRajkumar.Sivaprakasam@Sun.COM * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
23*12303SRajkumar.Sivaprakasam@Sun.COM */
24*12303SRajkumar.Sivaprakasam@Sun.COM
25*12303SRajkumar.Sivaprakasam@Sun.COM #include <sys/types.h>
26*12303SRajkumar.Sivaprakasam@Sun.COM #include <sys/kmem.h>
27*12303SRajkumar.Sivaprakasam@Sun.COM #include <sys/ksynch.h>
28*12303SRajkumar.Sivaprakasam@Sun.COM #include <sys/ib/ibtl/ibti_common.h>
29*12303SRajkumar.Sivaprakasam@Sun.COM
30*12303SRajkumar.Sivaprakasam@Sun.COM kmutex_t ibtl_part_attr_mutex;
31*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t (*ibtl_get_part_attr_cb)(datalink_id_t, ibt_part_attr_t *);
32*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t (*ibtl_get_all_part_attr_cb)(ibt_part_attr_t **, int *);
33*12303SRajkumar.Sivaprakasam@Sun.COM
34*12303SRajkumar.Sivaprakasam@Sun.COM void
ibt_register_part_attr_cb(ibt_status_t (* get_part_attr)(datalink_id_t,ibt_part_attr_t *),ibt_status_t (* get_all_part_attr)(ibt_part_attr_t **,int *))35*12303SRajkumar.Sivaprakasam@Sun.COM ibt_register_part_attr_cb(
36*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t (*get_part_attr)(datalink_id_t, ibt_part_attr_t *),
37*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t (*get_all_part_attr)(ibt_part_attr_t **, int *))
38*12303SRajkumar.Sivaprakasam@Sun.COM {
39*12303SRajkumar.Sivaprakasam@Sun.COM mutex_enter(&ibtl_part_attr_mutex);
40*12303SRajkumar.Sivaprakasam@Sun.COM ibtl_get_part_attr_cb = get_part_attr;
41*12303SRajkumar.Sivaprakasam@Sun.COM ibtl_get_all_part_attr_cb = get_all_part_attr;
42*12303SRajkumar.Sivaprakasam@Sun.COM mutex_exit(&ibtl_part_attr_mutex);
43*12303SRajkumar.Sivaprakasam@Sun.COM }
44*12303SRajkumar.Sivaprakasam@Sun.COM
45*12303SRajkumar.Sivaprakasam@Sun.COM void
ibt_unregister_part_attr_cb(void)46*12303SRajkumar.Sivaprakasam@Sun.COM ibt_unregister_part_attr_cb(void)
47*12303SRajkumar.Sivaprakasam@Sun.COM {
48*12303SRajkumar.Sivaprakasam@Sun.COM mutex_enter(&ibtl_part_attr_mutex);
49*12303SRajkumar.Sivaprakasam@Sun.COM ibtl_get_part_attr_cb = NULL;
50*12303SRajkumar.Sivaprakasam@Sun.COM ibtl_get_all_part_attr_cb = NULL;
51*12303SRajkumar.Sivaprakasam@Sun.COM mutex_exit(&ibtl_part_attr_mutex);
52*12303SRajkumar.Sivaprakasam@Sun.COM }
53*12303SRajkumar.Sivaprakasam@Sun.COM
54*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t
ibt_get_part_attr(datalink_id_t linkid,ibt_part_attr_t * attr)55*12303SRajkumar.Sivaprakasam@Sun.COM ibt_get_part_attr(datalink_id_t linkid, ibt_part_attr_t *attr)
56*12303SRajkumar.Sivaprakasam@Sun.COM {
57*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t status;
58*12303SRajkumar.Sivaprakasam@Sun.COM
59*12303SRajkumar.Sivaprakasam@Sun.COM mutex_enter(&ibtl_part_attr_mutex);
60*12303SRajkumar.Sivaprakasam@Sun.COM if (ibtl_get_part_attr_cb != NULL)
61*12303SRajkumar.Sivaprakasam@Sun.COM status = (*ibtl_get_part_attr_cb) (linkid, attr);
62*12303SRajkumar.Sivaprakasam@Sun.COM else
63*12303SRajkumar.Sivaprakasam@Sun.COM status = IBT_NO_SUCH_OBJECT;
64*12303SRajkumar.Sivaprakasam@Sun.COM mutex_exit(&ibtl_part_attr_mutex);
65*12303SRajkumar.Sivaprakasam@Sun.COM
66*12303SRajkumar.Sivaprakasam@Sun.COM return (status);
67*12303SRajkumar.Sivaprakasam@Sun.COM }
68*12303SRajkumar.Sivaprakasam@Sun.COM
69*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t
ibt_get_all_part_attr(ibt_part_attr_t ** attr,int * nparts)70*12303SRajkumar.Sivaprakasam@Sun.COM ibt_get_all_part_attr(ibt_part_attr_t **attr, int *nparts)
71*12303SRajkumar.Sivaprakasam@Sun.COM {
72*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t status;
73*12303SRajkumar.Sivaprakasam@Sun.COM
74*12303SRajkumar.Sivaprakasam@Sun.COM mutex_enter(&ibtl_part_attr_mutex);
75*12303SRajkumar.Sivaprakasam@Sun.COM if (ibtl_get_all_part_attr_cb != NULL)
76*12303SRajkumar.Sivaprakasam@Sun.COM status = (*ibtl_get_all_part_attr_cb) (attr, nparts);
77*12303SRajkumar.Sivaprakasam@Sun.COM else {
78*12303SRajkumar.Sivaprakasam@Sun.COM *attr = NULL;
79*12303SRajkumar.Sivaprakasam@Sun.COM *nparts = 0;
80*12303SRajkumar.Sivaprakasam@Sun.COM status = IBT_SUCCESS;
81*12303SRajkumar.Sivaprakasam@Sun.COM }
82*12303SRajkumar.Sivaprakasam@Sun.COM mutex_exit(&ibtl_part_attr_mutex);
83*12303SRajkumar.Sivaprakasam@Sun.COM
84*12303SRajkumar.Sivaprakasam@Sun.COM return (status);
85*12303SRajkumar.Sivaprakasam@Sun.COM }
86*12303SRajkumar.Sivaprakasam@Sun.COM
87*12303SRajkumar.Sivaprakasam@Sun.COM ibt_status_t
ibt_free_part_attr(ibt_part_attr_t * attr,int nparts)88*12303SRajkumar.Sivaprakasam@Sun.COM ibt_free_part_attr(ibt_part_attr_t *attr, int nparts)
89*12303SRajkumar.Sivaprakasam@Sun.COM {
90*12303SRajkumar.Sivaprakasam@Sun.COM if (nparts > 0)
91*12303SRajkumar.Sivaprakasam@Sun.COM kmem_free(attr, sizeof (ibt_part_attr_t) * nparts);
92*12303SRajkumar.Sivaprakasam@Sun.COM return (IBT_SUCCESS);
93*12303SRajkumar.Sivaprakasam@Sun.COM }
94