On Wed, Sep 9, 2015 at 1:38 AM, Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx> wrote: > On 2015/7/30 4:37, Bjorn Helgaas wrote: >> On Tue, Jun 09, 2015 at 12:20:43AM +0800, Jiang Liu wrote: >>> Enhance ACPI resource parsing interfaces to support sparse IO space, >>> which will be used to share common code between x86 and IA64 later. >>> >>> Tested-by: Tony Luck <tony.luck@xxxxxxxxx> >>> Signed-off-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx> >>> Reviewed-by: Hanjun Guo <hanjun.guo@xxxxxxxxxx> >>> --- >>> drivers/acpi/resource.c | 9 ++++++--- >>> include/linux/ioport.h | 1 + >>> 2 files changed, 7 insertions(+), 3 deletions(-) >>> >>> diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c >>> index 8244f013f210..fdcc73dad2c1 100644 >>> --- a/drivers/acpi/resource.c >>> +++ b/drivers/acpi/resource.c >>> @@ -123,7 +123,7 @@ bool acpi_dev_resource_memory(struct acpi_resource *ares, struct resource *res) >>> EXPORT_SYMBOL_GPL(acpi_dev_resource_memory); >>> >>> static void acpi_dev_ioresource_flags(struct resource *res, u64 len, >>> - u8 io_decode) >>> + u8 io_decode, u8 translation_type) >>> { >>> res->flags = IORESOURCE_IO; >>> >>> @@ -135,6 +135,8 @@ static void acpi_dev_ioresource_flags(struct resource *res, u64 len, >>> >>> if (io_decode == ACPI_DECODE_16) >>> res->flags |= IORESOURCE_IO_16BIT_ADDR; >>> + if (translation_type == ACPI_SPARSE_TRANSLATION) >>> + res->flags |= IORESOURCE_IO_SPARSE; >>> } >>> >>> static void acpi_dev_get_ioresource(struct resource *res, u64 start, u64 len, >>> @@ -142,7 +144,7 @@ static void acpi_dev_get_ioresource(struct resource *res, u64 start, u64 len, >>> { >>> res->start = start; >>> res->end = start + len - 1; >>> - acpi_dev_ioresource_flags(res, len, io_decode); >>> + acpi_dev_ioresource_flags(res, len, io_decode, 0); >>> } >>> >>> /** >>> @@ -227,7 +229,8 @@ static bool acpi_decode_space(struct resource_win *win, >>> acpi_dev_memresource_flags(res, len, wp); >>> break; >>> case ACPI_IO_RANGE: >>> - acpi_dev_ioresource_flags(res, len, iodec); >>> + acpi_dev_ioresource_flags(res, len, iodec, >>> + addr->info.io.translation_type); >>> break; >>> case ACPI_BUS_NUMBER_RANGE: >>> res->flags = IORESOURCE_BUS; >>> diff --git a/include/linux/ioport.h b/include/linux/ioport.h >>> index 388e3ae94f7a..24bea087e7af 100644 >>> --- a/include/linux/ioport.h >>> +++ b/include/linux/ioport.h >>> @@ -94,6 +94,7 @@ struct resource { >>> /* PnP I/O specific bits (IORESOURCE_BITS) */ >>> #define IORESOURCE_IO_16BIT_ADDR (1<<0) >>> #define IORESOURCE_IO_FIXED (1<<1) >>> +#define IORESOURCE_IO_SPARSE (1<<2) >> >> I don't really like this bit. We adding a new generic IORESOURCE_* bit >> just for a special case, and it's only used in one place, for one arch, >> during enumeration. > Hi Bjorn, > Instead of defining a formal flag IORESOURCE_IO_SPARSE, we may > reuse other field in struct resource to pass back the SPARSE flag, > but that's a little dirty. For example, we may reuse res->name field > to carry the SPARSE flag for the IA64 special case. > Is that OK? No, I think that's even worse. Adding IORESOURCE_IO_SPARSE looks positively glorious now. Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html