static acpi_status pnpacpi_option_resource(struct acpi_resource *res, void *data) { int priority = 0; struct acpipnp_parse_option_s *parse_data = (struct acpipnp_parse_option_s *)data; struct pnp_dev *dev = parse_data->dev; struct pnp_option *option = parse_data->option; switch (res->id) { case ACPI_RSTYPE_IRQ: pnpacpi_parse_irq_option(option, &res->data.irq); break; case ACPI_RSTYPE_EXT_IRQ: pnpacpi_parse_ext_irq_option(option, &res->data.extended_irq); break; case ACPI_RSTYPE_DMA: pnpacpi_parse_dma_option(option, &res->data.dma); break; case ACPI_RSTYPE_IO: pnpacpi_parse_port_option(option, &res->data.io); break; case ACPI_RSTYPE_FIXED_IO: pnpacpi_parse_fixed_port_option(option, &res->data.fixed_io); break; case ACPI_RSTYPE_MEM24: pnpacpi_parse_mem24_option(option, &res->data.memory24); break; case ACPI_RSTYPE_MEM32: pnpacpi_parse_mem32_option(option, &res->data.memory32); break; case ACPI_RSTYPE_FIXED_MEM32: pnpacpi_parse_fixed_mem32_option(option, &res->data.fixed_memory32); break; case ACPI_RSTYPE_START_DPF: switch (res->data.start_dpf.compatibility_priority) { case ACPI_GOOD_CONFIGURATION: priority = PNP_RES_PRIORITY_PREFERRED; break; case ACPI_ACCEPTABLE_CONFIGURATION: priority = PNP_RES_PRIORITY_ACCEPTABLE; break; case ACPI_SUB_OPTIMAL_CONFIGURATION: priority = PNP_RES_PRIORITY_FUNCTIONAL; break; default: priority = PNP_RES_PRIORITY_INVALID; break; } /* TBD: Considering performace/robustness bits */ option = pnp_register_dependent_option(dev, priority); if (!option) return AE_ERROR; parse_data->option = option; break; case ACPI_RSTYPE_END_DPF: return AE_CTRL_TERMINATE; default: pnp_warn("PnPACPI:Option type: %d not handle", res->id); return AE_ERROR; } return AE_OK; }
static __init acpi_status pnpacpi_option_resource(struct acpi_resource *res, void *data) { int priority; struct acpipnp_parse_option_s *parse_data = data; struct pnp_dev *dev = parse_data->dev; unsigned int option_flags = parse_data->option_flags; switch (res->type) { case ACPI_RESOURCE_TYPE_IRQ: pnpacpi_parse_irq_option(dev, option_flags, &res->data.irq); break; case ACPI_RESOURCE_TYPE_DMA: pnpacpi_parse_dma_option(dev, option_flags, &res->data.dma); break; case ACPI_RESOURCE_TYPE_START_DEPENDENT: switch (res->data.start_dpf.compatibility_priority) { case ACPI_GOOD_CONFIGURATION: priority = PNP_RES_PRIORITY_PREFERRED; break; case ACPI_ACCEPTABLE_CONFIGURATION: priority = PNP_RES_PRIORITY_ACCEPTABLE; break; case ACPI_SUB_OPTIMAL_CONFIGURATION: priority = PNP_RES_PRIORITY_FUNCTIONAL; break; default: priority = PNP_RES_PRIORITY_INVALID; break; } parse_data->option_flags = pnp_new_dependent_set(dev, priority); break; case ACPI_RESOURCE_TYPE_END_DEPENDENT: parse_data->option_flags = 0; break; case ACPI_RESOURCE_TYPE_IO: pnpacpi_parse_port_option(dev, option_flags, &res->data.io); break; case ACPI_RESOURCE_TYPE_FIXED_IO: pnpacpi_parse_fixed_port_option(dev, option_flags, &res->data.fixed_io); break; case ACPI_RESOURCE_TYPE_VENDOR: case ACPI_RESOURCE_TYPE_END_TAG: break; case ACPI_RESOURCE_TYPE_MEMORY24: pnpacpi_parse_mem24_option(dev, option_flags, &res->data.memory24); break; case ACPI_RESOURCE_TYPE_MEMORY32: pnpacpi_parse_mem32_option(dev, option_flags, &res->data.memory32); break; case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: pnpacpi_parse_fixed_mem32_option(dev, option_flags, &res->data.fixed_memory32); break; case ACPI_RESOURCE_TYPE_ADDRESS16: case ACPI_RESOURCE_TYPE_ADDRESS32: case ACPI_RESOURCE_TYPE_ADDRESS64: pnpacpi_parse_address_option(dev, option_flags, res); break; case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: pnpacpi_parse_ext_address_option(dev, option_flags, res); break; case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: pnpacpi_parse_ext_irq_option(dev, option_flags, &res->data.extended_irq); break; case ACPI_RESOURCE_TYPE_GENERIC_REGISTER: break; default: dev_warn(&dev->dev, "unknown resource type %d in _PRS\n", res->type); return AE_ERROR; } return AE_OK; }
static acpi_status pnpacpi_option_resource(struct acpi_resource *res, void *data) { int priority = 0; struct acpipnp_parse_option_s *parse_data = (struct acpipnp_parse_option_s *)data; struct pnp_dev *dev = parse_data->dev; struct pnp_option *option = parse_data->option; switch (res->type) { case ACPI_RESOURCE_TYPE_IRQ: pnpacpi_parse_irq_option(option, &res->data.irq); break; case ACPI_RESOURCE_TYPE_DMA: pnpacpi_parse_dma_option(option, &res->data.dma); break; case ACPI_RESOURCE_TYPE_START_DEPENDENT: switch (res->data.start_dpf.compatibility_priority) { case ACPI_GOOD_CONFIGURATION: priority = PNP_RES_PRIORITY_PREFERRED; break; case ACPI_ACCEPTABLE_CONFIGURATION: priority = PNP_RES_PRIORITY_ACCEPTABLE; break; case ACPI_SUB_OPTIMAL_CONFIGURATION: priority = PNP_RES_PRIORITY_FUNCTIONAL; break; default: priority = PNP_RES_PRIORITY_INVALID; break; } /* TBD: Considering performace/robustness bits */ option = pnp_register_dependent_option(dev, priority); if (!option) return AE_ERROR; parse_data->option = option; break; case ACPI_RESOURCE_TYPE_END_DEPENDENT: /*only one EndDependentFn is allowed*/ if (!parse_data->option_independent) { pnp_warn("PnPACPI: more than one EndDependentFn"); return AE_ERROR; } parse_data->option = parse_data->option_independent; parse_data->option_independent = NULL; break; case ACPI_RESOURCE_TYPE_IO: pnpacpi_parse_port_option(option, &res->data.io); break; case ACPI_RESOURCE_TYPE_FIXED_IO: pnpacpi_parse_fixed_port_option(option, &res->data.fixed_io); break; case ACPI_RESOURCE_TYPE_VENDOR: case ACPI_RESOURCE_TYPE_END_TAG: break; case ACPI_RESOURCE_TYPE_MEMORY24: pnpacpi_parse_mem24_option(option, &res->data.memory24); break; case ACPI_RESOURCE_TYPE_MEMORY32: pnpacpi_parse_mem32_option(option, &res->data.memory32); break; case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: pnpacpi_parse_fixed_mem32_option(option, &res->data.fixed_memory32); break; case ACPI_RESOURCE_TYPE_ADDRESS16: case ACPI_RESOURCE_TYPE_ADDRESS32: case ACPI_RESOURCE_TYPE_ADDRESS64: pnpacpi_parse_address_option(option, res); break; case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: break; case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: pnpacpi_parse_ext_irq_option(option, &res->data.extended_irq); break; case ACPI_RESOURCE_TYPE_GENERIC_REGISTER: break; default: pnp_warn("PnPACPI: unknown resource type %d", res->type); return AE_ERROR; } return AE_OK; }