Lines Matching +full:irq +full:- +full:status +full:- +full:read +full:- +full:quirk
1 // SPDX-License-Identifier: GPL-2.0
3 * sysfs.c - ACPI sysfs interface to userspace.
97 result = sprintf(buffer, "%-25s\tHex SET\n", "Description"); in param_get_debug_layer()
100 result += sprintf(buffer + result, "%-25s\t0x%08lX [%c]\n", in param_get_debug_layer()
107 sprintf(buffer + result, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS", in param_get_debug_layer()
111 == 0 ? ' ' : '-'); in param_get_debug_layer()
114 "--\ndebug_layer = 0x%08X ( * = enabled)\n", in param_get_debug_layer()
125 result = sprintf(buffer, "%-25s\tHex SET\n", "Description"); in param_get_debug_level()
128 result += sprintf(buffer + result, "%-25s\t0x%08lX [%c]\n", in param_get_debug_level()
135 sprintf(buffer + result, "--\ndebug_level = 0x%08X (* = enabled)\n", in param_get_debug_level()
167 pr_err("%s: string parameter too long\n", kp->name); in param_set_trace_method_name()
168 return -ENOSPC; in param_set_trace_method_name()
221 acpi_status status; in param_set_trace_state() local
225 /* So "xxx-once" comparison should go prior than "xxx" comparison */ in param_set_trace_state()
227 strncmp((val), (key), sizeof(key) - 1) in param_set_trace_state()
234 else if (!acpi_compare_param(val, "method-once")) in param_set_trace_state()
238 else if (!acpi_compare_param(val, "opcode-once")) in param_set_trace_state()
243 return -EINVAL; in param_set_trace_state()
245 status = acpi_debug_trace(method, in param_set_trace_state()
249 if (ACPI_FAILURE(status)) in param_set_trace_state()
250 return -EBUSY; in param_set_trace_state()
262 return sprintf(buffer, "method-once\n"); in param_get_trace_state()
328 acpi_status status; in acpi_table_show() local
331 status = acpi_get_table(table_attr->name, table_attr->instance, in acpi_table_show()
333 if (ACPI_FAILURE(status)) in acpi_table_show()
334 return -ENODEV; in acpi_table_show()
337 table_header->length); in acpi_table_show()
350 sysfs_attr_init(&table_attr->attr.attr); in acpi_table_attr_init()
351 ACPI_COPY_NAMESEG(table_attr->name, table_header->signature); in acpi_table_attr_init()
354 if (ACPI_COMPARE_NAMESEG(table_attr->name, attr->name)) in acpi_table_attr_init()
355 if (table_attr->instance < attr->instance) in acpi_table_attr_init()
356 table_attr->instance = attr->instance; in acpi_table_attr_init()
358 table_attr->instance++; in acpi_table_attr_init()
359 if (table_attr->instance > ACPI_MAX_TABLE_INSTANCES) { in acpi_table_attr_init()
360 pr_warn("%4.4s: too many table instances\n", table_attr->name); in acpi_table_attr_init()
361 return -ERANGE; in acpi_table_attr_init()
364 ACPI_COPY_NAMESEG(table_attr->filename, table_header->signature); in acpi_table_attr_init()
365 table_attr->filename[ACPI_NAMESEG_SIZE] = '\0'; in acpi_table_attr_init()
366 if (table_attr->instance > 1 || (table_attr->instance == 1 && in acpi_table_attr_init()
368 (table_header->signature, 2, &header))) { in acpi_table_attr_init()
370 table_attr->instance); in acpi_table_attr_init()
371 strcat(table_attr->filename, instance_str); in acpi_table_attr_init()
374 table_attr->attr.size = table_header->length; in acpi_table_attr_init()
375 table_attr->attr.read = acpi_table_show; in acpi_table_attr_init()
376 table_attr->attr.attr.name = table_attr->filename; in acpi_table_attr_init()
377 table_attr->attr.attr.mode = 0400; in acpi_table_attr_init()
379 return sysfs_create_bin_file(tables_obj, &table_attr->attr); in acpi_table_attr_init()
397 list_add_tail(&table_attr->node, &acpi_table_attr_list); in acpi_sysfs_table_handler()
423 size = data_attr->attr.size; in acpi_data_show()
426 return -EINVAL; in acpi_data_show()
431 if (count > size - offset) in acpi_data_show()
432 count = size - offset; in acpi_data_show()
434 base = acpi_os_map_iomem(data_attr->addr, size); in acpi_data_show()
436 return -ENOMEM; in acpi_data_show()
449 if (bert->header.length < sizeof(struct acpi_table_bert) || in acpi_bert_data_init()
450 bert->region_length < sizeof(struct acpi_hest_generic_status)) { in acpi_bert_data_init()
452 return -EINVAL; in acpi_bert_data_init()
454 data_attr->addr = bert->address; in acpi_bert_data_init()
455 data_attr->attr.size = bert->region_length; in acpi_bert_data_init()
456 data_attr->attr.attr.name = "BERT"; in acpi_bert_data_init()
458 return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr); in acpi_bert_data_init()
465 if (ccel->header.length < sizeof(struct acpi_table_ccel) || in acpi_ccel_data_init()
466 !ccel->log_area_start_address || !ccel->log_area_minimum_length) { in acpi_ccel_data_init()
468 return -EINVAL; in acpi_ccel_data_init()
470 data_attr->addr = ccel->log_area_start_address; in acpi_ccel_data_init()
471 data_attr->attr.size = ccel->log_area_minimum_length; in acpi_ccel_data_init()
472 data_attr->attr.attr.name = "CCEL"; in acpi_ccel_data_init()
474 return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr); in acpi_ccel_data_init()
493 if (ACPI_COMPARE_NAMESEG(th->signature, acpi_data_objs[i].name)) { in acpi_table_data_init()
496 return -ENOMEM; in acpi_table_data_init()
497 sysfs_attr_init(&data_attr->attr.attr); in acpi_table_data_init()
498 data_attr->attr.read = acpi_data_show; in acpi_table_data_init()
499 data_attr->attr.attr.mode = 0400; in acpi_table_data_init()
511 acpi_status status; in acpi_tables_sysfs_init() local
527 status = acpi_get_table_by_index(table_index, &table_header); in acpi_tables_sysfs_init()
529 if (status == AE_BAD_PARAMETER) in acpi_tables_sysfs_init()
532 if (ACPI_FAILURE(status)) in acpi_tables_sysfs_init()
537 return -ENOMEM; in acpi_tables_sysfs_init()
545 list_add_tail(&table_attr->node, &acpi_table_attr_list); in acpi_tables_sysfs_init()
559 return -ENOMEM; in acpi_tables_sysfs_init()
563 * Detailed ACPI IRQ counters:
654 acpi_status status; in get_status() local
657 return -EINVAL; in get_status()
660 status = acpi_get_gpe_device(index, handle); in get_status()
661 if (ACPI_FAILURE(status)) { in get_status()
663 return -ENXIO; in get_status()
665 status = acpi_get_gpe_status(*handle, index, ret); in get_status()
667 status = acpi_get_event_status(index - num_gpes, ret); in get_status()
669 if (ACPI_FAILURE(status)) in get_status()
670 return -EIO; in get_status()
678 int index = attr - counter_attrs; in counter_show()
681 acpi_event_status status; in counter_show() local
696 result = get_status(index, &status, &handle); in counter_show()
700 if (status & ACPI_EVENT_FLAG_ENABLE_SET) in counter_show()
704 if (status & ACPI_EVENT_FLAG_STATUS_SET) in counter_show()
709 if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER)) in counter_show()
711 else if (status & ACPI_EVENT_FLAG_ENABLED) in counter_show()
713 else if (status & ACPI_EVENT_FLAG_WAKE_ENABLED) in counter_show()
717 if (status & ACPI_EVENT_FLAG_MASKED) in counter_show()
736 int index = attr - counter_attrs; in counter_set()
737 acpi_event_status status; in counter_set() local
752 /* show the event status for both GPEs and Fixed Events */ in counter_set()
753 result = get_status(index, &status, &handle); in counter_set()
757 if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER)) { in counter_set()
758 pr_warn("Can not change Invalid GPE/Fixed Event status\n"); in counter_set()
759 return -EINVAL; in counter_set()
764 (status & ACPI_EVENT_FLAG_ENABLED)) in counter_set()
767 !(status & ACPI_EVENT_FLAG_ENABLED)) in counter_set()
770 (status & ACPI_EVENT_FLAG_STATUS_SET)) in counter_set()
779 result = -EINVAL; in counter_set()
781 int event = index - num_gpes; in counter_set()
783 (status & ACPI_EVENT_FLAG_ENABLE_SET)) in counter_set()
786 !(status & ACPI_EVENT_FLAG_ENABLE_SET)) in counter_set()
789 (status & ACPI_EVENT_FLAG_STATUS_SET)) in counter_set()
794 result = -EINVAL; in counter_set()
799 result = -EINVAL; in counter_set()
805 * A Quirk Mechanism for GPE Flooding Prevention:
811 * instead of providing endless quirk tables, we provide a boot parameter
812 * for those who want this quirk. For example, if the users want to prevent
817 * The masking status can be modified by the following runtime controlling
844 acpi_status status; in acpi_gpe_apply_masked_gpes() local
848 status = acpi_get_gpe_device(gpe, &handle); in acpi_gpe_apply_masked_gpes()
849 if (ACPI_SUCCESS(status)) { in acpi_gpe_apply_masked_gpes()
858 acpi_status status; in acpi_irq_stats_init() local
875 status = acpi_install_global_event_handler(acpi_global_event_handler, NULL); in acpi_irq_stats_init()
876 if (ACPI_FAILURE(status)) in acpi_irq_stats_init()
949 return sprintf(buf, "%d\n", hotplug->enabled); in enabled_show()
959 return -EINVAL; in enabled_store()
986 error = kobject_init_and_add(&hotplug->kobj, in acpi_sysfs_add_hotplug_profile()
989 kobject_put(&hotplug->kobj); in acpi_sysfs_add_hotplug_profile()
993 kobject_uevent(&hotplug->kobj, KOBJ_ADD); in acpi_sysfs_add_hotplug_profile()
1018 …pr_err("Enabling force_remove is not supported anymore. Please report to linux-acpi@vger.kernel.or… in force_remove_store()
1019 return -EINVAL; in force_remove_store()
1036 return -ENOMEM; in acpi_sysfs_init()