Pull sysfs into test branch
Conflicts: Documentation/feature-removal-schedule.txt include/acpi/acpi_drivers.h Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@@ -274,6 +274,7 @@ Who: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
<<<<<<< test:Documentation/feature-removal-schedule.txt
|
||||||
What: ACPI hotkey driver (CONFIG_ACPI_HOTKEY)
|
What: ACPI hotkey driver (CONFIG_ACPI_HOTKEY)
|
||||||
When: 2.6.21
|
When: 2.6.21
|
||||||
Why: hotkey.c was an attempt to consolidate multiple drivers that use
|
Why: hotkey.c was an attempt to consolidate multiple drivers that use
|
||||||
@@ -306,11 +307,18 @@ Why: The ACPI namespace is effectively the symbol list for
|
|||||||
the BIOS can be extracted and disassembled with acpidump
|
the BIOS can be extracted and disassembled with acpidump
|
||||||
and iasl as documented in the pmtools package here:
|
and iasl as documented in the pmtools package here:
|
||||||
http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/utils
|
http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/utils
|
||||||
|
|
||||||
Who: Len Brown <len.brown@intel.com>
|
Who: Len Brown <len.brown@intel.com>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: ACPI procfs interface
|
||||||
|
When: July 2007
|
||||||
|
Why: After ACPI sysfs conversion, ACPI attributes will be duplicated
|
||||||
|
in sysfs and the ACPI procfs interface should be removed.
|
||||||
|
Who: Zhang Rui <rui.zhang@intel.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
What: /proc/acpi/button
|
What: /proc/acpi/button
|
||||||
When: August 2007
|
When: August 2007
|
||||||
Why: /proc/acpi/button has been replaced by events to the input layer
|
Why: /proc/acpi/button has been replaced by events to the input layer
|
||||||
|
@@ -77,6 +77,20 @@ config ACPI_SLEEP_PROC_SLEEP
|
|||||||
Create /proc/acpi/sleep
|
Create /proc/acpi/sleep
|
||||||
Deprecated by /sys/power/state
|
Deprecated by /sys/power/state
|
||||||
|
|
||||||
|
config ACPI_PROCFS
|
||||||
|
bool "Procfs interface (deprecated)"
|
||||||
|
depends on ACPI
|
||||||
|
default y
|
||||||
|
---help---
|
||||||
|
Procfs interface for ACPI is made optional for back-compatible.
|
||||||
|
As the same functions are duplicated in sysfs interface
|
||||||
|
and this proc interface will be removed some time later,
|
||||||
|
it's marked as deprecated.
|
||||||
|
( /proc/acpi/debug_layer && debug_level are deprecated by
|
||||||
|
/sys/module/acpi/parameters/debug_layer && debug_level.
|
||||||
|
/proc/acpi/info is deprecated by
|
||||||
|
/sys/module/acpi/parameters/acpica_version )
|
||||||
|
|
||||||
config ACPI_AC
|
config ACPI_AC
|
||||||
tristate "AC Adapter"
|
tristate "AC Adapter"
|
||||||
depends on X86
|
depends on X86
|
||||||
|
@@ -37,6 +37,7 @@ endif
|
|||||||
|
|
||||||
obj-y += sleep/
|
obj-y += sleep/
|
||||||
obj-y += bus.o glue.o
|
obj-y += bus.o glue.o
|
||||||
|
obj-y += scan.o motherboard.o
|
||||||
obj-$(CONFIG_ACPI_AC) += ac.o
|
obj-$(CONFIG_ACPI_AC) += ac.o
|
||||||
obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
||||||
obj-$(CONFIG_ACPI_BUTTON) += button.o
|
obj-$(CONFIG_ACPI_BUTTON) += button.o
|
||||||
@@ -57,7 +58,6 @@ obj-$(CONFIG_ACPI_NUMA) += numa.o
|
|||||||
obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o
|
obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o
|
||||||
obj-$(CONFIG_ACPI_IBM) += ibm_acpi.o
|
obj-$(CONFIG_ACPI_IBM) += ibm_acpi.o
|
||||||
obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o
|
obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o
|
||||||
obj-y += scan.o motherboard.o
|
|
||||||
obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o
|
obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o
|
||||||
obj-y += cm_sbs.o
|
obj-y += cm_sbs.o
|
||||||
obj-$(CONFIG_ACPI_SBS) += i2c_ec.o sbs.o
|
obj-$(CONFIG_ACPI_SBS) += i2c_ec.o sbs.o
|
||||||
|
@@ -64,7 +64,7 @@ extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
|
|||||||
|
|
||||||
static int acpi_battery_add(struct acpi_device *device);
|
static int acpi_battery_add(struct acpi_device *device);
|
||||||
static int acpi_battery_remove(struct acpi_device *device, int type);
|
static int acpi_battery_remove(struct acpi_device *device, int type);
|
||||||
static int acpi_battery_resume(struct acpi_device *device, int status);
|
static int acpi_battery_resume(struct acpi_device *device);
|
||||||
|
|
||||||
static struct acpi_driver acpi_battery_driver = {
|
static struct acpi_driver acpi_battery_driver = {
|
||||||
.name = ACPI_BATTERY_DRIVER_NAME,
|
.name = ACPI_BATTERY_DRIVER_NAME,
|
||||||
@@ -753,7 +753,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* this is needed to learn about changes made in suspended state */
|
/* this is needed to learn about changes made in suspended state */
|
||||||
static int acpi_battery_resume(struct acpi_device *device, int state)
|
static int acpi_battery_resume(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
struct acpi_battery *battery;
|
struct acpi_battery *battery;
|
||||||
|
|
||||||
|
@@ -192,7 +192,7 @@ int acpi_bus_set_power(acpi_handle handle, int state)
|
|||||||
|
|
||||||
if (!device->flags.power_manageable) {
|
if (!device->flags.power_manageable) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device `[%s]' is not power manageable\n",
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device `[%s]' is not power manageable\n",
|
||||||
device->kobj.name));
|
device->dev.kobj.name));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@@ -75,7 +75,7 @@ static int acpi_button_state_open_fs(struct inode *inode, struct file *file);
|
|||||||
static struct acpi_driver acpi_button_driver = {
|
static struct acpi_driver acpi_button_driver = {
|
||||||
.name = ACPI_BUTTON_DRIVER_NAME,
|
.name = ACPI_BUTTON_DRIVER_NAME,
|
||||||
.class = ACPI_BUTTON_CLASS,
|
.class = ACPI_BUTTON_CLASS,
|
||||||
.ids = "ACPI_FPB,ACPI_FSB,PNP0C0D,PNP0C0C,PNP0C0E",
|
.ids = "button_power,button_sleep,PNP0C0D,PNP0C0C,PNP0C0E",
|
||||||
.ops = {
|
.ops = {
|
||||||
.add = acpi_button_add,
|
.add = acpi_button_add,
|
||||||
.remove = acpi_button_remove,
|
.remove = acpi_button_remove,
|
||||||
|
@@ -167,7 +167,7 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context)
|
|||||||
if (ACPI_FAILURE(status) || !device) {
|
if (ACPI_FAILURE(status) || !device) {
|
||||||
result = container_device_add(&device, handle);
|
result = container_device_add(&device, handle);
|
||||||
if (!result)
|
if (!result)
|
||||||
kobject_uevent(&device->kobj,
|
kobject_uevent(&device->dev.kobj,
|
||||||
KOBJ_ONLINE);
|
KOBJ_ONLINE);
|
||||||
else
|
else
|
||||||
printk("Failed to add container\n");
|
printk("Failed to add container\n");
|
||||||
@@ -175,13 +175,13 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context)
|
|||||||
} else {
|
} else {
|
||||||
if (ACPI_SUCCESS(status)) {
|
if (ACPI_SUCCESS(status)) {
|
||||||
/* device exist and this is a remove request */
|
/* device exist and this is a remove request */
|
||||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ACPI_NOTIFY_EJECT_REQUEST:
|
case ACPI_NOTIFY_EJECT_REQUEST:
|
||||||
if (!acpi_bus_get_device(handle, &device) && device) {
|
if (!acpi_bus_get_device(handle, &device) && device) {
|
||||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -13,14 +13,11 @@
|
|||||||
|
|
||||||
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
||||||
ACPI_MODULE_NAME("debug")
|
ACPI_MODULE_NAME("debug")
|
||||||
#define ACPI_SYSTEM_FILE_DEBUG_LAYER "debug_layer"
|
|
||||||
#define ACPI_SYSTEM_FILE_DEBUG_LEVEL "debug_level"
|
|
||||||
#ifdef MODULE_PARAM_PREFIX
|
#ifdef MODULE_PARAM_PREFIX
|
||||||
#undef MODULE_PARAM_PREFIX
|
#undef MODULE_PARAM_PREFIX
|
||||||
#endif
|
#endif
|
||||||
#define MODULE_PARAM_PREFIX
|
#define MODULE_PARAM_PREFIX "acpi."
|
||||||
module_param(acpi_dbg_layer, uint, 0400);
|
|
||||||
module_param(acpi_dbg_level, uint, 0400);
|
|
||||||
|
|
||||||
struct acpi_dlayer {
|
struct acpi_dlayer {
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -86,6 +83,60 @@ static const struct acpi_dlevel acpi_debug_levels[] = {
|
|||||||
ACPI_DEBUG_INIT(ACPI_LV_EVENTS),
|
ACPI_DEBUG_INIT(ACPI_LV_EVENTS),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------
|
||||||
|
FS Interface (/sys)
|
||||||
|
-------------------------------------------------------------------------- */
|
||||||
|
static int param_get_debug_layer(char *buffer, struct kernel_param *kp) {
|
||||||
|
int result = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
result = sprintf(buffer, "%-25s\tHex SET\n", "Description");
|
||||||
|
|
||||||
|
for(i = 0; i <ARRAY_SIZE(acpi_debug_layers); i++) {
|
||||||
|
result += sprintf(buffer+result, "%-25s\t0x%08lX [%c]\n",
|
||||||
|
acpi_debug_layers[i].name,
|
||||||
|
acpi_debug_layers[i].value,
|
||||||
|
(acpi_dbg_layer & acpi_debug_layers[i].value) ? '*' : ' ');
|
||||||
|
}
|
||||||
|
result += sprintf(buffer+result, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS",
|
||||||
|
ACPI_ALL_DRIVERS,
|
||||||
|
(acpi_dbg_layer & ACPI_ALL_DRIVERS) ==
|
||||||
|
ACPI_ALL_DRIVERS ? '*' : (acpi_dbg_layer &
|
||||||
|
ACPI_ALL_DRIVERS) == 0 ? ' ' : '-');
|
||||||
|
result += sprintf(buffer+result, "--\ndebug_layer = 0x%08X ( * = enabled)\n", acpi_dbg_layer);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int param_get_debug_level(char *buffer, struct kernel_param *kp) {
|
||||||
|
int result = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
result = sprintf(buffer, "%-25s\tHex SET\n", "Description");
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(acpi_debug_levels); i++) {
|
||||||
|
result += sprintf(buffer+result, "%-25s\t0x%08lX [%c]\n",
|
||||||
|
acpi_debug_levels[i].name,
|
||||||
|
acpi_debug_levels[i].value,
|
||||||
|
(acpi_dbg_level & acpi_debug_levels[i].
|
||||||
|
value) ? '*' : ' ');
|
||||||
|
}
|
||||||
|
result += sprintf(buffer+result, "--\ndebug_level = 0x%08X (* = enabled)\n",
|
||||||
|
acpi_dbg_level);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
module_param_call(debug_layer, param_set_uint, param_get_debug_layer, &acpi_dbg_layer, 0644);
|
||||||
|
module_param_call(debug_level, param_set_uint, param_get_debug_level, &acpi_dbg_level, 0644);
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------
|
||||||
|
FS Interface (/proc)
|
||||||
|
-------------------------------------------------------------------------- */
|
||||||
|
#ifdef CONFIG_ACPI_PROCFS
|
||||||
|
#define ACPI_SYSTEM_FILE_DEBUG_LAYER "debug_layer"
|
||||||
|
#define ACPI_SYSTEM_FILE_DEBUG_LEVEL "debug_level"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
acpi_system_read_debug(char *page,
|
acpi_system_read_debug(char *page,
|
||||||
char **start, off_t off, int count, int *eof, void *data)
|
char **start, off_t off, int count, int *eof, void *data)
|
||||||
@@ -221,3 +272,4 @@ static int __init acpi_debug_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
subsys_initcall(acpi_debug_init);
|
subsys_initcall(acpi_debug_init);
|
||||||
|
#endif
|
||||||
|
@@ -48,8 +48,8 @@ MODULE_LICENSE("GPL");
|
|||||||
|
|
||||||
static int acpi_fan_add(struct acpi_device *device);
|
static int acpi_fan_add(struct acpi_device *device);
|
||||||
static int acpi_fan_remove(struct acpi_device *device, int type);
|
static int acpi_fan_remove(struct acpi_device *device, int type);
|
||||||
static int acpi_fan_suspend(struct acpi_device *device, int state);
|
static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state);
|
||||||
static int acpi_fan_resume(struct acpi_device *device, int state);
|
static int acpi_fan_resume(struct acpi_device *device);
|
||||||
|
|
||||||
static struct acpi_driver acpi_fan_driver = {
|
static struct acpi_driver acpi_fan_driver = {
|
||||||
.name = ACPI_FAN_DRIVER_NAME,
|
.name = ACPI_FAN_DRIVER_NAME,
|
||||||
@@ -237,7 +237,7 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_fan_suspend(struct acpi_device *device, int state)
|
static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state)
|
||||||
{
|
{
|
||||||
if (!device)
|
if (!device)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -247,7 +247,7 @@ static int acpi_fan_suspend(struct acpi_device *device, int state)
|
|||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_fan_resume(struct acpi_device *device, int state)
|
static int acpi_fan_resume(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
int power_state = 0;
|
int power_state = 0;
|
||||||
|
@@ -33,8 +33,7 @@
|
|||||||
ACPI_MODULE_NAME("acpi_motherboard")
|
ACPI_MODULE_NAME("acpi_motherboard")
|
||||||
|
|
||||||
/* Dell use PNP0C01 instead of PNP0C02 */
|
/* Dell use PNP0C01 instead of PNP0C02 */
|
||||||
#define ACPI_MB_HID1 "PNP0C01"
|
#define ACPI_MB_HID "PNP0C01,PNP0C02"
|
||||||
#define ACPI_MB_HID2 "PNP0C02"
|
|
||||||
/**
|
/**
|
||||||
* Doesn't care about legacy IO ports, only IO ports beyond 0x1000 are reserved
|
* Doesn't care about legacy IO ports, only IO ports beyond 0x1000 are reserved
|
||||||
* Doesn't care about the failure of 'request_region', since other may reserve
|
* Doesn't care about the failure of 'request_region', since other may reserve
|
||||||
@@ -110,19 +109,10 @@ static int acpi_motherboard_add(struct acpi_device *device)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct acpi_driver acpi_motherboard_driver1 = {
|
static struct acpi_driver acpi_motherboard_driver = {
|
||||||
.name = "motherboard",
|
.name = "motherboard",
|
||||||
.class = "",
|
.class = "",
|
||||||
.ids = ACPI_MB_HID1,
|
.ids = ACPI_MB_HID,
|
||||||
.ops = {
|
|
||||||
.add = acpi_motherboard_add,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct acpi_driver acpi_motherboard_driver2 = {
|
|
||||||
.name = "motherboard",
|
|
||||||
.class = "",
|
|
||||||
.ids = ACPI_MB_HID2,
|
|
||||||
.ops = {
|
.ops = {
|
||||||
.add = acpi_motherboard_add,
|
.add = acpi_motherboard_add,
|
||||||
},
|
},
|
||||||
@@ -173,8 +163,7 @@ static void __init acpi_reserve_resources(void)
|
|||||||
|
|
||||||
static int __init acpi_motherboard_init(void)
|
static int __init acpi_motherboard_init(void)
|
||||||
{
|
{
|
||||||
acpi_bus_register_driver(&acpi_motherboard_driver1);
|
acpi_bus_register_driver(&acpi_motherboard_driver);
|
||||||
acpi_bus_register_driver(&acpi_motherboard_driver2);
|
|
||||||
/*
|
/*
|
||||||
* Guarantee motherboard IO reservation first
|
* Guarantee motherboard IO reservation first
|
||||||
* This module must run after scan.c
|
* This module must run after scan.c
|
||||||
|
@@ -165,6 +165,21 @@ static acpi_status try_get_root_bridge_busnr(acpi_handle handle, int *busnum)
|
|||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void acpi_pci_bridge_scan(struct acpi_device *device)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
struct acpi_device *child = NULL;
|
||||||
|
|
||||||
|
if (device->flags.bus_address)
|
||||||
|
if (device->parent && device->parent->ops.bind) {
|
||||||
|
status = device->parent->ops.bind(device);
|
||||||
|
if (!status) {
|
||||||
|
list_for_each_entry(child, &device->children, node)
|
||||||
|
acpi_pci_bridge_scan(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int acpi_pci_root_add(struct acpi_device *device)
|
static int acpi_pci_root_add(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
@@ -173,6 +188,7 @@ static int acpi_pci_root_add(struct acpi_device *device)
|
|||||||
acpi_status status = AE_OK;
|
acpi_status status = AE_OK;
|
||||||
unsigned long value = 0;
|
unsigned long value = 0;
|
||||||
acpi_handle handle = NULL;
|
acpi_handle handle = NULL;
|
||||||
|
struct acpi_device *child;
|
||||||
|
|
||||||
|
|
||||||
if (!device)
|
if (!device)
|
||||||
@@ -188,9 +204,6 @@ static int acpi_pci_root_add(struct acpi_device *device)
|
|||||||
strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
|
strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
|
||||||
acpi_driver_data(device) = root;
|
acpi_driver_data(device) = root;
|
||||||
|
|
||||||
/*
|
|
||||||
* TBD: Doesn't the bus driver automatically set this?
|
|
||||||
*/
|
|
||||||
device->ops.bind = acpi_pci_bind;
|
device->ops.bind = acpi_pci_bind;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -312,6 +325,12 @@ static int acpi_pci_root_add(struct acpi_device *device)
|
|||||||
result = acpi_pci_irq_add_prt(device->handle, root->id.segment,
|
result = acpi_pci_irq_add_prt(device->handle, root->id.segment,
|
||||||
root->id.bus);
|
root->id.bus);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Scan and bind all _ADR-Based Devices
|
||||||
|
*/
|
||||||
|
list_for_each_entry(child, &device->children, node)
|
||||||
|
acpi_pci_bridge_scan(child);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (result) {
|
if (result) {
|
||||||
if (!list_empty(&root->node))
|
if (!list_empty(&root->node))
|
||||||
|
@@ -814,7 +814,7 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
|
if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
|
||||||
kobject_uevent(&(*device)->kobj, KOBJ_ONLINE);
|
kobject_uevent(&(*device)->dev.kobj, KOBJ_ONLINE);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -852,13 +852,13 @@ acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pr->id >= 0 && (pr->id < NR_CPUS)) {
|
if (pr->id >= 0 && (pr->id < NR_CPUS)) {
|
||||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = acpi_processor_start(device);
|
result = acpi_processor_start(device);
|
||||||
if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) {
|
if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) {
|
||||||
kobject_uevent(&device->kobj, KOBJ_ONLINE);
|
kobject_uevent(&device->dev.kobj, KOBJ_ONLINE);
|
||||||
} else {
|
} else {
|
||||||
printk(KERN_ERR PREFIX "Device [%s] failed to start\n",
|
printk(KERN_ERR PREFIX "Device [%s] failed to start\n",
|
||||||
acpi_device_bid(device));
|
acpi_device_bid(device));
|
||||||
@@ -881,7 +881,7 @@ acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((pr->id < NR_CPUS) && (cpu_present(pr->id)))
|
if ((pr->id < NR_CPUS) && (cpu_present(pr->id)))
|
||||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||||
|
1228
drivers/acpi/scan.c
1228
drivers/acpi/scan.c
File diff suppressed because it is too large
Load Diff
@@ -32,6 +32,11 @@
|
|||||||
|
|
||||||
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
||||||
ACPI_MODULE_NAME("acpi_system")
|
ACPI_MODULE_NAME("acpi_system")
|
||||||
|
#ifdef MODULE_PARAM_PREFIX
|
||||||
|
#undef MODULE_PARAM_PREFIX
|
||||||
|
#endif
|
||||||
|
#define MODULE_PARAM_PREFIX "acpi."
|
||||||
|
|
||||||
#define ACPI_SYSTEM_CLASS "system"
|
#define ACPI_SYSTEM_CLASS "system"
|
||||||
#define ACPI_SYSTEM_DRIVER_NAME "ACPI System Driver"
|
#define ACPI_SYSTEM_DRIVER_NAME "ACPI System Driver"
|
||||||
#define ACPI_SYSTEM_DEVICE_NAME "System"
|
#define ACPI_SYSTEM_DEVICE_NAME "System"
|
||||||
@@ -40,9 +45,23 @@ ACPI_MODULE_NAME("acpi_system")
|
|||||||
#define ACPI_SYSTEM_FILE_DSDT "dsdt"
|
#define ACPI_SYSTEM_FILE_DSDT "dsdt"
|
||||||
#define ACPI_SYSTEM_FILE_FADT "fadt"
|
#define ACPI_SYSTEM_FILE_FADT "fadt"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make ACPICA version work as module param
|
||||||
|
*/
|
||||||
|
static int param_get_acpica_version(char *buffer, struct kernel_param *kp) {
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = sprintf(buffer, "%x", ACPI_CA_VERSION);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
module_param_call(acpica_version, NULL, param_get_acpica_version, NULL, 0444);
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
FS Interface (/proc)
|
FS Interface (/proc)
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
|
#ifdef CONFIG_ACPI_PROCFS
|
||||||
|
|
||||||
static int acpi_system_read_info(struct seq_file *seq, void *offset)
|
static int acpi_system_read_info(struct seq_file *seq, void *offset)
|
||||||
{
|
{
|
||||||
@@ -62,6 +81,7 @@ static const struct file_operations acpi_system_info_ops = {
|
|||||||
.llseek = seq_lseek,
|
.llseek = seq_lseek,
|
||||||
.release = single_release,
|
.release = single_release,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static ssize_t acpi_system_read_dsdt(struct file *, char __user *, size_t,
|
static ssize_t acpi_system_read_dsdt(struct file *, char __user *, size_t,
|
||||||
loff_t *);
|
loff_t *);
|
||||||
@@ -125,6 +145,7 @@ static int __init acpi_system_init(void)
|
|||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_PROCFS
|
||||||
/* 'info' [R] */
|
/* 'info' [R] */
|
||||||
name = ACPI_SYSTEM_FILE_INFO;
|
name = ACPI_SYSTEM_FILE_INFO;
|
||||||
entry = create_proc_entry(name, S_IRUGO, acpi_root_dir);
|
entry = create_proc_entry(name, S_IRUGO, acpi_root_dir);
|
||||||
@@ -133,6 +154,7 @@ static int __init acpi_system_init(void)
|
|||||||
else {
|
else {
|
||||||
entry->proc_fops = &acpi_system_info_ops;
|
entry->proc_fops = &acpi_system_info_ops;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 'dsdt' [R] */
|
/* 'dsdt' [R] */
|
||||||
name = ACPI_SYSTEM_FILE_DSDT;
|
name = ACPI_SYSTEM_FILE_DSDT;
|
||||||
@@ -156,7 +178,9 @@ static int __init acpi_system_init(void)
|
|||||||
Error:
|
Error:
|
||||||
remove_proc_entry(ACPI_SYSTEM_FILE_FADT, acpi_root_dir);
|
remove_proc_entry(ACPI_SYSTEM_FILE_FADT, acpi_root_dir);
|
||||||
remove_proc_entry(ACPI_SYSTEM_FILE_DSDT, acpi_root_dir);
|
remove_proc_entry(ACPI_SYSTEM_FILE_DSDT, acpi_root_dir);
|
||||||
|
#ifdef CONFIG_ACPI_PROCFS
|
||||||
remove_proc_entry(ACPI_SYSTEM_FILE_INFO, acpi_root_dir);
|
remove_proc_entry(ACPI_SYSTEM_FILE_INFO, acpi_root_dir);
|
||||||
|
#endif
|
||||||
|
|
||||||
error = -EFAULT;
|
error = -EFAULT;
|
||||||
goto Done;
|
goto Done;
|
||||||
|
@@ -82,7 +82,7 @@ MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
|
|||||||
|
|
||||||
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);
|
||||||
static int acpi_thermal_resume(struct acpi_device *device, int state);
|
static int acpi_thermal_resume(struct acpi_device *device);
|
||||||
static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
|
static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
|
||||||
static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
|
static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
|
||||||
static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
|
static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
|
||||||
@@ -1353,7 +1353,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_thermal_resume(struct acpi_device *device, int state)
|
static int acpi_thermal_resume(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
struct acpi_thermal *tz = NULL;
|
struct acpi_thermal *tz = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
@@ -73,16 +73,14 @@ MODULE_LICENSE("GPL");
|
|||||||
|
|
||||||
static int acpi_video_bus_add(struct acpi_device *device);
|
static int acpi_video_bus_add(struct acpi_device *device);
|
||||||
static int acpi_video_bus_remove(struct acpi_device *device, int type);
|
static int acpi_video_bus_remove(struct acpi_device *device, int type);
|
||||||
static int acpi_video_bus_match(struct acpi_device *device,
|
|
||||||
struct acpi_driver *driver);
|
|
||||||
|
|
||||||
static struct acpi_driver acpi_video_bus = {
|
static struct acpi_driver acpi_video_bus = {
|
||||||
.name = ACPI_VIDEO_DRIVER_NAME,
|
.name = ACPI_VIDEO_DRIVER_NAME,
|
||||||
.class = ACPI_VIDEO_CLASS,
|
.class = ACPI_VIDEO_CLASS,
|
||||||
|
.ids = ACPI_VIDEO_HID,
|
||||||
.ops = {
|
.ops = {
|
||||||
.add = acpi_video_bus_add,
|
.add = acpi_video_bus_add,
|
||||||
.remove = acpi_video_bus_remove,
|
.remove = acpi_video_bus_remove,
|
||||||
.match = acpi_video_bus_match,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1885,39 +1883,6 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
acpi_video_bus_match(struct acpi_device *device, struct acpi_driver *driver)
|
|
||||||
{
|
|
||||||
acpi_handle h_dummy1;
|
|
||||||
acpi_handle h_dummy2;
|
|
||||||
acpi_handle h_dummy3;
|
|
||||||
|
|
||||||
|
|
||||||
if (!device || !driver)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/* Since there is no HID, CID for ACPI Video drivers, we have
|
|
||||||
* to check well known required nodes for each feature we support.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Does this device able to support video switching ? */
|
|
||||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy1)) &&
|
|
||||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOS", &h_dummy2)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Does this device able to retrieve a video ROM ? */
|
|
||||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_ROM", &h_dummy1)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Does this device able to configure which video head to be POSTed ? */
|
|
||||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_VPO", &h_dummy1)) &&
|
|
||||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_GPD", &h_dummy2)) &&
|
|
||||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_SPD", &h_dummy3)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init acpi_video_init(void)
|
static int __init acpi_video_init(void)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
@@ -91,13 +91,12 @@ typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
|
|||||||
typedef int (*acpi_op_lock) (struct acpi_device * device, int type);
|
typedef int (*acpi_op_lock) (struct acpi_device * device, int type);
|
||||||
typedef int (*acpi_op_start) (struct acpi_device * device);
|
typedef int (*acpi_op_start) (struct acpi_device * device);
|
||||||
typedef int (*acpi_op_stop) (struct acpi_device * device, int type);
|
typedef int (*acpi_op_stop) (struct acpi_device * device, int type);
|
||||||
typedef int (*acpi_op_suspend) (struct acpi_device * device, int state);
|
typedef int (*acpi_op_suspend) (struct acpi_device * device, pm_message_t state);
|
||||||
typedef int (*acpi_op_resume) (struct acpi_device * device, int state);
|
typedef int (*acpi_op_resume) (struct acpi_device * device);
|
||||||
typedef int (*acpi_op_scan) (struct acpi_device * device);
|
typedef int (*acpi_op_scan) (struct acpi_device * device);
|
||||||
typedef int (*acpi_op_bind) (struct acpi_device * device);
|
typedef int (*acpi_op_bind) (struct acpi_device * device);
|
||||||
typedef int (*acpi_op_unbind) (struct acpi_device * device);
|
typedef int (*acpi_op_unbind) (struct acpi_device * device);
|
||||||
typedef int (*acpi_op_match) (struct acpi_device * device,
|
typedef int (*acpi_op_shutdown) (struct acpi_device * device);
|
||||||
struct acpi_driver * driver);
|
|
||||||
|
|
||||||
struct acpi_bus_ops {
|
struct acpi_bus_ops {
|
||||||
u32 acpi_op_add:1;
|
u32 acpi_op_add:1;
|
||||||
@@ -110,7 +109,7 @@ struct acpi_bus_ops {
|
|||||||
u32 acpi_op_scan:1;
|
u32 acpi_op_scan:1;
|
||||||
u32 acpi_op_bind:1;
|
u32 acpi_op_bind:1;
|
||||||
u32 acpi_op_unbind:1;
|
u32 acpi_op_unbind:1;
|
||||||
u32 acpi_op_match:1;
|
u32 acpi_op_shutdown:1;
|
||||||
u32 reserved:21;
|
u32 reserved:21;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -125,16 +124,16 @@ struct acpi_device_ops {
|
|||||||
acpi_op_scan scan;
|
acpi_op_scan scan;
|
||||||
acpi_op_bind bind;
|
acpi_op_bind bind;
|
||||||
acpi_op_unbind unbind;
|
acpi_op_unbind unbind;
|
||||||
acpi_op_match match;
|
acpi_op_shutdown shutdown;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_driver {
|
struct acpi_driver {
|
||||||
struct list_head node;
|
|
||||||
char name[80];
|
char name[80];
|
||||||
char class[80];
|
char class[80];
|
||||||
atomic_t references;
|
|
||||||
char *ids; /* Supported Hardware IDs */
|
char *ids; /* Supported Hardware IDs */
|
||||||
struct acpi_device_ops ops;
|
struct acpi_device_ops ops;
|
||||||
|
struct device_driver drv;
|
||||||
|
struct module *owner;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -184,7 +183,7 @@ struct acpi_device_dir {
|
|||||||
|
|
||||||
typedef char acpi_bus_id[5];
|
typedef char acpi_bus_id[5];
|
||||||
typedef unsigned long acpi_bus_address;
|
typedef unsigned long acpi_bus_address;
|
||||||
typedef char acpi_hardware_id[9];
|
typedef char acpi_hardware_id[15];
|
||||||
typedef char acpi_unique_id[9];
|
typedef char acpi_unique_id[9];
|
||||||
typedef char acpi_device_name[40];
|
typedef char acpi_device_name[40];
|
||||||
typedef char acpi_device_class[20];
|
typedef char acpi_device_class[20];
|
||||||
@@ -295,11 +294,14 @@ struct acpi_device {
|
|||||||
struct acpi_device_ops ops;
|
struct acpi_device_ops ops;
|
||||||
struct acpi_driver *driver;
|
struct acpi_driver *driver;
|
||||||
void *driver_data;
|
void *driver_data;
|
||||||
struct kobject kobj;
|
|
||||||
struct device dev;
|
struct device dev;
|
||||||
|
struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */
|
||||||
|
enum acpi_bus_removal_type removal_type; /* indicate for different removal type */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define acpi_driver_data(d) ((d)->driver_data)
|
#define acpi_driver_data(d) ((d)->driver_data)
|
||||||
|
#define to_acpi_device(d) container_of(d, struct acpi_device, dev)
|
||||||
|
#define to_acpi_driver(d) container_of(d, struct acpi_driver, drv)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Events
|
* Events
|
||||||
|
@@ -36,13 +36,14 @@
|
|||||||
|
|
||||||
/* _HID definitions */
|
/* _HID definitions */
|
||||||
|
|
||||||
#define ACPI_POWER_HID "ACPI_PWR"
|
#define ACPI_POWER_HID "power_resource"
|
||||||
#define ACPI_PROCESSOR_HID "ACPI0007"
|
#define ACPI_PROCESSOR_HID "ACPI0007"
|
||||||
#define ACPI_SYSTEM_HID "ACPI_SYS"
|
#define ACPI_SYSTEM_HID "acpi_system"
|
||||||
#define ACPI_THERMAL_HID "ACPI_THM"
|
#define ACPI_THERMAL_HID "thermal"
|
||||||
#define ACPI_BUTTON_HID_POWERF "ACPI_FPB"
|
#define ACPI_BUTTON_HID_POWERF "button_power"
|
||||||
#define ACPI_BUTTON_HID_SLEEPF "ACPI_FSB"
|
#define ACPI_BUTTON_HID_SLEEPF "button_sleep"
|
||||||
|
#define ACPI_VIDEO_HID "video"
|
||||||
|
#define ACPI_BAY_HID "bay"
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
PCI
|
PCI
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
|
Reference in New Issue
Block a user