diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-12-16 20:57:41 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-12-16 20:57:41 +0100 | 
| commit | dd7a5230cd651bfb119d222561c4032f30dd5659 (patch) | |
| tree | 85628ef75d1f512f43df6f760980b6cce6cf40c7 /drivers/acpi/system.c | |
| parent | 050dc6944b9ca2186f4729ab44e0da3743933941 (diff) | |
| parent | 8b1fae4e4200388b64dd88065639413cb3f1051c (diff) | |
Merge commit 'v2.6.28-rc8' into x86/cpufeature
Diffstat (limited to 'drivers/acpi/system.c')
| -rw-r--r-- | drivers/acpi/system.c | 48 | 
1 files changed, 26 insertions, 22 deletions
diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c index 1d74171b7940..6e4107f82403 100644 --- a/drivers/acpi/system.c +++ b/drivers/acpi/system.c @@ -78,9 +78,15 @@ static ssize_t acpi_table_show(struct kobject *kobj,  	    container_of(bin_attr, struct acpi_table_attr, attr);  	struct acpi_table_header *table_header = NULL;  	acpi_status status; +	char name[ACPI_NAME_SIZE]; + +	if (strncmp(table_attr->name, "NULL", 4)) +		memcpy(name, table_attr->name, ACPI_NAME_SIZE); +	else +		memcpy(name, "\0\0\0\0", 4);  	status = -	    acpi_get_table(table_attr->name, table_attr->instance, +	    acpi_get_table(name, table_attr->instance,  			   &table_header);  	if (ACPI_FAILURE(status))  		return -ENODEV; @@ -95,21 +101,24 @@ static void acpi_table_attr_init(struct acpi_table_attr *table_attr,  	struct acpi_table_header *header = NULL;  	struct acpi_table_attr *attr = NULL; -	memcpy(table_attr->name, table_header->signature, ACPI_NAME_SIZE); +	if (table_header->signature[0] != '\0') +		memcpy(table_attr->name, table_header->signature, +			ACPI_NAME_SIZE); +	else +		memcpy(table_attr->name, "NULL", 4);  	list_for_each_entry(attr, &acpi_table_attr_list, node) { -		if (!memcmp(table_header->signature, attr->name, -			    ACPI_NAME_SIZE)) +		if (!memcmp(table_attr->name, attr->name, ACPI_NAME_SIZE))  			if (table_attr->instance < attr->instance)  				table_attr->instance = attr->instance;  	}  	table_attr->instance++;  	if (table_attr->instance > 1 || (table_attr->instance == 1 && -					 !acpi_get_table(table_header-> -							 signature, 2, -							 &header))) -		sprintf(table_attr->name + 4, "%d", table_attr->instance); +					!acpi_get_table +					(table_header->signature, 2, &header))) +		sprintf(table_attr->name + ACPI_NAME_SIZE, "%d", +			table_attr->instance);  	table_attr->attr.size = 0;  	table_attr->attr.read = acpi_table_show; @@ -167,7 +176,6 @@ static int acpi_system_sysfs_init(void)  #define COUNT_ERROR 2	/* other */  #define NUM_COUNTERS_EXTRA 3 -#define ACPI_EVENT_VALID	0x01  struct event_counter {  	u32 count;  	u32 flags; @@ -312,12 +320,6 @@ static int get_status(u32 index, acpi_event_status *status, acpi_handle *handle)  	} else if (index < (num_gpes + ACPI_NUM_FIXED_EVENTS))  		result = acpi_get_event_status(index - num_gpes, status); -	/* -	 * sleep/power button GPE/Fixed Event is enabled after acpi_system_init, -	 * check the status at runtime and mark it as valid once it's enabled -	 */ -	if (!result && (*status & ACPI_EVENT_FLAG_ENABLED)) -		all_counters[index].flags |= ACPI_EVENT_VALID;  end:  	return result;  } @@ -346,12 +348,14 @@ static ssize_t counter_show(struct kobject *kobj,  	if (result)  		goto end; -	if (!(all_counters[index].flags & ACPI_EVENT_VALID)) -		size += sprintf(buf + size, "  invalid"); +	if (!(status & ACPI_EVENT_FLAG_HANDLE)) +		size += sprintf(buf + size, "	invalid");  	else if (status & ACPI_EVENT_FLAG_ENABLED) -		size += sprintf(buf + size, "	enable"); +		size += sprintf(buf + size, "	enabled"); +	else if (status & ACPI_EVENT_FLAG_WAKE_ENABLED) +		size += sprintf(buf + size, "	wake_enabled");  	else -		size += sprintf(buf + size, "  disable"); +		size += sprintf(buf + size, "	disabled");  end:  	size += sprintf(buf + size, "\n"); @@ -385,7 +389,7 @@ static ssize_t counter_set(struct kobject *kobj,  	if (result)  		goto end; -	if (!(all_counters[index].flags & ACPI_EVENT_VALID)) { +	if (!(status & ACPI_EVENT_FLAG_HANDLE)) {  		printk(KERN_WARNING PREFIX  			"Can not change Invalid GPE/Fixed Event status\n");  		return -EINVAL; @@ -394,10 +398,10 @@ static ssize_t counter_set(struct kobject *kobj,  	if (index < num_gpes) {  		if (!strcmp(buf, "disable\n") &&  				(status & ACPI_EVENT_FLAG_ENABLED)) -			result = acpi_disable_gpe(handle, index, ACPI_NOT_ISR); +			result = acpi_disable_gpe(handle, index);  		else if (!strcmp(buf, "enable\n") &&  				!(status & ACPI_EVENT_FLAG_ENABLED)) -			result = acpi_enable_gpe(handle, index, ACPI_NOT_ISR); +			result = acpi_enable_gpe(handle, index);  		else if (!strcmp(buf, "clear\n") &&  				(status & ACPI_EVENT_FLAG_SET))  			result = acpi_clear_gpe(handle, index, ACPI_NOT_ISR);  | 
