aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2015-05-28 22:01:50 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2015-05-28 22:01:50 +0000
commitf3bb92515317f9b66fca73deca375a79d49dc54a (patch)
treea5e7bfbf84ce57b511065c85cc47c6976244f58e
parente54a659a263d1b242c0a73975134def472847ab4 (diff)
downloadsrc-f3bb92515317f9b66fca73deca375a79d49dc54a.tar.gz
src-f3bb92515317f9b66fca73deca375a79d49dc54a.zip
Create a separate kobj interface for leaf-driver PCI IOV methods.
Leaf drivers should not import the PCI bus interface to add IOV handling. Instead, move the IOV client methods to a separate kobj interface. Differential Revision: https://reviews.freebsd.org/D2584 Reviewed by: rstone
Notes
Notes: svn path=/head/; revision=283670
-rw-r--r--ObsoleteFiles.inc4
-rw-r--r--share/man/man9/Makefile6
-rw-r--r--share/man/man9/PCI_IOV_ADD_VF.9 (renamed from share/man/man9/PCI_ADD_VF.9)31
-rw-r--r--share/man/man9/PCI_IOV_INIT.9 (renamed from share/man/man9/PCI_INIT_IOV.9)19
-rw-r--r--share/man/man9/PCI_IOV_UNINIT.9 (renamed from share/man/man9/PCI_UNINIT_IOV.9)23
-rw-r--r--share/man/man9/pci.917
-rw-r--r--share/man/man9/pci_iov_schema.96
-rw-r--r--sys/conf/files1
-rw-r--r--sys/conf/kmod.mk2
-rw-r--r--sys/dev/ixl/if_ixl.c14
-rw-r--r--sys/dev/ixl/ixl.h1
-rw-r--r--sys/dev/pci/pci_if.m17
-rw-r--r--sys/dev/pci/pci_iov.c14
-rw-r--r--sys/dev/pci/pci_iov.h49
-rw-r--r--sys/dev/pci/pci_iov_if.m52
-rw-r--r--sys/dev/pci/pcivar.h15
-rw-r--r--[-rwxr-xr-x]sys/modules/ixl/Makefile2
17 files changed, 173 insertions, 100 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index a3b9fdcda0ec..f8de1b3863e8 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -38,6 +38,10 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20150528: PCI IOV device driver methods moved to a separate kobj interface.
+OLD_FILES+=usr/share/man/man9/PCI_ADD_VF.9
+OLD_FILES+=usr/share/man/man9/PCI_INIT_IOV.9
+OLD_FILES+=usr/share/man/man9/PCI_UNINIT_IOV.9
# 20150525: new clang import which bumps version from 3.6.0 to 3.6.1.
OLD_FILES+=usr/lib/clang/3.6.0/include/__stddef_max_align_t.h
OLD_FILES+=usr/lib/clang/3.6.0/include/__wmmintrin_aes.h
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index 11dcb01b3a6d..d0e204f99586 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -195,10 +195,10 @@ MAN= accept_filter.9 \
p_candebug.9 \
p_cansee.9 \
pci.9 \
- PCI_ADD_VF.9 \
- PCI_INIT_IOV.9 \
+ PCI_IOV_ADD_VF.9 \
+ PCI_IOV_INIT.9 \
pci_iov_schema.9 \
- PCI_UNINIT_IOV.9 \
+ PCI_IOV_UNINIT.9 \
pfil.9 \
pfind.9 \
pget.9 \
diff --git a/share/man/man9/PCI_ADD_VF.9 b/share/man/man9/PCI_IOV_ADD_VF.9
index 72a3a9740ef2..d99a1065a6a2 100644
--- a/share/man/man9/PCI_ADD_VF.9
+++ b/share/man/man9/PCI_IOV_ADD_VF.9
@@ -25,38 +25,37 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 24, 2014
-.Dt PCI_ADD_VF 9
+.Dd May 28, 2015
+.Dt PCI_IOV_ADD_VF 9
.Os
.Sh NAME
-.Nm PCI_ADD_VF
+.Nm PCI_IOV_ADD_VF
.Nd inform a PF driver that a VF is being created
.Sh SYNOPSIS
.In sys/bus.h
.In machine/stdarg.h
.In sys/nv.h
-.In dev/pci/pcireg.h
-.In dev/pci/pcivar.h
+.In dev/pci/pci_iov.h
.Ft int
-.Fn PCI_ADD_VF "device_t dev" "uint16_t vfnum" "const nvlist_t *vf_config"
+.Fn PCI_IOV_ADD_VF "device_t dev" "uint16_t vfnum" "const nvlist_t *vf_config"
.Sh DESCRIPTION
The
-.Fn PCI_ADD_VF
+.Fn PCI_IOV_ADD_VF
method is called by the PCI Single-Root I/O Virtualization
.Pq SR-IOV
infrastructure when it is initializating a new Virtual Function (VF) as a child
of the given Physical Function (PF) device.
This method will not be called until a successful call to
-.Xr PCI_INIT_IOV 9
+.Xr PCI_IOV_INIT 9
has been made.
It is not guaranteed that this method will be called following a successful call
to
-.Xr PCI_INIT_IOV 9 .
+.Xr PCI_IOV_INIT 9 .
If the infrastructure encounters a failure to allocate resources following the
call to
-.Xr PCI_INIT_IOV 9 ,
+.Xr PCI_IOV_INIT 9 ,
the VF creation will be aborted and
-.Xr PCI_UNINIT_IOV 9
+.Xr PCI_IOV_UNINIT 9
will be called immediately without any preceding calls to
.Nm .
.Pp
@@ -87,15 +86,15 @@ Note that it is possible for the user to set different configuration values on
different VF devices that are children of the same PF.
The PF driver must not cache configuration parameters passed in previous calls
to
-.Fn PCI_ADD_VF
+.Fn PCI_IOV_ADD_VF
for other VFs and apply those parameters to the current VF.
.Pp
This function will not be called twice for the same
.Fa vf_num
on the same PF device without
-.Xr PCI_UNINIT_IOV 9
+.Xr PCI_IOV_UNINIT 9
and
-.Xr PCI_INIT_IOV 9
+.Xr PCI_IOV_INIT 9
first being called, in that order.
.Sh RETURN VALUES
This method returns 0 on success, otherwise an appropriate error is returned.
@@ -106,8 +105,8 @@ the PF.
.Xr nv 9 ,
.Xr pci 9 ,
.Xr pci_iov_schema 9 ,
-.Xr PCI_INIT_IOV 9 ,
-.Xr PCI_UNINIT_IOV 9
+.Xr PCI_IOV_INIT 9 ,
+.Xr PCI_IOV_UNINIT 9
.Sh AUTHORS
This manual page was written by
.An Ryan Stone Aq Mt rstone@FreeBSD.org .
diff --git a/share/man/man9/PCI_INIT_IOV.9 b/share/man/man9/PCI_IOV_INIT.9
index 1c8c64e5fdbb..f9daa24f0578 100644
--- a/share/man/man9/PCI_INIT_IOV.9
+++ b/share/man/man9/PCI_IOV_INIT.9
@@ -25,23 +25,22 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 24, 2014
-.Dt PCI_INIT_IOV 9
+.Dd May 28, 2015
+.Dt PCI_IOV_INIT 9
.Os
.Sh NAME
-.Nm PCI_INIT_IOV
+.Nm PCI_IOV_INIT
.Nd enable SR-IOV on a PF device
.Sh SYNOPSIS
.In sys/bus.h
.In machine/stdarg.h
.In sys/nv.h
-.In dev/pci/pcireg.h
-.In dev/pci/pcivar.h
+.In dev/pci/pci_iov.h
.Ft int
-.Fn PCI_INIT_IOV "device_t dev" "uint16_t num_vfs" "const nvlist_t *pf_config"
+.Fn PCI_IOV_INIT "device_t dev" "uint16_t num_vfs" "const nvlist_t *pf_config"
.Sh DESCRIPTION
The
-.Fn PCI_INIT_IOV
+.Fn PCI_IOV_INIT
method is called by the PCI Single-Root I/O Virtualization (SR-IOV)
infrastucture when the user requests that SR-IOV be enabled on a Physical
Function (PF).
@@ -70,7 +69,7 @@ valid values specified in the schema.
.Pp
If this method returns successfully, then this method will not be called again
on the same device until after a call to
-.Xr PCI_UNINIT_IOV .
+.Xr PCI_IOV_UNINIT .
.Sh RETURN VALUES
Returns 0 on success, otherwise an appropriate error is returned.
If this method returns an error then the SR-IOV configuration will be aborted
@@ -79,8 +78,8 @@ and no VFs will be created.
.Xr nv 9 ,
.Xr pci 9 ,
.Xr pci_iov_schema 9 ,
-.Xr PCI_ADD_VF 9 ,
-.Xr PCI_UNINIT_IOV 9
+.Xr PCI_IOV_ADD_VF 9 ,
+.Xr PCI_IOV_UNINIT 9
.Sh AUTHORS
This manual page was written by
.An Ryan Stone Aq Mt rstone@FreeBSD.org .
diff --git a/share/man/man9/PCI_UNINIT_IOV.9 b/share/man/man9/PCI_IOV_UNINIT.9
index fc4cc8508fbb..b95914ee4d52 100644
--- a/share/man/man9/PCI_UNINIT_IOV.9
+++ b/share/man/man9/PCI_IOV_UNINIT.9
@@ -25,21 +25,20 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 24, 2014
-.Dt PCI_UNINIT_IOV 9
+.Dd May 28, 2015
+.Dt PCI_IOV_UNINIT 9
.Os
.Sh NAME
-.Nm PCI_UNINIT_IOV
+.Nm PCI_IOV_UNINIT
.Nd disable SR-IOV on a PF device
.Sh SYNOPSIS
.In sys/bus.h
-.In dev/pci/pcireg.h
-.In dev/pci/pcivar.h
+.In dev/pci/pci_iov.h
.Ft void
-.Fn PCI_UNINIT_IOV "device_t dev"
+.Fn PCI_IOV_UNINIT "device_t dev"
.Sh DESCRIPTION
The
-.Fn PCI_UNINIT_IOV
+.Fn PCI_IOV_UNINIT
method is called by the PCI Single-Root I/O Virtualization (SR-IOV)
infrastructure when the user requests that SR-IOV be disabled on a Physical
Function (PF).
@@ -48,17 +47,17 @@ resources that it has allocated and disable any device-specific SR-IOV
configuration in the device.
.Pp
This method will only be called following a successful call to
-.Xr PCI_INIT_IOV .
+.Xr PCI_IOV_INIT .
It is not guaranteed that
-.Xr PCI_ADD_VF
+.Xr PCI_IOV_ADD_VF
will have been called for any Virtual Function (VF) after the call to
-.Xr PCI_INIT_IOV
+.Xr PCI_IOV_INIT
and before the call to
.Nm .
.Sh SEE ALSO
.Xr pci 9 ,
-.Xr PCI_ADD_VF 9 ,
-.Xr PCI_INIT_IOV 9
+.Xr PCI_IOV_ADD_VF 9 ,
+.Xr PCI_IOV_INIT 9
.Sh AUTHORS
This manual page was written by
.An Ryan Stone Aq Mt rstone@FreeBSD.org .
diff --git a/share/man/man9/pci.9 b/share/man/man9/pci.9
index a33d2edaf33f..14500b53f7b9 100644
--- a/share/man/man9/pci.9
+++ b/share/man/man9/pci.9
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 24, 2014
+.Dd May 28, 2015
.Dt PCI 9
.Os
.Sh NAME
@@ -97,10 +97,6 @@
.Ft int
.Fn pci_get_vpd_readonly "device_t dev" "const char *kw" "const char **vptr"
.Ft int
-.Fn pci_iov_attach "device_t dev" "nvlist_t *pf_schema" "nvlist_t *vf_schema"
-.Ft int
-.Fn pci_iov_detach "device_t dev"
-.Ft int
.Fn pci_msi_count "device_t dev"
.Ft int
.Fn pci_msix_count "device_t dev"
@@ -122,6 +118,11 @@
.Fn pci_set_powerstate "device_t dev" "int state"
.Ft void
.Fn pci_write_config "device_t dev" "int reg" "uint32_t val" "int width"
+.In dev/pci/pci_iov.h
+.Ft int
+.Fn pci_iov_attach "device_t dev" "nvlist_t *pf_schema" "nvlist_t *vf_schema"
+.Ft int
+.Fn pci_iov_detach "device_t dev"
.Sh DESCRIPTION
The
.Nm
@@ -446,10 +447,10 @@ function is used to advertise that the given device
supports PCI Single-Root I/O Virtualization
.Po SR-IOV Pc .
A driver that supports SR-IOV must implement the
-.Xr PCI_INIT_IOV 9 ,
-.Xr PCI_ADD_VF 9
+.Xr PCI_IOV_INIT 9 ,
+.Xr PCI_IOV_ADD_VF 9
and
-.Xr PCI_UNIT_IOV 9
+.Xr PCI_IOV_UNINIT 9
methods.
This function should be called during the
.Xr DEVICE_ATTACH 9
diff --git a/share/man/man9/pci_iov_schema.9 b/share/man/man9/pci_iov_schema.9
index f2f1f303fdf4..36c0189d62f4 100644
--- a/share/man/man9/pci_iov_schema.9
+++ b/share/man/man9/pci_iov_schema.9
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 25, 2014
+.Dd May 28, 2015
.Dt pci_iov_schema 9
.Os
.Sh NAME
@@ -258,8 +258,8 @@ The
function returns a pointer to the allocated schema, or NULL if a failure occurs.
.Sh SEE ALSO
.Xr pci 9 ,
-.Xr PCI_ADD_VF 9 ,
-.Xr PCI_INIT_IOV 9
+.Xr PCI_IOV_ADD_VF 9 ,
+.Xr PCI_IOV_INIT 9
.Sh AUTHORS
This manual page was written by
.An Ryan Stone Aq rstone@FreeBSD.org .
diff --git a/sys/conf/files b/sys/conf/files
index 0a63a1c2dd2d..5dcb6a43d75d 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -2024,6 +2024,7 @@ dev/pci/isa_pci.c optional pci isa
dev/pci/pci.c optional pci
dev/pci/pci_if.m standard
dev/pci/pci_iov.c optional pci pci_iov
+dev/pci/pci_iov_if.m standard
dev/pci/pci_iov_schema.c optional pci pci_iov
dev/pci/pci_pci.c optional pci
dev/pci/pci_subr.c optional pci
diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk
index 0f27113e3960..900974509fc9 100644
--- a/sys/conf/kmod.mk
+++ b/sys/conf/kmod.mk
@@ -349,7 +349,7 @@ MFILES?= dev/acpica/acpi_if.m dev/acpi_support/acpi_wmi_if.m \
dev/mbox/mbox_if.m dev/mmc/mmcbr_if.m dev/mmc/mmcbus_if.m \
dev/mii/miibus_if.m dev/mvs/mvs_if.m dev/ofw/ofw_bus_if.m \
dev/pccard/card_if.m dev/pccard/power_if.m dev/pci/pci_if.m \
- dev/pci/pcib_if.m dev/ppbus/ppbus_if.m \
+ dev/pci/pci_iov_if.m dev/pci/pcib_if.m dev/ppbus/ppbus_if.m \
dev/sdhci/sdhci_if.m dev/smbus/smbus_if.m dev/spibus/spibus_if.m \
dev/sound/pci/hda/hdac_if.m \
dev/sound/pcm/ac97_if.m dev/sound/pcm/channel_if.m \
diff --git a/sys/dev/ixl/if_ixl.c b/sys/dev/ixl/if_ixl.c
index de4ee2450668..026bc9ed9f68 100644
--- a/sys/dev/ixl/if_ixl.c
+++ b/sys/dev/ixl/if_ixl.c
@@ -199,8 +199,8 @@ static int ixl_sysctl_switch_config(SYSCTL_HANDLER_ARGS);
#ifdef PCI_IOV
static int ixl_adminq_err_to_errno(enum i40e_admin_queue_err err);
-static int ixl_init_iov(device_t dev, uint16_t num_vfs, const nvlist_t*);
-static void ixl_uninit_iov(device_t dev);
+static int ixl_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t*);
+static void ixl_iov_uninit(device_t dev);
static int ixl_add_vf(device_t dev, uint16_t vfnum, const nvlist_t*);
static void ixl_handle_vf_msg(struct ixl_pf *,
@@ -222,9 +222,9 @@ static device_method_t ixl_methods[] = {
DEVMETHOD(device_detach, ixl_detach),
DEVMETHOD(device_shutdown, ixl_shutdown),
#ifdef PCI_IOV
- DEVMETHOD(pci_init_iov, ixl_init_iov),
- DEVMETHOD(pci_uninit_iov, ixl_uninit_iov),
- DEVMETHOD(pci_add_vf, ixl_add_vf),
+ DEVMETHOD(pci_iov_init, ixl_iov_init),
+ DEVMETHOD(pci_iov_uninit, ixl_iov_uninit),
+ DEVMETHOD(pci_iov_add_vf, ixl_add_vf),
#endif
{0, 0}
};
@@ -6456,7 +6456,7 @@ ixl_adminq_err_to_errno(enum i40e_admin_queue_err err)
}
static int
-ixl_init_iov(device_t dev, uint16_t num_vfs, const nvlist_t *params)
+ixl_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t *params)
{
struct ixl_pf *pf;
struct i40e_hw *hw;
@@ -6504,7 +6504,7 @@ fail:
}
static void
-ixl_uninit_iov(device_t dev)
+ixl_iov_uninit(device_t dev)
{
struct ixl_pf *pf;
struct i40e_hw *hw;
diff --git a/sys/dev/ixl/ixl.h b/sys/dev/ixl/ixl.h
index 1ddfbca3d7d7..3348e1abae27 100644
--- a/sys/dev/ixl/ixl.h
+++ b/sys/dev/ixl/ixl.h
@@ -93,6 +93,7 @@
#ifdef PCI_IOV
#include <sys/nv.h>
#include <sys/iov_schema.h>
+#include <dev/pci/pci_iov.h>
#endif
#include "i40e_type.h"
diff --git a/sys/dev/pci/pci_if.m b/sys/dev/pci/pci_if.m
index 9f97d9a86f4e..aeeff2cf3258 100644
--- a/sys/dev/pci/pci_if.m
+++ b/sys/dev/pci/pci_if.m
@@ -214,22 +214,6 @@ METHOD int iov_detach {
device_t child;
};
-METHOD int init_iov {
- device_t dev;
- uint16_t num_vfs;
- const struct nvlist *config;
-};
-
-METHOD void uninit_iov {
- device_t dev;
-};
-
-METHOD int add_vf {
- device_t dev;
- uint16_t vfnum;
- const struct nvlist *config;
-};
-
METHOD device_t create_iov_child {
device_t bus;
device_t pf;
@@ -237,4 +221,3 @@ METHOD device_t create_iov_child {
uint16_t vid;
uint16_t did;
} DEFAULT null_create_iov_child;
-
diff --git a/sys/dev/pci/pci_iov.c b/sys/dev/pci/pci_iov.c
index 4672e55e5996..58e692649df5 100644
--- a/sys/dev/pci/pci_iov.c
+++ b/sys/dev/pci/pci_iov.c
@@ -53,11 +53,11 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
+#include <dev/pci/pci_iov.h>
#include <dev/pci/pci_private.h>
#include <dev/pci/pci_iov_private.h>
#include <dev/pci/schema_private.h>
-#include "pci_if.h"
#include "pcib_if.h"
static MALLOC_DEFINE(M_SRIOV, "sr_iov", "PCI SR-IOV allocations");
@@ -483,13 +483,13 @@ pci_iov_config_page_size(struct pci_devinfo *dinfo)
}
static int
-pci_init_iov(device_t dev, uint16_t num_vfs, const nvlist_t *config)
+pci_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t *config)
{
const nvlist_t *device, *driver_config;
device = nvlist_get_nvlist(config, PF_CONFIG_NAME);
driver_config = nvlist_get_nvlist(device, DRIVER_CONFIG_NAME);
- return (PCI_INIT_IOV(dev, num_vfs, driver_config));
+ return (PCI_IOV_INIT(dev, num_vfs, driver_config));
}
static int
@@ -595,7 +595,7 @@ pci_iov_enumerate_vfs(struct pci_devinfo *dinfo, const nvlist_t *config,
pci_iov_add_bars(iov, vfinfo);
- error = PCI_ADD_VF(dev, i, driver_config);
+ error = PCI_IOV_ADD_VF(dev, i, driver_config);
if (error != 0) {
device_printf(dev, "Failed to add VF %d\n", i);
pci_delete_child(bus, vf);
@@ -652,7 +652,7 @@ pci_iov_config(struct cdev *cdev, struct pci_iov_arg *arg)
if (error != 0)
goto out;
- error = pci_init_iov(dev, num_vfs, config);
+ error = pci_iov_init(dev, num_vfs, config);
if (error != 0)
goto out;
iov_inited = 1;
@@ -700,7 +700,7 @@ pci_iov_config(struct cdev *cdev, struct pci_iov_arg *arg)
return (0);
out:
if (iov_inited)
- PCI_UNINIT_IOV(dev);
+ PCI_IOV_UNINIT(dev);
for (i = 0; i <= PCIR_MAX_BAR_0; i++) {
if (iov->iov_bar[i].res != NULL) {
@@ -793,7 +793,7 @@ pci_iov_delete(struct cdev *cdev)
if (pci_iov_is_child_vf(iov, vf))
pci_delete_child(bus, vf);
}
- PCI_UNINIT_IOV(dev);
+ PCI_IOV_UNINIT(dev);
iov_ctl = IOV_READ(dinfo, PCIR_SRIOV_CTL, 2);
iov_ctl &= ~(PCIM_SRIOV_VF_EN | PCIM_SRIOV_VF_MSE);
diff --git a/sys/dev/pci/pci_iov.h b/sys/dev/pci/pci_iov.h
new file mode 100644
index 000000000000..fd2f8fba8876
--- /dev/null
+++ b/sys/dev/pci/pci_iov.h
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2013-2015 Sandvine Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _PCI_IOV_H_
+#define _PCI_IOV_H_
+
+#include "pci_iov_if.h"
+
+struct nvlist;
+
+static __inline int
+pci_iov_attach(device_t dev, struct nvlist *pf_schema, struct nvlist *vf_schema)
+{
+ return (PCI_IOV_ATTACH(device_get_parent(dev), dev, pf_schema,
+ vf_schema));
+}
+
+static __inline int
+pci_iov_detach(device_t dev)
+{
+ return (PCI_IOV_DETACH(device_get_parent(dev), dev));
+}
+
+#endif /* !_PCI_IOV_H_ */
diff --git a/sys/dev/pci/pci_iov_if.m b/sys/dev/pci/pci_iov_if.m
new file mode 100644
index 000000000000..3b6796badcec
--- /dev/null
+++ b/sys/dev/pci/pci_iov_if.m
@@ -0,0 +1,52 @@
+#-
+# Copyright (c) 2013-2015 Sandvine Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+#include <sys/bus.h>
+
+INTERFACE pci_iov;
+
+HEADER {
+ struct nvlist;
+}
+
+
+METHOD int init {
+ device_t dev;
+ uint16_t num_vfs;
+ const struct nvlist *config;
+};
+
+METHOD void uninit {
+ device_t dev;
+};
+
+METHOD int add_vf {
+ device_t dev;
+ uint16_t vfnum;
+ const struct nvlist *config;
+};
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index 2fd76b6bf8cd..7f2e95836a30 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -39,8 +39,6 @@
typedef uint64_t pci_addr_t;
-struct nvlist;
-
/* Config registers for PCI-PCI and PCI-Cardbus bridges. */
struct pcicfg_bridge {
uint8_t br_seclat;
@@ -536,19 +534,6 @@ pci_child_added(device_t dev)
return (PCI_CHILD_ADDED(device_get_parent(dev), dev));
}
-static __inline int
-pci_iov_attach(device_t dev, struct nvlist *pf_schema, struct nvlist *vf_schema)
-{
- return (PCI_IOV_ATTACH(device_get_parent(dev), dev, pf_schema,
- vf_schema));
-}
-
-static __inline int
-pci_iov_detach(device_t dev)
-{
- return (PCI_IOV_DETACH(device_get_parent(dev), dev));
-}
-
device_t pci_find_bsf(uint8_t, uint8_t, uint8_t);
device_t pci_find_dbsf(uint32_t, uint8_t, uint8_t, uint8_t);
device_t pci_find_device(uint16_t, uint16_t);
diff --git a/sys/modules/ixl/Makefile b/sys/modules/ixl/Makefile
index 7d2fca994d0b..13be8ab6fc4c 100755..100644
--- a/sys/modules/ixl/Makefile
+++ b/sys/modules/ixl/Makefile
@@ -3,7 +3,7 @@
.PATH: ${.CURDIR}/../../dev/ixl
KMOD = if_ixl
-SRCS = device_if.h bus_if.h pci_if.h opt_bdg.h
+SRCS = device_if.h bus_if.h pci_if.h pci_iov_if.h opt_bdg.h
SRCS += opt_inet.h opt_inet6.h opt_rss.h
SRCS += if_ixl.c ixl_txrx.c i40e_osdep.c