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);
-
-static char trace_method_name[6];
-module_param_string(trace_method_name, trace_method_name, 6, 0644);
-static unsigned int trace_debug_layer;
-module_param(trace_debug_layer, uint, 0644);
-static unsigned int trace_debug_level;
-module_param(trace_debug_level, uint, 0644);
-
-static int param_set_trace_state(const char *val, struct kernel_param *kp)
-{
- int result = 0;
-
- if (!strncmp(val, "enable", strlen("enable") - 1)) {
- result = acpi_debug_trace(trace_method_name, trace_debug_level,
- trace_debug_layer, 0);
- if (result)
- result = -EBUSY;
- goto exit;
- }
-
- if (!strncmp(val, "disable", strlen("disable") - 1)) {
- int name = 0;
- result = acpi_debug_trace((char *)&name, trace_debug_level,
- trace_debug_layer, 0);
- if (result)
- result = -EBUSY;
- goto exit;
- }
-
- if (!strncmp(val, "1", 1)) {
- result = acpi_debug_trace(trace_method_name, trace_debug_level,
- trace_debug_layer, 1);
- if (result)
- result = -EBUSY;
- goto exit;
- }
-
- result = -EINVAL;
-exit:
- return result;
-}
-
-static int param_get_trace_state(char *buffer, struct kernel_param *kp)
-{
- if (!acpi_gbl_trace_method_name)
- return sprintf(buffer, "disable");
- else {
- if (acpi_gbl_trace_flags & 1)
- return sprintf(buffer, "1");
- else
- return sprintf(buffer, "enable");
- }
- return 0;
-}
-
-module_param_call(trace_state, param_set_trace_state, param_get_trace_state,
- NULL, 0644);
-
-/* --------------------------------------------------------------------------
- DebugFS Interface
- -------------------------------------------------------------------------- */
-
-static ssize_t cm_write(struct file *file, const char __user *user_buf,
- size_t count, loff_t *ppos)
-{
- static char *buf;
- static int uncopied_bytes;
- struct acpi_table_header table;
- acpi_status status;
-
- if (!(*ppos)) {
- /* parse the table header to get the table length */
- if (count <= sizeof(struct acpi_table_header))
- return -EINVAL;
- if (copy_from_user(&table, user_buf,
- sizeof(struct acpi_table_header)))
- return -EFAULT;
- uncopied_bytes = table.length;
- buf = kzalloc(uncopied_bytes, GFP_KERNEL);
- if (!buf)
- return -ENOMEM;
- }
-
- if (uncopied_bytes < count) {
- kfree(buf);
- return -EINVAL;
- }
-
- if (copy_from_user(buf + (*ppos), user_buf, count)) {
- kfree(buf);
- return -EFAULT;
- }
-
- uncopied_bytes -= count;
- *ppos += count;
-
- if (!uncopied_bytes) {
- status = acpi_install_method(buf);
- kfree(buf);
- if (ACPI_FAILURE(status))
- return -EINVAL;
- add_taint(TAINT_OVERRIDDEN_ACPI_TABLE);
- }
-
- return count;
-}
-
-static const struct file_operations cm_fops = {
- .write = cm_write,
-};
-
-static int acpi_debugfs_init(void)
-{
- struct dentry *acpi_dir, *cm_dentry;
-
- acpi_dir = debugfs_create_dir("acpi", NULL);
- if (!acpi_dir)
- goto err;
-
- cm_dentry = debugfs_create_file("custom_method", S_IWUGO,
- acpi_dir, NULL, &cm_fops);
- if (!cm_dentry)
- goto err;
-
- return 0;
-
-err:
- if (acpi_dir)
- debugfs_remove(acpi_dir);
- return -EINVAL;
-}
-
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
int __init acpi_debug_init(void)
{
- acpi_debugfs_init();
acpi_procfs_init();
return 0;
}