svn commit: r359527 - in stable/11/sys/compat/linuxkpi/common: include/linux src
Konstantin Belousov
kib at FreeBSD.org
Wed Apr 1 17:19:37 UTC 2020
Author: kib
Date: Wed Apr 1 17:19:27 2020
New Revision: 359527
URL: https://svnweb.freebsd.org/changeset/base/359527
Log:
MFC r359096, r359165 (by imp):
linuxkpi: Add infrastructure to pass FreeBSD IOV method calls into
pci_driver methods.
Modified:
stable/11/sys/compat/linuxkpi/common/include/linux/pci.h
stable/11/sys/compat/linuxkpi/common/src/linux_pci.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/compat/linuxkpi/common/include/linux/pci.h
==============================================================================
--- stable/11/sys/compat/linuxkpi/common/include/linux/pci.h Wed Apr 1 17:16:53 2020 (r359526)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/pci.h Wed Apr 1 17:19:27 2020 (r359527)
@@ -37,8 +37,10 @@
#include <sys/param.h>
#include <sys/bus.h>
+#include <sys/nv.h>
#include <sys/pciio.h>
#include <sys/rman.h>
+#include <sys/bus.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pci_private.h>
@@ -189,6 +191,11 @@ struct pci_driver {
struct device_driver driver;
const struct pci_error_handlers *err_handler;
bool isdrm;
+ int (*bsd_iov_init)(device_t dev, uint16_t num_vfs,
+ const nvlist_t *pf_config);
+ void (*bsd_iov_uninit)(device_t dev);
+ int (*bsd_iov_add_vf)(device_t dev, uint16_t vfnum,
+ const nvlist_t *vf_config);
};
struct pci_bus {
Modified: stable/11/sys/compat/linuxkpi/common/src/linux_pci.c
==============================================================================
--- stable/11/sys/compat/linuxkpi/common/src/linux_pci.c Wed Apr 1 17:16:53 2020 (r359526)
+++ stable/11/sys/compat/linuxkpi/common/src/linux_pci.c Wed Apr 1 17:19:27 2020 (r359527)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/fcntl.h>
#include <sys/file.h>
#include <sys/filio.h>
+#include <sys/pciio.h>
#include <sys/rwlock.h>
#include <vm/vm.h>
@@ -45,6 +46,10 @@ __FBSDID("$FreeBSD$");
#include <machine/stdarg.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pci_private.h>
+#include <dev/pci/pci_iov.h>
+
#include <linux/kobject.h>
#include <linux/device.h>
#include <linux/slab.h>
@@ -64,6 +69,9 @@ 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 pci_iov_init_t linux_pci_iov_init;
+static pci_iov_uninit_t linux_pci_iov_uninit;
+static pci_iov_add_vf_t linux_pci_iov_add_vf;
static device_method_t pci_methods[] = {
DEVMETHOD(device_probe, linux_pci_probe),
@@ -72,6 +80,9 @@ static device_method_t pci_methods[] = {
DEVMETHOD(device_suspend, linux_pci_suspend),
DEVMETHOD(device_resume, linux_pci_resume),
DEVMETHOD(device_shutdown, linux_pci_shutdown),
+ DEVMETHOD(pci_iov_init, linux_pci_iov_init),
+ DEVMETHOD(pci_iov_uninit, linux_pci_iov_uninit),
+ DEVMETHOD(pci_iov_add_vf, linux_pci_iov_add_vf),
DEVMETHOD_END
};
@@ -268,6 +279,47 @@ linux_pci_shutdown(device_t dev)
if (pdev->pdrv->shutdown != NULL)
pdev->pdrv->shutdown(pdev);
return (0);
+}
+
+static int
+linux_pci_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t *pf_config)
+{
+ struct pci_dev *pdev;
+ int error;
+
+ linux_set_current(curthread);
+ pdev = device_get_softc(dev);
+ if (pdev->pdrv->bsd_iov_init != NULL)
+ error = pdev->pdrv->bsd_iov_init(dev, num_vfs, pf_config);
+ else
+ error = EINVAL;
+ return (error);
+}
+
+static void
+linux_pci_iov_uninit(device_t dev)
+{
+ struct pci_dev *pdev;
+
+ linux_set_current(curthread);
+ pdev = device_get_softc(dev);
+ if (pdev->pdrv->bsd_iov_uninit != NULL)
+ pdev->pdrv->bsd_iov_uninit(dev);
+}
+
+static int
+linux_pci_iov_add_vf(device_t dev, uint16_t vfnum, const nvlist_t *vf_config)
+{
+ struct pci_dev *pdev;
+ int error;
+
+ linux_set_current(curthread);
+ pdev = device_get_softc(dev);
+ if (pdev->pdrv->bsd_iov_add_vf != NULL)
+ error = pdev->pdrv->bsd_iov_add_vf(dev, vfnum, vf_config);
+ else
+ error = EINVAL;
+ return (error);
}
static int
More information about the svn-src-stable-11
mailing list