Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DRIVER_MODULE(9)	 BSD Kernel Developer's	Manual	      DRIVER_MODULE(9)

NAME
     DRIVER_MODULE, DRIVER_MODULE_ORDERED, EARLY_DRIVER_MODULE,
     EARLY_DRIVER_MODULE_ORDERED -- kernel driver declaration macro

SYNOPSIS
     #include <sys/param.h>
     #include <sys/kernel.h>
     #include <sys/bus.h>
     #include <sys/module.h>

     DRIVER_MODULE(name, busname, driver_t driver, devclass_t devclass,
	 modeventhand_t	evh, void *arg);

     DRIVER_MODULE_ORDERED(name, busname, driver_t driver,
	 devclass_t devclass, modeventhand_t evh, void *arg, int order);

     EARLY_DRIVER_MODULE(name, busname,	driver_t driver, devclass_t devclass,
	 modeventhand_t	evh, void *arg,	enum sysinit_elem_order	order,
	 int pass);

     EARLY_DRIVER_MODULE_ORDERED(name, busname,	driver_t driver,
	 devclass_t devclass, modeventhand_t evh, void *arg,
	 enum sysinit_elem_order order,	int pass);

DESCRIPTION
     The DRIVER_MODULE() macro declares	a kernel driver.  DRIVER_MODULE() ex-
     pands to the real driver declaration, where the phrase name is used as
     the naming	prefix for the driver and its functions.  Note that it is sup-
     plied as plain text, and not a char or char *.

     busname is	the parent bus of the driver (PCI, ISA,	PPBUS and others),
     e.g. `pci', `isa',	or `ppbus'.

     The identifier used in DRIVER_MODULE() can	be different from the driver
     name.  Also, the same driver identifier can exist on different buses,
     which is a	pretty clean way of making front ends for different cards us-
     ing the same driver on the	same or	different buses.  For example, the
     following is allowed:

     DRIVER_MODULE(foo,	isa, foo_driver, foo_devclass, NULL, NULL);

     DRIVER_MODULE(foo,	pci, foo_driver, foo_devclass, NULL, NULL);

     driver is the driver of type driver_t, which contains the information
     about the driver and is therefore one of the two most important parts of
     the call to DRIVER_MODULE().

     The devclass argument contains the	kernel-internal	information about the
     device, which will	be used	within the kernel driver module.

     The evh argument is the event handler which is called when	the driver (or
     module) is	loaded or unloaded (see	module(9)).

     The arg is	unused at this time and	should be a NULL pointer.

     The DRIVER_MODULE_ORDERED() macro allows a	driver to be registered	in a
     specific order.  This can be useful if a single kernel module contains
     multiple drivers that are inter-dependent.	 The order argument should be
     one of the	SYSINIT(9) initialization ordering constants (SI_ORDER_*).
     The default order for a driver module is SI_ORDER_MIDDLE.	Typically a
     module will specify an order of SI_ORDER_ANY for a	single driver to en-
     sure it is	registered last.

     The EARLY_DRIVER_MODULE() macro allows a driver to	be registered for a
     specific pass level.  The boot time probe and attach process makes	multi-
     ple passes	over the device	tree.  Certain critical	drivers	that provide
     basic services needed by other devices are	attached during	earlier
     passes.  Most drivers are attached	in a final general pass.  A driver
     that attaches during an early pass	must register for a specific pass
     level (BUS_PASS_*)	via the	pass argument.	Once a driver is registered it
     is	available to attach to devices for all subsequent passes.

     The EARLY_DRIVER_MODULE_ORDERED() macro allows a driver to	be registered
     both in a specific	order and for a	specific pass level.

SEE ALSO
     device(9),	driver(9), module(9), MODULE_PNP_INFO(9), SYSINIT(9)

AUTHORS
     This manual page was written by Alexander Langer <alex@FreeBSD.org>.

BSD			       February	12, 2018			   BSD

NAME | SYNOPSIS | DESCRIPTION | SEE ALSO | AUTHORS

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=DRIVER_MODULE&sektion=9&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help