Skip to content

Commit

Permalink
PNPACPI: add bus number support
Browse files Browse the repository at this point in the history
Add support for bus number resources.  This is for bridges with a range of
bus numbers behind them.  Previously, PNP ignored bus number resources.

Signed-off-by: Bjorn Helgaas <[email protected]>
Signed-off-by: Len Brown <[email protected]>
  • Loading branch information
Bjorn Helgaas authored and lenb committed Mar 15, 2010
1 parent fa35b49 commit 7e0e9c0
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 2 deletions.
3 changes: 3 additions & 0 deletions drivers/pnp/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,9 @@ struct pnp_resource *pnp_add_io_resource(struct pnp_dev *dev,
struct pnp_resource *pnp_add_mem_resource(struct pnp_dev *dev,
resource_size_t start,
resource_size_t end, int flags);
struct pnp_resource *pnp_add_bus_resource(struct pnp_dev *dev,
resource_size_t start,
resource_size_t end);

extern int pnp_debug;

Expand Down
1 change: 1 addition & 0 deletions drivers/pnp/interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ static ssize_t pnp_show_current_resources(struct device *dmdev,
switch (pnp_resource_type(res)) {
case IORESOURCE_IO:
case IORESOURCE_MEM:
case IORESOURCE_BUS:
pnp_printf(buffer, " %#llx-%#llx%s\n",
(unsigned long long) res->start,
(unsigned long long) res->end,
Expand Down
14 changes: 14 additions & 0 deletions drivers/pnp/pnpacpi/rsparser.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,14 @@ static void pnpacpi_parse_allocated_memresource(struct pnp_dev *dev,
pnp_add_mem_resource(dev, start, end, flags);
}

static void pnpacpi_parse_allocated_busresource(struct pnp_dev *dev,
u64 start, u64 len)
{
u64 end = start + len - 1;

pnp_add_bus_resource(dev, start, end);
}

static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
struct acpi_resource *res)
{
Expand All @@ -290,6 +298,9 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
p->minimum, p->address_length,
p->granularity == 0xfff ? ACPI_DECODE_10 :
ACPI_DECODE_16, window);
else if (p->resource_type == ACPI_BUS_NUMBER_RANGE)
pnpacpi_parse_allocated_busresource(dev, p->minimum,
p->address_length);
}

static void pnpacpi_parse_allocated_ext_address_space(struct pnp_dev *dev,
Expand All @@ -309,6 +320,9 @@ static void pnpacpi_parse_allocated_ext_address_space(struct pnp_dev *dev,
p->minimum, p->address_length,
p->granularity == 0xfff ? ACPI_DECODE_10 :
ACPI_DECODE_16, window);
else if (p->resource_type == ACPI_BUS_NUMBER_RANGE)
pnpacpi_parse_allocated_busresource(dev, p->minimum,
p->address_length);
}

static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
Expand Down
27 changes: 26 additions & 1 deletion drivers/pnp/resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,8 @@ int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
unsigned long pnp_resource_type(struct resource *res)
{
return res->flags & (IORESOURCE_IO | IORESOURCE_MEM |
IORESOURCE_IRQ | IORESOURCE_DMA);
IORESOURCE_IRQ | IORESOURCE_DMA |
IORESOURCE_BUS);
}

struct resource *pnp_get_resource(struct pnp_dev *dev,
Expand Down Expand Up @@ -590,6 +591,30 @@ struct pnp_resource *pnp_add_mem_resource(struct pnp_dev *dev,
return pnp_res;
}

struct pnp_resource *pnp_add_bus_resource(struct pnp_dev *dev,
resource_size_t start,
resource_size_t end)
{
struct pnp_resource *pnp_res;
struct resource *res;

pnp_res = pnp_new_resource(dev);
if (!pnp_res) {
dev_err(&dev->dev, "can't add resource for BUS %#llx-%#llx\n",
(unsigned long long) start,
(unsigned long long) end);
return NULL;
}

res = &pnp_res->res;
res->flags = IORESOURCE_BUS;
res->start = start;
res->end = end;

pnp_dbg(&dev->dev, " add %pr\n", res);
return pnp_res;
}

/*
* Determine whether the specified resource is a possible configuration
* for this device.
Expand Down
4 changes: 3 additions & 1 deletion drivers/pnp/support.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,10 @@ char *pnp_resource_type_name(struct resource *res)
return "irq";
case IORESOURCE_DMA:
return "dma";
case IORESOURCE_BUS:
return "bus";
}
return NULL;
return "unknown";
}

void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc)
Expand Down

0 comments on commit 7e0e9c0

Please sign in to comment.