Permit the name of the /dev/iov entry to be set by the driver.
The PCI_IOV option creates character devices in /dev/iov for each PF device driver that registers support for creating VFs. By default the character device is named after the PF device (e.g. /dev/iov/foo0). This change adds a variant of pci_iov_attach() called pci_iov_attach_name() that allows the name of the /dev/iov entry to be specified by the driver. Reviewed by: rstone MFC after: 1 month Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D7400
This commit is contained in:
parent
ae52b8b4ff
commit
1c471b6b39
@ -1303,6 +1303,7 @@ MLINKS+=pci.9 pci_alloc_msi.9 \
|
||||
pci.9 pci_get_vpd_ident.9 \
|
||||
pci.9 pci_get_vpd_readonly.9 \
|
||||
pci.9 pci_iov_attach.9 \
|
||||
pci.9 pci_iov_attach_name.9 \
|
||||
pci.9 pci_iov_detach.9 \
|
||||
pci.9 pci_msi_count.9 \
|
||||
pci.9 pci_msix_count.9 \
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 24, 2016
|
||||
.Dd August 3, 2016
|
||||
.Dt PCI 9
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -50,6 +50,7 @@
|
||||
.Nm pci_get_vpd_ident ,
|
||||
.Nm pci_get_vpd_readonly ,
|
||||
.Nm pci_iov_attach ,
|
||||
.Nm pci_iov_attach_name ,
|
||||
.Nm pci_iov_detach ,
|
||||
.Nm pci_msi_count ,
|
||||
.Nm pci_msix_count ,
|
||||
@ -152,6 +153,14 @@
|
||||
.Ft int
|
||||
.Fn pci_iov_attach "device_t dev" "nvlist_t *pf_schema" "nvlist_t *vf_schema"
|
||||
.Ft int
|
||||
.Fo pci_iov_attach_name
|
||||
.Fa "device_t dev"
|
||||
.Fa "nvlist_t *pf_schema"
|
||||
.Fa "nvlist_t *vf_schema"
|
||||
.Fa "const char *fmt"
|
||||
.Fa "..."
|
||||
.Fc
|
||||
.Ft int
|
||||
.Fn pci_iov_detach "device_t dev"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
@ -595,6 +604,20 @@ and is responsible for freeing them.
|
||||
The driver must never free the schemas itself.
|
||||
.Pp
|
||||
The
|
||||
.Fn pci_iov_attach_name
|
||||
function is a variant of
|
||||
.Fn pci_iov_attach
|
||||
that allows the name of the associated character device in
|
||||
.Pa /dev/iov
|
||||
to be specified by
|
||||
.Fa fmt .
|
||||
The
|
||||
.Fn pci_iov_attach
|
||||
function uses the name of
|
||||
.Fa dev
|
||||
as the device name.
|
||||
.Pp
|
||||
The
|
||||
.Fn pci_iov_detach
|
||||
function is used to advise the SR-IOV infrastructure that the driver for the
|
||||
given device is attempting to detach and that all SR-IOV resources for the
|
||||
|
@ -235,6 +235,7 @@ METHOD int iov_attach {
|
||||
device_t child;
|
||||
struct nvlist *pf_schema;
|
||||
struct nvlist *vf_schema;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
METHOD int iov_detach {
|
||||
|
@ -97,9 +97,23 @@ static void pci_iov_build_vf_schema(nvlist_t *schema,
|
||||
static nvlist_t *pci_iov_get_pf_subsystem_schema(void);
|
||||
static nvlist_t *pci_iov_get_vf_subsystem_schema(void);
|
||||
|
||||
int
|
||||
pci_iov_attach_name(device_t dev, struct nvlist *pf_schema,
|
||||
struct nvlist *vf_schema, const char *fmt, ...)
|
||||
{
|
||||
char buf[NAME_MAX + 1];
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||
va_end(ap);
|
||||
return (PCI_IOV_ATTACH(device_get_parent(dev), dev, pf_schema,
|
||||
vf_schema, buf));
|
||||
}
|
||||
|
||||
int
|
||||
pci_iov_attach_method(device_t bus, device_t dev, nvlist_t *pf_schema,
|
||||
nvlist_t *vf_schema)
|
||||
nvlist_t *vf_schema, const char *name)
|
||||
{
|
||||
device_t pcib;
|
||||
struct pci_devinfo *dinfo;
|
||||
@ -149,7 +163,7 @@ pci_iov_attach_method(device_t bus, device_t dev, nvlist_t *pf_schema,
|
||||
iov->iov_schema = schema;
|
||||
|
||||
iov->iov_cdev = make_dev(&iov_cdevsw, device_get_unit(dev),
|
||||
UID_ROOT, GID_WHEEL, 0600, "iov/%s", device_get_nameunit(dev));
|
||||
UID_ROOT, GID_WHEEL, 0600, "iov/%s", name);
|
||||
|
||||
if (iov->iov_cdev == NULL) {
|
||||
error = ENOMEM;
|
||||
|
@ -33,11 +33,14 @@
|
||||
|
||||
struct nvlist;
|
||||
|
||||
int pci_iov_attach_name(device_t dev, struct nvlist *pf_schema,
|
||||
struct nvlist *vf_schema, const char *fmt, ...) __printflike(4, 5);
|
||||
|
||||
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));
|
||||
vf_schema, device_get_nameunit(dev)));
|
||||
}
|
||||
|
||||
static __inline int
|
||||
|
@ -158,7 +158,8 @@ struct resource *pci_alloc_multi_resource(device_t dev, device_t child,
|
||||
rman_res_t count, u_long num, u_int flags);
|
||||
|
||||
int pci_iov_attach_method(device_t bus, device_t dev,
|
||||
struct nvlist *pf_schema, struct nvlist *vf_schema);
|
||||
struct nvlist *pf_schema, struct nvlist *vf_schema,
|
||||
const char *name);
|
||||
int pci_iov_detach_method(device_t bus, device_t dev);
|
||||
|
||||
device_t pci_create_iov_child_method(device_t bus, device_t pf,
|
||||
|
Loading…
x
Reference in New Issue
Block a user