acpi_device: Add support for writing ACPI Interrupt descriptors
commit6b7c1f605c67f18996c584970a83fc5296c94747
authorDuncan Laurie <dlaurie@chromium.org>
Mon, 9 May 2016 22:38:36 +0000 (9 15:38 -0700)
committerDuncan Laurie <dlaurie@google.com>
Sat, 28 May 2016 01:40:35 +0000 (28 03:40 +0200)
treee75e7d6cc96a97d3b4dc18b6c2da22d4ead036aa
parentb3f5418ec16b1c0cdc913d0afd49bde94c26728e
acpi_device: Add support for writing ACPI Interrupt descriptors

Add definitions for ACPI device extended interrupts and a method to
write an Interrupt() descriptor to the SSDT output stream.

Interrupts are often tied together with other resources and some
configuration items are shared (though not always compatibly) with
other constructs like GPIOs and GPEs.

These will get used by device drivers to write _CRS sections for
devices into the SSDT.  One usage is to include a "struct acpi_irq"
inside a config struct for a device so it can be initialized based
on settings in devicetree.

Example usage:

chip.h:
  struct drivers_i2c_generic_config {
    struct acpi_irq irq;
  };

generic.c:
  void acpi_fill_ssdt_generator(struct device *dev) {
    struct drivers_i2c_generic_config *config = dev->chip_info;
    ...
    acpi_device_write_interrupt(&config->irq);
    ...
  }

devicetree.cb:
  device pci 15.0 on
    chip drivers/i2c/generic
      register "irq" = "IRQ_EDGE_LOW(GPP_E7_IRQ)"
      device i2c 10 on end
    end
  end

SSDT.dsl:
  Interrupt (ResourceConsumer, Edge, ActiveLow, Exclusive,,,) { 31 }

Change-Id: I3b64170cc2ebac178e7a17df479eda7670a42703
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://review.coreboot.org/14933
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
src/arch/x86/acpi_device.c
src/arch/x86/include/arch/acpi_device.h