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
This commit is contained in:
parent
3243205726
commit
655b8a18db
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user