PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry
In order to be able to provide correct driver_data for pci_epf device, a separate configfs entry for each pci_epf_device_id table entry in pci_epf_driver is required. Add support to create configfs entry for each pci_epf_device_id table entry here. Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Tested-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
This commit is contained in:
parent
ecc57efe9d
commit
ef1433f717
|
@ -15,6 +15,8 @@
|
|||
#include <linux/pci-epf.h>
|
||||
#include <linux/pci-ep-cfs.h>
|
||||
|
||||
static DEFINE_MUTEX(pci_epf_mutex);
|
||||
|
||||
static struct bus_type pci_epf_bus_type;
|
||||
static const struct device_type pci_epf_type;
|
||||
|
||||
|
@ -143,7 +145,13 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);
|
|||
*/
|
||||
void pci_epf_unregister_driver(struct pci_epf_driver *driver)
|
||||
{
|
||||
pci_ep_cfs_remove_epf_group(driver->group);
|
||||
struct config_group *group;
|
||||
|
||||
mutex_lock(&pci_epf_mutex);
|
||||
list_for_each_entry(group, &driver->epf_group, group_entry)
|
||||
pci_ep_cfs_remove_epf_group(group);
|
||||
list_del(&driver->epf_group);
|
||||
mutex_unlock(&pci_epf_mutex);
|
||||
driver_unregister(&driver->driver);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_epf_unregister_driver);
|
||||
|
@ -159,6 +167,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,
|
|||
struct module *owner)
|
||||
{
|
||||
int ret;
|
||||
struct config_group *group;
|
||||
const struct pci_epf_device_id *id;
|
||||
|
||||
if (!driver->ops)
|
||||
return -EINVAL;
|
||||
|
@ -173,7 +183,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
driver->group = pci_ep_cfs_add_epf_group(driver->driver.name);
|
||||
INIT_LIST_HEAD(&driver->epf_group);
|
||||
|
||||
id = driver->id_table;
|
||||
while (id->name[0]) {
|
||||
group = pci_ep_cfs_add_epf_group(id->name);
|
||||
mutex_lock(&pci_epf_mutex);
|
||||
list_add_tail(&group->group_entry, &driver->epf_group);
|
||||
mutex_unlock(&pci_epf_mutex);
|
||||
id++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ struct pci_epf_ops {
|
|||
* @driver: PCI EPF driver
|
||||
* @ops: set of function pointers for performing EPF operations
|
||||
* @owner: the owner of the module that registers the PCI EPF driver
|
||||
* @group: configfs group corresponding to the PCI EPF driver
|
||||
* @epf_group: list of configfs group corresponding to the PCI EPF driver
|
||||
* @id_table: identifies EPF devices for probing
|
||||
*/
|
||||
struct pci_epf_driver {
|
||||
|
@ -82,7 +82,7 @@ struct pci_epf_driver {
|
|||
struct device_driver driver;
|
||||
struct pci_epf_ops *ops;
|
||||
struct module *owner;
|
||||
struct config_group *group;
|
||||
struct list_head epf_group;
|
||||
const struct pci_epf_device_id *id_table;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue