svn commit: r294086 - in head/sys: compat/linuxkpi/common/include/linux compat/linuxkpi/common/src sys
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Jan 15 11:19:00 UTC 2016
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,
More information about the svn-src-all
mailing list