/* extern int */
/* devinfo_test( char *in ); */
extern di_node_t
di_init(const char *phys_path, unsigned int flag);
extern void
di_fini(di_node_t root);
/*
* tree traversal
*/
extern di_node_t di_parent_node(di_node_t node);
extern di_node_t di_sibling_node(di_node_t node);
extern di_node_t di_child_node(di_node_t node);
extern di_node_t di_drv_first_node(const char *drv_name, di_node_t root);
extern di_node_t di_drv_next_node(di_node_t node);
/*
* Null handles to make handles really opaque
*/
#define NULL 0
#define DI_NODE_NIL NULL
#define DI_MINOR_NIL NULL
#define DI_PROM_PROP_NIL NULL
#define DI_PROM_HANDLE_NIL NULL
#define DIIOC (0xdf<<8)
#define DDI_DEV_T_NONE (dev_t) -1
/*
* Any combination of the following ORed together will take a snapshot
* of the device configuration data.
*
* XXX First three are public, last three are private
*/
#define DINFOSUBTREE DIIOC | 0x01
#define DINFOMINOR DIIOC | 0x02
#define DINFOPROP DIIOC | 0x04
#define DINFOCPYALL (DINFOSUBTREE | DINFOPROP | DINFOMINOR)
/* -- di_node_t functions -- */
char *di_binding_name(di_node_t node);
char *di_bus_addr(di_node_t node);
/* int di_compatible_names(di_node_t node, char **OUTPUT); */
ddi_devid_t di_devid(di_node_t node);
char *di_driver_name(di_node_t node);
unsigned int di_state(di_node_t node);
/* node & device states */
#define DI_DRIVER_DETACHED 0x8000
#define DI_DEVICE_OFFLINE 0x1
#define DI_DEVICE_DOWN 0x2
#define DI_BUS_QUIESCED 0x100
#define DI_BUS_DOWN 0x200
/*
int isDevidNull( ddi_devid_t devid );
*/
#define DI_BUS_OPS 0x1
#define DI_CB_OPS 0x2
#define DI_STREAM_OPS 0x4
unsigned int di_driver_ops(di_node_t node);
int di_instance(di_node_t node);
#define DI_PSEUDO_NODEID -1
#define DI_SID_NODEID -2
#define DI_PROM_NODEID -3
int di_nodeid(di_node_t node);
char *di_node_name(di_node_t node);
extern di_prop_t di_prop_next(di_node_t node, di_prop_t prop);
extern char *di_prop_name(di_prop_t prop);
extern int di_prop_type(di_prop_t prop);
#define DI_PROP_TYPE_BOOLEAN 0
#define DI_PROP_TYPE_INT 1
#define DI_PROP_TYPE_STRING 2
#define DI_PROP_TYPE_BYTE 3
#define DI_PROP_TYPE_UNKNOWN 4
#define DI_PROP_TYPE_UNDEF_IT 5
extern dev_t di_prop_devt( di_prop_t prop );
/* extern major_t major(dev_t device);
extern minor_t minor(dev_t device);
*/
extern int di_prop_ints(di_prop_t prop, int **prop_data);
extern int di_prop_strings(di_prop_t prop, char **prop_data);
extern int di_prop_bytes(di_prop_t prop, uchar_t **prop_data);
extern di_minor_t di_minor_next( di_node_t node, di_minor_t minor );
extern dev_t di_minor_devt( di_minor_t minor );
extern char *di_minor_name( di_minor_t minor );
extern char *di_minor_nodetype( di_minor_t minor );
extern int di_minor_spectype( di_minor_t minor );
/* From /usr/include/sys/stat.h */
#define S_IFCHR 0x2000 /* character special */
#define S_IFBLK 0x6000 /* block special */
/* -- PROM access -- */
extern di_prom_handle_t di_prom_init();
extern void di_prom_fini( di_prom_handle_t ph );
extern di_prom_prop_t di_prom_prop_next(di_prom_handle_t ph, di_node_t node,
di_prom_prop_t prom_prop);
extern char *di_prom_prop_name(di_prom_prop_t prom_prop);
extern int di_prom_prop_data(di_prom_prop_t prop, uchar_t **prom_prop_data);
/* -- from libdevid -- */
/*
extern
int devid_compare(ddi_devid_t devid1, ddi_devid_t devid2);
*/