Pull test into release branch
authorLen Brown <len.brown@intel.com>
Tue, 6 Feb 2007 20:31:00 +0000 (15:31 -0500)
committerLen Brown <len.brown@intel.com>
Tue, 6 Feb 2007 20:31:00 +0000 (15:31 -0500)
1  2 
arch/ia64/kernel/acpi.c

diff --combined arch/ia64/kernel/acpi.c
index 29f05d4b68cdd7f17911f8b840838faa795be2c4,a99b0cc92881919a976fabdb02ca3274e8e449e7..9197d7b361b33da914744bff7a2a393a799c9ba9
@@@ -55,7 -55,7 +55,7 @@@
  
  #define BAD_MADT_ENTRY(entry, end) (                                        \
                (!entry) || (unsigned long)entry + sizeof(*entry) > end ||  \
-               ((acpi_table_entry_header *)entry)->length < sizeof(*entry))
+               ((struct acpi_subtable_header *)entry)->length < sizeof(*entry))
  
  #define PREFIX                        "ACPI: "
  
@@@ -67,16 -67,11 +67,11 @@@ EXPORT_SYMBOL(pm_power_off)
  unsigned int acpi_cpei_override;
  unsigned int acpi_cpei_phys_cpuid;
  
- #define MAX_SAPICS 256
- u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = {[0 ... MAX_SAPICS - 1] = -1 };
- EXPORT_SYMBOL(ia64_acpiid_to_sapicid);
  const char *acpi_get_sysname(void)
  {
  #ifdef CONFIG_IA64_GENERIC
        unsigned long rsdp_phys;
-       struct acpi20_table_rsdp *rsdp;
+       struct acpi_table_rsdp *rsdp;
        struct acpi_table_xsdt *xsdt;
        struct acpi_table_header *hdr;
  
                return "dig";
        }
  
-       rsdp = (struct acpi20_table_rsdp *)__va(rsdp_phys);
-       if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) {
+       rsdp = (struct acpi_table_rsdp *)__va(rsdp_phys);
+       if (strncmp(rsdp->signature, ACPI_SIG_RSDP, sizeof(ACPI_SIG_RSDP) - 1)) {
                printk(KERN_ERR
                       "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n");
                return "dig";
        }
  
-       xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_address);
+       xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_physical_address);
        hdr = &xsdt->header;
-       if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) {
+       if (strncmp(hdr->signature, ACPI_SIG_XSDT, sizeof(ACPI_SIG_XSDT) - 1)) {
                printk(KERN_ERR
                       "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n");
                return "dig";
@@@ -169,12 -164,12 +164,12 @@@ struct acpi_table_madt *acpi_madt __ini
  static u8 has_8259;
  
  static int __init
- acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header,
+ acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header,
                          const unsigned long end)
  {
-       struct acpi_table_lapic_addr_ovr *lapic;
+       struct acpi_madt_local_apic_override *lapic;
  
-       lapic = (struct acpi_table_lapic_addr_ovr *)header;
+       lapic = (struct acpi_madt_local_apic_override *)header;
  
        if (BAD_MADT_ENTRY(lapic, end))
                return -EINVAL;
  }
  
  static int __init
- acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end)
+ acpi_parse_lsapic(struct acpi_subtable_header * header, const unsigned long end)
  {
-       struct acpi_table_lsapic *lsapic;
+       struct acpi_madt_local_sapic *lsapic;
  
-       lsapic = (struct acpi_table_lsapic *)header;
+       lsapic = (struct acpi_madt_local_sapic *)header;
  
-       if (BAD_MADT_ENTRY(lsapic, end))
-               return -EINVAL;
+       /*Skip BAD_MADT_ENTRY check, as lsapic size could vary */
  
-       if (lsapic->flags.enabled) {
+       if (lsapic->lapic_flags & ACPI_MADT_ENABLED) {
  #ifdef CONFIG_SMP
                smp_boot_data.cpu_phys_id[available_cpus] =
                    (lsapic->id << 8) | lsapic->eid;
  #endif
-               ia64_acpiid_to_sapicid[lsapic->acpi_id] =
-                   (lsapic->id << 8) | lsapic->eid;
                ++available_cpus;
        }
  
  }
  
  static int __init
- acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end)
+ acpi_parse_lapic_nmi(struct acpi_subtable_header * header, const unsigned long end)
  {
-       struct acpi_table_lapic_nmi *lacpi_nmi;
+       struct acpi_madt_local_apic_nmi *lacpi_nmi;
  
-       lacpi_nmi = (struct acpi_table_lapic_nmi *)header;
+       lacpi_nmi = (struct acpi_madt_local_apic_nmi *)header;
  
        if (BAD_MADT_ENTRY(lacpi_nmi, end))
                return -EINVAL;
  }
  
  static int __init
- acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end)
+ acpi_parse_iosapic(struct acpi_subtable_header * header, const unsigned long end)
  {
-       struct acpi_table_iosapic *iosapic;
+       struct acpi_madt_io_sapic *iosapic;
  
-       iosapic = (struct acpi_table_iosapic *)header;
+       iosapic = (struct acpi_madt_io_sapic *)header;
  
        if (BAD_MADT_ENTRY(iosapic, end))
                return -EINVAL;
  static unsigned int __initdata acpi_madt_rev;
  
  static int __init
- acpi_parse_plat_int_src(acpi_table_entry_header * header,
+ acpi_parse_plat_int_src(struct acpi_subtable_header * header,
                        const unsigned long end)
  {
-       struct acpi_table_plat_int_src *plintsrc;
+       struct acpi_madt_interrupt_source *plintsrc;
        int vector;
  
-       plintsrc = (struct acpi_table_plat_int_src *)header;
+       plintsrc = (struct acpi_madt_interrupt_source *)header;
  
        if (BAD_MADT_ENTRY(plintsrc, end))
                return -EINVAL;
         */
        vector = iosapic_register_platform_intr(plintsrc->type,
                                                plintsrc->global_irq,
-                                               plintsrc->iosapic_vector,
+                                               plintsrc->io_sapic_vector,
                                                plintsrc->eid,
                                                plintsrc->id,
-                                               (plintsrc->flags.polarity ==
-                                                1) ? IOSAPIC_POL_HIGH :
-                                               IOSAPIC_POL_LOW,
-                                               (plintsrc->flags.trigger ==
-                                                1) ? IOSAPIC_EDGE :
-                                               IOSAPIC_LEVEL);
+                                               ((plintsrc->inti_flags & ACPI_MADT_POLARITY_MASK) ==
+                                                ACPI_MADT_POLARITY_ACTIVE_HIGH) ?
+                                               IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
+                                               ((plintsrc->inti_flags & ACPI_MADT_TRIGGER_MASK) ==
+                                                ACPI_MADT_TRIGGER_EDGE) ?
+                                               IOSAPIC_EDGE : IOSAPIC_LEVEL);
  
        platform_intr_list[plintsrc->type] = vector;
        if (acpi_madt_rev > 1) {
-               acpi_cpei_override = plintsrc->plint_flags.cpei_override_flag;
+               acpi_cpei_override = plintsrc->flags & ACPI_MADT_CPEI_OVERRIDE;
        }
  
        /*
@@@ -324,30 -316,32 +316,32 @@@ unsigned int get_cpei_target_cpu(void
  }
  
  static int __init
- acpi_parse_int_src_ovr(acpi_table_entry_header * header,
+ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
                       const unsigned long end)
  {
-       struct acpi_table_int_src_ovr *p;
+       struct acpi_madt_interrupt_override *p;
  
-       p = (struct acpi_table_int_src_ovr *)header;
+       p = (struct acpi_madt_interrupt_override *)header;
  
        if (BAD_MADT_ENTRY(p, end))
                return -EINVAL;
  
-       iosapic_override_isa_irq(p->bus_irq, p->global_irq,
-                                (p->flags.polarity ==
-                                 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
-                                (p->flags.trigger ==
-                                 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
+       iosapic_override_isa_irq(p->source_irq, p->global_irq,
+                                ((p->inti_flags & ACPI_MADT_POLARITY_MASK) ==
+                                 ACPI_MADT_POLARITY_ACTIVE_HIGH) ?
+                                IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
+                                ((p->inti_flags & ACPI_MADT_TRIGGER_MASK) ==
+                                ACPI_MADT_TRIGGER_EDGE) ?
+                                IOSAPIC_EDGE : IOSAPIC_LEVEL);
        return 0;
  }
  
  static int __init
- acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end)
+ acpi_parse_nmi_src(struct acpi_subtable_header * header, const unsigned long end)
  {
-       struct acpi_table_nmi_src *nmi_src;
+       struct acpi_madt_nmi_source *nmi_src;
  
-       nmi_src = (struct acpi_table_nmi_src *)header;
+       nmi_src = (struct acpi_madt_nmi_source *)header;
  
        if (BAD_MADT_ENTRY(nmi_src, end))
                return -EINVAL;
@@@ -371,12 -365,12 +365,12 @@@ static void __init acpi_madt_oem_check(
        }
  }
  
- static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)
+ static int __init acpi_parse_madt(struct acpi_table_header *table)
  {
-       if (!phys_addr || !size)
+       if (!table)
                return -EINVAL;
  
-       acpi_madt = (struct acpi_table_madt *)__va(phys_addr);
+       acpi_madt = (struct acpi_table_madt *)table;
  
        acpi_madt_rev = acpi_madt->header.revision;
  
  #ifdef CONFIG_ITANIUM
        has_8259 = 1;           /* Firmware on old Itanium systems is broken */
  #else
-       has_8259 = acpi_madt->flags.pcat_compat;
+       has_8259 = acpi_madt->flags & ACPI_MADT_PCAT_COMPAT;
  #endif
        iosapic_system_init(has_8259);
  
        /* Get base address of IPI Message Block */
  
-       if (acpi_madt->lapic_address)
-               ipi_base_addr = ioremap(acpi_madt->lapic_address, 0);
+       if (acpi_madt->address)
+               ipi_base_addr = ioremap(acpi_madt->address, 0);
  
        printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr);
  
@@@ -413,23 -407,24 +407,24 @@@ static u32 __devinitdata pxm_flag[PXM_F
  #define pxm_bit_test(bit)     (test_bit(bit,(void *)pxm_flag))
  static struct acpi_table_slit __initdata *slit_table;
  
- static int get_processor_proximity_domain(struct acpi_table_processor_affinity *pa)
+ static int get_processor_proximity_domain(struct acpi_srat_cpu_affinity *pa)
  {
        int pxm;
  
-       pxm = pa->proximity_domain;
+       pxm = pa->proximity_domain_lo;
        if (ia64_platform_is("sn2"))
-               pxm += pa->reserved[0] << 8;
+               pxm += pa->proximity_domain_hi[0] << 8;
        return pxm;
  }
  
- static int get_memory_proximity_domain(struct acpi_table_memory_affinity *ma)
+ static int get_memory_proximity_domain(struct acpi_srat_mem_affinity *ma)
  {
        int pxm;
  
        pxm = ma->proximity_domain;
-       if (ia64_platform_is("sn2"))
-               pxm += ma->reserved1[0] << 8;
+       if (!ia64_platform_is("sn2"))
+               pxm &= 0xff;
        return pxm;
  }
  
@@@ -442,7 -437,7 +437,7 @@@ void __init acpi_numa_slit_init(struct 
        u32 len;
  
        len = sizeof(struct acpi_table_header) + 8
-           + slit->localities * slit->localities;
+           + slit->locality_count * slit->locality_count;
        if (slit->header.length != len) {
                printk(KERN_ERR
                       "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n",
  }
  
  void __init
- acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa)
+ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa)
  {
        int pxm;
  
-       if (!pa->flags.enabled)
+       if (!(pa->flags & ACPI_SRAT_CPU_ENABLED))
                return;
  
        pxm = get_processor_proximity_domain(pa);
        pxm_bit_set(pxm);
  
        node_cpuid[srat_num_cpus].phys_id =
-           (pa->apic_id << 8) | (pa->lsapic_eid);
+           (pa->apic_id << 8) | (pa->local_sapic_eid);
        /* nid should be overridden as logical node id later */
        node_cpuid[srat_num_cpus].nid = pxm;
        srat_num_cpus++;
  }
  
  void __init
- acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
+ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
  {
        unsigned long paddr, size;
        int pxm;
        pxm = get_memory_proximity_domain(ma);
  
        /* fill node memory chunk structure */
-       paddr = ma->base_addr_hi;
-       paddr = (paddr << 32) | ma->base_addr_lo;
-       size = ma->length_hi;
-       size = (size << 32) | ma->length_lo;
+       paddr = ma->base_address;
+       size = ma->length;
  
        /* Ignore disabled entries */
-       if (!ma->flags.enabled)
+       if (!(ma->flags & ACPI_SRAT_MEM_ENABLED))
                return;
  
        /* record this node in proximity bitmap */
@@@ -560,16 -553,16 +553,16 @@@ void __init acpi_numa_arch_fixup(void
        if (!slit_table)
                return;
        memset(numa_slit, -1, sizeof(numa_slit));
-       for (i = 0; i < slit_table->localities; i++) {
+       for (i = 0; i < slit_table->locality_count; i++) {
                if (!pxm_bit_test(i))
                        continue;
                node_from = pxm_to_node(i);
-               for (j = 0; j < slit_table->localities; j++) {
+               for (j = 0; j < slit_table->locality_count; j++) {
                        if (!pxm_bit_test(j))
                                continue;
                        node_to = pxm_to_node(j);
                        node_distance(node_from, node_to) =
-                           slit_table->entry[i * slit_table->localities + j];
+                           slit_table->entry[i * slit_table->locality_count + j];
                }
        }
  
@@@ -609,29 -602,26 +602,29 @@@ EXPORT_SYMBOL(acpi_register_gsi)
  
  void acpi_unregister_gsi(u32 gsi)
  {
 +      if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM)
 +              return;
 +
        iosapic_unregister_intr(gsi);
  }
  
  EXPORT_SYMBOL(acpi_unregister_gsi);
  
- static int __init acpi_parse_fadt(unsigned long phys_addr, unsigned long size)
+ static int __init acpi_parse_fadt(struct acpi_table_header *table)
  {
        struct acpi_table_header *fadt_header;
-       struct fadt_descriptor *fadt;
+       struct acpi_table_fadt *fadt;
  
-       if (!phys_addr || !size)
+       if (!table)
                return -EINVAL;
  
-       fadt_header = (struct acpi_table_header *)__va(phys_addr);
+       fadt_header = (struct acpi_table_header *)table;
        if (fadt_header->revision != 3)
                return -ENODEV; /* Only deal with ACPI 2.0 FADT */
  
-       fadt = (struct fadt_descriptor *)fadt_header;
+       fadt = (struct acpi_table_fadt *)fadt_header;
  
-       acpi_register_gsi(fadt->sci_int, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW);
+       acpi_register_gsi(fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW);
        return 0;
  }
  
@@@ -658,7 -648,7 +651,7 @@@ int __init acpi_boot_init(void
         * information -- the successor to MPS tables.
         */
  
-       if (acpi_table_parse(ACPI_APIC, acpi_parse_madt) < 1) {
+       if (acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt) < 1) {
                printk(KERN_ERR PREFIX "Can't find MADT\n");
                goto skip_madt;
        }
        /* Local APIC */
  
        if (acpi_table_parse_madt
-           (ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0)
+           (ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE, acpi_parse_lapic_addr_ovr, 0) < 0)
                printk(KERN_ERR PREFIX
                       "Error parsing LAPIC address override entry\n");
  
-       if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS)
+       if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC, acpi_parse_lsapic, NR_CPUS)
            < 1)
                printk(KERN_ERR PREFIX
                       "Error parsing MADT - no LAPIC entries\n");
  
-       if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0)
+       if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0)
            < 0)
                printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
  
        /* I/O APIC */
  
        if (acpi_table_parse_madt
-           (ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1)
+           (ACPI_MADT_TYPE_IO_SAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1)
                printk(KERN_ERR PREFIX
                       "Error parsing MADT - no IOSAPIC entries\n");
  
        /* System-Level Interrupt Routing */
  
        if (acpi_table_parse_madt
-           (ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src,
+           (ACPI_MADT_TYPE_INTERRUPT_SOURCE, acpi_parse_plat_int_src,
             ACPI_MAX_PLATFORM_INTERRUPTS) < 0)
                printk(KERN_ERR PREFIX
                       "Error parsing platform interrupt source entry\n");
  
        if (acpi_table_parse_madt
-           (ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0)
+           (ACPI_MADT_TYPE_INTERRUPT_OVERRIDE, acpi_parse_int_src_ovr, 0) < 0)
                printk(KERN_ERR PREFIX
                       "Error parsing interrupt source overrides entry\n");
  
-       if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0)
+       if (acpi_table_parse_madt(ACPI_MADT_TYPE_NMI_SOURCE, acpi_parse_nmi_src, 0) < 0)
                printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
        skip_madt:
  
         * gets interrupts such as power and sleep buttons.  If it's not
         * on a Legacy interrupt, it needs to be setup.
         */
-       if (acpi_table_parse(ACPI_FADT, acpi_parse_fadt) < 1)
+       if (acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt) < 1)
                printk(KERN_ERR PREFIX "Can't find FADT\n");
  
  #ifdef CONFIG_SMP
