Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Jan 2016 11:18:58 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r294086 - in head/sys: compat/linuxkpi/common/include/linux compat/linuxkpi/common/src sys
Message-ID:  <201601151118.u0FBIw98000265@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri Jan 15 11:18:58 2016
New Revision: 294086
URL: https://svnweb.freebsd.org/changeset/base/294086

Log:
  Implement support for PCI suspend, resume and shutdown events in the
  LinuxKPI. Fix a few spaces to tabs. Bump the FreeBSD version to force
  recompilation of existing KMODs.
  
  MFC after:	1 week
  Sponsored by:	Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/include/linux/pci.h
  head/sys/compat/linuxkpi/common/src/linux_pci.c
  head/sys/sys/param.h

Modified: head/sys/compat/linuxkpi/common/include/linux/pci.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/pci.h	Fri Jan 15 09:23:12 2016	(r294085)
+++ head/sys/compat/linuxkpi/common/include/linux/pci.h	Fri Jan 15 11:18:58 2016	(r294086)
@@ -129,8 +129,9 @@ struct pci_driver {
 	const struct pci_device_id		*id_table;
 	int  (*probe)(struct pci_dev *dev, const struct pci_device_id *id);
 	void (*remove)(struct pci_dev *dev);
-        int  (*suspend) (struct pci_dev *dev, pm_message_t state);      /* Device suspended */
-        int  (*resume) (struct pci_dev *dev);                   /* Device woken up */
+	int  (*suspend) (struct pci_dev *dev, pm_message_t state);	/* Device suspended */
+	int  (*resume) (struct pci_dev *dev);		/* Device woken up */
+	void (*shutdown) (struct pci_dev *dev);		/* Device shutdown */
 	driver_t			driver;
 	devclass_t			bsdclass;
         const struct pci_error_handlers       *err_handler;

Modified: head/sys/compat/linuxkpi/common/src/linux_pci.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_pci.c	Fri Jan 15 09:23:12 2016	(r294085)
+++ head/sys/compat/linuxkpi/common/src/linux_pci.c	Fri Jan 15 11:18:58 2016	(r294086)
@@ -61,11 +61,17 @@ __FBSDID("$FreeBSD$");
 static device_probe_t linux_pci_probe;
 static device_attach_t linux_pci_attach;
 static device_detach_t linux_pci_detach;
+static device_suspend_t linux_pci_suspend;
+static device_resume_t linux_pci_resume;
+static device_shutdown_t linux_pci_shutdown;
 
 static device_method_t pci_methods[] = {
 	DEVMETHOD(device_probe, linux_pci_probe),
 	DEVMETHOD(device_attach, linux_pci_attach),
 	DEVMETHOD(device_detach, linux_pci_detach),
+	DEVMETHOD(device_suspend, linux_pci_suspend),
+	DEVMETHOD(device_resume, linux_pci_resume),
+	DEVMETHOD(device_shutdown, linux_pci_shutdown),
 	DEVMETHOD_END
 };
 
@@ -169,6 +175,46 @@ linux_pci_detach(device_t dev)
 	return (0);
 }
 
+static int
+linux_pci_suspend(device_t dev)
+{
+	struct pm_message pm = { };
+	struct pci_dev *pdev;
+	int err;
+
+	pdev = device_get_softc(dev);
+	if (pdev->pdrv->suspend != NULL)
+		err = -pdev->pdrv->suspend(pdev, pm);
+	else
+		err = 0;
+	return (err);
+}
+
+static int
+linux_pci_resume(device_t dev)
+{
+	struct pci_dev *pdev;
+	int err;
+
+	pdev = device_get_softc(dev);
+	if (pdev->pdrv->resume != NULL)
+		err = -pdev->pdrv->resume(pdev);
+	else
+		err = 0;
+	return (err);
+}
+
+static int
+linux_pci_shutdown(device_t dev)
+{
+	struct pci_dev *pdev;
+
+	pdev = device_get_softc(dev);
+	if (pdev->pdrv->shutdown != NULL)
+		pdev->pdrv->shutdown(pdev);
+	return (0);
+}
+
 int
 pci_register_driver(struct pci_driver *pdrv)
 {

Modified: head/sys/sys/param.h
==============================================================================
--- head/sys/sys/param.h	Fri Jan 15 09:23:12 2016	(r294085)
+++ head/sys/sys/param.h	Fri Jan 15 11:18:58 2016	(r294086)
@@ -58,7 +58,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1100093	/* Master, propagated to newvers */
+#define __FreeBSD_version 1100094	/* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,



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