PCI: endpoint: Create configfs entry for EPC device and EPF driver
authorKishon Vijay Abraham I <kishon@ti.com>
Mon, 27 Mar 2017 09:45:01 +0000 (15:15 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 11 Apr 2017 19:18:37 +0000 (14:18 -0500)
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: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/endpoint/pci-epc-core.c
drivers/pci/endpoint/pci-epf-core.c
include/linux/pci-epc.h
include/linux/pci-epf.h

index 7c71dd9..caa7be1 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <linux/pci-epc.h>
 #include <linux/pci-epf.h>
+#include <linux/pci-ep-cfs.h>
 
 static struct class *pci_epc_class;
 
@@ -442,6 +443,7 @@ EXPORT_SYMBOL_GPL(pci_epc_linkup);
  */
 void pci_epc_destroy(struct pci_epc *epc)
 {
+       pci_ep_cfs_remove_epc_group(epc->group);
        device_unregister(&epc->dev);
        kfree(epc);
 }
@@ -508,6 +510,8 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops,
        if (ret)
                goto put_dev;
 
+       epc->group = pci_ep_cfs_add_epc_group(dev_name(dev));
+
        return epc;
 
 put_dev:
index a281c59..6877d6a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <linux/pci-epc.h>
 #include <linux/pci-epf.h>
+#include <linux/pci-ep-cfs.h>
 
 static struct bus_type pci_epf_bus_type;
 static struct device_type pci_epf_type;
@@ -149,6 +150,7 @@ 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);
        driver_unregister(&driver->driver);
 }
 EXPORT_SYMBOL_GPL(pci_epf_unregister_driver);
@@ -178,6 +180,8 @@ 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);
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(__pci_epf_register_driver);
index 8c63d3c..af5edbf 100644 (file)
@@ -77,6 +77,7 @@ struct pci_epc_mem {
  * @ops: function pointers for performing endpoint operations
  * @mem: address space of the endpoint controller
  * @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
  */
 struct pci_epc {
@@ -85,6 +86,7 @@ struct pci_epc {
        const struct pci_epc_ops        *ops;
        struct pci_epc_mem              *mem;
        u8                              max_functions;
+       struct config_group             *group;
        /* spinlock to protect against concurrent access of EP controller */
        spinlock_t                      lock;
 };
index 5628714..0d529cb 100644 (file)
@@ -82,6 +82,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
  * @id_table: identifies EPF devices for probing
  */
 struct pci_epf_driver {
@@ -91,6 +92,7 @@ struct pci_epf_driver {
        struct device_driver    driver;
        struct pci_epf_ops      *ops;
        struct module           *owner;
+       struct config_group     *group;
        const struct pci_epf_device_id  *id_table;
 };