lkml.org 
[lkml]   [2011]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/4] PCI: refactor io size calculation code
    Date
    refactor  code  that  calculates  the  io  size in pbus_size_io()
    and pbus_mem_io() into separate functions.

    Signed-off-by: Ram Pai <linuxram@us.ibm.com>
    ---
    drivers/pci/setup-bus.c | 66 ++++++++++++++++++++++++++++++-----------------
    1 files changed, 42 insertions(+), 24 deletions(-)

    diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
    index 66cb8f4..2121215 100644
    --- a/drivers/pci/setup-bus.c
    +++ b/drivers/pci/setup-bus.c
    @@ -404,6 +404,43 @@ static struct resource *find_free_bus_resource(struct pci_bus *bus, unsigned lon
    return NULL;
    }

    +static resource_size_t calculate_iosize(resource_size_t size,
    + resource_size_t min_size,
    + resource_size_t size1,
    + resource_size_t old_size,
    + resource_size_t align)
    +{
    + if (size < min_size)
    + size = min_size;
    + if (old_size == 1 )
    + old_size = 0;
    + /* To be fixed in 2.5: we should have sort of HAVE_ISA
    + flag in the struct pci_bus. */
    +#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
    + size = (size & 0xff) + ((size & ~0xffUL) << 2);
    +#endif
    + size = ALIGN(size + size1, align);
    + if (size < old_size)
    + size = old_size;
    + return size;
    +}
    +
    +static resource_size_t calculate_memsize(resource_size_t size,
    + resource_size_t min_size,
    + resource_size_t size1,
    + resource_size_t old_size,
    + resource_size_t align)
    +{
    + if (size < min_size)
    + size = min_size;
    + if (old_size == 1 )
    + old_size = 0;
    + if (size < old_size)
    + size = old_size;
    + size = ALIGN(size + size1, align);
    + return size;
    +}
    +
    /* Sizing the IO windows of the PCI-PCI bridge is trivial,
    since these windows have 4K granularity and the IO ranges
    of non-bridge PCI devices are limited to 256 bytes.
    @@ -412,7 +449,7 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size)
    {
    struct pci_dev *dev;
    struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO);
    - unsigned long size = 0, size1 = 0, old_size;
    + unsigned long size = 0, size1 = 0;

    if (!b_res)
    return;
    @@ -435,19 +472,8 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size)
    size1 += r_size;
    }
    }
    - if (size < min_size)
    - size = min_size;
    - old_size = resource_size(b_res);
    - if (old_size == 1)
    - old_size = 0;
    -/* To be fixed in 2.5: we should have sort of HAVE_ISA
    - flag in the struct pci_bus. */
    -#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
    - size = (size & 0xff) + ((size & ~0xffUL) << 2);
    -#endif
    - size = ALIGN(size + size1, 4096);
    - if (size < old_size)
    - size = old_size;
    + size = calculate_iosize(size, min_size, size1,
    + resource_size(b_res), 4096);
    if (!size) {
    if (b_res->start || b_res->end)
    dev_info(&bus->self->dev, "disabling bridge window "
    @@ -468,7 +494,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
    unsigned long type, resource_size_t min_size)
    {
    struct pci_dev *dev;
    - resource_size_t min_align, align, size, old_size;
    + resource_size_t min_align, align, size;
    resource_size_t aligns[12]; /* Alignments from 1Mb to 2Gb */
    int order, max_order;
    struct resource *b_res = find_free_bus_resource(bus, type);
    @@ -516,14 +542,6 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
    mem64_mask &= r->flags & IORESOURCE_MEM_64;
    }
    }
    - if (size < min_size)
    - size = min_size;
    - old_size = resource_size(b_res);
    - if (old_size == 1)
    - old_size = 0;
    - if (size < old_size)
    - size = old_size;
    -
    align = 0;
    min_align = 0;
    for (order = 0; order <= max_order; order++) {
    @@ -537,7 +555,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
    min_align = align1 >> 1;
    align += aligns[order];
    }
    - size = ALIGN(size, min_align);
    + size = calculate_memsize(size, min_size, 0, resource_size(b_res), align);
    if (!size) {
    if (b_res->start || b_res->end)
    dev_info(&bus->self->dev, "disabling bridge window "
    --
    1.6.5.2


    \
     
     \ /
      Last update: 2011-02-15 02:45    [W:0.025 / U:15.520 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site