drivers/acpi/acpica/psloop.c
Source file repositories/reference/linux-study-clean/drivers/acpi/acpica/psloop.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/acpi/acpica/psloop.c- Extension
.c- Size
- 15673 bytes
- Lines
- 590
- Domain
- Driver Families
- Bucket
- drivers/acpi
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
acpi/acpi.haccommon.hacinterp.hacparser.hacdispat.hamlcode.hacconvert.hacnamesp.h
Detected Declarations
function acpi_ps_get_argumentsfunction acpi_ps_parse_loop
Annotated Snippet
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
walk_state->arg_types = 0;
break;
default:
/*
* Op is not a constant or string, append each argument to the Op
*/
while (GET_CURRENT_ARG_TYPE(walk_state->arg_types) &&
!walk_state->arg_count) {
walk_state->aml = walk_state->parser_state.aml;
switch (op->common.aml_opcode) {
case AML_METHOD_OP:
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
case AML_WHILE_OP:
break;
default:
ASL_CV_CAPTURE_COMMENTS(walk_state);
break;
}
status =
acpi_ps_get_next_arg(walk_state,
&(walk_state->parser_state),
GET_CURRENT_ARG_TYPE
(walk_state->arg_types), &arg);
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
if (arg) {
acpi_ps_append_arg(op, arg);
}
INCREMENT_ARG_LIST(walk_state->arg_types);
}
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
"Final argument count: %8.8X pass %u\n",
walk_state->arg_count,
walk_state->pass_number));
/* Special processing for certain opcodes */
switch (op->common.aml_opcode) {
case AML_METHOD_OP:
/*
* Skip parsing of control method because we don't have enough
* info in the first pass to parse it correctly.
*
* Save the length and address of the body
*/
op->named.data = walk_state->parser_state.aml;
op->named.length = (u32)
(walk_state->parser_state.pkg_end -
walk_state->parser_state.aml);
/* Skip body of method */
walk_state->parser_state.aml =
walk_state->parser_state.pkg_end;
walk_state->arg_count = 0;
break;
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
if ((op->common.parent) &&
(op->common.parent->common.aml_opcode ==
AML_NAME_OP)
&& (walk_state->pass_number <=
ACPI_IMODE_LOAD_PASS2)) {
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
"Setup Package/Buffer: Pass %u, AML Ptr: %p\n",
walk_state->pass_number,
aml_op_start));
/*
* Skip parsing of Buffers and Packages because we don't have
* enough info in the first pass to parse them correctly.
Annotation
- Immediate include surface: `acpi/acpi.h`, `accommon.h`, `acinterp.h`, `acparser.h`, `acdispat.h`, `amlcode.h`, `acconvert.h`, `acnamesp.h`.
- Detected declarations: `function acpi_ps_get_arguments`, `function acpi_ps_parse_loop`.
- Atlas domain: Driver Families / drivers/acpi.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.