xref: /titanic_52/usr/src/lib/fm/libldom/sparc/ldom.h (revision 25351652d920ae27c5a56c199da581033ce763f6)
131e37bb4Svn83148 /*
231e37bb4Svn83148  * CDDL HEADER START
331e37bb4Svn83148  *
431e37bb4Svn83148  * The contents of this file are subject to the terms of the
531e37bb4Svn83148  * Common Development and Distribution License (the "License").
631e37bb4Svn83148  * You may not use this file except in compliance with the License.
731e37bb4Svn83148  *
831e37bb4Svn83148  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
931e37bb4Svn83148  * or http://www.opensolaris.org/os/licensing.
1031e37bb4Svn83148  * See the License for the specific language governing permissions
1131e37bb4Svn83148  * and limitations under the License.
1231e37bb4Svn83148  *
1331e37bb4Svn83148  * When distributing Covered Code, include this CDDL HEADER in each
1431e37bb4Svn83148  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1531e37bb4Svn83148  * If applicable, add the following below this CDDL HEADER, with the
1631e37bb4Svn83148  * fields enclosed by brackets "[]" replaced with your own identifying
1731e37bb4Svn83148  * information: Portions Copyright [yyyy] [name of copyright owner]
1831e37bb4Svn83148  *
1931e37bb4Svn83148  * CDDL HEADER END
2031e37bb4Svn83148  */
2131e37bb4Svn83148 /*
225f149bcaScy152378  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
2331e37bb4Svn83148  * Use is subject to license terms.
2431e37bb4Svn83148  */
2531e37bb4Svn83148 
2631e37bb4Svn83148 #ifndef	_LDOM_H
2731e37bb4Svn83148 #define	_LDOM_H
2831e37bb4Svn83148 
2931e37bb4Svn83148 #include <stdlib.h>
3031e37bb4Svn83148 #include <libnvpair.h>
3131e37bb4Svn83148 #include <sys/types.h>
32*25351652SVuong Nguyen #include <umem.h>
3331e37bb4Svn83148 
3431e37bb4Svn83148 #ifdef	__cplusplus
3531e37bb4Svn83148 extern "C" {
3631e37bb4Svn83148 #endif
3731e37bb4Svn83148 
3831e37bb4Svn83148 typedef struct ldom_hdl ldom_hdl_t;
3931e37bb4Svn83148 
4031e37bb4Svn83148 extern ldom_hdl_t *ldom_init(void *(*allocp)(size_t size),
4131e37bb4Svn83148 			    void (*freep)(void *addr, size_t size));
4231e37bb4Svn83148 extern void ldom_fini(ldom_hdl_t *lhp);
4331e37bb4Svn83148 
4431e37bb4Svn83148 extern int ldom_fmri_status(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
4531e37bb4Svn83148 extern int ldom_fmri_retire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
465f149bcaScy152378 extern int ldom_fmri_unretire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
4731e37bb4Svn83148 extern int ldom_fmri_blacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
485f149bcaScy152378 extern int ldom_fmri_unblacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
4931e37bb4Svn83148 
5031e37bb4Svn83148 extern ssize_t ldom_get_core_md(ldom_hdl_t *lhp, uint64_t **buf);
51*25351652SVuong Nguyen extern ssize_t ldom_get_local_md(ldom_hdl_t *lhp, uint64_t **buf);
5231e37bb4Svn83148 
53*25351652SVuong Nguyen /*
54*25351652SVuong Nguyen  * domain type
55*25351652SVuong Nguyen  */
56*25351652SVuong Nguyen #define	LDOM_TYPE_LEGACY	0x1
57*25351652SVuong Nguyen #define	LDOM_TYPE_CONTROL	0x2
58*25351652SVuong Nguyen #define	LDOM_TYPE_ROOT		0x4
59*25351652SVuong Nguyen #define	LDOM_TYPE_IO		0x8
60*25351652SVuong Nguyen #define	LDOM_TYPE_ALL \
61*25351652SVuong Nguyen 	(LDOM_TYPE_LEGACY | LDOM_TYPE_CONTROL | LDOM_TYPE_ROOT | LDOM_TYPE_IO)
62*25351652SVuong Nguyen #define	VALID_LDOM_TYPE(t)	((t) & LDOM_TYPE_ALL)
63*25351652SVuong Nguyen 
64*25351652SVuong Nguyen extern int ldom_get_type(ldom_hdl_t *lhp, uint32_t *type_mask);
65*25351652SVuong Nguyen 
66*25351652SVuong Nguyen /*
67*25351652SVuong Nguyen  * Resource map
68*25351652SVuong Nguyen  */
69*25351652SVuong Nguyen typedef enum ldom_rsrc {
70*25351652SVuong Nguyen 	LDOM_RSRC_PCI,
71*25351652SVuong Nguyen 	LDOM_RSRC_NIU,
72*25351652SVuong Nguyen 	LDOM_RSRC_MAX
73*25351652SVuong Nguyen } ldom_rsrc_t;
74*25351652SVuong Nguyen 
75*25351652SVuong Nguyen extern int
76*25351652SVuong Nguyen ldom_find_id(ldom_hdl_t *lhp, uint64_t addr, ldom_rsrc_t type,
77*25351652SVuong Nguyen     uint64_t *virt_addr, char *name, int name_size, uint64_t *id);
78*25351652SVuong Nguyen 
79*25351652SVuong Nguyen /*
80*25351652SVuong Nguyen  * event notification
81*25351652SVuong Nguyen  */
82*25351652SVuong Nguyen typedef enum ldom_event {
83*25351652SVuong Nguyen 	LDOM_EVENT_UNKNOWN,
84*25351652SVuong Nguyen 	LDOM_EVENT_ADD,
85*25351652SVuong Nguyen 	LDOM_EVENT_REMOVE,
86*25351652SVuong Nguyen 	LDOM_EVENT_BIND,
87*25351652SVuong Nguyen 	LDOM_EVENT_UNBIND,
88*25351652SVuong Nguyen 	LDOM_EVENT_START,
89*25351652SVuong Nguyen 	LDOM_EVENT_STOP,
90*25351652SVuong Nguyen 	LDOM_EVENT_RESET,
91*25351652SVuong Nguyen 	LDOM_EVENT_PANIC,
92*25351652SVuong Nguyen 	LDOM_EVENT_MAX
93*25351652SVuong Nguyen } ldom_event_t;
94*25351652SVuong Nguyen #define	VALID_LDOM_EVENT(e)	((e) > LDOM_EVENT_UNKNOWN && \
95*25351652SVuong Nguyen 				(e) < LDOM_EVENT_MAX)
96*25351652SVuong Nguyen #define	MAX_LDOM_NAME		256
97*25351652SVuong Nguyen 
98*25351652SVuong Nguyen typedef void *ldom_cb_arg_t;
99*25351652SVuong Nguyen typedef void (*ldom_reg_cb_t)(char *ldom_name, ldom_event_t event,
100*25351652SVuong Nguyen 				ldom_cb_arg_t data);
101*25351652SVuong Nguyen extern int ldom_register_event(ldom_hdl_t *lhp, ldom_reg_cb_t cb,
102*25351652SVuong Nguyen 				ldom_cb_arg_t data);
103*25351652SVuong Nguyen extern int ldom_unregister_event(ldom_hdl_t *lhp);
10431e37bb4Svn83148 
10531e37bb4Svn83148 #ifdef	__cplusplus
10631e37bb4Svn83148 }
10731e37bb4Svn83148 #endif
10831e37bb4Svn83148 
10931e37bb4Svn83148 #endif	/* _LDOM_H */
110