File:  [DragonFly] / src / sys / sys / bus_private.h
Revision 1.5: download - view: text, annotated - select for diffs
Wed Apr 7 05:18:19 2004 UTC (10 years, 3 months ago) by dillon
Branches: MAIN
CVS tags: HEAD
Use hex bit values instead of decimal bit values (non operational change).

    1: /*-
    2:  * Copyright (c) 1997, 1998 Doug Rabson
    3:  * All rights reserved.
    4:  *
    5:  * Redistribution and use in source and binary forms, with or without
    6:  * modification, are permitted provided that the following conditions
    7:  * are met:
    8:  * 1. Redistributions of source code must retain the above copyright
    9:  *    notice, this list of conditions and the following disclaimer.
   10:  * 2. Redistributions in binary form must reproduce the above copyright
   11:  *    notice, this list of conditions and the following disclaimer in the
   12:  *    documentation and/or other materials provided with the distribution.
   13:  *
   14:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24:  * SUCH DAMAGE.
   25:  *
   26:  * $FreeBSD: src/sys/sys/bus_private.h,v 1.11.2.2 2000/08/03 00:25:22 peter Exp $
   27:  * $DragonFly: src/sys/sys/bus_private.h,v 1.5 2004/04/07 05:18:19 dillon Exp $
   28:  */
   29: 
   30: #ifndef _SYS_BUS_PRIVATE_H_
   31: #define _SYS_BUS_PRIVATE_H_
   32: 
   33: #include <sys/bus.h>
   34: 
   35: /*
   36:  * Used to attach drivers to devclasses.
   37:  */
   38: typedef struct driverlink *driverlink_t;
   39: struct driverlink {
   40: 	driver_t		*driver;
   41: 	TAILQ_ENTRY(driverlink) link;	/* list of drivers in devclass */
   42: };
   43: 
   44: /*
   45:  * Forward declarations
   46:  */
   47: typedef TAILQ_HEAD(devclass_list, devclass) devclass_list_t;
   48: typedef TAILQ_HEAD(driver_list, driverlink) driver_list_t;
   49: typedef TAILQ_HEAD(device_list, device) device_list_t;
   50: 
   51: struct devclass {
   52: 	TAILQ_ENTRY(devclass) link;
   53: 	driver_list_t	drivers;	/* bus devclasses store drivers for bus */
   54: 	char		*name;
   55: 	device_t	*devices;	/* array of devices indexed by unit */
   56: 	int		maxunit;	/* size of devices array */
   57: };
   58: 
   59: /*
   60:  * Resources from config(8).
   61:  */
   62: typedef enum {
   63: 	RES_INT, RES_STRING, RES_LONG
   64: } resource_type;
   65: 
   66: struct config_resource {
   67: 	char		*name;
   68: 	resource_type	type;
   69: 	union {
   70: 		long	longval;
   71: 		int	intval;
   72: 		char*	stringval;
   73: 	} u;
   74: };
   75: 
   76: struct config_device {
   77: 	char			*name;		/* e.g. "lpt", "wdc" etc */
   78: 	int			unit;
   79: 	int			resource_count;
   80: 	struct config_resource	*resources;
   81: };
   82: 
   83: /*
   84:  * Implementation of device.
   85:  */
   86: struct device {
   87: 	/*
   88: 	 * A device is a kernel object. The first field must be the
   89: 	 * current ops table for the object.
   90: 	 */
   91: 	KOBJ_FIELDS;
   92: 
   93: 	/*
   94: 	 * Device hierarchy.
   95: 	 */
   96: 	TAILQ_ENTRY(device)	link;		/* list of devices in parent */
   97: 	device_t		parent;
   98: 	device_list_t		children;	/* list of subordinate devices */
   99: 
  100: 	/*
  101: 	 * Details of this device.
  102: 	 */
  103: 	driver_t	*driver;
  104: 	devclass_t	devclass;	/* device class which we are in */
  105: 	int		unit;
  106: 	char*		nameunit;	/* name+unit e.g. foodev0 */
  107: 	char*		desc;		/* driver specific description */
  108: 	int		busy;		/* count of calls to device_busy() */
  109: 	device_state_t	state;
  110: 	uint32_t	devflags;	/* api level flags for device_get_flags() */
  111: 	u_short		flags;
  112: #define DF_ENABLED	0x0001		/* device should be probed/attached */
  113: #define DF_FIXEDCLASS	0x0002		/* devclass specified at create time */
  114: #define DF_WILDCARD	0x0004		/* unit was originally wildcard */
  115: #define DF_DESCMALLOCED	0x0008		/* description was malloced */
  116: #define DF_QUIET	0x0010		/* don't print verbose attach message */
  117: #define DF_DONENOMATCH	0x0020		/* don't execute DEVICE_NOMATCH again */
  118: #define DF_EXTERNALSOFTC 0x0040		/* softc not allocated by us */
  119: 	u_char		order;		/* order from device_add_child_ordered() */
  120: 	u_char		pad;
  121: #ifdef DEVICE_SYSCTLS
  122: 	struct sysctl_oid	oid[4];
  123: 	struct sysctl_oid_list oidlist[1];
  124: #endif
  125: 	void		*ivars;
  126: 	void		*softc;
  127: };
  128: 
  129: struct device_op_desc {
  130: 	unsigned int	offset;		/* offset in driver ops */
  131: 	struct method*	method;		/* internal method implementation */
  132: 	devop_t		deflt;		/* default implementation */
  133: 	const char*	name;		/* unique name (for registration) */
  134: };
  135: 
  136: #endif /* !_SYS_BUS_PRIVATE_H_ */