Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (30 commits) ACPI: work around duplicate name "VID" problem on T61 acpiphp_ibm: add missing '\n' to error message ACPI: add dump_stack() to trace acpi_format_exception programming errors make drivers/acpi/scan.c:create_modalias() static ACPI: Fix a warning of discarding qualifiers from pointer target type ACPI: "ACPI handle has no context!" should be KERN_DEBUG ACPI video hotkey: export missing ACPI video hotkey events via input layer ACPI: Validate XSDT, use RSDT if XSDT fails ACPI: /proc/acpi/thermal_zone trip points are now read-only, mark them as such ACPI: fix ia64 allnoconfig build PNP: remove null pointer checks PNP: remove MODULE infrastructure ISAPNP: removed unused isapnp_detected and ISAPNP_DEBUG PNPACPI: remove unnecessary casts of "void *" PNPACPI: simplify irq_flags() PNP: fix up after Lindent ACPI: enable GPEs before calling _WAK on resume asus-laptop: Fix rmmod of asus_laptop sony-laptop: call sonypi_compat_init earlier sony-laptop: enable Vaio FZ events ...
This commit is contained in:
commit
0b887d037b
@ -197,6 +197,14 @@ Who: Len Brown <len.brown@intel.com>
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: /proc/acpi/event
|
||||||
|
When: February 2008
|
||||||
|
Why: /proc/acpi/event has been replaced by events via the input layer
|
||||||
|
and netlink since 2.6.23.
|
||||||
|
Who: Len Brown <len.brown@intel.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
What: Compaq touchscreen device emulation
|
What: Compaq touchscreen device emulation
|
||||||
When: Oct 2007
|
When: Oct 2007
|
||||||
Files: drivers/input/tsdev.c
|
Files: drivers/input/tsdev.c
|
||||||
|
@ -952,14 +952,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
Format: <1-256>
|
Format: <1-256>
|
||||||
|
|
||||||
maxcpus= [SMP] Maximum number of processors that an SMP kernel
|
maxcpus= [SMP] Maximum number of processors that an SMP kernel
|
||||||
should make use of.
|
should make use of. maxcpus=n : n >= 0 limits the
|
||||||
Using "nosmp" or "maxcpus=0" will disable SMP
|
kernel to using 'n' processors. n=0 is a special case,
|
||||||
entirely (the MPS table probe still happens, though).
|
it is equivalent to "nosmp", which also disables
|
||||||
A command-line option of "maxcpus=<NUM>", where <NUM>
|
the IO APIC.
|
||||||
is an integer greater than 0, limits the maximum number
|
|
||||||
of CPUs activated in SMP mode to <NUM>.
|
|
||||||
Using "maxcpus=1" on an SMP kernel is the trivial
|
|
||||||
case of an SMP kernel with only one CPU.
|
|
||||||
|
|
||||||
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
|
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
|
||||||
equal to this physical address is ignored.
|
equal to this physical address is ignored.
|
||||||
@ -1184,7 +1180,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
nosep [BUGS=X86-32] Disables x86 SYSENTER/SYSEXIT support.
|
nosep [BUGS=X86-32] Disables x86 SYSENTER/SYSEXIT support.
|
||||||
|
|
||||||
nosmp [SMP] Tells an SMP kernel to act as a UP kernel.
|
nosmp [SMP] Tells an SMP kernel to act as a UP kernel,
|
||||||
|
and disable the IO APIC. legacy for "maxcpus=0".
|
||||||
|
|
||||||
nosoftlockup [KNL] Disable the soft-lockup detector.
|
nosoftlockup [KNL] Disable the soft-lockup detector.
|
||||||
|
|
||||||
@ -1826,6 +1823,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
-1: disable all active trip points in all thermal zones
|
-1: disable all active trip points in all thermal zones
|
||||||
<degrees C>: override all lowest active trip points
|
<degrees C>: override all lowest active trip points
|
||||||
|
|
||||||
|
thermal.crt= [HW,ACPI]
|
||||||
|
-1: disable all critical trip points in all thermal zones
|
||||||
|
<degrees C>: lower all critical trip points
|
||||||
|
|
||||||
thermal.nocrt= [HW,ACPI]
|
thermal.nocrt= [HW,ACPI]
|
||||||
Set to disable actions on ACPI thermal zone
|
Set to disable actions on ACPI thermal zone
|
||||||
critical and hot trip points.
|
critical and hot trip points.
|
||||||
|
@ -754,14 +754,6 @@ static int pirq_entries [MAX_PIRQS];
|
|||||||
static int pirqs_enabled;
|
static int pirqs_enabled;
|
||||||
int skip_ioapic_setup;
|
int skip_ioapic_setup;
|
||||||
|
|
||||||
static int __init ioapic_setup(char *str)
|
|
||||||
{
|
|
||||||
skip_ioapic_setup = 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
__setup("noapic", ioapic_setup);
|
|
||||||
|
|
||||||
static int __init ioapic_pirq_setup(char *str)
|
static int __init ioapic_pirq_setup(char *str)
|
||||||
{
|
{
|
||||||
int i, max;
|
int i, max;
|
||||||
|
@ -397,14 +397,12 @@ static void clear_IO_APIC (void)
|
|||||||
int skip_ioapic_setup;
|
int skip_ioapic_setup;
|
||||||
int ioapic_force;
|
int ioapic_force;
|
||||||
|
|
||||||
/* dummy parsing: see setup.c */
|
static int __init parse_noapic(char *str)
|
||||||
|
|
||||||
static int __init disable_ioapic_setup(char *str)
|
|
||||||
{
|
{
|
||||||
skip_ioapic_setup = 1;
|
disable_ioapic_setup();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_param("noapic", disable_ioapic_setup);
|
early_param("noapic", parse_noapic);
|
||||||
|
|
||||||
/* Actually the next is obsolete, but keep it for paranoid reasons -AK */
|
/* Actually the next is obsolete, but keep it for paranoid reasons -AK */
|
||||||
static int __init disable_timer_pin_setup(char *arg)
|
static int __init disable_timer_pin_setup(char *arg)
|
||||||
|
@ -68,6 +68,20 @@ config ACPI_PROCFS
|
|||||||
|
|
||||||
Say N to delete /proc/acpi/ files that have moved to /sys/
|
Say N to delete /proc/acpi/ files that have moved to /sys/
|
||||||
|
|
||||||
|
config ACPI_PROC_EVENT
|
||||||
|
bool "Deprecated /proc/acpi/event support"
|
||||||
|
depends on PROC_FS
|
||||||
|
---help---
|
||||||
|
A user-space daemon, acpi, typically read /proc/acpi/event
|
||||||
|
and handled all ACPI sub-system generated events.
|
||||||
|
|
||||||
|
These events are now delivered to user-space via
|
||||||
|
either the input layer, or as netlink events.
|
||||||
|
|
||||||
|
This build option enables the old code for for legacy
|
||||||
|
user-space implementation. After some time, this will
|
||||||
|
be moved under CONFIG_ACPI_PROCFS, and then deleted.
|
||||||
|
|
||||||
config ACPI_AC
|
config ACPI_AC
|
||||||
tristate "AC Adapter"
|
tristate "AC Adapter"
|
||||||
depends on X86
|
depends on X86
|
||||||
|
@ -204,7 +204,10 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
case ACPI_NOTIFY_BUS_CHECK:
|
case ACPI_NOTIFY_BUS_CHECK:
|
||||||
case ACPI_NOTIFY_DEVICE_CHECK:
|
case ACPI_NOTIFY_DEVICE_CHECK:
|
||||||
acpi_ac_get_state(ac);
|
acpi_ac_get_state(ac);
|
||||||
acpi_bus_generate_event(device, event, (u32) ac->state);
|
acpi_bus_generate_proc_event(device, event, (u32) ac->state);
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event,
|
||||||
|
(u32) ac->state);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
|
@ -1069,7 +1069,7 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
hotk->brightness = (event & ~((u32) BR_DOWN));
|
hotk->brightness = (event & ~((u32) BR_DOWN));
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_bus_generate_event(hotk->device, event,
|
acpi_bus_generate_proc_event(hotk->device, event,
|
||||||
hotk->event_count[event % 128]++);
|
hotk->event_count[event % 128]++);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -113,7 +113,7 @@ struct acpi_battery_info {
|
|||||||
acpi_string oem_info;
|
acpi_string oem_info;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum acpi_battery_files {
|
enum acpi_battery_files{
|
||||||
ACPI_BATTERY_INFO = 0,
|
ACPI_BATTERY_INFO = 0,
|
||||||
ACPI_BATTERY_STATE,
|
ACPI_BATTERY_STATE,
|
||||||
ACPI_BATTERY_ALARM,
|
ACPI_BATTERY_ALARM,
|
||||||
@ -129,14 +129,13 @@ struct acpi_battery_flags {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_battery {
|
struct acpi_battery {
|
||||||
|
struct mutex mutex;
|
||||||
struct acpi_device *device;
|
struct acpi_device *device;
|
||||||
struct acpi_battery_flags flags;
|
struct acpi_battery_flags flags;
|
||||||
struct acpi_buffer bif_data;
|
struct acpi_buffer bif_data;
|
||||||
struct acpi_buffer bst_data;
|
struct acpi_buffer bst_data;
|
||||||
struct mutex lock;
|
|
||||||
unsigned long alarm;
|
unsigned long alarm;
|
||||||
unsigned long update_time[ACPI_BATTERY_NUMFILES];
|
unsigned long update_time[ACPI_BATTERY_NUMFILES];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int acpi_battery_present(struct acpi_battery *battery)
|
inline int acpi_battery_present(struct acpi_battery *battery)
|
||||||
@ -236,10 +235,10 @@ static int acpi_battery_get_info(struct acpi_battery *battery)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Evaluate _BIF */
|
/* Evaluate _BIF */
|
||||||
mutex_lock(&battery->lock);
|
|
||||||
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BIF",
|
status =
|
||||||
NULL, &buffer);
|
acpi_evaluate_object(acpi_battery_handle(battery), "_BIF", NULL,
|
||||||
mutex_unlock(&battery->lock);
|
&buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
|
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -286,10 +285,10 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Evaluate _BST */
|
/* Evaluate _BST */
|
||||||
mutex_lock(&battery->lock);
|
|
||||||
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BST",
|
status =
|
||||||
NULL, &buffer);
|
acpi_evaluate_object(acpi_battery_handle(battery), "_BST", NULL,
|
||||||
mutex_unlock(&battery->lock);
|
&buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
|
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -337,10 +336,9 @@ static int acpi_battery_set_alarm(struct acpi_battery *battery,
|
|||||||
|
|
||||||
arg0.integer.value = alarm;
|
arg0.integer.value = alarm;
|
||||||
|
|
||||||
mutex_lock(&battery->lock);
|
status =
|
||||||
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
|
acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
|
||||||
&arg_list, NULL);
|
&arg_list, NULL);
|
||||||
mutex_unlock(&battery->lock);
|
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
@ -660,6 +658,8 @@ acpi_battery_write_alarm(struct file *file,
|
|||||||
if (!battery || (count > sizeof(alarm_string) - 1))
|
if (!battery || (count > sizeof(alarm_string) - 1))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&battery->mutex);
|
||||||
|
|
||||||
result = acpi_battery_update(battery, 1, &update_result);
|
result = acpi_battery_update(battery, 1, &update_result);
|
||||||
if (result) {
|
if (result) {
|
||||||
result = -ENODEV;
|
result = -ENODEV;
|
||||||
@ -688,7 +688,9 @@ acpi_battery_write_alarm(struct file *file,
|
|||||||
acpi_battery_check_result(battery, result);
|
acpi_battery_check_result(battery, result);
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
return count;
|
result = count;
|
||||||
|
|
||||||
|
mutex_unlock(&battery->mutex);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -712,6 +714,8 @@ static int acpi_battery_read(int fid, struct seq_file *seq)
|
|||||||
int update_result = ACPI_BATTERY_NONE_UPDATE;
|
int update_result = ACPI_BATTERY_NONE_UPDATE;
|
||||||
int update = 0;
|
int update = 0;
|
||||||
|
|
||||||
|
mutex_lock(&battery->mutex);
|
||||||
|
|
||||||
update = (get_seconds() - battery->update_time[fid] >= update_time);
|
update = (get_seconds() - battery->update_time[fid] >= update_time);
|
||||||
update = (update | battery->flags.update[fid]);
|
update = (update | battery->flags.update[fid]);
|
||||||
|
|
||||||
@ -729,6 +733,7 @@ static int acpi_battery_read(int fid, struct seq_file *seq)
|
|||||||
result = acpi_read_funcs[fid].print(seq, result);
|
result = acpi_read_funcs[fid].print(seq, result);
|
||||||
acpi_battery_check_result(battery, result);
|
acpi_battery_check_result(battery, result);
|
||||||
battery->flags.update[fid] = result;
|
battery->flags.update[fid] = result;
|
||||||
|
mutex_unlock(&battery->mutex);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -867,8 +872,11 @@ static void acpi_battery_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
case ACPI_NOTIFY_DEVICE_CHECK:
|
case ACPI_NOTIFY_DEVICE_CHECK:
|
||||||
device = battery->device;
|
device = battery->device;
|
||||||
acpi_battery_notify_update(battery);
|
acpi_battery_notify_update(battery);
|
||||||
acpi_bus_generate_event(device, event,
|
acpi_bus_generate_proc_event(device, event,
|
||||||
acpi_battery_present(battery));
|
acpi_battery_present(battery));
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event,
|
||||||
|
acpi_battery_present(battery));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
@ -892,7 +900,10 @@ static int acpi_battery_add(struct acpi_device *device)
|
|||||||
if (!battery)
|
if (!battery)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
mutex_init(&battery->lock);
|
mutex_init(&battery->mutex);
|
||||||
|
|
||||||
|
mutex_lock(&battery->mutex);
|
||||||
|
|
||||||
battery->device = device;
|
battery->device = device;
|
||||||
strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
|
strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
|
||||||
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
|
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
|
||||||
@ -928,6 +939,7 @@ static int acpi_battery_add(struct acpi_device *device)
|
|||||||
kfree(battery);
|
kfree(battery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&battery->mutex);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -942,6 +954,8 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
|
|||||||
|
|
||||||
battery = acpi_driver_data(device);
|
battery = acpi_driver_data(device);
|
||||||
|
|
||||||
|
mutex_lock(&battery->mutex);
|
||||||
|
|
||||||
status = acpi_remove_notify_handler(device->handle,
|
status = acpi_remove_notify_handler(device->handle,
|
||||||
ACPI_ALL_NOTIFY,
|
ACPI_ALL_NOTIFY,
|
||||||
acpi_battery_notify);
|
acpi_battery_notify);
|
||||||
@ -952,7 +966,9 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
|
|||||||
|
|
||||||
kfree(battery->bst_data.pointer);
|
kfree(battery->bst_data.pointer);
|
||||||
|
|
||||||
mutex_destroy(&battery->lock);
|
mutex_unlock(&battery->mutex);
|
||||||
|
|
||||||
|
mutex_destroy(&battery->mutex);
|
||||||
|
|
||||||
kfree(battery);
|
kfree(battery);
|
||||||
|
|
||||||
|
@ -276,6 +276,7 @@ EXPORT_SYMBOL(acpi_bus_set_power);
|
|||||||
Event Management
|
Event Management
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||||
static DEFINE_SPINLOCK(acpi_bus_event_lock);
|
static DEFINE_SPINLOCK(acpi_bus_event_lock);
|
||||||
|
|
||||||
LIST_HEAD(acpi_bus_event_list);
|
LIST_HEAD(acpi_bus_event_list);
|
||||||
@ -283,7 +284,7 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
|
|||||||
|
|
||||||
extern int event_is_open;
|
extern int event_is_open;
|
||||||
|
|
||||||
int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
|
int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data)
|
||||||
{
|
{
|
||||||
struct acpi_bus_event *event = NULL;
|
struct acpi_bus_event *event = NULL;
|
||||||
unsigned long flags = 0;
|
unsigned long flags = 0;
|
||||||
@ -292,10 +293,6 @@ int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
|
|||||||
if (!device)
|
if (!device)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (acpi_bus_generate_genetlink_event(device, type, data))
|
|
||||||
printk(KERN_WARNING PREFIX
|
|
||||||
"Failed to generate an ACPI event via genetlink!\n");
|
|
||||||
|
|
||||||
/* drop event on the floor if no one's listening */
|
/* drop event on the floor if no one's listening */
|
||||||
if (!event_is_open)
|
if (!event_is_open)
|
||||||
return 0;
|
return 0;
|
||||||
@ -318,7 +315,7 @@ int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(acpi_bus_generate_event);
|
EXPORT_SYMBOL(acpi_bus_generate_proc_event);
|
||||||
|
|
||||||
int acpi_bus_receive_event(struct acpi_bus_event *event)
|
int acpi_bus_receive_event(struct acpi_bus_event *event)
|
||||||
{
|
{
|
||||||
@ -364,6 +361,7 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(acpi_bus_receive_event);
|
EXPORT_SYMBOL(acpi_bus_receive_event);
|
||||||
|
#endif /* CONFIG_ACPI_PROC_EVENT */
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
Notification Handling
|
Notification Handling
|
||||||
|
@ -284,7 +284,7 @@ static void acpi_button_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
}
|
}
|
||||||
input_sync(input);
|
input_sync(input);
|
||||||
|
|
||||||
acpi_bus_generate_event(button->device, event,
|
acpi_bus_generate_proc_event(button->device, event,
|
||||||
++button->pushed);
|
++button->pushed);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -696,14 +696,6 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
|
|||||||
return AE_CTRL_TERMINATE;
|
return AE_CTRL_TERMINATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ec_remove_handlers(struct acpi_ec *ec)
|
|
||||||
{
|
|
||||||
acpi_remove_address_space_handler(ec->handle,
|
|
||||||
ACPI_ADR_SPACE_EC,
|
|
||||||
&acpi_ec_space_handler);
|
|
||||||
acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int acpi_ec_add(struct acpi_device *device)
|
static int acpi_ec_add(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
struct acpi_ec *ec = NULL;
|
struct acpi_ec *ec = NULL;
|
||||||
@ -727,13 +719,16 @@ static int acpi_ec_add(struct acpi_device *device)
|
|||||||
/* Check if we found the boot EC */
|
/* Check if we found the boot EC */
|
||||||
if (boot_ec) {
|
if (boot_ec) {
|
||||||
if (boot_ec->gpe == ec->gpe) {
|
if (boot_ec->gpe == ec->gpe) {
|
||||||
ec_remove_handlers(boot_ec);
|
/* We might have incorrect info for GL at boot time */
|
||||||
mutex_destroy(&boot_ec->lock);
|
mutex_lock(&boot_ec->lock);
|
||||||
kfree(boot_ec);
|
boot_ec->global_lock = ec->global_lock;
|
||||||
first_ec = boot_ec = NULL;
|
/* Copy handlers from new ec into boot ec */
|
||||||
|
list_splice(&ec->list, &boot_ec->list);
|
||||||
|
mutex_unlock(&boot_ec->lock);
|
||||||
|
kfree(ec);
|
||||||
|
ec = boot_ec;
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
if (!first_ec)
|
|
||||||
first_ec = ec;
|
first_ec = ec;
|
||||||
ec->handle = device->handle;
|
ec->handle = device->handle;
|
||||||
acpi_driver_data(device) = ec;
|
acpi_driver_data(device) = ec;
|
||||||
@ -762,6 +757,9 @@ static int acpi_ec_remove(struct acpi_device *device, int type)
|
|||||||
if (ec == first_ec)
|
if (ec == first_ec)
|
||||||
first_ec = NULL;
|
first_ec = NULL;
|
||||||
|
|
||||||
|
/* Don't touch boot EC */
|
||||||
|
if (boot_ec != ec)
|
||||||
|
kfree(ec);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -825,7 +823,9 @@ static int acpi_ec_start(struct acpi_device *device)
|
|||||||
if (!ec)
|
if (!ec)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
ret = ec_install_handlers(ec);
|
/* Boot EC is already working */
|
||||||
|
if (ec != boot_ec)
|
||||||
|
ret = ec_install_handlers(ec);
|
||||||
|
|
||||||
/* EC is fully operational, allow queries */
|
/* EC is fully operational, allow queries */
|
||||||
atomic_set(&ec->query_pending, 0);
|
atomic_set(&ec->query_pending, 0);
|
||||||
@ -835,6 +835,7 @@ static int acpi_ec_start(struct acpi_device *device)
|
|||||||
|
|
||||||
static int acpi_ec_stop(struct acpi_device *device, int type)
|
static int acpi_ec_stop(struct acpi_device *device, int type)
|
||||||
{
|
{
|
||||||
|
acpi_status status;
|
||||||
struct acpi_ec *ec;
|
struct acpi_ec *ec;
|
||||||
|
|
||||||
if (!device)
|
if (!device)
|
||||||
@ -843,7 +844,21 @@ static int acpi_ec_stop(struct acpi_device *device, int type)
|
|||||||
ec = acpi_driver_data(device);
|
ec = acpi_driver_data(device);
|
||||||
if (!ec)
|
if (!ec)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
ec_remove_handlers(ec);
|
|
||||||
|
/* Don't touch boot EC */
|
||||||
|
if (ec == boot_ec)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
status = acpi_remove_address_space_handler(ec->handle,
|
||||||
|
ACPI_ADR_SPACE_EC,
|
||||||
|
&acpi_ec_space_handler);
|
||||||
|
if (ACPI_FAILURE(status))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
status = acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler);
|
||||||
|
if (ACPI_FAILURE(status))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
||||||
ACPI_MODULE_NAME("event");
|
ACPI_MODULE_NAME("event");
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||||
/* Global vars for handling event proc entry */
|
/* Global vars for handling event proc entry */
|
||||||
static DEFINE_SPINLOCK(acpi_system_event_lock);
|
static DEFINE_SPINLOCK(acpi_system_event_lock);
|
||||||
int event_is_open = 0;
|
int event_is_open = 0;
|
||||||
@ -106,6 +107,7 @@ static const struct file_operations acpi_system_event_ops = {
|
|||||||
.release = acpi_system_close_event,
|
.release = acpi_system_close_event,
|
||||||
.poll = acpi_system_poll_event,
|
.poll = acpi_system_poll_event,
|
||||||
};
|
};
|
||||||
|
#endif /* CONFIG_ACPI_PROC_EVENT */
|
||||||
|
|
||||||
#ifdef CONFIG_NET
|
#ifdef CONFIG_NET
|
||||||
static unsigned int acpi_event_seqnum;
|
static unsigned int acpi_event_seqnum;
|
||||||
@ -147,7 +149,8 @@ static struct genl_multicast_group acpi_event_mcgrp = {
|
|||||||
.name = ACPI_GENL_MCAST_GROUP_NAME,
|
.name = ACPI_GENL_MCAST_GROUP_NAME,
|
||||||
};
|
};
|
||||||
|
|
||||||
int acpi_bus_generate_genetlink_event(struct acpi_device *device,
|
int acpi_bus_generate_netlink_event(const char *device_class,
|
||||||
|
const char *bus_id,
|
||||||
u8 type, int data)
|
u8 type, int data)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
@ -191,8 +194,8 @@ int acpi_bus_generate_genetlink_event(struct acpi_device *device,
|
|||||||
|
|
||||||
memset(event, 0, sizeof(struct acpi_genl_event));
|
memset(event, 0, sizeof(struct acpi_genl_event));
|
||||||
|
|
||||||
strcpy(event->device_class, device->pnp.device_class);
|
strcpy(event->device_class, device_class);
|
||||||
strcpy(event->bus_id, device->dev.bus_id);
|
strcpy(event->bus_id, bus_id);
|
||||||
event->type = type;
|
event->type = type;
|
||||||
event->data = data;
|
event->data = data;
|
||||||
|
|
||||||
@ -211,6 +214,8 @@ int acpi_bus_generate_genetlink_event(struct acpi_device *device,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(acpi_bus_generate_netlink_event);
|
||||||
|
|
||||||
static int acpi_event_genetlink_init(void)
|
static int acpi_event_genetlink_init(void)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
@ -228,12 +233,15 @@ static int acpi_event_genetlink_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
int acpi_bus_generate_genetlink_event(struct acpi_device *device, u8 type,
|
int acpi_bus_generate_netlink_event(const char *device_class,
|
||||||
int data)
|
const char *bus_id,
|
||||||
|
u8 type, int data)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(acpi_generate_netlink_event);
|
||||||
|
|
||||||
static int acpi_event_genetlink_init(void)
|
static int acpi_event_genetlink_init(void)
|
||||||
{
|
{
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -242,7 +250,9 @@ static int acpi_event_genetlink_init(void)
|
|||||||
|
|
||||||
static int __init acpi_event_init(void)
|
static int __init acpi_event_init(void)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||||
struct proc_dir_entry *entry;
|
struct proc_dir_entry *entry;
|
||||||
|
#endif
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
@ -254,12 +264,14 @@ static int __init acpi_event_init(void)
|
|||||||
printk(KERN_WARNING PREFIX
|
printk(KERN_WARNING PREFIX
|
||||||
"Failed to create genetlink family for ACPI event\n");
|
"Failed to create genetlink family for ACPI event\n");
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||||
/* 'event' [R] */
|
/* 'event' [R] */
|
||||||
entry = create_proc_entry("event", S_IRUSR, acpi_root_dir);
|
entry = create_proc_entry("event", S_IRUSR, acpi_root_dir);
|
||||||
if (entry)
|
if (entry)
|
||||||
entry->proc_fops = &acpi_system_event_ops;
|
entry->proc_fops = &acpi_system_event_ops;
|
||||||
else
|
else
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -576,13 +576,10 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
|
|||||||
ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS"));
|
ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS"));
|
||||||
}
|
}
|
||||||
|
|
||||||
status = acpi_evaluate_object(NULL, METHOD_NAME__WAK, &arg_list, NULL);
|
|
||||||
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "During Method _WAK"));
|
|
||||||
}
|
|
||||||
/* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* GPEs must be enabled before _WAK is called as GPEs
|
||||||
|
* might get fired there
|
||||||
|
*
|
||||||
* Restore the GPEs:
|
* Restore the GPEs:
|
||||||
* 1) Disable/Clear all GPEs
|
* 1) Disable/Clear all GPEs
|
||||||
* 2) Enable all runtime GPEs
|
* 2) Enable all runtime GPEs
|
||||||
@ -591,13 +588,19 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
|
|||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
acpi_gbl_system_awake_and_running = TRUE;
|
|
||||||
|
|
||||||
status = acpi_hw_enable_all_runtime_gpes();
|
status = acpi_hw_enable_all_runtime_gpes();
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status = acpi_evaluate_object(NULL, METHOD_NAME__WAK, &arg_list, NULL);
|
||||||
|
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
||||||
|
ACPI_EXCEPTION((AE_INFO, status, "During Method _WAK"));
|
||||||
|
}
|
||||||
|
/* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
|
||||||
|
|
||||||
|
acpi_gbl_system_awake_and_running = TRUE;
|
||||||
|
|
||||||
/* Enable power button */
|
/* Enable power button */
|
||||||
|
|
||||||
(void)
|
(void)
|
||||||
|
@ -540,7 +540,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_get_devices(char *HID,
|
acpi_get_devices(const char *HID,
|
||||||
acpi_walk_callback user_function,
|
acpi_walk_callback user_function,
|
||||||
void *context, void **return_value)
|
void *context, void **return_value)
|
||||||
{
|
{
|
||||||
|
@ -698,16 +698,23 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
switch (event) {
|
switch (event) {
|
||||||
case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
|
case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
|
||||||
acpi_processor_ppc_has_changed(pr);
|
acpi_processor_ppc_has_changed(pr);
|
||||||
acpi_bus_generate_event(device, event,
|
acpi_bus_generate_proc_event(device, event,
|
||||||
pr->performance_platform_limit);
|
pr->performance_platform_limit);
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event,
|
||||||
|
pr->performance_platform_limit);
|
||||||
break;
|
break;
|
||||||
case ACPI_PROCESSOR_NOTIFY_POWER:
|
case ACPI_PROCESSOR_NOTIFY_POWER:
|
||||||
acpi_processor_cst_has_changed(pr);
|
acpi_processor_cst_has_changed(pr);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event, 0);
|
||||||
break;
|
break;
|
||||||
case ACPI_PROCESSOR_NOTIFY_THROTTLING:
|
case ACPI_PROCESSOR_NOTIFY_THROTTLING:
|
||||||
acpi_processor_tstate_has_changed(pr);
|
acpi_processor_tstate_has_changed(pr);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event, 0);
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
"Unsupported event [0x%x]\n", event));
|
"Unsupported event [0x%x]\n", event));
|
||||||
|
@ -440,11 +440,12 @@ static int acpi_sbs_generate_event(struct acpi_device *device,
|
|||||||
strcpy(acpi_device_bid(device), bid);
|
strcpy(acpi_device_bid(device), bid);
|
||||||
strcpy(acpi_device_class(device), class);
|
strcpy(acpi_device_class(device), class);
|
||||||
|
|
||||||
result = acpi_bus_generate_event(device, event, state);
|
result = acpi_bus_generate_proc_event(device, event, state);
|
||||||
|
|
||||||
strcpy(acpi_device_bid(device), bid_saved);
|
strcpy(acpi_device_bid(device), bid_saved);
|
||||||
strcpy(acpi_device_class(device), class_saved);
|
strcpy(acpi_device_class(device), class_saved);
|
||||||
|
|
||||||
|
acpi_bus_generate_netlink_event(class, bid, event, state);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,8 +35,9 @@ struct acpi_device_bus_id{
|
|||||||
* e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get:
|
* e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get:
|
||||||
* char *modalias: "acpi:IBM0001:ACPI0001"
|
* char *modalias: "acpi:IBM0001:ACPI0001"
|
||||||
*/
|
*/
|
||||||
int create_modalias(struct acpi_device *acpi_dev, char *modalias, int size){
|
static int create_modalias(struct acpi_device *acpi_dev, char *modalias,
|
||||||
|
int size)
|
||||||
|
{
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (!acpi_dev->flags.hardware_id)
|
if (!acpi_dev->flags.hardware_id)
|
||||||
|
@ -305,7 +305,7 @@ int acpi_pm_device_sleep_state(struct device *dev, int wake, int *d_min_p)
|
|||||||
unsigned long d_min, d_max;
|
unsigned long d_min, d_max;
|
||||||
|
|
||||||
if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &adev))) {
|
if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &adev))) {
|
||||||
printk(KERN_ERR "ACPI handle has no context!\n");
|
printk(KERN_DEBUG "ACPI handle has no context!\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,65 @@ ACPI_MODULE_NAME("tbutils")
|
|||||||
static acpi_physical_address
|
static acpi_physical_address
|
||||||
acpi_tb_get_root_table_entry(u8 * table_entry,
|
acpi_tb_get_root_table_entry(u8 * table_entry,
|
||||||
acpi_native_uint table_entry_size);
|
acpi_native_uint table_entry_size);
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* FUNCTION: acpi_tb_check_xsdt
|
||||||
|
*
|
||||||
|
* PARAMETERS: address - Pointer to the XSDT
|
||||||
|
*
|
||||||
|
* RETURN: status
|
||||||
|
* AE_OK - XSDT is okay
|
||||||
|
* AE_NO_MEMORY - can't map XSDT
|
||||||
|
* AE_INVALID_TABLE_LENGTH - invalid table length
|
||||||
|
* AE_NULL_ENTRY - XSDT has NULL entry
|
||||||
|
*
|
||||||
|
* DESCRIPTION: validate XSDT
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
static acpi_status
|
||||||
|
acpi_tb_check_xsdt(acpi_physical_address address)
|
||||||
|
{
|
||||||
|
struct acpi_table_header *table;
|
||||||
|
u32 length;
|
||||||
|
u64 xsdt_entry_address;
|
||||||
|
u8 *table_entry;
|
||||||
|
u32 table_count;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
table = acpi_os_map_memory(address, sizeof(struct acpi_table_header));
|
||||||
|
if (!table)
|
||||||
|
return AE_NO_MEMORY;
|
||||||
|
|
||||||
|
length = table->length;
|
||||||
|
acpi_os_unmap_memory(table, sizeof(struct acpi_table_header));
|
||||||
|
if (length < sizeof(struct acpi_table_header))
|
||||||
|
return AE_INVALID_TABLE_LENGTH;
|
||||||
|
|
||||||
|
table = acpi_os_map_memory(address, length);
|
||||||
|
if (!table)
|
||||||
|
return AE_NO_MEMORY;
|
||||||
|
|
||||||
|
/* Calculate the number of tables described in XSDT */
|
||||||
|
table_count =
|
||||||
|
(u32) ((table->length -
|
||||||
|
sizeof(struct acpi_table_header)) / sizeof(u64));
|
||||||
|
table_entry =
|
||||||
|
ACPI_CAST_PTR(u8, table) + sizeof(struct acpi_table_header);
|
||||||
|
for (i = 0; i < table_count; i++) {
|
||||||
|
ACPI_MOVE_64_TO_64(&xsdt_entry_address, table_entry);
|
||||||
|
if (!xsdt_entry_address) {
|
||||||
|
/* XSDT has NULL entry */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
table_entry += sizeof(u64);
|
||||||
|
}
|
||||||
|
acpi_os_unmap_memory(table, length);
|
||||||
|
|
||||||
|
if (i < table_count)
|
||||||
|
return AE_NULL_ENTRY;
|
||||||
|
else
|
||||||
|
return AE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
@ -341,6 +400,7 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
|
|||||||
u32 table_count;
|
u32 table_count;
|
||||||
struct acpi_table_header *table;
|
struct acpi_table_header *table;
|
||||||
acpi_physical_address address;
|
acpi_physical_address address;
|
||||||
|
acpi_physical_address rsdt_address;
|
||||||
u32 length;
|
u32 length;
|
||||||
u8 *table_entry;
|
u8 *table_entry;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
@ -369,6 +429,8 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
|
|||||||
*/
|
*/
|
||||||
address = (acpi_physical_address) rsdp->xsdt_physical_address;
|
address = (acpi_physical_address) rsdp->xsdt_physical_address;
|
||||||
table_entry_size = sizeof(u64);
|
table_entry_size = sizeof(u64);
|
||||||
|
rsdt_address = (acpi_physical_address)
|
||||||
|
rsdp->rsdt_physical_address;
|
||||||
} else {
|
} else {
|
||||||
/* Root table is an RSDT (32-bit physical addresses) */
|
/* Root table is an RSDT (32-bit physical addresses) */
|
||||||
|
|
||||||
@ -382,6 +444,15 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
|
|||||||
*/
|
*/
|
||||||
acpi_os_unmap_memory(rsdp, sizeof(struct acpi_table_rsdp));
|
acpi_os_unmap_memory(rsdp, sizeof(struct acpi_table_rsdp));
|
||||||
|
|
||||||
|
if (table_entry_size == sizeof(u64)) {
|
||||||
|
if (acpi_tb_check_xsdt(address) == AE_NULL_ENTRY) {
|
||||||
|
/* XSDT has NULL entry, RSDT is used */
|
||||||
|
address = rsdt_address;
|
||||||
|
table_entry_size = sizeof(u32);
|
||||||
|
ACPI_WARNING((AE_INFO, "BIOS XSDT has NULL entry,"
|
||||||
|
"using RSDT"));
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Map the RSDT/XSDT table header to get the full table length */
|
/* Map the RSDT/XSDT table header to get the full table length */
|
||||||
|
|
||||||
table = acpi_os_map_memory(address, sizeof(struct acpi_table_header));
|
table = acpi_os_map_memory(address, sizeof(struct acpi_table_header));
|
||||||
|
@ -77,23 +77,27 @@ MODULE_LICENSE("GPL");
|
|||||||
|
|
||||||
static int act;
|
static int act;
|
||||||
module_param(act, int, 0644);
|
module_param(act, int, 0644);
|
||||||
MODULE_PARM_DESC(act, "Disable or override all lowest active trip points.\n");
|
MODULE_PARM_DESC(act, "Disable or override all lowest active trip points.");
|
||||||
|
|
||||||
|
static int crt;
|
||||||
|
module_param(crt, int, 0644);
|
||||||
|
MODULE_PARM_DESC(crt, "Disable or lower all critical trip points.");
|
||||||
|
|
||||||
static int tzp;
|
static int tzp;
|
||||||
module_param(tzp, int, 0444);
|
module_param(tzp, int, 0444);
|
||||||
MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
|
MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.");
|
||||||
|
|
||||||
static int nocrt;
|
static int nocrt;
|
||||||
module_param(nocrt, int, 0);
|
module_param(nocrt, int, 0);
|
||||||
MODULE_PARM_DESC(nocrt, "Set to disable action on ACPI thermal zone critical and hot trips.\n");
|
MODULE_PARM_DESC(nocrt, "Set to take no action upon ACPI thermal zone critical trips points.");
|
||||||
|
|
||||||
static int off;
|
static int off;
|
||||||
module_param(off, int, 0);
|
module_param(off, int, 0);
|
||||||
MODULE_PARM_DESC(off, "Set to disable ACPI thermal support.\n");
|
MODULE_PARM_DESC(off, "Set to disable ACPI thermal support.");
|
||||||
|
|
||||||
static int psv;
|
static int psv;
|
||||||
module_param(psv, int, 0644);
|
module_param(psv, int, 0644);
|
||||||
MODULE_PARM_DESC(psv, "Disable or override all passive trip points.\n");
|
MODULE_PARM_DESC(psv, "Disable or override all passive trip points.");
|
||||||
|
|
||||||
static int acpi_thermal_add(struct acpi_device *device);
|
static int acpi_thermal_add(struct acpi_device *device);
|
||||||
static int acpi_thermal_remove(struct acpi_device *device, int type);
|
static int acpi_thermal_remove(struct acpi_device *device, int type);
|
||||||
@ -340,6 +344,20 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
|
|||||||
tz->trips.critical.temperature));
|
tz->trips.critical.temperature));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tz->trips.critical.flags.valid == 1) {
|
||||||
|
if (crt == -1) {
|
||||||
|
tz->trips.critical.flags.valid = 0;
|
||||||
|
} else if (crt > 0) {
|
||||||
|
unsigned long crt_k = CELSIUS_TO_KELVIN(crt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allow override to lower critical threshold
|
||||||
|
*/
|
||||||
|
if (crt_k < tz->trips.critical.temperature)
|
||||||
|
tz->trips.critical.temperature = crt_k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Critical Sleep (optional) */
|
/* Critical Sleep (optional) */
|
||||||
|
|
||||||
status =
|
status =
|
||||||
@ -485,8 +503,12 @@ static int acpi_thermal_critical(struct acpi_thermal *tz)
|
|||||||
printk(KERN_EMERG
|
printk(KERN_EMERG
|
||||||
"Critical temperature reached (%ld C), shutting down.\n",
|
"Critical temperature reached (%ld C), shutting down.\n",
|
||||||
KELVIN_TO_CELSIUS(tz->temperature));
|
KELVIN_TO_CELSIUS(tz->temperature));
|
||||||
acpi_bus_generate_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,
|
||||||
|
tz->device->dev.bus_id,
|
||||||
|
ACPI_THERMAL_NOTIFY_CRITICAL,
|
||||||
|
tz->trips.critical.flags.enabled);
|
||||||
|
|
||||||
orderly_poweroff(true);
|
orderly_poweroff(true);
|
||||||
|
|
||||||
@ -504,8 +526,12 @@ static int acpi_thermal_hot(struct acpi_thermal *tz)
|
|||||||
} else if (tz->trips.hot.flags.enabled)
|
} else if (tz->trips.hot.flags.enabled)
|
||||||
tz->trips.hot.flags.enabled = 0;
|
tz->trips.hot.flags.enabled = 0;
|
||||||
|
|
||||||
acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
|
acpi_bus_generate_proc_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
|
||||||
tz->trips.hot.flags.enabled);
|
tz->trips.hot.flags.enabled);
|
||||||
|
acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
|
||||||
|
tz->device->dev.bus_id,
|
||||||
|
ACPI_THERMAL_NOTIFY_HOT,
|
||||||
|
tz->trips.hot.flags.enabled);
|
||||||
|
|
||||||
/* TBD: Call user-mode "sleep(S4)" function */
|
/* TBD: Call user-mode "sleep(S4)" function */
|
||||||
|
|
||||||
@ -1067,9 +1093,9 @@ static int acpi_thermal_add_fs(struct acpi_device *device)
|
|||||||
entry->owner = THIS_MODULE;
|
entry->owner = THIS_MODULE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'trip_points' [R/W] */
|
/* 'trip_points' [R] */
|
||||||
entry = create_proc_entry(ACPI_THERMAL_FILE_TRIP_POINTS,
|
entry = create_proc_entry(ACPI_THERMAL_FILE_TRIP_POINTS,
|
||||||
S_IFREG | S_IRUGO | S_IWUSR,
|
S_IRUGO,
|
||||||
acpi_device_dir(device));
|
acpi_device_dir(device));
|
||||||
if (!entry)
|
if (!entry)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -1149,12 +1175,16 @@ static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
case ACPI_THERMAL_NOTIFY_THRESHOLDS:
|
case ACPI_THERMAL_NOTIFY_THRESHOLDS:
|
||||||
acpi_thermal_get_trip_points(tz);
|
acpi_thermal_get_trip_points(tz);
|
||||||
acpi_thermal_check(tz);
|
acpi_thermal_check(tz);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event, 0);
|
||||||
break;
|
break;
|
||||||
case ACPI_THERMAL_NOTIFY_DEVICES:
|
case ACPI_THERMAL_NOTIFY_DEVICES:
|
||||||
if (tz->flags.devices)
|
if (tz->flags.devices)
|
||||||
acpi_thermal_get_devices(tz);
|
acpi_thermal_get_devices(tz);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||||
|
device->dev.bus_id, event, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
@ -1339,6 +1369,13 @@ static int thermal_act(struct dmi_system_id *d) {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static int thermal_nocrt(struct dmi_system_id *d) {
|
||||||
|
|
||||||
|
printk(KERN_NOTICE "ACPI: %s detected: "
|
||||||
|
"disabling all critical thermal trip point actions.\n", d->ident);
|
||||||
|
nocrt = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
static int thermal_tzp(struct dmi_system_id *d) {
|
static int thermal_tzp(struct dmi_system_id *d) {
|
||||||
|
|
||||||
if (tzp == 0) {
|
if (tzp == 0) {
|
||||||
@ -1387,6 +1424,14 @@ static struct dmi_system_id thermal_dmi_table[] __initdata = {
|
|||||||
DMI_MATCH(DMI_BOARD_NAME, "i915GMm-HFS"),
|
DMI_MATCH(DMI_BOARD_NAME, "i915GMm-HFS"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = thermal_nocrt,
|
||||||
|
.ident = "Gigabyte GA-7ZX",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
|
||||||
|
DMI_MATCH(DMI_BOARD_NAME, "7ZX"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_DMI */
|
#endif /* CONFIG_DMI */
|
||||||
|
@ -126,6 +126,7 @@ const char *acpi_format_exception(acpi_status status)
|
|||||||
"Unknown exception code: 0x%8.8X", status));
|
"Unknown exception code: 0x%8.8X", status));
|
||||||
|
|
||||||
exception = "UNKNOWN_STATUS_CODE";
|
exception = "UNKNOWN_STATUS_CODE";
|
||||||
|
dump_stack();
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ACPI_CAST_PTR(const char, exception));
|
return (ACPI_CAST_PTR(const char, exception));
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
|
#include <linux/input.h>
|
||||||
#include <linux/backlight.h>
|
#include <linux/backlight.h>
|
||||||
#include <linux/video_output.h>
|
#include <linux/video_output.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
@ -138,6 +138,8 @@ struct acpi_video_bus {
|
|||||||
struct semaphore sem;
|
struct semaphore sem;
|
||||||
struct list_head video_device_list;
|
struct list_head video_device_list;
|
||||||
struct proc_dir_entry *dir;
|
struct proc_dir_entry *dir;
|
||||||
|
struct input_dev *input;
|
||||||
|
char phys[32]; /* for input device */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_video_device_flags {
|
struct acpi_video_device_flags {
|
||||||
@ -1764,6 +1766,9 @@ static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
{
|
{
|
||||||
struct acpi_video_bus *video = data;
|
struct acpi_video_bus *video = data;
|
||||||
struct acpi_device *device = NULL;
|
struct acpi_device *device = NULL;
|
||||||
|
struct input_dev *input;
|
||||||
|
int keycode;
|
||||||
|
|
||||||
|
|
||||||
printk("video bus notify\n");
|
printk("video bus notify\n");
|
||||||
|
|
||||||
@ -1771,11 +1776,13 @@ static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
device = video->device;
|
device = video->device;
|
||||||
|
input = video->input;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
|
case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch,
|
||||||
* most likely via hotkey. */
|
* most likely via hotkey. */
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_SWITCHVIDEOMODE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACPI_VIDEO_NOTIFY_PROBE: /* User plugged in or removed a video
|
case ACPI_VIDEO_NOTIFY_PROBE: /* User plugged in or removed a video
|
||||||
@ -1783,22 +1790,38 @@ static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
acpi_video_device_enumerate(video);
|
acpi_video_device_enumerate(video);
|
||||||
acpi_video_device_rebind(video);
|
acpi_video_device_rebind(video);
|
||||||
acpi_video_switch_output(video, event);
|
acpi_video_switch_output(video, event);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_SWITCHVIDEOMODE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */
|
case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed. */
|
||||||
|
acpi_video_switch_output(video, event);
|
||||||
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_SWITCHVIDEOMODE;
|
||||||
|
break;
|
||||||
case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
|
case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
|
||||||
|
acpi_video_switch_output(video, event);
|
||||||
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_VIDEO_NEXT;
|
||||||
|
break;
|
||||||
case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
|
case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
|
||||||
acpi_video_switch_output(video, event);
|
acpi_video_switch_output(video, event);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_VIDEO_PREV;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
keycode = KEY_UNKNOWN;
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
"Unsupported event [0x%x]\n", event));
|
"Unsupported event [0x%x]\n", event));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input_report_key(input, keycode, 1);
|
||||||
|
input_sync(input);
|
||||||
|
input_report_key(input, keycode, 0);
|
||||||
|
input_sync(input);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1806,38 +1829,65 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
{
|
{
|
||||||
struct acpi_video_device *video_device = data;
|
struct acpi_video_device *video_device = data;
|
||||||
struct acpi_device *device = NULL;
|
struct acpi_device *device = NULL;
|
||||||
|
struct acpi_video_bus *bus;
|
||||||
|
struct input_dev *input;
|
||||||
|
int keycode;
|
||||||
|
|
||||||
if (!video_device)
|
if (!video_device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
device = video_device->dev;
|
device = video_device->dev;
|
||||||
|
bus = video_device->video;
|
||||||
|
input = bus->input;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case ACPI_VIDEO_NOTIFY_SWITCH: /* change in status (cycle output device) */
|
|
||||||
case ACPI_VIDEO_NOTIFY_PROBE: /* change in status (output device status) */
|
|
||||||
acpi_bus_generate_event(device, event, 0);
|
|
||||||
break;
|
|
||||||
case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
|
case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
|
||||||
|
acpi_video_switch_brightness(video_device, event);
|
||||||
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_BRIGHTNESS_CYCLE;
|
||||||
|
break;
|
||||||
case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
|
case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
|
||||||
|
acpi_video_switch_brightness(video_device, event);
|
||||||
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_BRIGHTNESSUP;
|
||||||
|
break;
|
||||||
case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS: /* Decrease brightness */
|
case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS: /* Decrease brightness */
|
||||||
|
acpi_video_switch_brightness(video_device, event);
|
||||||
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_BRIGHTNESSDOWN;
|
||||||
|
break;
|
||||||
case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
|
case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
|
||||||
|
acpi_video_switch_brightness(video_device, event);
|
||||||
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_BRIGHTNESS_ZERO;
|
||||||
|
break;
|
||||||
case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
|
case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
|
||||||
acpi_video_switch_brightness(video_device, event);
|
acpi_video_switch_brightness(video_device, event);
|
||||||
acpi_bus_generate_event(device, event, 0);
|
acpi_bus_generate_proc_event(device, event, 0);
|
||||||
|
keycode = KEY_DISPLAY_OFF;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
keycode = KEY_UNKNOWN;
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
"Unsupported event [0x%x]\n", event));
|
"Unsupported event [0x%x]\n", event));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input_report_key(input, keycode, 1);
|
||||||
|
input_sync(input);
|
||||||
|
input_report_key(input, keycode, 0);
|
||||||
|
input_sync(input);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int instance;
|
||||||
static int acpi_video_bus_add(struct acpi_device *device)
|
static int acpi_video_bus_add(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
acpi_status status = 0;
|
acpi_status status = 0;
|
||||||
struct acpi_video_bus *video = NULL;
|
struct acpi_video_bus *video = NULL;
|
||||||
|
struct input_dev *input;
|
||||||
|
|
||||||
|
|
||||||
if (!device)
|
if (!device)
|
||||||
@ -1847,6 +1897,13 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
|||||||
if (!video)
|
if (!video)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* a hack to fix the duplicate name "VID" problem on T61 */
|
||||||
|
if (!strcmp(device->pnp.bus_id, "VID")) {
|
||||||
|
if (instance)
|
||||||
|
device->pnp.bus_id[3] = '0' + instance;
|
||||||
|
instance ++;
|
||||||
|
}
|
||||||
|
|
||||||
video->device = device;
|
video->device = device;
|
||||||
strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
|
strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
|
||||||
strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
|
strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
|
||||||
@ -1881,6 +1938,39 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
video->input = input = input_allocate_device();
|
||||||
|
|
||||||
|
snprintf(video->phys, sizeof(video->phys),
|
||||||
|
"%s/video/input0", acpi_device_hid(video->device));
|
||||||
|
|
||||||
|
input->name = acpi_device_name(video->device);
|
||||||
|
input->phys = video->phys;
|
||||||
|
input->id.bustype = BUS_HOST;
|
||||||
|
input->id.product = 0x06;
|
||||||
|
input->evbit[0] = BIT(EV_KEY);
|
||||||
|
set_bit(KEY_SWITCHVIDEOMODE, input->keybit);
|
||||||
|
set_bit(KEY_VIDEO_NEXT, input->keybit);
|
||||||
|
set_bit(KEY_VIDEO_PREV, input->keybit);
|
||||||
|
set_bit(KEY_BRIGHTNESS_CYCLE, input->keybit);
|
||||||
|
set_bit(KEY_BRIGHTNESSUP, input->keybit);
|
||||||
|
set_bit(KEY_BRIGHTNESSDOWN, input->keybit);
|
||||||
|
set_bit(KEY_BRIGHTNESS_ZERO, input->keybit);
|
||||||
|
set_bit(KEY_DISPLAY_OFF, input->keybit);
|
||||||
|
set_bit(KEY_UNKNOWN, input->keybit);
|
||||||
|
result = input_register_device(input);
|
||||||
|
if (result) {
|
||||||
|
acpi_remove_notify_handler(video->device->handle,
|
||||||
|
ACPI_DEVICE_NOTIFY,
|
||||||
|
acpi_video_bus_notify);
|
||||||
|
acpi_video_bus_stop_devices(video);
|
||||||
|
acpi_video_bus_put_devices(video);
|
||||||
|
kfree(video->attached_array);
|
||||||
|
acpi_video_bus_remove_fs(device);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s rom: %s post: %s)\n",
|
printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s rom: %s post: %s)\n",
|
||||||
ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
|
ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
|
||||||
video->flags.multihead ? "yes" : "no",
|
video->flags.multihead ? "yes" : "no",
|
||||||
@ -1914,6 +2004,7 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type)
|
|||||||
acpi_video_bus_put_devices(video);
|
acpi_video_bus_put_devices(video);
|
||||||
acpi_video_bus_remove_fs(device);
|
acpi_video_bus_remove_fs(device);
|
||||||
|
|
||||||
|
input_unregister_device(video->input);
|
||||||
kfree(video->attached_array);
|
kfree(video->attached_array);
|
||||||
kfree(video);
|
kfree(video);
|
||||||
|
|
||||||
|
@ -875,7 +875,7 @@ found:
|
|||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
if (sonypi_acpi_device)
|
if (sonypi_acpi_device)
|
||||||
acpi_bus_generate_event(sonypi_acpi_device, 1, event);
|
acpi_bus_generate_proc_event(sonypi_acpi_device, 1, event);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
kfifo_put(sonypi_device.fifo, (unsigned char *)&event, sizeof(event));
|
kfifo_put(sonypi_device.fifo, (unsigned char *)&event, sizeof(event));
|
||||||
|
@ -732,7 +732,7 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
lcd_blank(FB_BLANK_POWERDOWN);
|
lcd_blank(FB_BLANK_POWERDOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_bus_generate_event(hotk->device, event,
|
acpi_bus_generate_proc_event(hotk->device, event,
|
||||||
hotk->event_count[event % 128]++);
|
hotk->event_count[event % 128]++);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1072,7 +1072,8 @@ static void asus_backlight_exit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define ASUS_LED_UNREGISTER(object) \
|
#define ASUS_LED_UNREGISTER(object) \
|
||||||
led_classdev_unregister(&object##_led)
|
if (object##_led.dev) \
|
||||||
|
led_classdev_unregister(&object##_led)
|
||||||
|
|
||||||
static void asus_led_exit(void)
|
static void asus_led_exit(void)
|
||||||
{
|
{
|
||||||
|
@ -855,6 +855,15 @@ static struct dmi_system_id sony_nc_ids[] = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FE"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FE"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.ident = "Sony Vaio FZ Series",
|
||||||
|
.callback = sony_nc_C_enable,
|
||||||
|
.driver_data = sony_C_events,
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.ident = "Sony Vaio C Series",
|
.ident = "Sony Vaio C Series",
|
||||||
.callback = sony_nc_C_enable,
|
.callback = sony_nc_C_enable,
|
||||||
@ -904,7 +913,7 @@ static void sony_acpi_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
|
|
||||||
dprintk("sony_acpi_notify, event: 0x%.2x\n", ev);
|
dprintk("sony_acpi_notify, event: 0x%.2x\n", ev);
|
||||||
sony_laptop_report_input_event(ev);
|
sony_laptop_report_input_event(ev);
|
||||||
acpi_bus_generate_event(sony_nc_acpi_device, 1, ev);
|
acpi_bus_generate_proc_event(sony_nc_acpi_device, 1, ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static acpi_status sony_walk_callback(acpi_handle handle, u32 level,
|
static acpi_status sony_walk_callback(acpi_handle handle, u32 level,
|
||||||
@ -2292,7 +2301,7 @@ static irqreturn_t sony_pic_irq(int irq, void *dev_id)
|
|||||||
|
|
||||||
found:
|
found:
|
||||||
sony_laptop_report_input_event(device_event);
|
sony_laptop_report_input_event(device_event);
|
||||||
acpi_bus_generate_event(spic_dev.acpi_dev, 1, device_event);
|
acpi_bus_generate_proc_event(spic_dev.acpi_dev, 1, device_event);
|
||||||
sonypi_compat_report_event(device_event);
|
sonypi_compat_report_event(device_event);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
@ -2308,8 +2317,6 @@ static int sony_pic_remove(struct acpi_device *device, int type)
|
|||||||
struct sony_pic_ioport *io, *tmp_io;
|
struct sony_pic_ioport *io, *tmp_io;
|
||||||
struct sony_pic_irq *irq, *tmp_irq;
|
struct sony_pic_irq *irq, *tmp_irq;
|
||||||
|
|
||||||
sonypi_compat_exit();
|
|
||||||
|
|
||||||
if (sony_pic_disable(device)) {
|
if (sony_pic_disable(device)) {
|
||||||
printk(KERN_ERR DRV_PFX "Couldn't disable device.\n");
|
printk(KERN_ERR DRV_PFX "Couldn't disable device.\n");
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
@ -2319,6 +2326,8 @@ static int sony_pic_remove(struct acpi_device *device, int type)
|
|||||||
release_region(spic_dev.cur_ioport->io.minimum,
|
release_region(spic_dev.cur_ioport->io.minimum,
|
||||||
spic_dev.cur_ioport->io.address_length);
|
spic_dev.cur_ioport->io.address_length);
|
||||||
|
|
||||||
|
sonypi_compat_exit();
|
||||||
|
|
||||||
sony_laptop_remove_input();
|
sony_laptop_remove_input();
|
||||||
|
|
||||||
/* pf attrs */
|
/* pf attrs */
|
||||||
@ -2384,6 +2393,9 @@ static int sony_pic_add(struct acpi_device *device)
|
|||||||
goto err_free_resources;
|
goto err_free_resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sonypi_compat_init())
|
||||||
|
goto err_remove_input;
|
||||||
|
|
||||||
/* request io port */
|
/* request io port */
|
||||||
list_for_each_entry(io, &spic_dev.ioports, list) {
|
list_for_each_entry(io, &spic_dev.ioports, list) {
|
||||||
if (request_region(io->io.minimum, io->io.address_length,
|
if (request_region(io->io.minimum, io->io.address_length,
|
||||||
@ -2398,7 +2410,7 @@ static int sony_pic_add(struct acpi_device *device)
|
|||||||
if (!spic_dev.cur_ioport) {
|
if (!spic_dev.cur_ioport) {
|
||||||
printk(KERN_ERR DRV_PFX "Failed to request_region.\n");
|
printk(KERN_ERR DRV_PFX "Failed to request_region.\n");
|
||||||
result = -ENODEV;
|
result = -ENODEV;
|
||||||
goto err_remove_input;
|
goto err_remove_compat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* request IRQ */
|
/* request IRQ */
|
||||||
@ -2438,9 +2450,6 @@ static int sony_pic_add(struct acpi_device *device)
|
|||||||
if (result)
|
if (result)
|
||||||
goto err_remove_pf;
|
goto err_remove_pf;
|
||||||
|
|
||||||
if (sonypi_compat_init())
|
|
||||||
goto err_remove_pf;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_remove_pf:
|
err_remove_pf:
|
||||||
@ -2456,6 +2465,9 @@ err_release_region:
|
|||||||
release_region(spic_dev.cur_ioport->io.minimum,
|
release_region(spic_dev.cur_ioport->io.minimum,
|
||||||
spic_dev.cur_ioport->io.address_length);
|
spic_dev.cur_ioport->io.address_length);
|
||||||
|
|
||||||
|
err_remove_compat:
|
||||||
|
sonypi_compat_exit();
|
||||||
|
|
||||||
err_remove_input:
|
err_remove_input:
|
||||||
sony_laptop_remove_input();
|
sony_laptop_remove_input();
|
||||||
|
|
||||||
|
@ -1190,10 +1190,10 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sendacpi)
|
if (sendacpi)
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, hkey);
|
acpi_bus_generate_proc_event(ibm->acpi->device, event, hkey);
|
||||||
} else {
|
} else {
|
||||||
printk(IBM_ERR "unknown hotkey notification event %d\n", event);
|
printk(IBM_ERR "unknown hotkey notification event %d\n", event);
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 0);
|
acpi_bus_generate_proc_event(ibm->acpi->device, event, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2162,22 +2162,27 @@ static void dock_notify(struct ibm_struct *ibm, u32 event)
|
|||||||
int docked = dock_docked();
|
int docked = dock_docked();
|
||||||
int pci = ibm->acpi->hid && ibm->acpi->device &&
|
int pci = ibm->acpi->hid && ibm->acpi->device &&
|
||||||
acpi_match_device_ids(ibm->acpi->device, ibm_pci_device_ids);
|
acpi_match_device_ids(ibm->acpi->device, ibm_pci_device_ids);
|
||||||
|
int data;
|
||||||
|
|
||||||
if (event == 1 && !pci) /* 570 */
|
if (event == 1 && !pci) /* 570 */
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 1); /* button */
|
data = 1; /* button */
|
||||||
else if (event == 1 && pci) /* 570 */
|
else if (event == 1 && pci) /* 570 */
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 3); /* dock */
|
data = 3; /* dock */
|
||||||
else if (event == 3 && docked)
|
else if (event == 3 && docked)
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 1); /* button */
|
data = 1; /* button */
|
||||||
else if (event == 3 && !docked)
|
else if (event == 3 && !docked)
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 2); /* undock */
|
data = 2; /* undock */
|
||||||
else if (event == 0 && docked)
|
else if (event == 0 && docked)
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 3); /* dock */
|
data = 3; /* dock */
|
||||||
else {
|
else {
|
||||||
printk(IBM_ERR "unknown dock event %d, status %d\n",
|
printk(IBM_ERR "unknown dock event %d, status %d\n",
|
||||||
event, _sta(dock_handle));
|
event, _sta(dock_handle));
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 0); /* unknown */
|
data = 0; /* unknown */
|
||||||
}
|
}
|
||||||
|
acpi_bus_generate_proc_event(ibm->acpi->device, event, data);
|
||||||
|
acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
|
||||||
|
ibm->acpi->device->dev.bus_id,
|
||||||
|
event, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dock_read(char *p)
|
static int dock_read(char *p)
|
||||||
@ -2275,7 +2280,10 @@ static int __init bay_init(struct ibm_init_struct *iibm)
|
|||||||
|
|
||||||
static void bay_notify(struct ibm_struct *ibm, u32 event)
|
static void bay_notify(struct ibm_struct *ibm, u32 event)
|
||||||
{
|
{
|
||||||
acpi_bus_generate_event(ibm->acpi->device, event, 0);
|
acpi_bus_generate_proc_event(ibm->acpi->device, event, 0);
|
||||||
|
acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
|
||||||
|
ibm->acpi->device->dev.bus_id,
|
||||||
|
event, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define bay_occupied(b) (_sta(b##_handle) & 1)
|
#define bay_occupied(b) (_sta(b##_handle) & 1)
|
||||||
|
@ -267,7 +267,10 @@ static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
|
|||||||
|
|
||||||
if (subevent == 0x80) {
|
if (subevent == 0x80) {
|
||||||
dbg("%s: generationg bus event\n", __FUNCTION__);
|
dbg("%s: generationg bus event\n", __FUNCTION__);
|
||||||
acpi_bus_generate_event(note->device, note->event, detail);
|
acpi_bus_generate_proc_event(note->device, note->event, detail);
|
||||||
|
acpi_bus_generate_netlink_event(note->device->pnp.device_class,
|
||||||
|
note->device->dev.bus_id,
|
||||||
|
note->event, detail);
|
||||||
} else
|
} else
|
||||||
note->event = event;
|
note->event = event;
|
||||||
}
|
}
|
||||||
@ -399,7 +402,7 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
|
|||||||
|
|
||||||
status = acpi_get_object_info(handle, &info_buffer);
|
status = acpi_get_object_info(handle, &info_buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
err("%s: Failed to get device information", __FUNCTION__);
|
err("%s: Failed to get device information\n", __FUNCTION__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
info.hardware_id.value[sizeof(info.hardware_id.value) - 1] = '\0';
|
info.hardware_id.value[sizeof(info.hardware_id.value) - 1] = '\0';
|
||||||
|
@ -25,13 +25,13 @@ static const struct pnp_card_device_id *match_card(struct pnp_card_driver *drv,
|
|||||||
int found;
|
int found;
|
||||||
struct pnp_dev *dev;
|
struct pnp_dev *dev;
|
||||||
|
|
||||||
if (i == PNP_MAX_DEVICES
|
if (i == PNP_MAX_DEVICES ||
|
||||||
|| !*drv_id->devs[i].id)
|
!*drv_id->devs[i].id)
|
||||||
return drv_id;
|
return drv_id;
|
||||||
found = 0;
|
found = 0;
|
||||||
card_for_each_dev(card, dev) {
|
card_for_each_dev(card, dev) {
|
||||||
if (compare_pnp_id
|
if (compare_pnp_id(dev->id,
|
||||||
(dev->id, drv_id->devs[i].id)) {
|
drv_id->devs[i].id)) {
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ static int pnp_interface_attach_card(struct pnp_card *card)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_name:
|
err_name:
|
||||||
device_remove_file(&card->dev, &dev_attr_name);
|
device_remove_file(&card->dev, &dev_attr_name);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -321,10 +321,10 @@ struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
|
|||||||
pos = pos->next;
|
pos = pos->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
dev->card_link = clink;
|
dev->card_link = clink;
|
||||||
dev->dev.driver = &drv->link.driver;
|
dev->dev.driver = &drv->link.driver;
|
||||||
if (pnp_bus_type.probe(&dev->dev))
|
if (pnp_bus_type.probe(&dev->dev))
|
||||||
@ -334,7 +334,7 @@ struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
|
|||||||
|
|
||||||
return dev;
|
return dev;
|
||||||
|
|
||||||
err_out:
|
err_out:
|
||||||
dev->dev.driver = NULL;
|
dev->dev.driver = NULL;
|
||||||
dev->card_link = NULL;
|
dev->card_link = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -52,9 +52,6 @@ int pnp_register_protocol(struct pnp_protocol *protocol)
|
|||||||
int nodenum;
|
int nodenum;
|
||||||
struct list_head *pos;
|
struct list_head *pos;
|
||||||
|
|
||||||
if (!protocol)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&protocol->devices);
|
INIT_LIST_HEAD(&protocol->devices);
|
||||||
INIT_LIST_HEAD(&protocol->cards);
|
INIT_LIST_HEAD(&protocol->cards);
|
||||||
nodenum = 0;
|
nodenum = 0;
|
||||||
@ -94,8 +91,6 @@ static void pnp_free_ids(struct pnp_dev *dev)
|
|||||||
struct pnp_id *id;
|
struct pnp_id *id;
|
||||||
struct pnp_id *next;
|
struct pnp_id *next;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return;
|
|
||||||
id = dev->id;
|
id = dev->id;
|
||||||
while (id) {
|
while (id) {
|
||||||
next = id->next;
|
next = id->next;
|
||||||
@ -143,7 +138,7 @@ int __pnp_add_device(struct pnp_dev *dev)
|
|||||||
*/
|
*/
|
||||||
int pnp_add_device(struct pnp_dev *dev)
|
int pnp_add_device(struct pnp_dev *dev)
|
||||||
{
|
{
|
||||||
if (!dev || !dev->protocol || dev->card)
|
if (dev->card)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
dev->dev.parent = &dev->protocol->dev;
|
dev->dev.parent = &dev->protocol->dev;
|
||||||
sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
|
sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
|
||||||
|
@ -118,7 +118,7 @@ static int pnp_device_probe(struct device *dev)
|
|||||||
goto fail;
|
goto fail;
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
pnp_device_detach(pnp_dev);
|
pnp_device_detach(pnp_dev);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@ -232,10 +232,6 @@ int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
struct pnp_id *ptr;
|
struct pnp_id *ptr;
|
||||||
|
|
||||||
if (!id)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
id->next = NULL;
|
id->next = NULL;
|
||||||
ptr = dev->id;
|
ptr = dev->id;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
|
@ -459,7 +459,8 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
|
|||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
done:
|
|
||||||
|
done:
|
||||||
if (retval < 0)
|
if (retval < 0)
|
||||||
return retval;
|
return retval;
|
||||||
return count;
|
return count;
|
||||||
@ -499,10 +500,10 @@ int pnp_interface_attach_device(struct pnp_dev *dev)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_res:
|
err_res:
|
||||||
device_remove_file(&dev->dev, &dev_attr_resources);
|
device_remove_file(&dev->dev, &dev_attr_resources);
|
||||||
err_opt:
|
err_opt:
|
||||||
device_remove_file(&dev->dev, &dev_attr_options);
|
device_remove_file(&dev->dev, &dev_attr_options);
|
||||||
err:
|
err:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -47,9 +47,6 @@
|
|||||||
#if 0
|
#if 0
|
||||||
#define ISAPNP_REGION_OK
|
#define ISAPNP_REGION_OK
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
|
||||||
#define ISAPNP_DEBUG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int isapnp_disable; /* Disable ISA PnP */
|
int isapnp_disable; /* Disable ISA PnP */
|
||||||
static int isapnp_rdp; /* Read Data Port */
|
static int isapnp_rdp; /* Read Data Port */
|
||||||
@ -93,7 +90,6 @@ MODULE_LICENSE("GPL");
|
|||||||
|
|
||||||
static unsigned char isapnp_checksum_value;
|
static unsigned char isapnp_checksum_value;
|
||||||
static DEFINE_MUTEX(isapnp_cfg_mutex);
|
static DEFINE_MUTEX(isapnp_cfg_mutex);
|
||||||
static int isapnp_detected;
|
|
||||||
static int isapnp_csn_count;
|
static int isapnp_csn_count;
|
||||||
|
|
||||||
/* some prototypes */
|
/* some prototypes */
|
||||||
@ -335,7 +331,7 @@ static int __init isapnp_isolate(void)
|
|||||||
} else if (iteration > 1) {
|
} else if (iteration > 1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
__next:
|
__next:
|
||||||
if (csn == 255)
|
if (csn == 255)
|
||||||
break;
|
break;
|
||||||
checksum = 0x6a;
|
checksum = 0x6a;
|
||||||
@ -733,7 +729,7 @@ static int __init isapnp_create_device(struct pnp_card *card,
|
|||||||
"isapnp: unexpected or unknown tag type 0x%x for logical device %i (device %i), ignored\n",
|
"isapnp: unexpected or unknown tag type 0x%x for logical device %i (device %i), ignored\n",
|
||||||
type, dev->number, card->number);
|
type, dev->number, card->number);
|
||||||
}
|
}
|
||||||
__skip:
|
__skip:
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
isapnp_skip_bytes(size);
|
isapnp_skip_bytes(size);
|
||||||
}
|
}
|
||||||
@ -788,7 +784,7 @@ static void __init isapnp_parse_resource_map(struct pnp_card *card)
|
|||||||
"isapnp: unexpected or unknown tag type 0x%x for device %i, ignored\n",
|
"isapnp: unexpected or unknown tag type 0x%x for device %i, ignored\n",
|
||||||
type, card->number);
|
type, card->number);
|
||||||
}
|
}
|
||||||
__skip:
|
__skip:
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
isapnp_skip_bytes(size);
|
isapnp_skip_bytes(size);
|
||||||
}
|
}
|
||||||
@ -940,9 +936,6 @@ EXPORT_SYMBOL(isapnp_protocol);
|
|||||||
EXPORT_SYMBOL(isapnp_present);
|
EXPORT_SYMBOL(isapnp_present);
|
||||||
EXPORT_SYMBOL(isapnp_cfg_begin);
|
EXPORT_SYMBOL(isapnp_cfg_begin);
|
||||||
EXPORT_SYMBOL(isapnp_cfg_end);
|
EXPORT_SYMBOL(isapnp_cfg_end);
|
||||||
#if 0
|
|
||||||
EXPORT_SYMBOL(isapnp_read_byte);
|
|
||||||
#endif
|
|
||||||
EXPORT_SYMBOL(isapnp_write_byte);
|
EXPORT_SYMBOL(isapnp_write_byte);
|
||||||
|
|
||||||
static int isapnp_read_resources(struct pnp_dev *dev,
|
static int isapnp_read_resources(struct pnp_dev *dev,
|
||||||
@ -993,6 +986,7 @@ static int isapnp_get_resources(struct pnp_dev *dev,
|
|||||||
struct pnp_resource_table *res)
|
struct pnp_resource_table *res)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pnp_init_resource_table(res);
|
pnp_init_resource_table(res);
|
||||||
isapnp_cfg_begin(dev->card->number, dev->number);
|
isapnp_cfg_begin(dev->card->number, dev->number);
|
||||||
ret = isapnp_read_resources(dev, res);
|
ret = isapnp_read_resources(dev, res);
|
||||||
@ -1046,7 +1040,7 @@ static int isapnp_set_resources(struct pnp_dev *dev,
|
|||||||
|
|
||||||
static int isapnp_disable_resources(struct pnp_dev *dev)
|
static int isapnp_disable_resources(struct pnp_dev *dev)
|
||||||
{
|
{
|
||||||
if (!dev || !dev->active)
|
if (!dev->active)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
isapnp_cfg_begin(dev->card->number, dev->number);
|
isapnp_cfg_begin(dev->card->number, dev->number);
|
||||||
isapnp_deactivate(dev->number);
|
isapnp_deactivate(dev->number);
|
||||||
@ -1069,7 +1063,6 @@ static int __init isapnp_init(void)
|
|||||||
struct pnp_dev *dev;
|
struct pnp_dev *dev;
|
||||||
|
|
||||||
if (isapnp_disable) {
|
if (isapnp_disable) {
|
||||||
isapnp_detected = 0;
|
|
||||||
printk(KERN_INFO "isapnp: ISA Plug & Play support disabled\n");
|
printk(KERN_INFO "isapnp: ISA Plug & Play support disabled\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1117,7 +1110,6 @@ static int __init isapnp_init(void)
|
|||||||
}
|
}
|
||||||
isapnp_set_rdp();
|
isapnp_set_rdp();
|
||||||
}
|
}
|
||||||
isapnp_detected = 1;
|
|
||||||
if (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff) {
|
if (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff) {
|
||||||
cards = isapnp_isolate();
|
cards = isapnp_isolate();
|
||||||
if (cards < 0 || (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff)) {
|
if (cards < 0 || (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff)) {
|
||||||
@ -1125,7 +1117,6 @@ static int __init isapnp_init(void)
|
|||||||
release_region(_PIDXR, 1);
|
release_region(_PIDXR, 1);
|
||||||
#endif
|
#endif
|
||||||
release_region(_PNPWRP, 1);
|
release_region(_PNPWRP, 1);
|
||||||
isapnp_detected = 0;
|
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"isapnp: No Plug & Play device found\n");
|
"isapnp: No Plug & Play device found\n");
|
||||||
return 0;
|
return 0;
|
||||||
@ -1148,13 +1139,12 @@ static int __init isapnp_init(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cards) {
|
if (cards)
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"isapnp: %i Plug & Play card%s detected total\n", cards,
|
"isapnp: %i Plug & Play card%s detected total\n", cards,
|
||||||
cards > 1 ? "s" : "");
|
cards > 1 ? "s" : "");
|
||||||
} else {
|
else
|
||||||
printk(KERN_INFO "isapnp: No Plug & Play card found\n");
|
printk(KERN_INFO "isapnp: No Plug & Play card found\n");
|
||||||
}
|
|
||||||
|
|
||||||
isapnp_proc_init();
|
isapnp_proc_init();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -112,33 +112,6 @@ static int isapnp_proc_attach_device(struct pnp_dev *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MODULE
|
|
||||||
static int __exit isapnp_proc_detach_device(struct pnp_dev *dev)
|
|
||||||
{
|
|
||||||
struct pnp_card *bus = dev->card;
|
|
||||||
struct proc_dir_entry *de;
|
|
||||||
char name[16];
|
|
||||||
|
|
||||||
if (!(de = bus->procdir))
|
|
||||||
return -EINVAL;
|
|
||||||
sprintf(name, "%02x", dev->number);
|
|
||||||
remove_proc_entry(name, de);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __exit isapnp_proc_detach_bus(struct pnp_card *bus)
|
|
||||||
{
|
|
||||||
struct proc_dir_entry *de;
|
|
||||||
char name[16];
|
|
||||||
|
|
||||||
if (!(de = bus->procdir))
|
|
||||||
return -EINVAL;
|
|
||||||
sprintf(name, "%02x", bus->number);
|
|
||||||
remove_proc_entry(name, isapnp_proc_bus_dir);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* MODULE */
|
|
||||||
|
|
||||||
int __init isapnp_proc_init(void)
|
int __init isapnp_proc_init(void)
|
||||||
{
|
{
|
||||||
struct pnp_dev *dev;
|
struct pnp_dev *dev;
|
||||||
@ -149,21 +122,3 @@ int __init isapnp_proc_init(void)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MODULE
|
|
||||||
int __exit isapnp_proc_done(void)
|
|
||||||
{
|
|
||||||
struct pnp_dev *dev;
|
|
||||||
struct pnp_bus *card;
|
|
||||||
|
|
||||||
isapnp_for_each_dev(dev) {
|
|
||||||
isapnp_proc_detach_device(dev);
|
|
||||||
}
|
|
||||||
isapnp_for_each_card(card) {
|
|
||||||
isapnp_proc_detach_bus(card);
|
|
||||||
}
|
|
||||||
if (isapnp_proc_bus_dir)
|
|
||||||
remove_proc_entry("isapnp", proc_bus);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* MODULE */
|
|
||||||
|
@ -21,9 +21,6 @@ static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx)
|
|||||||
resource_size_t *start, *end;
|
resource_size_t *start, *end;
|
||||||
unsigned long *flags;
|
unsigned long *flags;
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_PORT) {
|
if (idx >= PNP_MAX_PORT) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 4 ports is incompatible with pnp specifications.");
|
("More than 4 ports is incompatible with pnp specifications.");
|
||||||
@ -66,9 +63,6 @@ static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx)
|
|||||||
resource_size_t *start, *end;
|
resource_size_t *start, *end;
|
||||||
unsigned long *flags;
|
unsigned long *flags;
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_MEM) {
|
if (idx >= PNP_MAX_MEM) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 8 mems is incompatible with pnp specifications.");
|
("More than 8 mems is incompatible with pnp specifications.");
|
||||||
@ -127,9 +121,6 @@ static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx)
|
|||||||
5, 10, 11, 12, 9, 14, 15, 7, 3, 4, 13, 0, 1, 6, 8, 2
|
5, 10, 11, 12, 9, 14, 15, 7, 3, 4, 13, 0, 1, 6, 8, 2
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_IRQ) {
|
if (idx >= PNP_MAX_IRQ) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 2 irqs is incompatible with pnp specifications.");
|
("More than 2 irqs is incompatible with pnp specifications.");
|
||||||
@ -181,9 +172,6 @@ static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
|
|||||||
1, 3, 5, 6, 7, 0, 2, 4
|
1, 3, 5, 6, 7, 0, 2, 4
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_DMA) {
|
if (idx >= PNP_MAX_DMA) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 2 dmas is incompatible with pnp specifications.");
|
("More than 2 dmas is incompatible with pnp specifications.");
|
||||||
@ -390,7 +378,7 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum)
|
|||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
pnp_clean_resource_table(&dev->res);
|
pnp_clean_resource_table(&dev->res);
|
||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
@ -410,8 +398,6 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
|
|||||||
int i;
|
int i;
|
||||||
struct pnp_resource_table *bak;
|
struct pnp_resource_table *bak;
|
||||||
|
|
||||||
if (!dev || !res)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!pnp_can_configure(dev))
|
if (!pnp_can_configure(dev))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
bak = pnp_alloc(sizeof(struct pnp_resource_table));
|
bak = pnp_alloc(sizeof(struct pnp_resource_table));
|
||||||
@ -444,7 +430,7 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
|
|||||||
kfree(bak);
|
kfree(bak);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
dev->res = *bak;
|
dev->res = *bak;
|
||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
kfree(bak);
|
kfree(bak);
|
||||||
@ -460,9 +446,6 @@ int pnp_auto_config_dev(struct pnp_dev *dev)
|
|||||||
struct pnp_option *dep;
|
struct pnp_option *dep;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (!pnp_can_configure(dev)) {
|
if (!pnp_can_configure(dev)) {
|
||||||
pnp_dbg("Device %s does not support resource configuration.",
|
pnp_dbg("Device %s does not support resource configuration.",
|
||||||
dev->dev.bus_id);
|
dev->dev.bus_id);
|
||||||
@ -541,8 +524,6 @@ int pnp_activate_dev(struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
if (dev->active)
|
if (dev->active)
|
||||||
return 0; /* the device is already active */
|
return 0; /* the device is already active */
|
||||||
|
|
||||||
@ -568,8 +549,6 @@ int pnp_disable_dev(struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!dev->active)
|
if (!dev->active)
|
||||||
return 0; /* the device is already disabled */
|
return 0; /* the device is already disabled */
|
||||||
|
|
||||||
@ -596,8 +575,6 @@ int pnp_disable_dev(struct pnp_dev *dev)
|
|||||||
void pnp_resource_change(struct resource *resource, resource_size_t start,
|
void pnp_resource_change(struct resource *resource, resource_size_t start,
|
||||||
resource_size_t size)
|
resource_size_t size)
|
||||||
{
|
{
|
||||||
if (resource == NULL)
|
|
||||||
return;
|
|
||||||
resource->flags &= ~(IORESOURCE_AUTO | IORESOURCE_UNSET);
|
resource->flags &= ~(IORESOURCE_AUTO | IORESOURCE_UNSET);
|
||||||
resource->start = start;
|
resource->start = start;
|
||||||
resource->end = start + size - 1;
|
resource->end = start + size - 1;
|
||||||
|
@ -248,9 +248,9 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
|
|||||||
num++;
|
num++;
|
||||||
|
|
||||||
return AE_OK;
|
return AE_OK;
|
||||||
err1:
|
err1:
|
||||||
kfree(dev_id);
|
kfree(dev_id);
|
||||||
err:
|
err:
|
||||||
kfree(dev);
|
kfree(dev);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -34,19 +34,17 @@
|
|||||||
*/
|
*/
|
||||||
static int irq_flags(int triggering, int polarity)
|
static int irq_flags(int triggering, int polarity)
|
||||||
{
|
{
|
||||||
int flag;
|
|
||||||
if (triggering == ACPI_LEVEL_SENSITIVE) {
|
if (triggering == ACPI_LEVEL_SENSITIVE) {
|
||||||
if (polarity == ACPI_ACTIVE_LOW)
|
if (polarity == ACPI_ACTIVE_LOW)
|
||||||
flag = IORESOURCE_IRQ_LOWLEVEL;
|
return IORESOURCE_IRQ_LOWLEVEL;
|
||||||
else
|
else
|
||||||
flag = IORESOURCE_IRQ_HIGHLEVEL;
|
return IORESOURCE_IRQ_HIGHLEVEL;
|
||||||
} else {
|
} else {
|
||||||
if (polarity == ACPI_ACTIVE_LOW)
|
if (polarity == ACPI_ACTIVE_LOW)
|
||||||
flag = IORESOURCE_IRQ_LOWEDGE;
|
return IORESOURCE_IRQ_LOWEDGE;
|
||||||
else
|
else
|
||||||
flag = IORESOURCE_IRQ_HIGHEDGE;
|
return IORESOURCE_IRQ_HIGHEDGE;
|
||||||
}
|
}
|
||||||
return flag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void decode_irq_flags(int flag, int *triggering, int *polarity)
|
static void decode_irq_flags(int flag, int *triggering, int *polarity)
|
||||||
@ -242,8 +240,7 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_resource_table *res
|
|||||||
static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
|
static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct pnp_resource_table *res_table =
|
struct pnp_resource_table *res_table = data;
|
||||||
(struct pnp_resource_table *)data;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (res->type) {
|
switch (res->type) {
|
||||||
@ -566,8 +563,7 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
|
|||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
int priority = 0;
|
int priority = 0;
|
||||||
struct acpipnp_parse_option_s *parse_data =
|
struct acpipnp_parse_option_s *parse_data = data;
|
||||||
(struct acpipnp_parse_option_s *)data;
|
|
||||||
struct pnp_dev *dev = parse_data->dev;
|
struct pnp_dev *dev = parse_data->dev;
|
||||||
struct pnp_option *option = parse_data->option;
|
struct pnp_option *option = parse_data->option;
|
||||||
|
|
||||||
@ -705,7 +701,7 @@ static int pnpacpi_supported_resource(struct acpi_resource *res)
|
|||||||
static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
|
static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
int *res_cnt = (int *)data;
|
int *res_cnt = data;
|
||||||
|
|
||||||
if (pnpacpi_supported_resource(res))
|
if (pnpacpi_supported_resource(res))
|
||||||
(*res_cnt)++;
|
(*res_cnt)++;
|
||||||
@ -714,7 +710,7 @@ static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
|
|||||||
|
|
||||||
static acpi_status pnpacpi_type_resources(struct acpi_resource *res, void *data)
|
static acpi_status pnpacpi_type_resources(struct acpi_resource *res, void *data)
|
||||||
{
|
{
|
||||||
struct acpi_resource **resource = (struct acpi_resource **)data;
|
struct acpi_resource **resource = data;
|
||||||
|
|
||||||
if (pnpacpi_supported_resource(res)) {
|
if (pnpacpi_supported_resource(res)) {
|
||||||
(*resource)->type = res->type;
|
(*resource)->type = res->type;
|
||||||
@ -886,8 +882,7 @@ int pnpacpi_encode_resources(struct pnp_resource_table *res_table,
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
/* pnpacpi_build_resource_template allocates extra mem */
|
/* pnpacpi_build_resource_template allocates extra mem */
|
||||||
int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
|
int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
|
||||||
struct acpi_resource *resource =
|
struct acpi_resource *resource = buffer->pointer;
|
||||||
(struct acpi_resource *)buffer->pointer;
|
|
||||||
int port = 0, irq = 0, dma = 0, mem = 0;
|
int port = 0, irq = 0, dma = 0, mem = 0;
|
||||||
|
|
||||||
pnp_dbg("res cnt %d", res_cnt);
|
pnp_dbg("res cnt %d", res_cnt);
|
||||||
|
@ -419,7 +419,6 @@ static void __init build_devlist(void)
|
|||||||
static int pnpbios_disabled;
|
static int pnpbios_disabled;
|
||||||
int pnpbios_dont_use_current_config;
|
int pnpbios_dont_use_current_config;
|
||||||
|
|
||||||
#ifndef MODULE
|
|
||||||
static int __init pnpbios_setup(char *str)
|
static int __init pnpbios_setup(char *str)
|
||||||
{
|
{
|
||||||
int invert;
|
int invert;
|
||||||
@ -443,7 +442,6 @@ static int __init pnpbios_setup(char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
__setup("pnpbios=", pnpbios_setup);
|
__setup("pnpbios=", pnpbios_setup);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* PnP BIOS signature: "$PnP" */
|
/* PnP BIOS signature: "$PnP" */
|
||||||
#define PNP_SIGNATURE (('$' << 0) + ('P' << 8) + ('n' << 16) + ('P' << 24))
|
#define PNP_SIGNATURE (('$' << 0) + ('P' << 8) + ('n' << 16) + ('P' << 24))
|
||||||
@ -591,6 +589,7 @@ subsys_initcall(pnpbios_init);
|
|||||||
static int __init pnpbios_thread_init(void)
|
static int __init pnpbios_thread_init(void)
|
||||||
{
|
{
|
||||||
struct task_struct *task;
|
struct task_struct *task;
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_MERGE)
|
#if defined(CONFIG_PPC_MERGE)
|
||||||
if (check_legacy_ioport(PNPBIOS_BASE))
|
if (check_legacy_ioport(PNPBIOS_BASE))
|
||||||
return 0;
|
return 0;
|
||||||
@ -606,48 +605,7 @@ static int __init pnpbios_thread_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MODULE
|
|
||||||
|
|
||||||
/* init/main.c calls pnpbios_init early */
|
|
||||||
|
|
||||||
/* Start the kernel thread later: */
|
/* Start the kernel thread later: */
|
||||||
module_init(pnpbios_thread_init);
|
module_init(pnpbios_thread_init);
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/*
|
|
||||||
* N.B.: Building pnpbios as a module hasn't been fully implemented
|
|
||||||
*/
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
static int __init pnpbios_init_all(void)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
r = pnpbios_init();
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
r = pnpbios_thread_init();
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit pnpbios_exit(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_HOTPLUG
|
|
||||||
unloading = 1;
|
|
||||||
wait_for_completion(&unload_sem);
|
|
||||||
#endif
|
|
||||||
pnpbios_proc_exit();
|
|
||||||
/* We ought to free resources here */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(pnpbios_init_all);
|
|
||||||
module_exit(pnpbios_exit);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(pnpbios_protocol);
|
EXPORT_SYMBOL(pnpbios_protocol);
|
||||||
|
@ -212,7 +212,7 @@ static int proc_write_node(struct file *file, const char __user * buf,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ret = count;
|
ret = count;
|
||||||
out:
|
out:
|
||||||
kfree(node);
|
kfree(node);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ static unsigned char *pnpbios_parse_allocated_resource_data(unsigned char *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
@ -298,6 +298,7 @@ static void pnpbios_parse_fixed_mem32_option(unsigned char *p, int size,
|
|||||||
struct pnp_option *option)
|
struct pnp_option *option)
|
||||||
{
|
{
|
||||||
struct pnp_mem *mem;
|
struct pnp_mem *mem;
|
||||||
|
|
||||||
mem = kzalloc(sizeof(struct pnp_mem), GFP_KERNEL);
|
mem = kzalloc(sizeof(struct pnp_mem), GFP_KERNEL);
|
||||||
if (!mem)
|
if (!mem)
|
||||||
return;
|
return;
|
||||||
@ -468,7 +469,7 @@ static unsigned char *pnpbios_parse_resource_option_data(unsigned char *p,
|
|||||||
return p + 2;
|
return p + 2;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
@ -562,7 +563,7 @@ static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
@ -756,7 +757,7 @@ static unsigned char *pnpbios_encode_allocated_resource_data(unsigned char *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
|
@ -47,9 +47,6 @@ struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
struct pnp_option *option;
|
struct pnp_option *option;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
option = pnp_build_option(PNP_RES_PRIORITY_PREFERRED);
|
option = pnp_build_option(PNP_RES_PRIORITY_PREFERRED);
|
||||||
|
|
||||||
/* this should never happen but if it does we'll try to continue */
|
/* this should never happen but if it does we'll try to continue */
|
||||||
@ -64,9 +61,6 @@ struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev,
|
|||||||
{
|
{
|
||||||
struct pnp_option *option;
|
struct pnp_option *option;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
option = pnp_build_option(priority);
|
option = pnp_build_option(priority);
|
||||||
|
|
||||||
if (dev->dependent) {
|
if (dev->dependent) {
|
||||||
@ -83,11 +77,6 @@ int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data)
|
|||||||
{
|
{
|
||||||
struct pnp_irq *ptr;
|
struct pnp_irq *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->irq;
|
ptr = option->irq;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
@ -112,11 +101,6 @@ int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data)
|
|||||||
{
|
{
|
||||||
struct pnp_dma *ptr;
|
struct pnp_dma *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->dma;
|
ptr = option->dma;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
@ -132,11 +116,6 @@ int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data)
|
|||||||
{
|
{
|
||||||
struct pnp_port *ptr;
|
struct pnp_port *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->port;
|
ptr = option->port;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
@ -152,11 +131,6 @@ int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data)
|
|||||||
{
|
{
|
||||||
struct pnp_mem *ptr;
|
struct pnp_mem *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->mem;
|
ptr = option->mem;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
|
@ -321,8 +321,7 @@ struct acpi_bus_event {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern struct kset acpi_subsys;
|
extern struct kset acpi_subsys;
|
||||||
extern int acpi_bus_generate_genetlink_event(struct acpi_device *device,
|
extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int);
|
||||||
u8 type, int data);
|
|
||||||
/*
|
/*
|
||||||
* External Functions
|
* External Functions
|
||||||
*/
|
*/
|
||||||
@ -332,8 +331,13 @@ void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context);
|
|||||||
int acpi_bus_get_status(struct acpi_device *device);
|
int acpi_bus_get_status(struct acpi_device *device);
|
||||||
int acpi_bus_get_power(acpi_handle handle, int *state);
|
int acpi_bus_get_power(acpi_handle handle, int *state);
|
||||||
int acpi_bus_set_power(acpi_handle handle, int state);
|
int acpi_bus_set_power(acpi_handle handle, int state);
|
||||||
int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data);
|
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||||
|
int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data);
|
||||||
int acpi_bus_receive_event(struct acpi_bus_event *event);
|
int acpi_bus_receive_event(struct acpi_bus_event *event);
|
||||||
|
#else
|
||||||
|
static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data)
|
||||||
|
{ return 0; }
|
||||||
|
#endif
|
||||||
int acpi_bus_register_driver(struct acpi_driver *driver);
|
int acpi_bus_register_driver(struct acpi_driver *driver);
|
||||||
void acpi_bus_unregister_driver(struct acpi_driver *driver);
|
void acpi_bus_unregister_driver(struct acpi_driver *driver);
|
||||||
int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
|
int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
|
||||||
|
@ -130,7 +130,7 @@ acpi_walk_namespace(acpi_object_type type,
|
|||||||
void *context, void **return_value);
|
void *context, void **return_value);
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_get_devices(char *HID,
|
acpi_get_devices(const char *HID,
|
||||||
acpi_walk_callback user_function,
|
acpi_walk_callback user_function,
|
||||||
void *context, void **return_value);
|
void *context, void **return_value);
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ struct acpi_init_walk_info {
|
|||||||
struct acpi_get_devices_info {
|
struct acpi_get_devices_info {
|
||||||
acpi_walk_callback user_function;
|
acpi_walk_callback user_function;
|
||||||
void *context;
|
void *context;
|
||||||
char *hid;
|
const char *hid;
|
||||||
};
|
};
|
||||||
|
|
||||||
union acpi_aml_operands {
|
union acpi_aml_operands {
|
||||||
|
@ -150,7 +150,6 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq);
|
|||||||
|
|
||||||
#else /* !CONFIG_X86_IO_APIC */
|
#else /* !CONFIG_X86_IO_APIC */
|
||||||
#define io_apic_assign_pci_irqs 0
|
#define io_apic_assign_pci_irqs 0
|
||||||
static inline void disable_ioapic_setup(void) { }
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -109,6 +109,12 @@ extern int mpc_default_type;
|
|||||||
/* 1 if "noapic" boot option passed */
|
/* 1 if "noapic" boot option passed */
|
||||||
extern int skip_ioapic_setup;
|
extern int skip_ioapic_setup;
|
||||||
|
|
||||||
|
static inline void disable_ioapic_setup(void)
|
||||||
|
{
|
||||||
|
skip_ioapic_setup = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we use the IO-APIC for IRQ routing, disable automatic
|
* If we use the IO-APIC for IRQ routing, disable automatic
|
||||||
* assignment of PCI IRQ's.
|
* assignment of PCI IRQ's.
|
||||||
|
@ -363,6 +363,12 @@ struct input_absinfo {
|
|||||||
|
|
||||||
#define KEY_UNKNOWN 240
|
#define KEY_UNKNOWN 240
|
||||||
|
|
||||||
|
#define KEY_VIDEO_NEXT 241 /* drive next video source */
|
||||||
|
#define KEY_VIDEO_PREV 242 /* drive previous video source */
|
||||||
|
#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
|
||||||
|
#define KEY_BRIGHTNESS_ZERO 244 /* brightness off, use ambient */
|
||||||
|
#define KEY_DISPLAY_OFF 245 /* display device to off state */
|
||||||
|
|
||||||
#define BTN_MISC 0x100
|
#define BTN_MISC 0x100
|
||||||
#define BTN_0 0x100
|
#define BTN_0 0x100
|
||||||
#define BTN_1 0x101
|
#define BTN_1 0x101
|
||||||
|
12
init/main.c
12
init/main.c
@ -146,9 +146,14 @@ static unsigned int __initdata max_cpus = NR_CPUS;
|
|||||||
* greater than 0, limits the maximum number of CPUs activated in
|
* greater than 0, limits the maximum number of CPUs activated in
|
||||||
* SMP mode to <NUM>.
|
* SMP mode to <NUM>.
|
||||||
*/
|
*/
|
||||||
|
#ifndef CONFIG_X86_IO_APIC
|
||||||
|
static inline void disable_ioapic_setup(void) {};
|
||||||
|
#endif
|
||||||
|
|
||||||
static int __init nosmp(char *str)
|
static int __init nosmp(char *str)
|
||||||
{
|
{
|
||||||
max_cpus = 0;
|
max_cpus = 0;
|
||||||
|
disable_ioapic_setup();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,10 +162,13 @@ early_param("nosmp", nosmp);
|
|||||||
static int __init maxcpus(char *str)
|
static int __init maxcpus(char *str)
|
||||||
{
|
{
|
||||||
get_option(&str, &max_cpus);
|
get_option(&str, &max_cpus);
|
||||||
return 1;
|
if (max_cpus == 0)
|
||||||
|
disable_ioapic_setup();
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__setup("maxcpus=", maxcpus);
|
early_param("maxcpus=", maxcpus);
|
||||||
#else
|
#else
|
||||||
#define max_cpus NR_CPUS
|
#define max_cpus NR_CPUS
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user