Commit 3a401a2c authored by Kishon Vijay Abraham I's avatar Kishon Vijay Abraham I Committed by Bjorn Helgaas

PCI: endpoint: Create configfs entry for EPC device and EPF driver

Invoke APIs provided by pci-ep-cfs to create configfs entry for every EPC
device and EPF driver to help users in creating EPF device and binding the
EPF device to the EPC device.
Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent bea37d3d
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/pci-epc.h> #include <linux/pci-epc.h>
#include <linux/pci-epf.h> #include <linux/pci-epf.h>
#include <linux/pci-ep-cfs.h>
static struct class *pci_epc_class; static struct class *pci_epc_class;
...@@ -442,6 +443,7 @@ EXPORT_SYMBOL_GPL(pci_epc_linkup); ...@@ -442,6 +443,7 @@ EXPORT_SYMBOL_GPL(pci_epc_linkup);
*/ */
void pci_epc_destroy(struct pci_epc *epc) void pci_epc_destroy(struct pci_epc *epc)
{ {
pci_ep_cfs_remove_epc_group(epc->group);
device_unregister(&epc->dev); device_unregister(&epc->dev);
kfree(epc); kfree(epc);
} }
...@@ -508,6 +510,8 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops, ...@@ -508,6 +510,8 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops,
if (ret) if (ret)
goto put_dev; goto put_dev;
epc->group = pci_ep_cfs_add_epc_group(dev_name(dev));
return epc; return epc;
put_dev: put_dev:
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/pci-epc.h> #include <linux/pci-epc.h>
#include <linux/pci-epf.h> #include <linux/pci-epf.h>
#include <linux/pci-ep-cfs.h>
static struct bus_type pci_epf_bus_type; static struct bus_type pci_epf_bus_type;
static struct device_type pci_epf_type; static struct device_type pci_epf_type;
...@@ -149,6 +150,7 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space); ...@@ -149,6 +150,7 @@ 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);
driver_unregister(&driver->driver); driver_unregister(&driver->driver);
} }
EXPORT_SYMBOL_GPL(pci_epf_unregister_driver); EXPORT_SYMBOL_GPL(pci_epf_unregister_driver);
...@@ -178,6 +180,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, ...@@ -178,6 +180,8 @@ 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);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(__pci_epf_register_driver); EXPORT_SYMBOL_GPL(__pci_epf_register_driver);
......
...@@ -77,6 +77,7 @@ struct pci_epc_mem { ...@@ -77,6 +77,7 @@ struct pci_epc_mem {
* @ops: function pointers for performing endpoint operations * @ops: function pointers for performing endpoint operations
* @mem: address space of the endpoint controller * @mem: address space of the endpoint controller
* @max_functions: max number of functions that can be configured in this EPC * @max_functions: max number of functions that can be configured in this EPC
* @group: configfs group representing the PCI EPC device
* @lock: spinlock to protect pci_epc ops * @lock: spinlock to protect pci_epc ops
*/ */
struct pci_epc { struct pci_epc {
...@@ -85,6 +86,7 @@ struct pci_epc { ...@@ -85,6 +86,7 @@ struct pci_epc {
const struct pci_epc_ops *ops; const struct pci_epc_ops *ops;
struct pci_epc_mem *mem; struct pci_epc_mem *mem;
u8 max_functions; u8 max_functions;
struct config_group *group;
/* spinlock to protect against concurrent access of EP controller */ /* spinlock to protect against concurrent access of EP controller */
spinlock_t lock; spinlock_t lock;
}; };
......
...@@ -82,6 +82,7 @@ struct pci_epf_ops { ...@@ -82,6 +82,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
* @id_table: identifies EPF devices for probing * @id_table: identifies EPF devices for probing
*/ */
struct pci_epf_driver { struct pci_epf_driver {
...@@ -91,6 +92,7 @@ struct pci_epf_driver { ...@@ -91,6 +92,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;
const struct pci_epf_device_id *id_table; const struct pci_epf_device_id *id_table;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment