ibdma.h revision 9684:2e0b0fc2d0d3
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _IBDMA_H
28#define	_IBDMA_H
29
30/*
31 * ibdma.h
32 *
33 * Device Management Agent prototypes and structures shared with
34 * consumer (I/O Controller) via client API.
35 */
36
37/*
38 * The Infiniband Device Management Agent manages an I/O Unit
39 * for each IB HCA, providing a common view to of the I/O Unit
40 * that presents protocol specific I/O Controllers.
41 *
42 * By default, the I/O Unit is unpopulated with I/O Controllers.  Each
43 * underlying protocol transport registers their I/O Controller with
44 * the respective I/O Unit (HCA) providing their I/O Controller profile
45 * and the services they are making available.  As services change, the
46 * the transport protocol calls back into the IB DMA to update their
47 * profile and services.
48 */
49
50#ifdef	__cplusplus
51extern "C" {
52#endif
53
54#include <sys/ib/mgt/ibmf/ibmf.h>
55#include <sys/ib/mgt/ib_dm_attr.h>
56
57typedef enum ibdma_status_e {
58	IBDMA_SUCCESS		= 0,	/* good status */
59	IBDMA_IOC_DUPLICATE,		/* IOC GUID already exists */
60	IBDMA_IOU_FULL,			/* No slots available in IOU */
61	IBDMA_BAD_IOC_PROFILE,		/* IOC profile disparity */
62	IBDMA_BAD_PARAM			/* Invalid function parameter */
63} ibdma_status_t;
64
65/*
66 * I/O Controller Provider API.
67 *
68 * The DM Agent responds to I/O Unit requests on all IB fabric ports
69 * in the system, setting each ports "isDeviceManagementSupported" bit.
70 *
71 * I/O Controllers must register their IOC profile and associated
72 * services with the DM Agent.  The DM Agent will assign a
73 * I/O Unit slot to the I/O Controller at that time.
74 */
75typedef void*  ibdma_hdl_t;
76
77/*
78 * Register an IOC.
79 *
80 * Returns a handle used to un-register or update the IOC
81 * profile/services information.
82 */
83ibdma_hdl_t  ibdma_ioc_register(ib_guid_t ioc_guid,
84	ib_dm_ioc_ctrl_profile_t *profile, ib_dm_srv_t *services);
85
86/*
87 * Un-Register an IOC.
88 */
89ibdma_status_t ibdma_ioc_unregister(ibdma_hdl_t hdl);
90
91/*
92 * Update a previously register IOC profile/services.
93 */
94ibdma_status_t ibdma_ioc_update(ibdma_hdl_t hdl,
95	ib_dm_ioc_ctrl_profile_t *profile, ib_dm_srv_t *services);
96
97#ifdef	__cplusplus
98}
99#endif
100
101#endif /* _IBDMA_H */
102