lkml.org 
[lkml]   [2012]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -v11 05/30] PCI: Add busn_res operation functions
    Date
    Will use them insert/update busn res in pci_bus struct.

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    drivers/pci/probe.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
    include/linux/pci.h | 3 +++
    2 files changed, 53 insertions(+), 0 deletions(-)
    diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
    index d30948d..9235b16 100644
    --- a/drivers/pci/probe.c
    +++ b/drivers/pci/probe.c
    @@ -1679,6 +1679,56 @@ err_out:
    return NULL;
    }

    +void pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
    +{
    + struct resource *res = &b->busn_res;
    + struct resource *parent_res;
    + int ret;
    +
    + res->start = bus;
    + res->end = bus_max;
    + res->flags = IORESOURCE_BUS;
    +
    + /* no parent for root bus' busn_res */
    + if (!pci_is_root_bus(b)) {
    + parent_res = &b->parent->busn_res;
    +
    + ret = insert_resource(parent_res, res);
    +
    + dev_printk(KERN_DEBUG, &b->dev,
    + "busn_res: %pR %s inserted under %pR\n",
    + res, ret ? "can not be" : "is", parent_res);
    + } else
    + dev_printk(KERN_DEBUG, &b->dev,
    + "busn_res: %pR for root bus\n",
    + res);
    +}
    +
    +void pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
    +{
    + struct resource *res = &b->busn_res;
    + struct resource old_res = *res;
    +
    + res->end = bus_max;
    + dev_printk(KERN_DEBUG, &b->dev,
    + "busn_res: %pR end updated to %pR\n",
    + &old_res, res);
    +}
    +
    +void pci_bus_release_busn_res(struct pci_bus *b)
    +{
    + struct resource *res = &b->busn_res;
    + int ret;
    +
    + if (!res->flags || !res->parent)
    + return;
    +
    + ret = release_resource(res);
    + dev_printk(KERN_DEBUG, &b->dev,
    + "busn_res: %pR %s released\n",
    + res, ret ? "can not be" : "is");
    +}
    +
    struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
    struct pci_ops *ops, void *sysdata, struct list_head *resources)
    {
    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index 7c03852..e494759 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -669,6 +669,9 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
    struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
    struct pci_ops *ops, void *sysdata,
    struct list_head *resources);
    +void pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax);
    +void pci_bus_update_busn_res_end(struct pci_bus *b, int busmax);
    +void pci_bus_release_busn_res(struct pci_bus *b);
    struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
    struct pci_ops *ops, void *sysdata,
    struct list_head *resources);
    --
    1.7.7


    \
     
     \ /
      Last update: 2012-03-19 06:47    [W:0.281 / U:1.024 seconds]
    ©2003-2014 Jasper Spaans. Advertise on this site