diff options
Diffstat (limited to 'arch/ia64/kernel/acpi.c')
| -rw-r--r-- | arch/ia64/kernel/acpi.c | 172 | 
1 files changed, 86 insertions, 86 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index d37fb8e8189..4719e481d93 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c @@ -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: " @@ -94,7 +94,7 @@ const char *acpi_get_sysname(void)  		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, ACPI_SIG_XSDT, sizeof(ACPI_SIG_XSDT) - 1)) {  		printk(KERN_ERR @@ -169,12 +169,12 @@ struct acpi_table_madt *acpi_madt __initdata;  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; @@ -187,21 +187,20 @@ acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header,  }  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] = +		ia64_acpiid_to_sapicid[lsapic->processor_id] =  		    (lsapic->id << 8) | lsapic->eid;  		++available_cpus;  	} @@ -211,11 +210,11 @@ acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end)  }  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; @@ -225,11 +224,11 @@ acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end)  }  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; @@ -240,13 +239,13 @@ acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end)  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; @@ -257,19 +256,19 @@ acpi_parse_plat_int_src(acpi_table_entry_header * header,  	 */  	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 +323,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 +372,12 @@ static void __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)  	}  } -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; @@ -384,14 +385,14 @@ static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)  #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 +414,24 @@ static u32 __devinitdata pxm_flag[PXM_FLAG_LEN];  #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; +		pxm += ma->reserved << 8; +  	return pxm;  } @@ -442,7 +444,7 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit)  	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", @@ -454,11 +456,11 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit)  }  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); @@ -467,14 +469,14 @@ acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *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; @@ -483,13 +485,11 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)  	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 +560,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];  		}  	} @@ -614,15 +614,15 @@ void acpi_unregister_gsi(u32 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 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 */ @@ -655,7 +655,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;  	} @@ -663,40 +663,40 @@ int __init acpi_boot_init(void)  	/* 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: @@ -706,7 +706,7 @@ int __init acpi_boot_init(void)  	 * 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 @@ -839,7 +839,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)  {  	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; @@ -851,16 +851,16 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)  		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;  	} @@ -880,7 +880,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)  	cpu_set(cpu, cpu_present_map);  	ia64_cpu_to_sapicid[cpu] = physid; -	ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu]; +	ia64_acpiid_to_sapicid[lsapic->processor_id] = ia64_cpu_to_sapicid[cpu];  	*pcpu = cpu;  	return (0); @@ -917,7 +917,7 @@ acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret)  {  	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; @@ -935,9 +935,9 @@ acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret)  		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;  	}  |