dmaengine: idxd: add type to driver in order to allow device matching
Add an array of support device types to the idxd_device_driver definition in order to enable simple matching of device type to a given driver. The deprecated / omnibus dsa_drv driver specifies IDXD_DEV_NONE as its only role is to service legacy userspace (old accel-config) directed bind requests and route them to them the proper driver. It need not attach to a device when the bus is autoprobed. The accel-config tooling is being updated to drop its dependency on this deprecated bind scheme. Reviewed-by: Dan Willliams <dan.j.williams@intel.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com> Link: https://lore.kernel.org/r/162637465882.744545.17456174666211577867.stgit@djiang5-desk3.ch.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
c05257b560
commit
5fee6567ec
|
@ -51,6 +51,7 @@ enum idxd_type {
|
|||
|
||||
struct idxd_device_driver {
|
||||
const char *name;
|
||||
enum idxd_dev_type *type;
|
||||
int (*probe)(struct idxd_dev *idxd_dev);
|
||||
void (*remove)(struct idxd_dev *idxd_dev);
|
||||
struct device_driver drv;
|
||||
|
|
|
@ -879,6 +879,11 @@ int __idxd_driver_register(struct idxd_device_driver *idxd_drv, struct module *o
|
|||
{
|
||||
struct device_driver *drv = &idxd_drv->drv;
|
||||
|
||||
if (!idxd_drv->type) {
|
||||
pr_debug("driver type not set (%ps)\n", __builtin_return_address(0));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
drv->name = idxd_drv->name;
|
||||
drv->bus = &dsa_bus_type;
|
||||
drv->owner = owner;
|
||||
|
|
|
@ -19,9 +19,18 @@ static char *idxd_wq_type_names[] = {
|
|||
static int idxd_config_bus_match(struct device *dev,
|
||||
struct device_driver *drv)
|
||||
{
|
||||
struct idxd_device_driver *idxd_drv =
|
||||
container_of(drv, struct idxd_device_driver, drv);
|
||||
struct idxd_dev *idxd_dev = confdev_to_idxd_dev(dev);
|
||||
int i = 0;
|
||||
|
||||
return (is_idxd_dev(idxd_dev) || is_idxd_wq_dev(idxd_dev));
|
||||
while (idxd_drv->type[i] != IDXD_DEV_NONE) {
|
||||
if (idxd_dev->type == idxd_drv->type[i])
|
||||
return 1;
|
||||
i++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int idxd_config_bus_probe(struct device *dev)
|
||||
|
@ -79,10 +88,15 @@ static void idxd_dsa_drv_remove(struct idxd_dev *idxd_dev)
|
|||
}
|
||||
}
|
||||
|
||||
static enum idxd_dev_type dev_types[] = {
|
||||
IDXD_DEV_NONE,
|
||||
};
|
||||
|
||||
struct idxd_device_driver dsa_drv = {
|
||||
.name = "dsa",
|
||||
.probe = idxd_dsa_drv_probe,
|
||||
.remove = idxd_dsa_drv_remove,
|
||||
.type = dev_types,
|
||||
};
|
||||
|
||||
/* IDXD engine attributes */
|
||||
|
|
Loading…
Reference in New Issue