1*10923SEvan.Yan@Sun.COM /*
2*10923SEvan.Yan@Sun.COM  * CDDL HEADER START
3*10923SEvan.Yan@Sun.COM  *
4*10923SEvan.Yan@Sun.COM  * The contents of this file are subject to the terms of the
5*10923SEvan.Yan@Sun.COM  * Common Development and Distribution License (the "License").
6*10923SEvan.Yan@Sun.COM  * You may not use this file except in compliance with the License.
7*10923SEvan.Yan@Sun.COM  *
8*10923SEvan.Yan@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*10923SEvan.Yan@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*10923SEvan.Yan@Sun.COM  * See the License for the specific language governing permissions
11*10923SEvan.Yan@Sun.COM  * and limitations under the License.
12*10923SEvan.Yan@Sun.COM  *
13*10923SEvan.Yan@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*10923SEvan.Yan@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*10923SEvan.Yan@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*10923SEvan.Yan@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*10923SEvan.Yan@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*10923SEvan.Yan@Sun.COM  *
19*10923SEvan.Yan@Sun.COM  * CDDL HEADER END
20*10923SEvan.Yan@Sun.COM  */
21*10923SEvan.Yan@Sun.COM 
22*10923SEvan.Yan@Sun.COM /*
23*10923SEvan.Yan@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*10923SEvan.Yan@Sun.COM  * Use is subject to license terms.
25*10923SEvan.Yan@Sun.COM  */
26*10923SEvan.Yan@Sun.COM 
27*10923SEvan.Yan@Sun.COM #ifndef _LIBHOTPLUG_H
28*10923SEvan.Yan@Sun.COM #define	_LIBHOTPLUG_H
29*10923SEvan.Yan@Sun.COM 
30*10923SEvan.Yan@Sun.COM #ifdef	__cplusplus
31*10923SEvan.Yan@Sun.COM extern "C" {
32*10923SEvan.Yan@Sun.COM #endif
33*10923SEvan.Yan@Sun.COM 
34*10923SEvan.Yan@Sun.COM #include <sys/types.h>
35*10923SEvan.Yan@Sun.COM 
36*10923SEvan.Yan@Sun.COM /*
37*10923SEvan.Yan@Sun.COM  * Define node types in hotplug snapshot.
38*10923SEvan.Yan@Sun.COM  */
39*10923SEvan.Yan@Sun.COM #define	HP_NODE_NONE		0
40*10923SEvan.Yan@Sun.COM #define	HP_NODE_DEVICE		1
41*10923SEvan.Yan@Sun.COM #define	HP_NODE_CONNECTOR	2
42*10923SEvan.Yan@Sun.COM #define	HP_NODE_PORT		3
43*10923SEvan.Yan@Sun.COM #define	HP_NODE_USAGE		4
44*10923SEvan.Yan@Sun.COM 
45*10923SEvan.Yan@Sun.COM /*
46*10923SEvan.Yan@Sun.COM  * Define flags for hp_init().
47*10923SEvan.Yan@Sun.COM  */
48*10923SEvan.Yan@Sun.COM #define	HPINFOUSAGE		0x1
49*10923SEvan.Yan@Sun.COM #define	HPINFOSEARCH		0x2	/* private flag */
50*10923SEvan.Yan@Sun.COM 
51*10923SEvan.Yan@Sun.COM /*
52*10923SEvan.Yan@Sun.COM  * Define flags for hp_set_state().
53*10923SEvan.Yan@Sun.COM  */
54*10923SEvan.Yan@Sun.COM #define	HPFORCE			0x1
55*10923SEvan.Yan@Sun.COM #define	HPQUERY			0x2
56*10923SEvan.Yan@Sun.COM 
57*10923SEvan.Yan@Sun.COM /*
58*10923SEvan.Yan@Sun.COM  * Define private flags.
59*10923SEvan.Yan@Sun.COM  */
60*10923SEvan.Yan@Sun.COM 
61*10923SEvan.Yan@Sun.COM /*
62*10923SEvan.Yan@Sun.COM  * Define return values for hp_traverse() callbacks.
63*10923SEvan.Yan@Sun.COM  */
64*10923SEvan.Yan@Sun.COM #define	HP_WALK_CONTINUE	0
65*10923SEvan.Yan@Sun.COM #define	HP_WALK_PRUNECHILD	1
66*10923SEvan.Yan@Sun.COM #define	HP_WALK_PRUNESIBLING	2
67*10923SEvan.Yan@Sun.COM #define	HP_WALK_TERMINATE	3
68*10923SEvan.Yan@Sun.COM 
69*10923SEvan.Yan@Sun.COM /*
70*10923SEvan.Yan@Sun.COM  * Define opaque handle to hotplug nodes.
71*10923SEvan.Yan@Sun.COM  */
72*10923SEvan.Yan@Sun.COM typedef struct hp_node *hp_node_t;
73*10923SEvan.Yan@Sun.COM 
74*10923SEvan.Yan@Sun.COM /*
75*10923SEvan.Yan@Sun.COM  * Interface prototypes.
76*10923SEvan.Yan@Sun.COM  */
77*10923SEvan.Yan@Sun.COM hp_node_t	hp_init(const char *path, const char *connection, uint_t flags);
78*10923SEvan.Yan@Sun.COM void		hp_fini(hp_node_t root);
79*10923SEvan.Yan@Sun.COM int		hp_traverse(hp_node_t root, void *arg,
80*10923SEvan.Yan@Sun.COM 		    int (*hp_callback)(hp_node_t, void *arg));
81*10923SEvan.Yan@Sun.COM int		hp_type(hp_node_t node);
82*10923SEvan.Yan@Sun.COM char		*hp_name(hp_node_t node);
83*10923SEvan.Yan@Sun.COM char		*hp_usage(hp_node_t node);
84*10923SEvan.Yan@Sun.COM int		hp_state(hp_node_t node);
85*10923SEvan.Yan@Sun.COM char		*hp_description(hp_node_t node);
86*10923SEvan.Yan@Sun.COM time_t		hp_last_change(hp_node_t node);
87*10923SEvan.Yan@Sun.COM hp_node_t	hp_parent(hp_node_t node);
88*10923SEvan.Yan@Sun.COM hp_node_t	hp_child(hp_node_t node);
89*10923SEvan.Yan@Sun.COM hp_node_t	hp_sibling(hp_node_t node);
90*10923SEvan.Yan@Sun.COM int		hp_path(hp_node_t node, char *path, char *connection);
91*10923SEvan.Yan@Sun.COM int		hp_set_state(hp_node_t node, uint_t flags, int state,
92*10923SEvan.Yan@Sun.COM 		    hp_node_t *resultsp);
93*10923SEvan.Yan@Sun.COM int		hp_set_private(hp_node_t node, const char *options,
94*10923SEvan.Yan@Sun.COM 		    char **resultsp);
95*10923SEvan.Yan@Sun.COM int		hp_get_private(hp_node_t node, const char *options,
96*10923SEvan.Yan@Sun.COM 		    char **resultsp);
97*10923SEvan.Yan@Sun.COM int		hp_pack(hp_node_t root, char **bufp, size_t *lenp);
98*10923SEvan.Yan@Sun.COM int		hp_unpack(char *packed_buf, size_t packed_len, hp_node_t *retp);
99*10923SEvan.Yan@Sun.COM 
100*10923SEvan.Yan@Sun.COM #ifdef	__cplusplus
101*10923SEvan.Yan@Sun.COM }
102*10923SEvan.Yan@Sun.COM #endif
103*10923SEvan.Yan@Sun.COM 
104*10923SEvan.Yan@Sun.COM #endif	/* _LIBHOTPLUG_H */
105