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()  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	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 mul-
     tiple  drivers  that are inter-dependent.	The order argument should be one
     of the SYSINIT(9) initialization ordering constants (SI_ORDER_*).	The  de-
     fault  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 spe-
     cific  pass  level.   The boot time probe and attach process makes multiple
     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  dur-
     ing  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)

HISTORY
     Prior to FreeBSD 14.0, these macros accepted an additional devclass_t argu-
     ment after driver.

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

FreeBSD ports 15.1		 April 19, 2022 		DRIVER_MODULE(9)

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

home | help