@@@ -842,7 -832,7 +835,7 @@@ int acpi_map_lsapic(acpi_handle handle
  {
        struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        union acpi_object *obj;
-       struct acpi_table_lsapic *lsapic;
+       struct acpi_madt_local_sapic *lsapic;
        cpumask_t tmp_map;
        long physid;
        int cpu;
                return -EINVAL;
  
        obj = buffer.pointer;
-       if (obj->type != ACPI_TYPE_BUFFER ||
-           obj->buffer.length < sizeof(*lsapic)) {
+       if (obj->type != ACPI_TYPE_BUFFER)
+       {
                kfree(buffer.pointer);
                return -EINVAL;
        }
  
-       lsapic = (struct acpi_table_lsapic *)obj->buffer.pointer;
+       lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer;
  
-       if ((lsapic->header.type != ACPI_MADT_LSAPIC) ||
-           (!lsapic->flags.enabled)) {
+       if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) ||
+           (!lsapic->lapic_flags & ACPI_MADT_ENABLED)) {
                kfree(buffer.pointer);
                return -EINVAL;
        }
  
        cpu_set(cpu, cpu_present_map);
        ia64_cpu_to_sapicid[cpu] = physid;
-       ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu];
  
        *pcpu = cpu;
        return (0);
@@@ -893,14 -882,6 +885,6 @@@ EXPORT_SYMBOL(acpi_map_lsapic)
  
  int acpi_unmap_lsapic(int cpu)
  {
-       int i;
-       for (i = 0; i < MAX_SAPICS; i++) {
-               if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) {
-                       ia64_acpiid_to_sapicid[i] = -1;
-                       break;
-               }
-       }
        ia64_cpu_to_sapicid[cpu] = -1;
        cpu_clear(cpu, cpu_present_map);
  
@@@ -920,7 -901,7 +904,7 @@@ acpi_map_iosapic(acpi_handle handle, u3
  {
        struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        union acpi_object *obj;
-       struct acpi_table_iosapic *iosapic;
+       struct acpi_madt_io_sapic *iosapic;
        unsigned int gsi_base;
        int pxm, node;
  
                return AE_OK;
        }
  
-       iosapic = (struct acpi_table_iosapic *)obj->buffer.pointer;
+       iosapic = (struct acpi_madt_io_sapic *)obj->buffer.pointer;
  
-       if (iosapic->header.type != ACPI_MADT_IOSAPIC) {
+       if (iosapic->header.type != ACPI_MADT_TYPE_IO_SAPIC) {
                kfree(buffer.pointer);
                return AE_OK;
        }