1*2912Sartem /***************************************************************************
2*2912Sartem  *
3*2912Sartem  * devinfo.h : definitions for libdevinfo-based device enumeration
4*2912Sartem  *
5*2912Sartem  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
6*2912Sartem  * Use is subject to license terms.
7*2912Sartem  *
8*2912Sartem  * Licensed under the Academic Free License version 2.1
9*2912Sartem  *
10*2912Sartem  **************************************************************************/
11*2912Sartem 
12*2912Sartem #pragma	ident	"%Z%%M%	%I%	%E% SMI"
13*2912Sartem 
14*2912Sartem #ifndef DEVINFO_H
15*2912Sartem #define DEVINFO_H
16*2912Sartem 
17*2912Sartem #include <glib.h>
18*2912Sartem #include <libdevinfo.h>
19*2912Sartem 
20*2912Sartem #include "../hald.h"
21*2912Sartem #include "../device_info.h"
22*2912Sartem 
23*2912Sartem typedef struct DevinfoDevHandler_s
24*2912Sartem {
25*2912Sartem 	HalDevice *(*add) (HalDevice *parent, di_node_t node, char *devfs_path, char *device_type);
26*2912Sartem 
27*2912Sartem 	/* yet unused */
28*2912Sartem 	void (*remove) (char *devfs_path);
29*2912Sartem 
30*2912Sartem 	void (*hotplug_begin_add) (HalDevice *d, HalDevice *parent, struct DevinfoDevHandler_s *handler, void *end_token);
31*2912Sartem 
32*2912Sartem 	void (*hotplug_begin_remove) (HalDevice *d, struct DevinfoDevHandler_s *handler, void *end_token);
33*2912Sartem 
34*2912Sartem 	void (*probing_done) (HalDevice *d, guint32 exit_type, gint return_code, char **error, gpointer userdata1, gpointer userdata2);
35*2912Sartem 
36*2912Sartem 	const gchar *(*get_prober) (HalDevice *d, int *timeout);
37*2912Sartem } DevinfoDevHandler;
38*2912Sartem 
39*2912Sartem #define PROP_INT(d, node, v, diprop, halprop) \
40*2912Sartem 	if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, diprop, &(v)) > 0) { \
41*2912Sartem 		hal_device_property_set_int (d, halprop, *(v)); \
42*2912Sartem 	}
43*2912Sartem 
44*2912Sartem #define PROP_STR(d, node, v, diprop, halprop) \
45*2912Sartem 	if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, diprop, &(v)) > 0) { \
46*2912Sartem 		hal_device_property_set_string (d, halprop, v); \
47*2912Sartem 	}
48*2912Sartem 
49*2912Sartem #define PROP_BOOL(d, node, v, diprop, halprop) \
50*2912Sartem 	hal_device_property_set_bool (d, halprop, \
51*2912Sartem 	    (di_prop_lookup_ints(DDI_DEV_T_ANY, node, diprop, &(v)) >= 0));
52*2912Sartem 
53*2912Sartem #define	NELEM(a)	(sizeof (a) / sizeof (*(a)))
54*2912Sartem 
55*2912Sartem void devinfo_add (HalDevice *parent, gchar *path);
56*2912Sartem void devinfo_set_default_properties (HalDevice *d, HalDevice *parent, di_node_t node, char *devfs_path);
57*2912Sartem void devinfo_callouts_preprobing_done (HalDevice *d, gpointer userdata1, gpointer userdata2);
58*2912Sartem void devinfo_callouts_probing_done (HalDevice *d, guint32 exit_type, gint return_code, char **error,
59*2912Sartem 	gpointer userdata1, gpointer userdata2);
60*2912Sartem void devinfo_callouts_add_done (HalDevice *d, gpointer userdata1, gpointer userdata2);
61*2912Sartem void devinfo_callouts_remove_done (HalDevice *d, gpointer userdata1, gpointer userdata2);
62*2912Sartem void hotplug_event_begin_add_devinfo (HalDevice *d, HalDevice *parent, DevinfoDevHandler *handler, void *end_token);
63*2912Sartem void devinfo_remove (gchar *path);
64*2912Sartem void devinfo_remove_branch (gchar *path, HalDevice *d);
65*2912Sartem void hotplug_event_begin_remove_devinfo (HalDevice *d, gchar *devfs_path, void *end_token);
66*2912Sartem void devinfo_hotplug_enqueue(HalDevice *d, gchar *devfs_path, DevinfoDevHandler *handler, int action, int front);
67*2912Sartem void devinfo_add_enqueue(HalDevice *d, gchar *devfs_path, DevinfoDevHandler *handler);
68*2912Sartem void devinfo_add_enqueue_at_front(HalDevice *d, gchar *devfs_path, DevinfoDevHandler *handler);
69*2912Sartem void devinfo_remove_enqueue(gchar *devfs_path, DevinfoDevHandler *handler);
70*2912Sartem gboolean devinfo_device_rescan (HalDevice *d);
71*2912Sartem 
72*2912Sartem #endif /* DEVINFO_H */
73