xref: /dragonfly/lib/libdevinfo/devinfo.h (revision feaf0601)
10010e23aSHasso Tepper /*-
20010e23aSHasso Tepper  * Copyright (c) 2000 Michael Smith
30010e23aSHasso Tepper  * Copyright (c) 2000 BSDi
40010e23aSHasso Tepper  * All rights reserved.
50010e23aSHasso Tepper  *
60010e23aSHasso Tepper  * Redistribution and use in source and binary forms, with or without
70010e23aSHasso Tepper  * modification, are permitted provided that the following conditions
80010e23aSHasso Tepper  * are met:
90010e23aSHasso Tepper  * 1. Redistributions of source code must retain the above copyright
100010e23aSHasso Tepper  *    notice, this list of conditions and the following disclaimer.
110010e23aSHasso Tepper  * 2. Redistributions in binary form must reproduce the above copyright
120010e23aSHasso Tepper  *    notice, this list of conditions and the following disclaimer in the
130010e23aSHasso Tepper  *    documentation and/or other materials provided with the distribution.
140010e23aSHasso Tepper  *
150010e23aSHasso Tepper  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
160010e23aSHasso Tepper  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
170010e23aSHasso Tepper  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
180010e23aSHasso Tepper  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
190010e23aSHasso Tepper  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
200010e23aSHasso Tepper  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
210010e23aSHasso Tepper  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
220010e23aSHasso Tepper  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
230010e23aSHasso Tepper  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
240010e23aSHasso Tepper  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
250010e23aSHasso Tepper  * SUCH DAMAGE.
260010e23aSHasso Tepper  *
270010e23aSHasso Tepper  * $FreeBSD: src/lib/libdevinfo/devinfo.h,v 1.5 2005/08/31 14:57:39 rodrigc Exp $
280010e23aSHasso Tepper  */
290010e23aSHasso Tepper 
300010e23aSHasso Tepper #ifndef _DEVINFO_H_INCLUDED
310010e23aSHasso Tepper #define _DEVINFO_H_INCLUDED
320010e23aSHasso Tepper 
330010e23aSHasso Tepper #include <sys/cdefs.h>
340010e23aSHasso Tepper #include <sys/types.h>
35*feaf0601SSascha Wildner #define	_KERNEL_STRUCTURES	/* for enum device_state */
36*feaf0601SSascha Wildner #include <sys/bus.h>
370010e23aSHasso Tepper 
380010e23aSHasso Tepper typedef __uintptr_t	devinfo_handle_t;
390010e23aSHasso Tepper #define DEVINFO_ROOT_DEVICE	((devinfo_handle_t)0)
400010e23aSHasso Tepper 
41*feaf0601SSascha Wildner typedef enum device_state devinfo_state_t;
420010e23aSHasso Tepper 
430010e23aSHasso Tepper struct devinfo_dev {
440010e23aSHasso Tepper 	devinfo_handle_t	dd_handle;	/* device handle */
450010e23aSHasso Tepper 	devinfo_handle_t	dd_parent;	/* parent handle */
460010e23aSHasso Tepper 
470010e23aSHasso Tepper 	char			*dd_name;	/* name of device */
480010e23aSHasso Tepper 	char			*dd_desc;	/* device description */
490010e23aSHasso Tepper 	char			*dd_drivername;	/* name of attached driver*/
500010e23aSHasso Tepper 	char			*dd_pnpinfo;	/* pnp info from parent bus */
510010e23aSHasso Tepper 	char			*dd_location;	/* Where bus thinks dev at */
520010e23aSHasso Tepper 	uint32_t		dd_devflags;	/* API flags */
530010e23aSHasso Tepper 	uint16_t		dd_flags;	/* internal dev flags */
549f05f13fSImre Vadász #define DIF_ENABLED	0x0001		/* device should be probed/attached */
559f05f13fSImre Vadász 	devinfo_state_t		dd_state;	/* attachement state of dev */
560010e23aSHasso Tepper };
570010e23aSHasso Tepper 
580010e23aSHasso Tepper struct devinfo_rman {
590010e23aSHasso Tepper 	devinfo_handle_t	dm_handle;	/* resource manager handle */
600010e23aSHasso Tepper 
610010e23aSHasso Tepper 	unsigned long		dm_start;	/* resource start */
620010e23aSHasso Tepper 	unsigned long		dm_size;	/* resource size */
630010e23aSHasso Tepper 
640010e23aSHasso Tepper 	char			*dm_desc;	/* resource description */
650010e23aSHasso Tepper };
660010e23aSHasso Tepper 
670010e23aSHasso Tepper struct devinfo_res {
680010e23aSHasso Tepper 	devinfo_handle_t	dr_handle;	/* resource handle */
690010e23aSHasso Tepper 	devinfo_handle_t	dr_rman;	/* resource manager handle */
700010e23aSHasso Tepper 	devinfo_handle_t	dr_device;	/* owning device */
710010e23aSHasso Tepper 
720010e23aSHasso Tepper 	unsigned long		dr_start;	/* region start */
730010e23aSHasso Tepper 	unsigned long		dr_size;	/* region size */
740010e23aSHasso Tepper 	/* XXX add flags */
750010e23aSHasso Tepper };
760010e23aSHasso Tepper 
770010e23aSHasso Tepper __BEGIN_DECLS
780010e23aSHasso Tepper 
790010e23aSHasso Tepper /*
800010e23aSHasso Tepper  * Acquire a coherent copy of the kernel's device and resource tables.
810010e23aSHasso Tepper  * This must return success (zero) before any other interfaces will
820010e23aSHasso Tepper  * function.  Sets errno on failure.
830010e23aSHasso Tepper  */
840010e23aSHasso Tepper extern int	devinfo_init(void);
850010e23aSHasso Tepper 
860010e23aSHasso Tepper /*
870010e23aSHasso Tepper  * Release the storage associated with the internal copy of the device
880010e23aSHasso Tepper  * and resource tables. devinfo_init must be called before any attempt
890010e23aSHasso Tepper  * is made to use any other interfaces.
900010e23aSHasso Tepper  */
910010e23aSHasso Tepper extern void	devinfo_free(void);
920010e23aSHasso Tepper 
930010e23aSHasso Tepper /*
940010e23aSHasso Tepper  * Find a device/resource/resource manager by its handle.
950010e23aSHasso Tepper  */
960010e23aSHasso Tepper extern struct devinfo_dev
970010e23aSHasso Tepper 	*devinfo_handle_to_device(devinfo_handle_t handle);
980010e23aSHasso Tepper extern struct devinfo_res
990010e23aSHasso Tepper 	*devinfo_handle_to_resource(devinfo_handle_t handle);
1000010e23aSHasso Tepper extern struct devinfo_rman
1010010e23aSHasso Tepper 	*devinfo_handle_to_rman(devinfo_handle_t handle);
1020010e23aSHasso Tepper 
1030010e23aSHasso Tepper /*
1040010e23aSHasso Tepper  * Iterate over the children of a device, calling (fn) on each.  If
1050010e23aSHasso Tepper  * (fn) returns nonzero, abort the scan and return.
1060010e23aSHasso Tepper  */
1070010e23aSHasso Tepper extern int
1080010e23aSHasso Tepper 	devinfo_foreach_device_child(struct devinfo_dev *parent,
1090010e23aSHasso Tepper 	    int (* fn)(struct devinfo_dev *child, void *arg),
1100010e23aSHasso Tepper 	    void *arg);
1110010e23aSHasso Tepper 
1120010e23aSHasso Tepper /*
1130010e23aSHasso Tepper  * Iterate over all the resources owned by a device, calling (fn) on each.
1140010e23aSHasso Tepper  * If (fn) returns nonzero, abort the scan and return.
1150010e23aSHasso Tepper  */
1160010e23aSHasso Tepper extern int
1170010e23aSHasso Tepper 	devinfo_foreach_device_resource(struct devinfo_dev *dev,
1180010e23aSHasso Tepper 	    int (* fn)(struct devinfo_dev *dev,
1190010e23aSHasso Tepper 	    struct devinfo_res *res, void *arg),
1200010e23aSHasso Tepper 	    void *arg);
1210010e23aSHasso Tepper 
1220010e23aSHasso Tepper /*
1230010e23aSHasso Tepper  * Iterate over all the resources owned by a resource manager, calling (fn)
1240010e23aSHasso Tepper  * on each.  If (fn) returns nonzero, abort the scan and return.
1250010e23aSHasso Tepper  */
1260010e23aSHasso Tepper extern int
1270010e23aSHasso Tepper 	devinfo_foreach_rman_resource(struct devinfo_rman *rman,
1280010e23aSHasso Tepper 	    int (* fn)(struct devinfo_res *res, void *arg),
1290010e23aSHasso Tepper 	    void *arg);
1300010e23aSHasso Tepper 
1310010e23aSHasso Tepper /*
1320010e23aSHasso Tepper  * Iterate over all the resource managers, calling (fn) on each.  If (fn)
1330010e23aSHasso Tepper  * returns nonzero, abort the scan and return.
1340010e23aSHasso Tepper  */
1350010e23aSHasso Tepper extern int
1360010e23aSHasso Tepper 	devinfo_foreach_rman(int (* fn)(struct devinfo_rman *rman, void *arg),
1370010e23aSHasso Tepper 	    void *arg);
1380010e23aSHasso Tepper 
1390010e23aSHasso Tepper __END_DECLS
1400010e23aSHasso Tepper 
1410010e23aSHasso Tepper #endif /* ! _DEVINFO_H_INCLUDED */
142