]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/acpi/pci_link.c
[PATCH] ppc64: remove another fixed address constraint
[mv-sheeva.git] / drivers / acpi / pci_link.c
index 520b28ad0740e6626038d2ab136e270a9260d6d5..6ad0e77df9b320ca2661fc483778f10ced28d4c9 100644 (file)
@@ -72,10 +72,12 @@ struct acpi_pci_link_irq {
        u8                      active;                 /* Current IRQ */
        u8                      edge_level;             /* All IRQs */
        u8                      active_high_low;        /* All IRQs */
-       u8                      initialized;
        u8                      resource_type;
        u8                      possible_count;
        u8                      possible[ACPI_PCI_LINK_MAX_POSSIBLE];
+       u8                      initialized:1;
+       u8                      suspend_resume:1;
+       u8                      reserved:6;
 };
 
 struct acpi_pci_link {
@@ -530,6 +532,10 @@ static int acpi_pci_link_allocate(
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
 
+       if (link->irq.suspend_resume) {
+               acpi_pci_link_set(link, link->irq.active);
+               link->irq.suspend_resume = 0;
+       }
        if (link->irq.initialized)
                return_VALUE(0);
 
@@ -713,38 +719,24 @@ end:
        return_VALUE(result);
 }
 
-
-static int
-acpi_pci_link_resume (
-       struct acpi_pci_link    *link)
-{
-       ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
-       
-       if (link->irq.active && link->irq.initialized)
-               return_VALUE(acpi_pci_link_set(link, link->irq.active));
-       else
-               return_VALUE(0);
-}
-
-
 static int
-irqrouter_resume(
-       struct sys_device *dev)
+irqrouter_suspend(
+       struct sys_device *dev,
+       u32     state)
 {
        struct list_head        *node = NULL;
        struct acpi_pci_link    *link = NULL;
 
-       ACPI_FUNCTION_TRACE("irqrouter_resume");
+       ACPI_FUNCTION_TRACE("irqrouter_suspend");
 
        list_for_each(node, &acpi_link.entries) {
-
                link = list_entry(node, struct acpi_pci_link, node);
                if (!link) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
                        continue;
                }
-
-               acpi_pci_link_resume(link);
+               if (link->irq.active && link->irq.initialized)
+                       link->irq.suspend_resume = 1;
        }
        return_VALUE(0);
 }
@@ -812,9 +804,12 @@ static int __init acpi_irq_penalty_update(char *str, int used)
  * There is no ISA_POSSIBLE weight, so we simply use
  * the (small) PCI_USING penalty.
  */
-void acpi_penalize_isa_irq(int irq)
+void acpi_penalize_isa_irq(int irq, int active)
 {
-       acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
+       if (active)
+               acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_USED;
+       else
+               acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
 }
 
 /*
@@ -856,7 +851,7 @@ __setup("acpi_irq_balance", acpi_irq_balance_set);
 
 static struct sysdev_class irqrouter_sysdev_class = {
         set_kset_name("irqrouter"),
-        .resume = irqrouter_resume,
+        .suspend = irqrouter_suspend,
 };