mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
Merge branches 'release', 'bugzilla-6217', 'bugzilla-6629', 'bugzilla-6933', 'bugzilla-7186', 'bugzilla-8269', 'bugzilla-8570', 'bugzilla-9139', 'bugzilla-9277', 'bugzilla-9341', 'bugzilla-9444', 'bugzilla-9614', 'bugzilla-9643' and 'bugzilla-9644' into release
This commit is contained in:
parent
8f859016ea
a7f9b1f249
b4d2730a0d
37748ebf88
ed9cbcd400
856608ee5e
cfaf3747ff
223630fe3d
38531e6fe5
b3b233c7d9
239665a3bb
0119509c4f
975c30257e
0879802950
commit
c64768a7d6
19 changed files with 209 additions and 125 deletions
|
@ -14,6 +14,7 @@ Following translations are available on the WWW:
|
||||||
- this file.
|
- this file.
|
||||||
ABI/
|
ABI/
|
||||||
- info on kernel <-> userspace ABI and relative interface stability.
|
- info on kernel <-> userspace ABI and relative interface stability.
|
||||||
|
|
||||||
BUG-HUNTING
|
BUG-HUNTING
|
||||||
- brute force method of doing binary search of patches to find bug.
|
- brute force method of doing binary search of patches to find bug.
|
||||||
Changes
|
Changes
|
||||||
|
@ -66,6 +67,8 @@ VGA-softcursor.txt
|
||||||
- how to change your VGA cursor from a blinking underscore.
|
- how to change your VGA cursor from a blinking underscore.
|
||||||
accounting/
|
accounting/
|
||||||
- documentation on accounting and taskstats.
|
- documentation on accounting and taskstats.
|
||||||
|
acpi/
|
||||||
|
- info on ACPI-specific hooks in the kernel.
|
||||||
aoe/
|
aoe/
|
||||||
- description of AoE (ATA over Ethernet) along with config examples.
|
- description of AoE (ATA over Ethernet) along with config examples.
|
||||||
applying-patches.txt
|
applying-patches.txt
|
||||||
|
|
26
Documentation/acpi/method-tracing.txt
Normal file
26
Documentation/acpi/method-tracing.txt
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/sys/module/acpi/parameters/:
|
||||||
|
|
||||||
|
trace_method_name
|
||||||
|
The AML method name that the user wants to trace
|
||||||
|
|
||||||
|
trace_debug_layer
|
||||||
|
The temporary debug_layer used when tracing the method.
|
||||||
|
Using 0xffffffff by default if it is 0.
|
||||||
|
|
||||||
|
trace_debug_level
|
||||||
|
The temporary debug_level used when tracing the method.
|
||||||
|
Using 0x00ffffff by default if it is 0.
|
||||||
|
|
||||||
|
trace_state
|
||||||
|
The status of the tracing feature.
|
||||||
|
|
||||||
|
"enabled" means this feature is enabled
|
||||||
|
and the AML method is traced every time it's executed.
|
||||||
|
|
||||||
|
"1" means this feature is enabled and the AML method
|
||||||
|
will only be traced during the next execution.
|
||||||
|
|
||||||
|
"disabled" means this feature is disabled.
|
||||||
|
Users can enable/disable this debug tracing feature by
|
||||||
|
"echo string > /sys/module/acpi/parameters/trace_state".
|
||||||
|
"string" should be one of "enable", "disable" and "1".
|
|
@ -69,6 +69,20 @@ unsigned int acpi_cpei_phys_cpuid;
|
||||||
|
|
||||||
unsigned long acpi_wakeup_address = 0;
|
unsigned long acpi_wakeup_address = 0;
|
||||||
|
|
||||||
|
#ifdef CONFIG_IA64_GENERIC
|
||||||
|
static unsigned long __init acpi_find_rsdp(void)
|
||||||
|
{
|
||||||
|
unsigned long rsdp_phys = 0;
|
||||||
|
|
||||||
|
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
||||||
|
rsdp_phys = efi.acpi20;
|
||||||
|
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
||||||
|
printk(KERN_WARNING PREFIX
|
||||||
|
"v1.0/r0.71 tables no longer supported\n");
|
||||||
|
return rsdp_phys;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
const char __init *
|
const char __init *
|
||||||
acpi_get_sysname(void)
|
acpi_get_sysname(void)
|
||||||
{
|
{
|
||||||
|
@ -631,18 +645,6 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long __init acpi_find_rsdp(void)
|
|
||||||
{
|
|
||||||
unsigned long rsdp_phys = 0;
|
|
||||||
|
|
||||||
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
|
||||||
rsdp_phys = efi.acpi20;
|
|
||||||
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
|
||||||
printk(KERN_WARNING PREFIX
|
|
||||||
"v1.0/r0.71 tables no longer supported\n");
|
|
||||||
return rsdp_phys;
|
|
||||||
}
|
|
||||||
|
|
||||||
int __init acpi_boot_init(void)
|
int __init acpi_boot_init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -587,25 +587,6 @@ int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
|
||||||
|
|
||||||
EXPORT_SYMBOL(acpi_unregister_ioapic);
|
EXPORT_SYMBOL(acpi_unregister_ioapic);
|
||||||
|
|
||||||
static unsigned long __init
|
|
||||||
acpi_scan_rsdp(unsigned long start, unsigned long length)
|
|
||||||
{
|
|
||||||
unsigned long offset = 0;
|
|
||||||
unsigned long sig_len = sizeof("RSD PTR ") - 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Scan all 16-byte boundaries of the physical memory region for the
|
|
||||||
* RSDP signature.
|
|
||||||
*/
|
|
||||||
for (offset = 0; offset < length; offset += 16) {
|
|
||||||
if (strncmp((char *)(phys_to_virt(start) + offset), "RSD PTR ", sig_len))
|
|
||||||
continue;
|
|
||||||
return (start + offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init acpi_parse_sbf(struct acpi_table_header *table)
|
static int __init acpi_parse_sbf(struct acpi_table_header *table)
|
||||||
{
|
{
|
||||||
struct acpi_table_boot *sb;
|
struct acpi_table_boot *sb;
|
||||||
|
@ -748,27 +729,6 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long __init acpi_find_rsdp(void)
|
|
||||||
{
|
|
||||||
unsigned long rsdp_phys = 0;
|
|
||||||
|
|
||||||
if (efi_enabled) {
|
|
||||||
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
|
||||||
return efi.acpi20;
|
|
||||||
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
|
||||||
return efi.acpi;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Scan memory looking for the RSDP signature. First search EBDA (low
|
|
||||||
* memory) paragraphs and then search upper memory (E0000-FFFFF).
|
|
||||||
*/
|
|
||||||
rsdp_phys = acpi_scan_rsdp(0, 0x400);
|
|
||||||
if (!rsdp_phys)
|
|
||||||
rsdp_phys = acpi_scan_rsdp(0xE0000, 0x20000);
|
|
||||||
|
|
||||||
return rsdp_phys;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_LOCAL_APIC
|
#ifdef CONFIG_X86_LOCAL_APIC
|
||||||
/*
|
/*
|
||||||
* Parse LAPIC entries in MADT
|
* Parse LAPIC entries in MADT
|
||||||
|
|
|
@ -189,10 +189,7 @@ static unsigned int pentium4_get_frequency(void)
|
||||||
printk(KERN_DEBUG "speedstep-lib: couldn't detect FSB speed. Please send an e-mail to <linux@brodo.de>\n");
|
printk(KERN_DEBUG "speedstep-lib: couldn't detect FSB speed. Please send an e-mail to <linux@brodo.de>\n");
|
||||||
|
|
||||||
/* Multiplier. */
|
/* Multiplier. */
|
||||||
if (c->x86_model < 2)
|
mult = msr_lo >> 24;
|
||||||
mult = msr_lo >> 27;
|
|
||||||
else
|
|
||||||
mult = msr_lo >> 24;
|
|
||||||
|
|
||||||
dprintk("P4 - FSB %u kHz; Multiplier %u; Speed %u kHz\n", fsb, mult, (fsb * mult));
|
dprintk("P4 - FSB %u kHz; Multiplier %u; Speed %u kHz\n", fsb, mult, (fsb * mult));
|
||||||
|
|
||||||
|
|
|
@ -274,7 +274,7 @@ int __init get_memcfg_from_srat(void)
|
||||||
int tables = 0;
|
int tables = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
rsdp_address = acpi_find_rsdp();
|
rsdp_address = acpi_os_get_root_pointer();
|
||||||
if (!rsdp_address) {
|
if (!rsdp_address) {
|
||||||
printk("%s: System description tables not found\n",
|
printk("%s: System description tables not found\n",
|
||||||
__FUNCTION__);
|
__FUNCTION__);
|
||||||
|
|
|
@ -70,8 +70,6 @@ static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
|
||||||
/* IBM 600E - _ADR should return 7, but it returns 1 */
|
/* IBM 600E - _ADR should return 7, but it returns 1 */
|
||||||
{"IBM ", "TP600E ", 0x00000105, ACPI_SIG_DSDT, less_than_or_equal,
|
{"IBM ", "TP600E ", 0x00000105, ACPI_SIG_DSDT, less_than_or_equal,
|
||||||
"Incorrect _ADR", 1},
|
"Incorrect _ADR", 1},
|
||||||
{"ASUS\0\0", "P2B-S ", 0, ACPI_SIG_DSDT, all_versions,
|
|
||||||
"Bogus PCI routing", 1},
|
|
||||||
|
|
||||||
{""}
|
{""}
|
||||||
};
|
};
|
||||||
|
|
|
@ -130,6 +130,63 @@ static int param_get_debug_level(char *buffer, struct kernel_param *kp) {
|
||||||
module_param_call(debug_layer, param_set_uint, param_get_debug_layer, &acpi_dbg_layer, 0644);
|
module_param_call(debug_layer, param_set_uint, param_get_debug_layer, &acpi_dbg_layer, 0644);
|
||||||
module_param_call(debug_level, param_set_uint, param_get_debug_level, &acpi_dbg_level, 0644);
|
module_param_call(debug_level, param_set_uint, param_get_debug_level, &acpi_dbg_level, 0644);
|
||||||
|
|
||||||
|
static char trace_method_name[6];
|
||||||
|
module_param_string(trace_method_name, trace_method_name, 6, 0644);
|
||||||
|
static unsigned int trace_debug_layer;
|
||||||
|
module_param(trace_debug_layer, uint, 0644);
|
||||||
|
static unsigned int trace_debug_level;
|
||||||
|
module_param(trace_debug_level, uint, 0644);
|
||||||
|
|
||||||
|
static int param_set_trace_state(const char *val, struct kernel_param *kp)
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
if (!strncmp(val, "enable", strlen("enable") - 1)) {
|
||||||
|
result = acpi_debug_trace(trace_method_name, trace_debug_level,
|
||||||
|
trace_debug_layer, 0);
|
||||||
|
if (result)
|
||||||
|
result = -EBUSY;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strncmp(val, "disable", strlen("disable") - 1)) {
|
||||||
|
int name = 0;
|
||||||
|
result = acpi_debug_trace((char *)&name, trace_debug_level,
|
||||||
|
trace_debug_layer, 0);
|
||||||
|
if (result)
|
||||||
|
result = -EBUSY;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strncmp(val, "1", 1)) {
|
||||||
|
result = acpi_debug_trace(trace_method_name, trace_debug_level,
|
||||||
|
trace_debug_layer, 1);
|
||||||
|
if (result)
|
||||||
|
result = -EBUSY;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = -EINVAL;
|
||||||
|
exit:
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int param_get_trace_state(char *buffer, struct kernel_param *kp)
|
||||||
|
{
|
||||||
|
if (!acpi_gbl_trace_method_name)
|
||||||
|
return sprintf(buffer, "disable");
|
||||||
|
else {
|
||||||
|
if (acpi_gbl_trace_flags & 1)
|
||||||
|
return sprintf(buffer, "1");
|
||||||
|
else
|
||||||
|
return sprintf(buffer, "enable");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
module_param_call(trace_state, param_set_trace_state, param_get_trace_state,
|
||||||
|
NULL, 0644);
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
FS Interface (/proc)
|
FS Interface (/proc)
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
|
|
|
@ -573,7 +573,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
||||||
void *handler_context, void *region_context)
|
void *handler_context, void *region_context)
|
||||||
{
|
{
|
||||||
struct acpi_ec *ec = handler_context;
|
struct acpi_ec *ec = handler_context;
|
||||||
int result = 0, i = 0;
|
int result = 0, i;
|
||||||
u8 temp = 0;
|
u8 temp = 0;
|
||||||
|
|
||||||
if ((address > 0xFF) || !value || !handler_context)
|
if ((address > 0xFF) || !value || !handler_context)
|
||||||
|
@ -585,7 +585,18 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
||||||
if (bits != 8 && acpi_strict)
|
if (bits != 8 && acpi_strict)
|
||||||
return AE_BAD_PARAMETER;
|
return AE_BAD_PARAMETER;
|
||||||
|
|
||||||
while (bits - i > 0) {
|
acpi_ec_burst_enable(ec);
|
||||||
|
|
||||||
|
if (function == ACPI_READ) {
|
||||||
|
result = acpi_ec_read(ec, address, &temp);
|
||||||
|
*value = temp;
|
||||||
|
} else {
|
||||||
|
temp = 0xff & (*value);
|
||||||
|
result = acpi_ec_write(ec, address, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 8; unlikely(bits - i > 0); i += 8) {
|
||||||
|
++address;
|
||||||
if (function == ACPI_READ) {
|
if (function == ACPI_READ) {
|
||||||
result = acpi_ec_read(ec, address, &temp);
|
result = acpi_ec_read(ec, address, &temp);
|
||||||
(*value) |= ((acpi_integer)temp) << i;
|
(*value) |= ((acpi_integer)temp) << i;
|
||||||
|
@ -593,10 +604,10 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
||||||
temp = 0xff & ((*value) >> i);
|
temp = 0xff & ((*value) >> i);
|
||||||
result = acpi_ec_write(ec, address, temp);
|
result = acpi_ec_write(ec, address, temp);
|
||||||
}
|
}
|
||||||
i += 8;
|
|
||||||
++address;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
acpi_ec_burst_disable(ec);
|
||||||
|
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case -EINVAL:
|
case -EINVAL:
|
||||||
return AE_BAD_PARAMETER;
|
return AE_BAD_PARAMETER;
|
||||||
|
|
|
@ -270,18 +270,18 @@ acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info)
|
||||||
case ACPI_GPE_TYPE_WAKE_RUN:
|
case ACPI_GPE_TYPE_WAKE_RUN:
|
||||||
ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
|
ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
|
||||||
|
|
||||||
/*lint -fallthrough */
|
/* fallthrough */
|
||||||
|
|
||||||
case ACPI_GPE_TYPE_RUNTIME:
|
case ACPI_GPE_TYPE_RUNTIME:
|
||||||
|
|
||||||
/* Disable the requested runtime GPE */
|
/* Disable the requested runtime GPE */
|
||||||
|
|
||||||
ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
|
ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
|
||||||
status = acpi_hw_write_gpe_enable_reg(gpe_event_info);
|
|
||||||
break;
|
/* fallthrough */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return_ACPI_STATUS(AE_BAD_PARAMETER);
|
acpi_hw_write_gpe_enable_reg(gpe_event_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
return_ACPI_STATUS(AE_OK);
|
return_ACPI_STATUS(AE_OK);
|
||||||
|
|
|
@ -250,8 +250,12 @@ acpi_physical_address __init acpi_os_get_root_pointer(void)
|
||||||
"System description tables not found\n");
|
"System description tables not found\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
return acpi_find_rsdp();
|
acpi_physical_address pa = 0;
|
||||||
|
|
||||||
|
acpi_find_root_pointer(&pa);
|
||||||
|
return pa;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void __iomem *acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
|
void __iomem *acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
|
||||||
|
|
|
@ -812,11 +812,18 @@ static int is_processor_present(acpi_handle handle)
|
||||||
|
|
||||||
|
|
||||||
status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
|
status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
|
||||||
if (ACPI_FAILURE(status) || !(sta & ACPI_STA_DEVICE_PRESENT)) {
|
/*
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Processor Device is not present"));
|
* if a processor object does not have an _STA object,
|
||||||
return 0;
|
* OSPM assumes that the processor is present.
|
||||||
}
|
*/
|
||||||
return 1;
|
if (status == AE_NOT_FOUND)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (ACPI_SUCCESS(status) && (sta & ACPI_STA_DEVICE_PRESENT))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
ACPI_EXCEPTION((AE_INFO, status, "Processor Device is not present"));
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
|
|
@ -178,6 +178,9 @@ static int get_date_field(char **p, u32 * value)
|
||||||
* Try to find delimeter, only to insert null. The end of the
|
* Try to find delimeter, only to insert null. The end of the
|
||||||
* string won't have one, but is still valid.
|
* string won't have one, but is still valid.
|
||||||
*/
|
*/
|
||||||
|
if (*p == NULL)
|
||||||
|
return result;
|
||||||
|
|
||||||
next = strpbrk(*p, "- :");
|
next = strpbrk(*p, "- :");
|
||||||
if (next)
|
if (next)
|
||||||
*next++ = '\0';
|
*next++ = '\0';
|
||||||
|
@ -190,6 +193,8 @@ static int get_date_field(char **p, u32 * value)
|
||||||
|
|
||||||
if (next)
|
if (next)
|
||||||
*p = next;
|
*p = next;
|
||||||
|
else
|
||||||
|
*p = NULL;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -251,27 +256,6 @@ acpi_system_write_alarm(struct file *file,
|
||||||
if ((result = get_date_field(&p, &sec)))
|
if ((result = get_date_field(&p, &sec)))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if (sec > 59) {
|
|
||||||
min += 1;
|
|
||||||
sec -= 60;
|
|
||||||
}
|
|
||||||
if (min > 59) {
|
|
||||||
hr += 1;
|
|
||||||
min -= 60;
|
|
||||||
}
|
|
||||||
if (hr > 23) {
|
|
||||||
day += 1;
|
|
||||||
hr -= 24;
|
|
||||||
}
|
|
||||||
if (day > 31) {
|
|
||||||
mo += 1;
|
|
||||||
day -= 31;
|
|
||||||
}
|
|
||||||
if (mo > 12) {
|
|
||||||
yr += 1;
|
|
||||||
mo -= 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irq(&rtc_lock);
|
spin_lock_irq(&rtc_lock);
|
||||||
|
|
||||||
rtc_control = CMOS_READ(RTC_CONTROL);
|
rtc_control = CMOS_READ(RTC_CONTROL);
|
||||||
|
@ -288,24 +272,24 @@ acpi_system_write_alarm(struct file *file,
|
||||||
spin_unlock_irq(&rtc_lock);
|
spin_unlock_irq(&rtc_lock);
|
||||||
|
|
||||||
if (sec > 59) {
|
if (sec > 59) {
|
||||||
min++;
|
min += sec/60;
|
||||||
sec -= 60;
|
sec = sec%60;
|
||||||
}
|
}
|
||||||
if (min > 59) {
|
if (min > 59) {
|
||||||
hr++;
|
hr += min/60;
|
||||||
min -= 60;
|
min = min%60;
|
||||||
}
|
}
|
||||||
if (hr > 23) {
|
if (hr > 23) {
|
||||||
day++;
|
day += hr/24;
|
||||||
hr -= 24;
|
hr = hr%24;
|
||||||
}
|
}
|
||||||
if (day > 31) {
|
if (day > 31) {
|
||||||
mo++;
|
mo += day/32;
|
||||||
day -= 31;
|
day = day%32;
|
||||||
}
|
}
|
||||||
if (mo > 12) {
|
if (mo > 12) {
|
||||||
yr++;
|
yr += mo/13;
|
||||||
mo -= 12;
|
mo = mo%13;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irq(&rtc_lock);
|
spin_lock_irq(&rtc_lock);
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
# Makefile for all Linux ACPI interpreter subdirectories
|
# Makefile for all Linux ACPI interpreter subdirectories
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y := tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o
|
obj-y := tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o
|
||||||
|
|
||||||
EXTRA_CFLAGS += $(ACPI_CFLAGS)
|
EXTRA_CFLAGS += $(ACPI_CFLAGS)
|
||||||
|
|
|
@ -100,7 +100,7 @@ static acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_tb_find_rsdp
|
* FUNCTION: acpi_find_root_pointer
|
||||||
*
|
*
|
||||||
* PARAMETERS: table_address - Where the table pointer is returned
|
* PARAMETERS: table_address - Where the table pointer is returned
|
||||||
*
|
*
|
||||||
|
@ -219,8 +219,6 @@ acpi_status acpi_find_root_pointer(acpi_native_uint * table_address)
|
||||||
return_ACPI_STATUS(AE_NOT_FOUND);
|
return_ACPI_STATUS(AE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL(acpi_find_root_pointer)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_tb_scan_memory_for_rsdp
|
* FUNCTION: acpi_tb_scan_memory_for_rsdp
|
||||||
|
|
|
@ -492,7 +492,7 @@ static int acpi_thermal_get_devices(struct acpi_thermal *tz)
|
||||||
|
|
||||||
static int acpi_thermal_critical(struct acpi_thermal *tz)
|
static int acpi_thermal_critical(struct acpi_thermal *tz)
|
||||||
{
|
{
|
||||||
if (!tz || !tz->trips.critical.flags.valid || nocrt)
|
if (!tz || !tz->trips.critical.flags.valid)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (tz->temperature >= tz->trips.critical.temperature) {
|
if (tz->temperature >= tz->trips.critical.temperature) {
|
||||||
|
@ -501,9 +501,6 @@ static int acpi_thermal_critical(struct acpi_thermal *tz)
|
||||||
} else if (tz->trips.critical.flags.enabled)
|
} else if (tz->trips.critical.flags.enabled)
|
||||||
tz->trips.critical.flags.enabled = 0;
|
tz->trips.critical.flags.enabled = 0;
|
||||||
|
|
||||||
printk(KERN_EMERG
|
|
||||||
"Critical temperature reached (%ld C), shutting down.\n",
|
|
||||||
KELVIN_TO_CELSIUS(tz->temperature));
|
|
||||||
acpi_bus_generate_proc_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
|
acpi_bus_generate_proc_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
|
||||||
tz->trips.critical.flags.enabled);
|
tz->trips.critical.flags.enabled);
|
||||||
acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
|
acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
|
||||||
|
@ -511,14 +508,20 @@ static int acpi_thermal_critical(struct acpi_thermal *tz)
|
||||||
ACPI_THERMAL_NOTIFY_CRITICAL,
|
ACPI_THERMAL_NOTIFY_CRITICAL,
|
||||||
tz->trips.critical.flags.enabled);
|
tz->trips.critical.flags.enabled);
|
||||||
|
|
||||||
orderly_poweroff(true);
|
/* take no action if nocrt is set */
|
||||||
|
if(!nocrt) {
|
||||||
|
printk(KERN_EMERG
|
||||||
|
"Critical temperature reached (%ld C), shutting down.\n",
|
||||||
|
KELVIN_TO_CELSIUS(tz->temperature));
|
||||||
|
orderly_poweroff(true);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_thermal_hot(struct acpi_thermal *tz)
|
static int acpi_thermal_hot(struct acpi_thermal *tz)
|
||||||
{
|
{
|
||||||
if (!tz || !tz->trips.hot.flags.valid || nocrt)
|
if (!tz || !tz->trips.hot.flags.valid)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (tz->temperature >= tz->trips.hot.temperature) {
|
if (tz->temperature >= tz->trips.hot.temperature) {
|
||||||
|
@ -534,7 +537,7 @@ static int acpi_thermal_hot(struct acpi_thermal *tz)
|
||||||
ACPI_THERMAL_NOTIFY_HOT,
|
ACPI_THERMAL_NOTIFY_HOT,
|
||||||
tz->trips.hot.flags.enabled);
|
tz->trips.hot.flags.enabled);
|
||||||
|
|
||||||
/* TBD: Call user-mode "sleep(S4)" function */
|
/* TBD: Call user-mode "sleep(S4)" function if nocrt is cleared */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,18 +292,26 @@ static int acpi_video_device_set_state(struct acpi_video_device *device, int sta
|
||||||
static int acpi_video_get_brightness(struct backlight_device *bd)
|
static int acpi_video_get_brightness(struct backlight_device *bd)
|
||||||
{
|
{
|
||||||
unsigned long cur_level;
|
unsigned long cur_level;
|
||||||
|
int i;
|
||||||
struct acpi_video_device *vd =
|
struct acpi_video_device *vd =
|
||||||
(struct acpi_video_device *)bl_get_data(bd);
|
(struct acpi_video_device *)bl_get_data(bd);
|
||||||
acpi_video_device_lcd_get_level_current(vd, &cur_level);
|
acpi_video_device_lcd_get_level_current(vd, &cur_level);
|
||||||
return (int) cur_level;
|
for (i = 2; i < vd->brightness->count; i++) {
|
||||||
|
if (vd->brightness->levels[i] == cur_level)
|
||||||
|
/* The first two entries are special - see page 575
|
||||||
|
of the ACPI spec 3.0 */
|
||||||
|
return i-2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_video_set_brightness(struct backlight_device *bd)
|
static int acpi_video_set_brightness(struct backlight_device *bd)
|
||||||
{
|
{
|
||||||
int request_level = bd->props.brightness;
|
int request_level = bd->props.brightness+2;
|
||||||
struct acpi_video_device *vd =
|
struct acpi_video_device *vd =
|
||||||
(struct acpi_video_device *)bl_get_data(bd);
|
(struct acpi_video_device *)bl_get_data(bd);
|
||||||
acpi_video_device_lcd_set_level(vd, request_level);
|
acpi_video_device_lcd_set_level(vd,
|
||||||
|
vd->brightness->levels[request_level]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,7 +660,6 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
||||||
kfree(obj);
|
kfree(obj);
|
||||||
|
|
||||||
if (device->cap._BCL && device->cap._BCM && device->cap._BQC && max_level > 0){
|
if (device->cap._BCL && device->cap._BCM && device->cap._BQC && max_level > 0){
|
||||||
unsigned long tmp;
|
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
char *name;
|
char *name;
|
||||||
name = kzalloc(MAX_NAME_LEN, GFP_KERNEL);
|
name = kzalloc(MAX_NAME_LEN, GFP_KERNEL);
|
||||||
|
@ -660,11 +667,10 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sprintf(name, "acpi_video%d", count++);
|
sprintf(name, "acpi_video%d", count++);
|
||||||
acpi_video_device_lcd_get_level_current(device, &tmp);
|
|
||||||
device->backlight = backlight_device_register(name,
|
device->backlight = backlight_device_register(name,
|
||||||
NULL, device, &acpi_backlight_ops);
|
NULL, device, &acpi_backlight_ops);
|
||||||
device->backlight->props.max_brightness = max_level;
|
device->backlight->props.max_brightness = device->brightness->count-3;
|
||||||
device->backlight->props.brightness = (int)tmp;
|
device->backlight->props.brightness = acpi_video_get_brightness(device->backlight);
|
||||||
backlight_update_status(device->backlight);
|
backlight_update_status(device->backlight);
|
||||||
|
|
||||||
kfree(name);
|
kfree(name);
|
||||||
|
@ -1256,8 +1262,37 @@ acpi_video_bus_write_DOS(struct file *file,
|
||||||
|
|
||||||
static int acpi_video_bus_add_fs(struct acpi_device *device)
|
static int acpi_video_bus_add_fs(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
|
long device_id;
|
||||||
|
int status;
|
||||||
struct proc_dir_entry *entry = NULL;
|
struct proc_dir_entry *entry = NULL;
|
||||||
struct acpi_video_bus *video;
|
struct acpi_video_bus *video;
|
||||||
|
struct device *dev;
|
||||||
|
|
||||||
|
status =
|
||||||
|
acpi_evaluate_integer(device->handle, "_ADR", NULL, &device_id);
|
||||||
|
|
||||||
|
if (!ACPI_SUCCESS(status))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
/* We need to attempt to determine whether the _ADR refers to a
|
||||||
|
PCI device or not. There's no terribly good way to do this,
|
||||||
|
so the best we can hope for is to assume that there'll never
|
||||||
|
be a video device in the host bridge */
|
||||||
|
if (device_id >= 0x10000) {
|
||||||
|
/* It looks like a PCI device. Does it exist? */
|
||||||
|
dev = acpi_get_physical_device(device->handle);
|
||||||
|
} else {
|
||||||
|
/* It doesn't look like a PCI device. Does its parent
|
||||||
|
exist? */
|
||||||
|
acpi_handle phandle;
|
||||||
|
if (acpi_get_parent(device->handle, &phandle))
|
||||||
|
return -ENODEV;
|
||||||
|
dev = acpi_get_physical_device(phandle);
|
||||||
|
}
|
||||||
|
if (!dev)
|
||||||
|
return -ENODEV;
|
||||||
|
put_device(dev);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
video = acpi_driver_data(device);
|
video = acpi_driver_data(device);
|
||||||
|
|
|
@ -183,7 +183,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
|
||||||
if (ACPI_SUCCESS(status))
|
if (ACPI_SUCCESS(status))
|
||||||
dev->capabilities |= PNP_CONFIGURABLE;
|
dev->capabilities |= PNP_CONFIGURABLE;
|
||||||
dev->capabilities |= PNP_READ;
|
dev->capabilities |= PNP_READ;
|
||||||
if (device->flags.dynamic_status)
|
if (device->flags.dynamic_status && (dev->capabilities & PNP_CONFIGURABLE))
|
||||||
dev->capabilities |= PNP_WRITE;
|
dev->capabilities |= PNP_WRITE;
|
||||||
if (device->flags.removable)
|
if (device->flags.removable)
|
||||||
dev->capabilities |= PNP_REMOVABLE;
|
dev->capabilities |= PNP_REMOVABLE;
|
||||||
|
|
|
@ -80,7 +80,6 @@ typedef int (*acpi_table_handler) (struct acpi_table_header *table);
|
||||||
typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end);
|
typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end);
|
||||||
|
|
||||||
char * __acpi_map_table (unsigned long phys_addr, unsigned long size);
|
char * __acpi_map_table (unsigned long phys_addr, unsigned long size);
|
||||||
unsigned long acpi_find_rsdp (void);
|
|
||||||
int acpi_boot_init (void);
|
int acpi_boot_init (void);
|
||||||
int acpi_boot_table_init (void);
|
int acpi_boot_table_init (void);
|
||||||
int acpi_numa_init (void);
|
int acpi_numa_init (void);
|
||||||
|
|
Loading…
Reference in a new issue