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

FreeBSD Manual Pages


home | help
MODULE_PNP_INFO(9)     FreeBSD Kernel Developer's Manual    MODULE_PNP_INFO(9)

     MODULE_PNP_INFO --	register plug and play information for device matching

     #include <sys/module.h>

     MODULE_PNP_INFO(const char	*descriptor_string, bus, module, void *table,
	 size_t	num_entries);

     The MODULE_PNP_INFO() macro registers a table of device-identifying data
     for use by	devmatch(8).  Since it is built	off module marking macros, it
     must follow a DRIVER_MODULE(9) line.

     The macro takes a descriptor_string that describes	the memory layout of
     table entries.  The string	is a series of members separated by semi-
     colons.  Members are identified by	a type and a name.  They are encoded
     in	the descriptor string by concatenating the type	with a colon, followed
     by	the name.  (The	special	type W32 represents two	members.  The first
     name is encoded like any other type.  The second name is encoded by ap-
     pending a forward slash and the second name after the first.)

     Types are one of the following:

	  uint8_t element.

	  Same as U8, except that the sentinel value 0xFF matches any.

	  uint16_t element; any	value greater than or equal matches.

	  uint16_t element; any	value less than	or equal matches.

	  uint16_t element; mask of which of the following fields to use.

	  uint16_t element.

	  Same as U16, except that the sentinel	value 0xFFFF matches any.

	  uint32_t element.

	  Same as U32, except that the sentinel	value 0xFFFFFFFF matches any.

	  Two uint16_t values; the first named member is in the	least signifi-
	  cant word and	the second named member	is in the most significant

     "Z"  A pointer to a string	to match exactly.

     "D"  A pointer to a human readable	description for	the device.

     "P"  A pointer that should	be ignored.

     "E"  EISA PNP Identifier.

     "T"  PNP info that	is true	for the	whole table.  The driver code checks
	  for these condition pragmatically before using this table to match
	  devices.  This item must come	last in	the list.

     The pseudo-name "#" is reserved for fields	that should be ignored.	 Any
     member that does not match	the parent device's pnpinfo output must	be ig-

     The bus parameter is an unquoted word naming the parent bus of the
     driver.  For example, "pci".

     The module	parameter is also an unquoted word.  It	must be	unique to the
     driver.  Usually the driver's name	is used.

     The table parameter points	to the device matching data with entries
     matching the descriptor_string.

     The num_entries parameter is the number of	entries	in the table, i.e.,
     `nitems(table)'.  Note that only valid entries should be included.	 If
     the table contains	trailing zero or bogus values, they should not be in-
     cluded in num_entries.

     Example 1:	Using W32 for vendor/device pair

       The following example shows usage of W32	type when vendor/device	values
       are combined into single	uint32_t value:

       #include	<sys/param.h>
       #include	<sys/module.h>

       static struct my_pciids {
	       uint32_t	devid;
	       const char *desc;
       } my_ids[] = {
	       { 0x12345678, "Foo bar" },
	       { 0x9abcdef0, "Baz fizz"	},

       MODULE_PNP_INFO("W32:vendor/device;D:#",	pci, my_driver,	my_ids,

     Example 2:	Using T	for common vendor value

       The following example shows usage of T type when	all entries in the ta-
       ble have	the same vendor	value:

       #include	<sys/param.h>
       #include	<sys/module.h>

       static struct my_pciids {
	       uint16_t	device;
	       const char *desc;
       } my_ids[] = {
	       { 0x9abc, "Foo bar" },
	       { 0xdef0, "Baz fizz" },

       MODULE_PNP_INFO("U16:device;D:#;T:vendor=0x1234", pci, my_driver,
	   my_ids, nitems(my_ids));

     devmatch(8), DRIVER_MODULE(9), module(9)

     The macro MODULE_PNP_INFO appeared	in FreeBSD 11.0.

     The PNP framework and devmatch(8) utility were written by Warner Losh

FreeBSD	13.0			October	5, 2018			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help