diff options
| -rw-r--r-- | drivers/acpi/pci_irq.c | 56 |
1 files changed, 13 insertions, 43 deletions
diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c index 643c4e86429..03d528e02c2 100644 --- a/drivers/acpi/pci_irq.c +++ b/drivers/acpi/pci_irq.c | |||
| @@ -299,44 +299,6 @@ void acpi_pci_irq_del_prt(int segment, int bus) | |||
| 299 | /* -------------------------------------------------------------------------- | 299 | /* -------------------------------------------------------------------------- |
| 300 | PCI Interrupt Routing Support | 300 | PCI Interrupt Routing Support |
| 301 | -------------------------------------------------------------------------- */ | 301 | -------------------------------------------------------------------------- */ |
| 302 | static int | ||
| 303 | acpi_pci_allocate_irq(struct acpi_prt_entry *entry, | ||
| 304 | int *triggering, int *polarity, char **link) | ||
| 305 | { | ||
| 306 | int irq; | ||
| 307 | |||
| 308 | |||
| 309 | if (entry->link) { | ||
| 310 | irq = acpi_pci_link_allocate_irq(entry->link, entry->index, | ||
| 311 | triggering, polarity, link); | ||
| 312 | if (irq < 0) { | ||
| 313 | printk(KERN_WARNING PREFIX | ||
| 314 | "Invalid IRQ link routing entry\n"); | ||
| 315 | return -1; | ||
| 316 | } | ||
| 317 | } else { | ||
| 318 | irq = entry->index; | ||
| 319 | *triggering = ACPI_LEVEL_SENSITIVE; | ||
| 320 | *polarity = ACPI_ACTIVE_LOW; | ||
| 321 | } | ||
| 322 | |||
| 323 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found GSI %d\n", irq)); | ||
| 324 | return irq; | ||
| 325 | } | ||
| 326 | |||
| 327 | static int | ||
| 328 | acpi_pci_free_irq(struct acpi_prt_entry *entry) | ||
| 329 | { | ||
| 330 | int irq; | ||
| 331 | |||
| 332 | if (entry->link) { | ||
| 333 | irq = acpi_pci_link_free_irq(entry->link); | ||
| 334 | } else { | ||
| 335 | irq = entry->index; | ||
| 336 | } | ||
| 337 | return irq; | ||
| 338 | } | ||
| 339 | |||
| 340 | static struct acpi_prt_entry * | 302 | static struct acpi_prt_entry * |
| 341 | acpi_pci_irq_lookup(struct pci_dev *dev, int pin) | 303 | acpi_pci_irq_lookup(struct pci_dev *dev, int pin) |
| 342 | { | 304 | { |
| @@ -426,10 +388,15 @@ int acpi_pci_irq_enable(struct pci_dev *dev) | |||
| 426 | return 0; | 388 | return 0; |
| 427 | } | 389 | } |
| 428 | 390 | ||
| 429 | if (entry) | 391 | if (entry) { |
| 430 | gsi = acpi_pci_allocate_irq(entry, &triggering, &polarity, | 392 | if (entry->link) |
| 431 | &link); | 393 | gsi = acpi_pci_link_allocate_irq(entry->link, |
| 432 | else | 394 | entry->index, |
| 395 | &triggering, &polarity, | ||
| 396 | &link); | ||
| 397 | else | ||
| 398 | gsi = entry->index; | ||
| 399 | } else | ||
| 433 | gsi = -1; | 400 | gsi = -1; |
| 434 | 401 | ||
| 435 | /* | 402 | /* |
| @@ -491,7 +458,10 @@ void acpi_pci_irq_disable(struct pci_dev *dev) | |||
| 491 | if (!entry) | 458 | if (!entry) |
| 492 | return; | 459 | return; |
| 493 | 460 | ||
| 494 | gsi = acpi_pci_free_irq(entry); | 461 | if (entry->link) |
| 462 | gsi = acpi_pci_link_free_irq(entry->link); | ||
| 463 | else | ||
| 464 | gsi = entry->index; | ||
| 495 | 465 | ||
| 496 | /* | 466 | /* |
| 497 | * TBD: It might be worth clearing dev->irq by magic constant | 467 | * TBD: It might be worth clearing dev->irq by magic constant |
