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-epf.h>
|
||||||
#include <linux/pci-ep-cfs.h>
|
#include <linux/pci-ep-cfs.h>
|
||||||
|
|
||||||
|
static DEFINE_MUTEX(pci_epf_mutex);
|
||||||
|
|
||||||
static struct bus_type pci_epf_bus_type;
|
static struct bus_type pci_epf_bus_type;
|
||||||
static const struct device_type pci_epf_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)
|
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);
|
driver_unregister(&driver->driver);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pci_epf_unregister_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)
|
struct module *owner)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
struct config_group *group;
|
||||||
|
const struct pci_epf_device_id *id;
|
||||||
|
|
||||||
if (!driver->ops)
|
if (!driver->ops)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -173,7 +183,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,
|
||||||
if (ret)
|
if (ret)
|
||||||
return 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ struct pci_epf_ops {
|
||||||
* @driver: PCI EPF driver
|
* @driver: PCI EPF driver
|
||||||
* @ops: set of function pointers for performing EPF operations
|
* @ops: set of function pointers for performing EPF operations
|
||||||
* @owner: the owner of the module that registers the PCI EPF driver
|
* @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
|
* @id_table: identifies EPF devices for probing
|
||||||
*/
|
*/
|
||||||
struct pci_epf_driver {
|
struct pci_epf_driver {
|
||||||
|
@ -82,7 +82,7 @@ struct pci_epf_driver {
|
||||||
struct device_driver driver;
|
struct device_driver driver;
|
||||||
struct pci_epf_ops *ops;
|
struct pci_epf_ops *ops;
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
struct config_group *group;
|
struct list_head epf_group;
|
||||||
const struct pci_epf_device_id *id_table;
|
const struct pci_epf_device_id *id_table;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue