Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'acpi-4.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull more ACPI updates from Rafael Wysocki:
"These update the ACPICA code in the kernel to the most recent upstream
revision (which includes a regression fix and other improvements),
make ACPICA clear the status of all ACPI events when entering sleep
states (to restore the previous behavior) and update the ACPI
operation region driver for the CrystalCove PMIC.

Specifics:

- Update the ACPICA code in the kernel to upstream revision 20180810
including:
* Fix for AML parser regression causing it to mishandle opcodes
that open a scope upon parse failures (Erik Schmauss)
* Fix for a reference counting issue on large systems (Erik
Schmauss)
* Fix to discard values coming from register reads that have
failed (Erik Schmauss)
* Two acpiexec fixes (Bob Moore, Erik Schmauss)
* Debugger cleanup (Bob Moore)
* Cleanup of duplicate table error message (Bob Moore)
* Cleanup of hex detection in the utilities (Erik Schmauss)

- Make ACPICA clear the status of all ACPI events when entering sleep
states again to avoid functional regressions (Rafael Wysocki)

- Update the ACPI operation region driver for the CrystalCove PMIC to
cover all of the known operation region fields (Hans de Goede)"

* tag 'acpi-4.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
ACPI / PMIC: CrystalCove: Extend PMOP support to support all possible fields
ACPICA: Clear status of all events when entering sleep states
ACPICA: Update version to 20180810
ACPICA: acpiexec: fix a small memory leak regression
ACPICA: Reference Counts: increase max to 0x4000 for large servers
ACPICA: Reference count: add additional debugging details
ACPICA: acpi_exec: fixing -fi option
ACPICA: Debugger: Cleanup interface to the AML disassembler
ACPICA: AML Parser: skip opcodes that open a scope upon parse failure
ACPICA: Utilities: split hex detection into smaller functions
ACPICA: Update an error message for a duplicate table
ACPICA: ACPICA: add status check for acpi_hw_read before assigning return value
ACPICA: AML Parser: ignore all exceptions resulting from incorrect AML during table load

+261 -57
+1
drivers/acpi/acpica/aclocal.h
··· 164 164 #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ 165 165 #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ 166 166 #define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (install_method) */ 167 + #define ANOBJ_NODE_EARLY_INIT 0x80 /* acpi_exec only: Node was create via init file (-fi) */ 167 168 168 169 #define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ 169 170 #define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */
+9 -8
drivers/acpi/acpica/acnamesp.h
··· 25 25 /* Flags for acpi_ns_lookup, acpi_ns_search_and_enter */ 26 26 27 27 #define ACPI_NS_NO_UPSEARCH 0 28 - #define ACPI_NS_SEARCH_PARENT 0x01 29 - #define ACPI_NS_DONT_OPEN_SCOPE 0x02 30 - #define ACPI_NS_NO_PEER_SEARCH 0x04 31 - #define ACPI_NS_ERROR_IF_FOUND 0x08 32 - #define ACPI_NS_PREFIX_IS_SCOPE 0x10 33 - #define ACPI_NS_EXTERNAL 0x20 34 - #define ACPI_NS_TEMPORARY 0x40 35 - #define ACPI_NS_OVERRIDE_IF_FOUND 0x80 28 + #define ACPI_NS_SEARCH_PARENT 0x0001 29 + #define ACPI_NS_DONT_OPEN_SCOPE 0x0002 30 + #define ACPI_NS_NO_PEER_SEARCH 0x0004 31 + #define ACPI_NS_ERROR_IF_FOUND 0x0008 32 + #define ACPI_NS_PREFIX_IS_SCOPE 0x0010 33 + #define ACPI_NS_EXTERNAL 0x0020 34 + #define ACPI_NS_TEMPORARY 0x0040 35 + #define ACPI_NS_OVERRIDE_IF_FOUND 0x0080 36 + #define ACPI_NS_EARLY_INIT 0x0100 36 37 37 38 /* Flags for acpi_ns_walk_namespace */ 38 39
+2
drivers/acpi/acpica/acutils.h
··· 180 180 181 181 u8 acpi_ut_detect_hex_prefix(char **string); 182 182 183 + void acpi_ut_remove_hex_prefix(char **string); 184 + 183 185 u8 acpi_ut_detect_octal_prefix(char **string); 184 186 185 187 /*
+10
drivers/acpi/acpica/dbinput.c
··· 763 763 case CMD_DISASSEMBLE: 764 764 case CMD_DISASM: 765 765 766 + #ifdef ACPI_DISASSEMBLER 766 767 (void)acpi_db_disassemble_method(acpi_gbl_db_args[1]); 768 + #else 769 + acpi_os_printf 770 + ("The AML Disassembler is not configured/present\n"); 771 + #endif 767 772 break; 768 773 769 774 case CMD_DUMP: ··· 877 872 878 873 case CMD_LIST: 879 874 875 + #ifdef ACPI_DISASSEMBLER 880 876 acpi_db_disassemble_aml(acpi_gbl_db_args[1], op); 877 + #else 878 + acpi_os_printf 879 + ("The AML Disassembler is not configured/present\n"); 880 + #endif 881 881 break; 882 882 883 883 case CMD_LOCKS:
+3 -5
drivers/acpi/acpica/dbmethod.c
··· 216 216 acpi_ut_remove_reference(obj_desc); 217 217 } 218 218 219 + #ifdef ACPI_DISASSEMBLER 219 220 /******************************************************************************* 220 221 * 221 222 * FUNCTION: acpi_db_disassemble_aml ··· 243 242 if (statements) { 244 243 num_statements = strtoul(statements, NULL, 0); 245 244 } 246 - #ifdef ACPI_DISASSEMBLER 245 + 247 246 acpi_dm_disassemble(NULL, op, num_statements); 248 - #endif 249 247 } 250 248 251 249 /******************************************************************************* ··· 317 317 walk_state->parse_flags |= ACPI_PARSE_DISASSEMBLE; 318 318 319 319 status = acpi_ps_parse_aml(walk_state); 320 - 321 - #ifdef ACPI_DISASSEMBLER 322 320 (void)acpi_dm_parse_deferred_ops(op); 323 321 324 322 /* Now we can disassemble the method */ ··· 324 326 acpi_gbl_dm_opt_verbose = FALSE; 325 327 acpi_dm_disassemble(NULL, op, 0); 326 328 acpi_gbl_dm_opt_verbose = TRUE; 327 - #endif 328 329 329 330 acpi_ps_delete_parse_tree(op); 330 331 ··· 334 337 acpi_ut_release_owner_id(&obj_desc->method.owner_id); 335 338 return (AE_OK); 336 339 } 340 + #endif 337 341 338 342 /******************************************************************************* 339 343 *
+9 -1
drivers/acpi/acpica/dbxface.c
··· 10 10 #include "amlcode.h" 11 11 #include "acdebug.h" 12 12 #include "acinterp.h" 13 + #include "acparser.h" 13 14 14 15 #define _COMPONENT ACPI_CA_DEBUGGER 15 16 ACPI_MODULE_NAME("dbxface") ··· 263 262 } 264 263 } 265 264 266 - /* Now we can display it */ 265 + /* Now we can disassemble and display it */ 267 266 268 267 #ifdef ACPI_DISASSEMBLER 269 268 acpi_dm_disassemble(walk_state, display_op, ACPI_UINT32_MAX); 269 + #else 270 + /* 271 + * The AML Disassembler is not configured - at least we can 272 + * display the opcode value and name 273 + */ 274 + acpi_os_printf("AML Opcode: %4.4X %s\n", op->common.aml_opcode, 275 + acpi_ps_get_opcode_name(op->common.aml_opcode)); 270 276 #endif 271 277 272 278 if ((op->common.aml_opcode == AML_IF_OP) ||
+33 -1
drivers/acpi/acpica/dsfield.c
··· 15 15 #include "acnamesp.h" 16 16 #include "acparser.h" 17 17 18 + #ifdef ACPI_EXEC_APP 19 + #include "aecommon.h" 20 + #endif 21 + 18 22 #define _COMPONENT ACPI_DISPATCHER 19 23 ACPI_MODULE_NAME("dsfield") 20 24 ··· 263 259 u64 position; 264 260 union acpi_parse_object *child; 265 261 262 + #ifdef ACPI_EXEC_APP 263 + u64 value = 0; 264 + union acpi_operand_object *result_desc; 265 + union acpi_operand_object *obj_desc; 266 + char *name_path; 267 + #endif 268 + 266 269 ACPI_FUNCTION_TRACE_PTR(ds_get_field_names, info); 267 270 268 271 /* First field starts at bit zero */ ··· 402 391 if (ACPI_FAILURE(status)) { 403 392 return_ACPI_STATUS(status); 404 393 } 394 + #ifdef ACPI_EXEC_APP 395 + name_path = 396 + acpi_ns_get_external_pathname(info-> 397 + field_node); 398 + obj_desc = 399 + acpi_ut_create_integer_object 400 + (value); 401 + if (ACPI_SUCCESS 402 + (ae_lookup_init_file_entry 403 + (name_path, &value))) { 404 + acpi_ex_write_data_to_field 405 + (obj_desc, 406 + acpi_ns_get_attached_object 407 + (info->field_node), 408 + &result_desc); 409 + } 410 + acpi_ut_remove_reference(obj_desc); 411 + ACPI_FREE(name_path); 412 + #endif 405 413 } 406 414 } 407 415 ··· 603 573 !(walk_state->parse_flags & ACPI_PARSE_MODULE_LEVEL)) { 604 574 flags |= ACPI_NS_TEMPORARY; 605 575 } 606 - 576 + #ifdef ACPI_EXEC_APP 577 + flags |= ACPI_NS_OVERRIDE_IF_FOUND; 578 + #endif 607 579 /* 608 580 * Walk the list of entries in the field_list 609 581 * Note: field_list can be of zero length. In this case, Arg will be NULL.
+7 -2
drivers/acpi/acpica/hwregs.c
··· 528 528 529 529 status = 530 530 acpi_hw_read(&value64, &acpi_gbl_FADT.xpm2_control_block); 531 - value = (u32)value64; 531 + if (ACPI_SUCCESS(status)) { 532 + value = (u32)value64; 533 + } 532 534 break; 533 535 534 536 case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ 535 537 536 538 status = acpi_hw_read(&value64, &acpi_gbl_FADT.xpm_timer_block); 537 - value = (u32)value64; 539 + if (ACPI_SUCCESS(status)) { 540 + value = (u32)value64; 541 + } 542 + 538 543 break; 539 544 540 545 case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
+3 -8
drivers/acpi/acpica/hwsleep.c
··· 56 56 if (ACPI_FAILURE(status)) { 57 57 return_ACPI_STATUS(status); 58 58 } 59 - /* 60 - * If the target sleep state is S5, clear all GPEs and fixed events too 61 - */ 62 - if (sleep_state == ACPI_STATE_S5) { 63 - status = acpi_hw_clear_acpi_status(); 64 - if (ACPI_FAILURE(status)) { 65 - return_ACPI_STATUS(status); 66 - } 59 + status = acpi_hw_clear_acpi_status(); 60 + if (ACPI_FAILURE(status)) { 61 + return_ACPI_STATUS(status); 67 62 } 68 63 acpi_gbl_system_awake_and_running = FALSE; 69 64
+13
drivers/acpi/acpica/nsaccess.c
··· 558 558 (char *)&current_node->name, 559 559 current_node)); 560 560 } 561 + #ifdef ACPI_EXEC_APP 562 + if ((status == AE_ALREADY_EXISTS) && 563 + (this_node->flags & ANOBJ_NODE_EARLY_INIT)) { 564 + this_node->flags &= ~ANOBJ_NODE_EARLY_INIT; 565 + status = AE_OK; 566 + } 567 + #endif 568 + 561 569 #ifdef ACPI_ASL_COMPILER 562 570 /* 563 571 * If this ACPI name already exists within the namespace as an ··· 684 676 } 685 677 } 686 678 } 679 + #ifdef ACPI_EXEC_APP 680 + if (flags & ACPI_NS_EARLY_INIT) { 681 + this_node->flags |= ANOBJ_NODE_EARLY_INIT; 682 + } 683 + #endif 687 684 688 685 *return_node = this_node; 689 686 return_ACPI_STATUS(AE_OK);
+24 -19
drivers/acpi/acpica/psloop.c
··· 22 22 #include "acdispat.h" 23 23 #include "amlcode.h" 24 24 #include "acconvert.h" 25 + #include "acnamesp.h" 25 26 26 27 #define _COMPONENT ACPI_PARSER 27 28 ACPI_MODULE_NAME("psloop") ··· 528 527 if (ACPI_FAILURE(status)) { 529 528 return_ACPI_STATUS(status); 530 529 } 531 - if (walk_state->opcode == AML_SCOPE_OP) { 530 + if (acpi_ns_opens_scope 531 + (acpi_ps_get_opcode_info 532 + (walk_state->opcode)->object_type)) { 532 533 /* 533 - * If the scope op fails to parse, skip the body of the 534 - * scope op because the parse failure indicates that the 535 - * device may not exist. 534 + * If the scope/device op fails to parse, skip the body of 535 + * the scope op because the parse failure indicates that 536 + * the device may not exist. 536 537 */ 538 + ACPI_ERROR((AE_INFO, 539 + "Skip parsing opcode %s", 540 + acpi_ps_get_opcode_name 541 + (walk_state->opcode))); 537 542 walk_state->parser_state.aml = 538 543 walk_state->aml + 1; 539 544 walk_state->parser_state.aml = ··· 547 540 (&walk_state->parser_state); 548 541 walk_state->aml = 549 542 walk_state->parser_state.aml; 550 - ACPI_ERROR((AE_INFO, 551 - "Skipping Scope block")); 552 543 } 553 544 554 545 continue; ··· 714 709 } else 715 710 if ((walk_state-> 716 711 parse_flags & ACPI_PARSE_MODULE_LEVEL) 717 - && status != AE_CTRL_TRANSFER 718 - && ACPI_FAILURE(status)) { 712 + && (ACPI_AML_EXCEPTION(status) 713 + || status == AE_ALREADY_EXISTS 714 + || status == AE_NOT_FOUND)) { 719 715 /* 720 - * ACPI_PARSE_MODULE_LEVEL flag means that we are currently 721 - * loading a table by executing it as a control method. 722 - * However, if we encounter an error while loading the table, 723 - * we need to keep trying to load the table rather than 724 - * aborting the table load (setting the status to AE_OK 725 - * continues the table load). If we get a failure at this 726 - * point, it means that the dispatcher got an error while 727 - * processing Op (most likely an AML operand error) or a 728 - * control method was called from module level and the 729 - * dispatcher returned AE_CTRL_TRANSFER. In the latter case, 730 - * leave the status alone, there's nothing wrong with it. 716 + * ACPI_PARSE_MODULE_LEVEL flag means that we 717 + * are currently loading a table by executing 718 + * it as a control method. However, if we 719 + * encounter an error while loading the table, 720 + * we need to keep trying to load the table 721 + * rather than aborting the table load (setting 722 + * the status to AE_OK continues the table 723 + * load). If we get a failure at this point, it 724 + * means that the dispatcher got an error while 725 + * trying to execute the Op. 731 726 */ 732 727 status = AE_OK; 733 728 }
+2 -2
drivers/acpi/acpica/tbdata.c
··· 516 516 acpi_tb_check_duplication(table_desc, table_index); 517 517 if (ACPI_FAILURE(status)) { 518 518 if (status != AE_CTRL_TERMINATE) { 519 - ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY, 519 + ACPI_EXCEPTION((AE_INFO, status, 520 520 "%4.4s 0x%8.8X%8.8X" 521 - " Table is duplicated", 521 + " Table is already loaded", 522 522 acpi_ut_valid_nameseg 523 523 (table_desc->signature. 524 524 ascii) ? table_desc->
+5 -2
drivers/acpi/acpica/utdelete.c
··· 355 355 u16 original_count; 356 356 u16 new_count = 0; 357 357 acpi_cpu_flags lock_flags; 358 + char *message; 358 359 359 360 ACPI_FUNCTION_NAME(ut_update_ref_count); 360 361 ··· 392 391 object, object->common.type, 393 392 acpi_ut_get_object_type_name(object), 394 393 new_count)); 394 + message = "Incremement"; 395 395 break; 396 396 397 397 case REF_DECREMENT: ··· 422 420 if (new_count == 0) { 423 421 acpi_ut_delete_internal_obj(object); 424 422 } 423 + message = "Decrement"; 425 424 break; 426 425 427 426 default: ··· 439 436 */ 440 437 if (new_count > ACPI_MAX_REFERENCE_COUNT) { 441 438 ACPI_WARNING((AE_INFO, 442 - "Large Reference Count (0x%X) in object %p, Type=0x%.2X", 443 - new_count, object, object->common.type)); 439 + "Large Reference Count (0x%X) in object %p, Type=0x%.2X Operation=%s", 440 + new_count, object, object->common.type, message)); 444 441 } 445 442 } 446 443
+24 -4
drivers/acpi/acpica/utstrsuppt.c
··· 231 231 232 232 u8 acpi_ut_detect_hex_prefix(char **string) 233 233 { 234 + char *initial_position = *string; 234 235 235 - if ((**string == ACPI_ASCII_ZERO) && 236 - (tolower((int)*(*string + 1)) == 'x')) { 237 - *string += 2; /* Go past the leading 0x */ 238 - return (TRUE); 236 + acpi_ut_remove_hex_prefix(string); 237 + if (*string != initial_position) { 238 + return (TRUE); /* String is past leading 0x */ 239 239 } 240 240 241 241 return (FALSE); /* Not a hex string */ 242 + } 243 + 244 + /******************************************************************************* 245 + * 246 + * FUNCTION: acpi_ut_remove_hex_prefix 247 + * 248 + * PARAMETERS: string - Pointer to input ASCII string 249 + * 250 + * RETURN: none 251 + * 252 + * DESCRIPTION: Remove a hex "0x" prefix 253 + * 254 + ******************************************************************************/ 255 + 256 + void acpi_ut_remove_hex_prefix(char **string) 257 + { 258 + if ((**string == ACPI_ASCII_ZERO) && 259 + (tolower((int)*(*string + 1)) == 'x')) { 260 + *string += 2; /* Go past the leading 0x */ 261 + } 242 262 } 243 263 244 264 /*******************************************************************************
+1 -1
drivers/acpi/acpica/utstrtoul64.c
··· 218 218 * implicit conversions, and the "0x" prefix is "not allowed". 219 219 * However, allow a "0x" prefix as an ACPI extension. 220 220 */ 221 - acpi_ut_detect_hex_prefix(&string); 221 + acpi_ut_remove_hex_prefix(&string); 222 222 223 223 if (!acpi_ut_remove_leading_zeros(&string)) { 224 224 return_VALUE(0);
+107 -2
drivers/acpi/pmic/intel_pmic_crc.c
··· 25 25 #define PMIC_A0LOCK_REG 0xc5 26 26 27 27 static struct pmic_table power_table[] = { 28 + /* { 29 + .address = 0x00, 30 + .reg = ??, 31 + .bit = ??, 32 + }, ** VSYS */ 33 + { 34 + .address = 0x04, 35 + .reg = 0x63, 36 + .bit = 0x00, 37 + }, /* SYSX -> VSYS_SX */ 38 + { 39 + .address = 0x08, 40 + .reg = 0x62, 41 + .bit = 0x00, 42 + }, /* SYSU -> VSYS_U */ 43 + { 44 + .address = 0x0c, 45 + .reg = 0x64, 46 + .bit = 0x00, 47 + }, /* SYSS -> VSYS_S */ 48 + { 49 + .address = 0x10, 50 + .reg = 0x6a, 51 + .bit = 0x00, 52 + }, /* V50S -> V5P0S */ 53 + { 54 + .address = 0x14, 55 + .reg = 0x6b, 56 + .bit = 0x00, 57 + }, /* HOST -> VHOST, USB2/3 host */ 58 + { 59 + .address = 0x18, 60 + .reg = 0x6c, 61 + .bit = 0x00, 62 + }, /* VBUS -> VBUS, USB2/3 OTG */ 63 + { 64 + .address = 0x1c, 65 + .reg = 0x6d, 66 + .bit = 0x00, 67 + }, /* HDMI -> VHDMI */ 68 + /* { 69 + .address = 0x20, 70 + .reg = ??, 71 + .bit = ??, 72 + }, ** S285 */ 28 73 { 29 74 .address = 0x24, 30 75 .reg = 0x66, 31 76 .bit = 0x00, 32 - }, 77 + }, /* X285 -> V2P85SX, camera */ 78 + /* { 79 + .address = 0x28, 80 + .reg = ??, 81 + .bit = ??, 82 + }, ** V33A */ 83 + { 84 + .address = 0x2c, 85 + .reg = 0x69, 86 + .bit = 0x00, 87 + }, /* V33S -> V3P3S, display/ssd/audio */ 88 + { 89 + .address = 0x30, 90 + .reg = 0x68, 91 + .bit = 0x00, 92 + }, /* V33U -> V3P3U, SDIO wifi&bt */ 93 + /* { 94 + .address = 0x34 .. 0x40, 95 + .reg = ??, 96 + .bit = ??, 97 + }, ** V33I, V18A, REFQ, V12A */ 98 + { 99 + .address = 0x44, 100 + .reg = 0x5c, 101 + .bit = 0x00, 102 + }, /* V18S -> V1P8S, SOC/USB PHY/SIM */ 33 103 { 34 104 .address = 0x48, 35 105 .reg = 0x5d, 36 106 .bit = 0x00, 37 - }, 107 + }, /* V18X -> V1P8SX, eMMC/camara/audio */ 108 + { 109 + .address = 0x4c, 110 + .reg = 0x5b, 111 + .bit = 0x00, 112 + }, /* V18U -> V1P8U, LPDDR */ 113 + { 114 + .address = 0x50, 115 + .reg = 0x61, 116 + .bit = 0x00, 117 + }, /* V12X -> V1P2SX, SOC SFR */ 118 + { 119 + .address = 0x54, 120 + .reg = 0x60, 121 + .bit = 0x00, 122 + }, /* V12S -> V1P2S, MIPI */ 123 + /* { 124 + .address = 0x58, 125 + .reg = ??, 126 + .bit = ??, 127 + }, ** V10A */ 128 + { 129 + .address = 0x5c, 130 + .reg = 0x56, 131 + .bit = 0x00, 132 + }, /* V10S -> V1P0S, SOC GFX */ 133 + { 134 + .address = 0x60, 135 + .reg = 0x57, 136 + .bit = 0x00, 137 + }, /* V10X -> V1P0SX, SOC display/DDR IO/PCIe */ 138 + { 139 + .address = 0x64, 140 + .reg = 0x59, 141 + .bit = 0x00, 142 + }, /* V105 -> V1P05S, L2 SRAM */ 38 143 }; 39 144 40 145 static struct pmic_table thermal_table[] = {
+1 -1
include/acpi/acconfig.h
··· 89 89 90 90 /* Maximum object reference count (detects object deletion issues) */ 91 91 92 - #define ACPI_MAX_REFERENCE_COUNT 0x1000 92 + #define ACPI_MAX_REFERENCE_COUNT 0x4000 93 93 94 94 /* Default page size for use in mapping memory for operation regions */ 95 95
+6
include/acpi/acexcep.h
··· 59 59 60 60 #define AE_OK (acpi_status) 0x0000 61 61 62 + #define ACPI_ENV_EXCEPTION(status) (status & AE_CODE_ENVIRONMENTAL) 63 + #define ACPI_AML_EXCEPTION(status) (status & AE_CODE_AML) 64 + #define ACPI_PROG_EXCEPTION(status) (status & AE_CODE_PROGRAMMER) 65 + #define ACPI_TABLE_EXCEPTION(status) (status & AE_CODE_ACPI_TABLES) 66 + #define ACPI_CNTL_EXCEPTION(status) (status & AE_CODE_CONTROL) 67 + 62 68 /* 63 69 * Environmental exceptions 64 70 */
+1 -1
include/acpi/acpixf.h
··· 12 12 13 13 /* Current ACPICA subsystem version in YYYYMMDD format */ 14 14 15 - #define ACPI_CA_VERSION 0x20180629 15 + #define ACPI_CA_VERSION 0x20180810 16 16 17 17 #include <acpi/acconfig.h> 18 18 #include <acpi/actypes.h>