lib/fw_table.c

Source file repositories/reference/linux-study-clean/lib/fw_table.c

File Facts

System
Linux kernel
Corpus path
lib/fw_table.c
Extension
.c
Size
6245 bytes
Lines
233
Domain
Kernel Services
Bucket
lib
Inferred role
Kernel Services: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.

Dependency Surface

Detected Declarations

Annotated Snippet

struct acpi_subtable_entry {
	union acpi_subtable_headers *hdr;
	enum acpi_subtable_type type;
};

static unsigned long __init_or_fwtbl_lib
acpi_get_entry_type(struct acpi_subtable_entry *entry)
{
	switch (entry->type) {
	case ACPI_SUBTABLE_COMMON:
		return entry->hdr->common.type;
	case ACPI_SUBTABLE_HMAT:
		return entry->hdr->hmat.type;
	case ACPI_SUBTABLE_PRMT:
		return 0;
	case ACPI_SUBTABLE_CEDT:
		return entry->hdr->cedt.type;
	case CDAT_SUBTABLE:
		return entry->hdr->cdat.type;
	}
	return 0;
}

static unsigned long __init_or_fwtbl_lib
acpi_get_entry_length(struct acpi_subtable_entry *entry)
{
	switch (entry->type) {
	case ACPI_SUBTABLE_COMMON:
		return entry->hdr->common.length;
	case ACPI_SUBTABLE_HMAT:
		return entry->hdr->hmat.length;
	case ACPI_SUBTABLE_PRMT:
		return entry->hdr->prmt.length;
	case ACPI_SUBTABLE_CEDT:
		return entry->hdr->cedt.length;
	case CDAT_SUBTABLE: {
		__le16 length = (__force __le16)entry->hdr->cdat.length;

		return le16_to_cpu(length);
	}
	}
	return 0;
}

static unsigned long __init_or_fwtbl_lib
acpi_get_subtable_header_length(struct acpi_subtable_entry *entry)
{
	switch (entry->type) {
	case ACPI_SUBTABLE_COMMON:
		return sizeof(entry->hdr->common);
	case ACPI_SUBTABLE_HMAT:
		return sizeof(entry->hdr->hmat);
	case ACPI_SUBTABLE_PRMT:
		return sizeof(entry->hdr->prmt);
	case ACPI_SUBTABLE_CEDT:
		return sizeof(entry->hdr->cedt);
	case CDAT_SUBTABLE:
		return sizeof(entry->hdr->cdat);
	}
	return 0;
}

static enum acpi_subtable_type __init_or_fwtbl_lib
acpi_get_subtable_type(char *id)
{
	if (strncmp(id, ACPI_SIG_HMAT, 4) == 0)
		return ACPI_SUBTABLE_HMAT;
	if (strncmp(id, ACPI_SIG_PRMT, 4) == 0)
		return ACPI_SUBTABLE_PRMT;
	if (strncmp(id, ACPI_SIG_CEDT, 4) == 0)
		return ACPI_SUBTABLE_CEDT;
	if (strncmp(id, ACPI_SIG_CDAT, 4) == 0)
		return CDAT_SUBTABLE;
	return ACPI_SUBTABLE_COMMON;
}

static unsigned long __init_or_fwtbl_lib
acpi_table_get_length(enum acpi_subtable_type type,
		      union fw_table_header *header)
{
	if (type == CDAT_SUBTABLE) {
		__le32 length = (__force __le32)header->cdat.length;

		return le32_to_cpu(length);
	}

	return header->acpi.length;
}

static __init_or_fwtbl_lib int call_handler(struct acpi_subtable_proc *proc,

Annotation

Implementation Notes