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 _LIBHOTPLUG_H
28#define	_LIBHOTPLUG_H
29
30#ifdef	__cplusplus
31extern "C" {
32#endif
33
34#include <sys/types.h>
35
36/*
37 * Define node types in hotplug snapshot.
38 */
39#define	HP_NODE_NONE		0
40#define	HP_NODE_DEVICE		1
41#define	HP_NODE_CONNECTOR	2
42#define	HP_NODE_PORT		3
43#define	HP_NODE_USAGE		4
44
45/*
46 * Define flags for hp_init().
47 */
48#define	HPINFOUSAGE		0x1
49#define	HPINFOSEARCH		0x2	/* private flag */
50
51/*
52 * Define flags for hp_set_state().
53 */
54#define	HPFORCE			0x1
55#define	HPQUERY			0x2
56
57/*
58 * Define private flags.
59 */
60
61/*
62 * Define return values for hp_traverse() callbacks.
63 */
64#define	HP_WALK_CONTINUE	0
65#define	HP_WALK_PRUNECHILD	1
66#define	HP_WALK_PRUNESIBLING	2
67#define	HP_WALK_TERMINATE	3
68
69/*
70 * Define opaque handle to hotplug nodes.
71 */
72typedef struct hp_node *hp_node_t;
73
74/*
75 * Interface prototypes.
76 */
77hp_node_t	hp_init(const char *path, const char *connection, uint_t flags);
78void		hp_fini(hp_node_t root);
79int		hp_traverse(hp_node_t root, void *arg,
80		    int (*hp_callback)(hp_node_t, void *arg));
81int		hp_type(hp_node_t node);
82char		*hp_name(hp_node_t node);
83char		*hp_usage(hp_node_t node);
84int		hp_state(hp_node_t node);
85char		*hp_description(hp_node_t node);
86time_t		hp_last_change(hp_node_t node);
87hp_node_t	hp_parent(hp_node_t node);
88hp_node_t	hp_child(hp_node_t node);
89hp_node_t	hp_sibling(hp_node_t node);
90int		hp_path(hp_node_t node, char *path, char *connection);
91int		hp_set_state(hp_node_t node, uint_t flags, int state,
92		    hp_node_t *resultsp);
93int		hp_set_private(hp_node_t node, const char *options,
94		    char **resultsp);
95int		hp_get_private(hp_node_t node, const char *options,
96		    char **resultsp);
97int		hp_pack(hp_node_t root, char **bufp, size_t *lenp);
98int		hp_unpack(char *packed_buf, size_t packed_len, hp_node_t *retp);
99
100#ifdef	__cplusplus
101}
102#endif
103
104#endif	/* _LIBHOTPLUG_H */
105