diff options
| -rw-r--r-- | drivers/pnp/base.h | 3 | ||||
| -rw-r--r-- | drivers/pnp/interface.c | 1 | ||||
| -rw-r--r-- | drivers/pnp/pnpacpi/rsparser.c | 14 | ||||
| -rw-r--r-- | drivers/pnp/resource.c | 27 | ||||
| -rw-r--r-- | drivers/pnp/support.c | 4 | 
5 files changed, 47 insertions, 2 deletions
diff --git a/drivers/pnp/base.h b/drivers/pnp/base.h index 0b8d14050efa..0bab84ebb15d 100644 --- a/drivers/pnp/base.h +++ b/drivers/pnp/base.h @@ -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; diff --git a/drivers/pnp/interface.c b/drivers/pnp/interface.c index ba437b704de8..cfaf5b73540b 100644 --- a/drivers/pnp/interface.c +++ b/drivers/pnp/interface.c @@ -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, diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c index 0d7d61da63fc..54514aa35b09 100644 --- a/drivers/pnp/pnpacpi/rsparser.c +++ b/drivers/pnp/pnpacpi/rsparser.c @@ -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)  { @@ -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, @@ -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, diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index 64d0596bafb5..5b277dbaacde 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c @@ -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, @@ -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. diff --git a/drivers/pnp/support.c b/drivers/pnp/support.c index 9585c1c1cc36..f5beb24d036a 100644 --- a/drivers/pnp/support.c +++ b/drivers/pnp/support.c @@ -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)  | 

