static __init void pnpacpi_parse_address_option(struct pnp_dev *dev, unsigned int option_flags, struct acpi_resource *r) { struct acpi_resource_address64 addr, *p = &addr; acpi_status status; unsigned char flags = 0; status = acpi_resource_to_address64(r, p); if (ACPI_FAILURE(status)) { dev_warn(&dev->dev, "can't convert resource type %d\n", r->type); return; } if (p->address_length == 0) flags |= IORESOURCE_DISABLED; if (p->resource_type == ACPI_MEMORY_RANGE) { if (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY) flags |= IORESOURCE_MEM_WRITEABLE; pnp_register_mem_resource(dev, option_flags, p->minimum, p->minimum, 0, p->address_length, flags); } else if (p->resource_type == ACPI_IO_RANGE) pnp_register_port_resource(dev, option_flags, p->minimum, p->minimum, 0, p->address_length, flags | IORESOURCE_IO_FIXED); }
static __init void pnpacpi_parse_fixed_port_option(struct pnp_dev *dev, unsigned int option_flags, struct acpi_resource_fixed_io *io) { if (io->address_length == 0) return; pnp_register_port_resource(dev, option_flags, io->address, io->address, 0, io->address_length, IORESOURCE_IO_FIXED); }
static __init void pnpacpi_parse_port_option(struct pnp_dev *dev, unsigned int option_flags, struct acpi_resource_io *io) { unsigned char flags = 0; if (io->io_decode == ACPI_DECODE_16) flags = IORESOURCE_IO_16BIT_ADDR; pnp_register_port_resource(dev, option_flags, io->minimum, io->maximum, io->alignment, io->address_length, flags); }
static __init void pnpacpi_parse_fixed_port_option(struct pnp_dev *dev, unsigned int option_flags, struct acpi_resource_fixed_io *io) { unsigned char flags = 0; if (io->address_length == 0) flags |= IORESOURCE_DISABLED; pnp_register_port_resource(dev, option_flags, io->address, io->address, 0, io->address_length, flags | IORESOURCE_IO_FIXED); }
static __init void pnpacpi_parse_ext_address_option(struct pnp_dev *dev, unsigned int option_flags, struct acpi_resource *r) { struct acpi_resource_extended_address64 *p = &r->data.ext_address64; unsigned char flags = 0; if (p->resource_type == ACPI_MEMORY_RANGE) { if (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY) flags = IORESOURCE_MEM_WRITEABLE; pnp_register_mem_resource(dev, option_flags, p->minimum, p->minimum, 0, p->address_length, flags); } else if (p->resource_type == ACPI_IO_RANGE) pnp_register_port_resource(dev, option_flags, p->minimum, p->minimum, 0, p->address_length, IORESOURCE_IO_FIXED); }
static void pnpacpi_parse_fixed_port_option(struct pnp_option *option, struct acpi_resource_fixed_io *io) { struct pnp_port * port; if (io->range_length == 0) return; port = pnpacpi_kmalloc(sizeof(struct pnp_port), GFP_KERNEL); if (!port) return; port->min = port->max = io->base_address; port->size = io->range_length; port->align = 0; port->flags = PNP_PORT_FLAG_FIXED; pnp_register_port_resource(option,port); return; }
static void pnpacpi_parse_port_option(struct pnp_option *option, struct acpi_resource_io *io) { struct pnp_port * port; if (io->range_length == 0) return; port = pnpacpi_kmalloc(sizeof(struct pnp_port), GFP_KERNEL); if (!port) return; port->min = io->min_base_address; port->max = io->max_base_address; port->align = io->alignment; port->size = io->range_length; port->flags = ACPI_DECODE_16 == io->io_decode ? PNP_PORT_FLAG_16BITADDR : 0; pnp_register_port_resource(option,port); return; }
static void pnpacpi_parse_address_option(struct pnp_option *option, struct acpi_resource *r) { struct acpi_resource_address64 addr, *p = &addr; acpi_status status; struct pnp_mem *mem; struct pnp_port *port; status = acpi_resource_to_address64(r, p); if (!ACPI_SUCCESS(status)) { pnp_warn("PnPACPI: failed to convert resource type %d", r->type); return; } if (p->address_length == 0) return; if (p->resource_type == ACPI_MEMORY_RANGE) { mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL); if (!mem) return; mem->min = mem->max = p->minimum; mem->size = p->address_length; mem->align = 0; mem->flags = (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY) ? IORESOURCE_MEM_WRITEABLE : 0; pnp_register_mem_resource(option, mem); } else if (p->resource_type == ACPI_IO_RANGE) { port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL); if (!port) return; port->min = port->max = p->minimum; port->size = p->address_length; port->align = 0; port->flags = PNP_PORT_FLAG_FIXED; pnp_register_port_resource(option, port); } }