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

FreeBSD Manual Pages

  
 
  

home | help
DRIVER_MODULE(9)	   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,	 modeventhand_t	  evh,
	   void	*arg);

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

       EARLY_DRIVER_MODULE(name, busname, driver_t driver, modeventhand_t evh,
	   void	*arg, int pass);

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

DESCRIPTION
       The DRIVER_MODULE() macro declares a  kernel  driver.   DRIVER_MODULE()
       expands	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
       supplied	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
       using the same driver on	the same or different buses.  For example, the
       following is allowed:

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

       DRIVER_MODULE(foo, pci, foo_driver, 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  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 ensure 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 mul-
       tiple passes over the device tree.  Certain critical drivers that  pro-
       vide 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	regis-
       tered 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)

HISTORY
       Prior  to  FreeBSD 14.0,	these macros accepted an additional devclass_t
       argument	after driver.

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

FreeBSD	13.2			April 19, 2022		      DRIVER_MODULE(9)

NAME | SYNOPSIS | DESCRIPTION | SEE ALSO | HISTORY | AUTHORS

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

home | help