Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Jun 2019 02:37:12 +0000 (UTC)
From:      Conrad Meyer <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r348599 - in head/sys/dev/virtio: . balloon block console network random scsi
Message-ID:  <201906040237.x542bCl8028148@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Tue Jun  4 02:37:11 2019
New Revision: 348599
URL: https://svnweb.freebsd.org/changeset/base/348599

Log:
  virtio(4): Add PNP match metadata for virtio devices
  
  Register MODULE_PNP_INFO for virtio devices using the newbus PNP information
  provided by the previous commit.  Matching can be quite simple; existing
  probe routines only matched on bus (implicit) and device_type.  The same
  matching criteria are retained exactly, but is now also available to
  devmatch(8).
  
  Reviewed by:	bryanv, markj; imp (earlier version)
  Differential Revision:	https://reviews.freebsd.org/D20407

Modified:
  head/sys/dev/virtio/balloon/virtio_balloon.c
  head/sys/dev/virtio/block/virtio_blk.c
  head/sys/dev/virtio/console/virtio_console.c
  head/sys/dev/virtio/network/if_vtnet.c
  head/sys/dev/virtio/random/virtio_random.c
  head/sys/dev/virtio/scsi/virtio_scsi.c
  head/sys/dev/virtio/virtio.h

Modified: head/sys/dev/virtio/balloon/virtio_balloon.c
==============================================================================
--- head/sys/dev/virtio/balloon/virtio_balloon.c	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/balloon/virtio_balloon.c	Tue Jun  4 02:37:11 2019	(r348599)
@@ -158,16 +158,14 @@ DRIVER_MODULE(virtio_balloon, virtio_pci, vtballoon_dr
 MODULE_VERSION(virtio_balloon, 1);
 MODULE_DEPEND(virtio_balloon, virtio, 1, 1, 1);
 
+VIRTIO_SIMPLE_PNPTABLE(virtio_balloon, VIRTIO_ID_BALLOON,
+    "VirtIO Balloon Adapter");
+VIRTIO_SIMPLE_PNPINFO(virtio_pci, virtio_balloon);
+
 static int
 vtballoon_probe(device_t dev)
 {
-
-	if (virtio_get_device_type(dev) != VIRTIO_ID_BALLOON)
-		return (ENXIO);
-
-	device_set_desc(dev, "VirtIO Balloon Adapter");
-
-	return (BUS_PROBE_DEFAULT);
+	return (VIRTIO_SIMPLE_PROBE(dev, virtio_balloon));
 }
 
 static int

Modified: head/sys/dev/virtio/block/virtio_blk.c
==============================================================================
--- head/sys/dev/virtio/block/virtio_blk.c	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/block/virtio_blk.c	Tue Jun  4 02:37:11 2019	(r348599)
@@ -261,6 +261,10 @@ DRIVER_MODULE(virtio_blk, virtio_pci, vtblk_driver, vt
 MODULE_VERSION(virtio_blk, 1);
 MODULE_DEPEND(virtio_blk, virtio, 1, 1, 1);
 
+VIRTIO_SIMPLE_PNPTABLE(virtio_blk, VIRTIO_ID_BLOCK, "VirtIO Block Adapter");
+VIRTIO_SIMPLE_PNPINFO(virtio_mmio, virtio_blk);
+VIRTIO_SIMPLE_PNPINFO(virtio_pci, virtio_blk);
+
 static int
 vtblk_modevent(module_t mod, int type, void *unused)
 {
@@ -285,13 +289,7 @@ vtblk_modevent(module_t mod, int type, void *unused)
 static int
 vtblk_probe(device_t dev)
 {
-
-	if (virtio_get_device_type(dev) != VIRTIO_ID_BLOCK)
-		return (ENXIO);
-
-	device_set_desc(dev, "VirtIO Block Adapter");
-
-	return (BUS_PROBE_DEFAULT);
+	return (VIRTIO_SIMPLE_PROBE(dev, virtio_blk));
 }
 
 static int

Modified: head/sys/dev/virtio/console/virtio_console.c
==============================================================================
--- head/sys/dev/virtio/console/virtio_console.c	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/console/virtio_console.c	Tue Jun  4 02:37:11 2019	(r348599)
@@ -261,6 +261,10 @@ DRIVER_MODULE(virtio_console, virtio_pci, vtcon_driver
 MODULE_VERSION(virtio_console, 1);
 MODULE_DEPEND(virtio_console, virtio, 1, 1, 1);
 
+VIRTIO_SIMPLE_PNPTABLE(virtio_console, VIRTIO_ID_CONSOLE,
+    "VirtIO Console Adapter");
+VIRTIO_SIMPLE_PNPINFO(virtio_pci, virtio_console);
+
 static int
 vtcon_modevent(module_t mod, int type, void *unused)
 {
@@ -305,13 +309,7 @@ vtcon_drain_all(void)
 static int
 vtcon_probe(device_t dev)
 {
-
-	if (virtio_get_device_type(dev) != VIRTIO_ID_CONSOLE)
-		return (ENXIO);
-
-	device_set_desc(dev, "VirtIO Console Adapter");
-
-	return (BUS_PROBE_DEFAULT);
+	return (VIRTIO_SIMPLE_PROBE(dev, virtio_console));
 }
 
 static int

Modified: head/sys/dev/virtio/network/if_vtnet.c
==============================================================================
--- head/sys/dev/virtio/network/if_vtnet.c	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/network/if_vtnet.c	Tue Jun  4 02:37:11 2019	(r348599)
@@ -325,6 +325,10 @@ MODULE_DEPEND(vtnet, virtio, 1, 1, 1);
 MODULE_DEPEND(vtnet, netmap, 1, 1, 1);
 #endif /* DEV_NETMAP */
 
+VIRTIO_SIMPLE_PNPTABLE(vtnet, VIRTIO_ID_NETWORK, "VirtIO Networking Adapter");
+VIRTIO_SIMPLE_PNPINFO(virtio_mmio, vtnet);
+VIRTIO_SIMPLE_PNPINFO(virtio_pci, vtnet);
+
 static int
 vtnet_modevent(module_t mod, int type, void *unused)
 {
@@ -361,13 +365,7 @@ vtnet_modevent(module_t mod, int type, void *unused)
 static int
 vtnet_probe(device_t dev)
 {
-
-	if (virtio_get_device_type(dev) != VIRTIO_ID_NETWORK)
-		return (ENXIO);
-
-	device_set_desc(dev, "VirtIO Networking Adapter");
-
-	return (BUS_PROBE_DEFAULT);
+	return (VIRTIO_SIMPLE_PROBE(dev, vtnet));
 }
 
 static int

Modified: head/sys/dev/virtio/random/virtio_random.c
==============================================================================
--- head/sys/dev/virtio/random/virtio_random.c	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/random/virtio_random.c	Tue Jun  4 02:37:11 2019	(r348599)
@@ -102,6 +102,10 @@ MODULE_VERSION(virtio_random, 1);
 MODULE_DEPEND(virtio_random, virtio, 1, 1, 1);
 MODULE_DEPEND(virtio_random, random_device, 1, 1, 1);
 
+VIRTIO_SIMPLE_PNPTABLE(virtio_random, VIRTIO_ID_ENTROPY,
+    "VirtIO Entropy Adapter");
+VIRTIO_SIMPLE_PNPINFO(virtio_pci, virtio_random);
+
 static int
 vtrnd_modevent(module_t mod, int type, void *unused)
 {
@@ -125,13 +129,7 @@ vtrnd_modevent(module_t mod, int type, void *unused)
 static int
 vtrnd_probe(device_t dev)
 {
-
-	if (virtio_get_device_type(dev) != VIRTIO_ID_ENTROPY)
-		return (ENXIO);
-
-	device_set_desc(dev, "VirtIO Entropy Adapter");
-
-	return (BUS_PROBE_DEFAULT);
+	return (VIRTIO_SIMPLE_PROBE(dev, virtio_random));
 }
 
 static int

Modified: head/sys/dev/virtio/scsi/virtio_scsi.c
==============================================================================
--- head/sys/dev/virtio/scsi/virtio_scsi.c	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/scsi/virtio_scsi.c	Tue Jun  4 02:37:11 2019	(r348599)
@@ -233,6 +233,9 @@ MODULE_VERSION(virtio_scsi, 1);
 MODULE_DEPEND(virtio_scsi, virtio, 1, 1, 1);
 MODULE_DEPEND(virtio_scsi, cam, 1, 1, 1);
 
+VIRTIO_SIMPLE_PNPTABLE(virtio_scsi, VIRTIO_ID_SCSI, "VirtIO SCSI Adapter");
+VIRTIO_SIMPLE_PNPINFO(virtio_pci, virtio_scsi);
+
 static int
 vtscsi_modevent(module_t mod, int type, void *unused)
 {
@@ -256,13 +259,7 @@ vtscsi_modevent(module_t mod, int type, void *unused)
 static int
 vtscsi_probe(device_t dev)
 {
-
-	if (virtio_get_device_type(dev) != VIRTIO_ID_SCSI)
-		return (ENXIO);
-
-	device_set_desc(dev, "VirtIO SCSI Adapter");
-
-	return (BUS_PROBE_DEFAULT);
+	return (VIRTIO_SIMPLE_PROBE(dev, virtio_scsi));
 }
 
 static int

Modified: head/sys/dev/virtio/virtio.h
==============================================================================
--- head/sys/dev/virtio/virtio.h	Tue Jun  4 02:34:59 2019	(r348598)
+++ head/sys/dev/virtio/virtio.h	Tue Jun  4 02:37:11 2019	(r348599)
@@ -63,6 +63,21 @@ struct virtio_feature_desc {
 	const char	*vfd_str;
 };
 
+struct virtio_pnp_match {
+	uint32_t	 device_type;
+	const char	*description;
+};
+#define VIRTIO_SIMPLE_PNPTABLE(driver, devtype, desc)			\
+	static const struct virtio_pnp_match driver ## _match = {	\
+		.device_type = devtype,					\
+		.description = desc,					\
+	}
+#define VIRTIO_SIMPLE_PNPINFO(bus, driver)				\
+	MODULE_PNP_INFO("U32:device_type;D:#", bus, driver,		\
+	    &driver ## _match, 1)
+#define VIRTIO_SIMPLE_PROBE(dev, driver)				\
+	(virtio_simple_probe(dev, &driver ## _match))
+
 const char *virtio_device_name(uint16_t devid);
 void	 virtio_describe(device_t dev, const char *msg,
 	     uint64_t features, struct virtio_feature_desc *feature_desc);
@@ -145,5 +160,15 @@ __CONCAT(virtio_set_,name)(device_t dev, void *val)			
 VIRTIO_WRITE_IVAR(feature_desc,	VIRTIO_IVAR_FEATURE_DESC);
 
 #undef VIRTIO_WRITE_IVAR
+
+static inline int
+virtio_simple_probe(device_t dev, const struct virtio_pnp_match *match)
+{
+
+	if (virtio_get_device_type(dev) != match->device_type)
+		return (ENXIO);
+	device_set_desc(dev, match->description);
+	return (BUS_PROBE_DEFAULT);
+}
 
 #endif /* _VIRTIO_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201906040237.x542bCl8028148>