On 11/4/2015 10:09 AM, Tomasz Nowicki wrote:
OK, now I see your point and 256 limitation, your patch won't help to solve that issue because spec defines: struct acpi_resource_irq { u8 descriptor_length; u8 triggering; u8 polarity; u8 sharable; u8 wake_capable; u8 interrupt_count; u8 interrupts[1]; <---- 1byte size };
My code works... Tested against real hardware. The format used with extended IRQ is this. See u32 below.
struct acpi_resource_extended_irq { u8 producer_consumer; u8 triggering; u8 polarity; u8 sharable; u8 wake_capable; u8 interrupt_count; struct acpi_resource_source resource_source; u32 interrupts[1]; };
The pci_link.c already supports parsing extended IRQ range. It is just limited to 256 due to common data structure types (u8) used.
case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: { struct acpi_resource_extended_irq *p = &resource->data.extended_irq; if (!p || !p->interrupt_count) {
I think we need support for both. Both interrupt declarations are correct. The ACPI spec does not limit the interrupt value to 256 and the declaration of interrupt numbers inside _PRT is also correct.