Lines Matching +full:proc +full:- +full:id
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * acpi_tables.c - ACPI Boot-Time Table Parsing
63 switch (header->type) { in acpi_table_print_madt_entry()
70 p->processor_id, p->id, in acpi_table_print_madt_entry()
71 (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
80 p->local_apic_id, p->uid, in acpi_table_print_madt_entry()
81 (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
89 pr_debug("IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n", in acpi_table_print_madt_entry()
90 p->id, p->address, p->global_irq_base); in acpi_table_print_madt_entry()
99 p->bus, p->source_irq, p->global_irq, in acpi_table_print_madt_entry()
100 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK], in acpi_table_print_madt_entry()
101 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2]); in acpi_table_print_madt_entry()
102 if (p->inti_flags & in acpi_table_print_madt_entry()
105 p->inti_flags & in acpi_table_print_madt_entry()
115 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK], in acpi_table_print_madt_entry()
116 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2], in acpi_table_print_madt_entry()
117 p->global_irq); in acpi_table_print_madt_entry()
126 p->processor_id, in acpi_table_print_madt_entry()
127 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK ], in acpi_table_print_madt_entry()
128 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2], in acpi_table_print_madt_entry()
129 p->lint); in acpi_table_print_madt_entry()
139 polarity = p->inti_flags & ACPI_MADT_POLARITY_MASK; in acpi_table_print_madt_entry()
140 trigger = (p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2; in acpi_table_print_madt_entry()
143 p->uid, in acpi_table_print_madt_entry()
146 p->lint); in acpi_table_print_madt_entry()
155 p->address); in acpi_table_print_madt_entry()
163 pr_debug("IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n", in acpi_table_print_madt_entry()
164 p->id, (void *)(unsigned long)p->address, in acpi_table_print_madt_entry()
165 p->global_irq_base); in acpi_table_print_madt_entry()
174 p->processor_id, p->id, p->eid, in acpi_table_print_madt_entry()
175 (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
183 …pr_info("PLAT_INT_SRC (%s %s type[0x%x] id[0x%04x] eid[0x%x] iosapic_vector[0x%x] global_irq[0x%x]… in acpi_table_print_madt_entry()
184 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK], in acpi_table_print_madt_entry()
185 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2], in acpi_table_print_madt_entry()
186 p->type, p->id, p->eid, p->io_sapic_vector, in acpi_table_print_madt_entry()
187 p->global_irq); in acpi_table_print_madt_entry()
196 p->uid, p->base_address, in acpi_table_print_madt_entry()
197 p->arm_mpidr, in acpi_table_print_madt_entry()
198 (p->flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
208 p->gic_id, p->base_address, in acpi_table_print_madt_entry()
209 p->global_irq_base); in acpi_table_print_madt_entry()
218 p->processor_id, p->core_id, in acpi_table_print_madt_entry()
219 (p->flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
227 pr_debug("RISC-V INTC (acpi_uid[0x%04x] hart_id[0x%llx] %s)\n", in acpi_table_print_madt_entry()
228 p->uid, p->hart_id, in acpi_table_print_madt_entry()
229 (p->flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
235 header->type); in acpi_table_print_madt_entry()
243 switch (entry->type) { in acpi_get_entry_type()
245 return entry->hdr->common.type; in acpi_get_entry_type()
247 return entry->hdr->hmat.type; in acpi_get_entry_type()
251 return entry->hdr->cedt.type; in acpi_get_entry_type()
259 switch (entry->type) { in acpi_get_entry_length()
261 return entry->hdr->common.length; in acpi_get_entry_length()
263 return entry->hdr->hmat.length; in acpi_get_entry_length()
265 return entry->hdr->prmt.length; in acpi_get_entry_length()
267 return entry->hdr->cedt.length; in acpi_get_entry_length()
275 switch (entry->type) { in acpi_get_subtable_header_length()
277 return sizeof(entry->hdr->common); in acpi_get_subtable_header_length()
279 return sizeof(entry->hdr->hmat); in acpi_get_subtable_header_length()
281 return sizeof(entry->hdr->prmt); in acpi_get_subtable_header_length()
283 return sizeof(entry->hdr->cedt); in acpi_get_subtable_header_length()
289 acpi_get_subtable_type(char *id) in acpi_get_subtable_type() argument
291 if (strncmp(id, ACPI_SIG_HMAT, 4) == 0) in acpi_get_subtable_type()
293 if (strncmp(id, ACPI_SIG_PRMT, 4) == 0) in acpi_get_subtable_type()
295 if (strncmp(id, ACPI_SIG_CEDT, 4) == 0) in acpi_get_subtable_type()
300 static __init_or_acpilib bool has_handler(struct acpi_subtable_proc *proc) in has_handler() argument
302 return proc->handler || proc->handler_arg; in has_handler()
305 static __init_or_acpilib int call_handler(struct acpi_subtable_proc *proc, in call_handler() argument
309 if (proc->handler) in call_handler()
310 return proc->handler(hdr, end); in call_handler()
311 if (proc->handler_arg) in call_handler()
312 return proc->handler_arg(hdr, proc->arg, end); in call_handler()
313 return -EINVAL; in call_handler()
317 * acpi_parse_entries_array - for each proc_num find a suitable subtable
319 * @id: table id (for debugging purposes)
322 * @proc: array of acpi_subtable_proc struct containing entry id
324 * @proc_num: how big proc is?
327 * For each proc_num find a subtable with proc->id and run proc->handler
329 * entry id.
336 * On success returns sum of all matching entries for all proc handlers.
337 * Otherwise, -ENODEV or -EINVAL is returned.
340 char *id, unsigned long table_size, in acpi_parse_entries_array() argument
341 struct acpi_table_header *table_header, struct acpi_subtable_proc *proc, in acpi_parse_entries_array() argument
350 table_end = (unsigned long)table_header + table_header->length; in acpi_parse_entries_array()
354 entry.type = acpi_get_subtable_type(id); in acpi_parse_entries_array()
364 if (acpi_get_entry_type(&entry) != proc[i].id) in acpi_parse_entries_array()
366 if (!has_handler(&proc[i]) || in acpi_parse_entries_array()
368 call_handler(&proc[i], entry.hdr, table_end))) { in acpi_parse_entries_array()
373 proc[i].count++; in acpi_parse_entries_array()
380 * If entry->length is 0, break from this loop to avoid in acpi_parse_entries_array()
385 pr_err("[%4.4s:0x%02x] Invalid zero length\n", id, proc->id); in acpi_parse_entries_array()
386 return -EINVAL; in acpi_parse_entries_array()
395 id, proc->id, count); in acpi_parse_entries_array()
398 return errs ? -EINVAL : count; in acpi_parse_entries_array()
402 char *id, unsigned long table_size, struct acpi_subtable_proc *proc, in acpi_table_parse_entries_array() argument
410 return -ENODEV; in acpi_table_parse_entries_array()
412 if (!id) in acpi_table_parse_entries_array()
413 return -EINVAL; in acpi_table_parse_entries_array()
416 return -EINVAL; in acpi_table_parse_entries_array()
418 if (!strncmp(id, ACPI_SIG_MADT, 4)) in acpi_table_parse_entries_array()
421 acpi_get_table(id, instance, &table_header); in acpi_table_parse_entries_array()
423 pr_debug("%4.4s not present\n", id); in acpi_table_parse_entries_array()
424 return -ENODEV; in acpi_table_parse_entries_array()
427 count = acpi_parse_entries_array(id, table_size, table_header, in acpi_table_parse_entries_array()
428 proc, proc_num, max_entries); in acpi_table_parse_entries_array()
435 char *id, unsigned long table_size, int entry_id, in __acpi_table_parse_entries() argument
439 struct acpi_subtable_proc proc = { in __acpi_table_parse_entries() local
440 .id = entry_id, in __acpi_table_parse_entries()
446 return acpi_table_parse_entries_array(id, table_size, &proc, 1, in __acpi_table_parse_entries()
451 acpi_table_parse_cedt(enum acpi_cedt_type id, in acpi_table_parse_cedt() argument
455 sizeof(struct acpi_table_cedt), id, in acpi_table_parse_cedt()
460 int __init acpi_table_parse_entries(char *id, unsigned long table_size, in acpi_table_parse_entries() argument
465 return __acpi_table_parse_entries(id, table_size, entry_id, handler, in acpi_table_parse_entries()
469 int __init acpi_table_parse_madt(enum acpi_madt_type id, in acpi_table_parse_madt() argument
473 sizeof(struct acpi_table_madt), id, in acpi_table_parse_madt()
478 * acpi_table_parse - find table with @id, run @handler on it
479 * @id: table id to find
482 * Scan the ACPI System Descriptor Table (STD) for a table matching @id,
485 * Return 0 if table found, -errno if not.
487 int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler) in acpi_table_parse() argument
492 return -ENODEV; in acpi_table_parse()
494 if (!id || !handler) in acpi_table_parse()
495 return -EINVAL; in acpi_table_parse()
497 if (strncmp(id, ACPI_SIG_MADT, 4) == 0) in acpi_table_parse()
498 acpi_get_table(id, acpi_apic_instance, &table); in acpi_table_parse()
500 acpi_get_table(id, 0, &table); in acpi_table_parse()
507 return -ENODEV; in acpi_table_parse()
524 "notify linux-acpi@vger.kernel.org\n", in check_multiple_madt()
536 pr_warn("Override [%4.4s-%8.8s], this is unsafe: tainting kernel\n", in acpi_table_taint()
537 table->signature, table->oem_table_id); in acpi_table_taint()
594 size = initrd_end - initrd_start; in acpi_table_upgrade()
606 size -= offset; in acpi_table_upgrade()
617 if (!memcmp(table->signature, table_sigs[sig], 4)) in acpi_table_upgrade()
625 if (file.size != table->length) { in acpi_table_upgrade()
630 if (acpi_table_checksum(file.data, table->length)) { in acpi_table_upgrade()
637 table->signature, cpio_path, file.name, table->length); in acpi_table_upgrade()
639 all_tables_size += table->length; in acpi_table_upgrade()
690 if (clen > MAP_CHUNK_SIZE - slop) in acpi_table_upgrade()
691 clen = MAP_CHUNK_SIZE - slop; in acpi_table_upgrade()
698 size -= clen; in acpi_table_upgrade()
720 if (table_offset + table->length > all_tables_size) { in acpi_table_initrd_override()
726 table_length = table->length; in acpi_table_initrd_override()
729 if (memcmp(existing_table->signature, table->signature, 4) || in acpi_table_initrd_override()
730 memcmp(table->oem_id, existing_table->oem_id, in acpi_table_initrd_override()
732 memcmp(table->oem_table_id, existing_table->oem_table_id, in acpi_table_initrd_override()
742 existing_table->oem_revision >= table->oem_revision) { in acpi_table_initrd_override()
749 pr_info("Table Upgrade: override [%4.4s-%6.6s-%8.8s]\n", in acpi_table_initrd_override()
750 table->signature, table->oem_id, in acpi_table_initrd_override()
751 table->oem_table_id); in acpi_table_initrd_override()
775 if (table_offset + table->length > all_tables_size) { in acpi_table_initrd_scan()
781 table_length = table->length; in acpi_table_initrd_scan()
784 if (ACPI_COMPARE_NAMESEG(table->signature, ACPI_SIG_RSDT) || in acpi_table_initrd_scan()
785 ACPI_COMPARE_NAMESEG(table->signature, ACPI_SIG_XSDT)) { in acpi_table_initrd_scan()
799 pr_info("Table Upgrade: install [%4.4s-%6.6s-%8.8s]\n", in acpi_table_initrd_scan()
800 table->signature, table->oem_id, in acpi_table_initrd_scan()
801 table->oem_table_id); in acpi_table_initrd_scan()
848 if (!strncmp(existing_table->signature, "DSDT", 4)) { in acpi_os_table_override()
881 return -EINVAL; in acpi_locate_initial_tables()
892 u64 start = table_desc->address; in acpi_reserve_initial_tables()
893 u64 size = table_desc->length; in acpi_reserve_initial_tables()
898 pr_info("Reserving %4s table memory at [mem 0x%llx-0x%llx]\n", in acpi_reserve_initial_tables()
899 table_desc->signature.ascii, start, start + size - 1); in acpi_reserve_initial_tables()
927 return -EINVAL; in acpi_parse_apic_instance()
930 return -EINVAL; in acpi_parse_apic_instance()