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
62 switch (header->type) { in acpi_table_print_madt_entry()
69 p->processor_id, p->id, in acpi_table_print_madt_entry()
70 (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
79 p->local_apic_id, p->uid, in acpi_table_print_madt_entry()
80 (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
88 pr_debug("IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n", in acpi_table_print_madt_entry()
89 p->id, p->address, p->global_irq_base); in acpi_table_print_madt_entry()
98 p->bus, p->source_irq, p->global_irq, in acpi_table_print_madt_entry()
99 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK], in acpi_table_print_madt_entry()
100 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2]); in acpi_table_print_madt_entry()
101 if (p->inti_flags & in acpi_table_print_madt_entry()
104 p->inti_flags & in acpi_table_print_madt_entry()
114 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK], in acpi_table_print_madt_entry()
115 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2], in acpi_table_print_madt_entry()
116 p->global_irq); in acpi_table_print_madt_entry()
125 p->processor_id, in acpi_table_print_madt_entry()
126 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK ], in acpi_table_print_madt_entry()
127 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2], in acpi_table_print_madt_entry()
128 p->lint); in acpi_table_print_madt_entry()
138 polarity = p->inti_flags & ACPI_MADT_POLARITY_MASK; in acpi_table_print_madt_entry()
139 trigger = (p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2; in acpi_table_print_madt_entry()
142 p->uid, in acpi_table_print_madt_entry()
145 p->lint); in acpi_table_print_madt_entry()
154 (void *)(unsigned long)p->address); in acpi_table_print_madt_entry()
162 pr_debug("IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n", in acpi_table_print_madt_entry()
163 p->id, (void *)(unsigned long)p->address, in acpi_table_print_madt_entry()
164 p->global_irq_base); in acpi_table_print_madt_entry()
173 p->processor_id, p->id, p->eid, in acpi_table_print_madt_entry()
174 (p->lapic_flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
182 …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()
183 mps_inti_flags_polarity[p->inti_flags & ACPI_MADT_POLARITY_MASK], in acpi_table_print_madt_entry()
184 mps_inti_flags_trigger[(p->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2], in acpi_table_print_madt_entry()
185 p->type, p->id, p->eid, p->io_sapic_vector, in acpi_table_print_madt_entry()
186 p->global_irq); in acpi_table_print_madt_entry()
195 p->uid, p->base_address, in acpi_table_print_madt_entry()
196 p->arm_mpidr, in acpi_table_print_madt_entry()
197 (p->flags & ACPI_MADT_ENABLED) ? "enabled" : "disabled"); in acpi_table_print_madt_entry()
207 p->gic_id, p->base_address, in acpi_table_print_madt_entry()
208 p->global_irq_base); in acpi_table_print_madt_entry()
214 header->type); in acpi_table_print_madt_entry()
222 switch (entry->type) { in acpi_get_entry_type()
224 return entry->hdr->common.type; in acpi_get_entry_type()
226 return entry->hdr->hmat.type; in acpi_get_entry_type()
236 switch (entry->type) { in acpi_get_entry_length()
238 return entry->hdr->common.length; in acpi_get_entry_length()
240 return entry->hdr->hmat.length; in acpi_get_entry_length()
242 return entry->hdr->prmt.length; in acpi_get_entry_length()
250 switch (entry->type) { in acpi_get_subtable_header_length()
252 return sizeof(entry->hdr->common); in acpi_get_subtable_header_length()
254 return sizeof(entry->hdr->hmat); in acpi_get_subtable_header_length()
256 return sizeof(entry->hdr->prmt); in acpi_get_subtable_header_length()
262 acpi_get_subtable_type(char *id) in acpi_get_subtable_type() argument
264 if (strncmp(id, ACPI_SIG_HMAT, 4) == 0) in acpi_get_subtable_type()
266 if (strncmp(id, ACPI_SIG_PRMT, 4) == 0) in acpi_get_subtable_type()
272 * acpi_parse_entries_array - for each proc_num find a suitable subtable
274 * @id: table id (for debugging purposes)
277 * @proc: array of acpi_subtable_proc struct containing entry id
279 * @proc_num: how big proc is?
282 * For each proc_num find a subtable with proc->id and run proc->handler
284 * entry id.
291 * On success returns sum of all matching entries for all proc handlers.
292 * Otherwise, -ENODEV or -EINVAL is returned.
294 static int __init acpi_parse_entries_array(char *id, unsigned long table_size, in acpi_parse_entries_array() argument
296 struct acpi_subtable_proc *proc, int proc_num, in acpi_parse_entries_array() argument
305 table_end = (unsigned long)table_header + table_header->length; in acpi_parse_entries_array()
309 entry.type = acpi_get_subtable_type(id); in acpi_parse_entries_array()
319 if (acpi_get_entry_type(&entry) != proc[i].id) in acpi_parse_entries_array()
321 if (!proc[i].handler || in acpi_parse_entries_array()
322 (!errs && proc[i].handler(entry.hdr, table_end))) { in acpi_parse_entries_array()
327 proc[i].count++; in acpi_parse_entries_array()
334 * If entry->length is 0, break from this loop to avoid in acpi_parse_entries_array()
339 pr_err("[%4.4s:0x%02x] Invalid zero length\n", id, proc->id); in acpi_parse_entries_array()
340 return -EINVAL; in acpi_parse_entries_array()
349 id, proc->id, count); in acpi_parse_entries_array()
352 return errs ? -EINVAL : count; in acpi_parse_entries_array()
355 int __init acpi_table_parse_entries_array(char *id, in acpi_table_parse_entries_array() argument
357 struct acpi_subtable_proc *proc, int proc_num, in acpi_table_parse_entries_array() argument
365 return -ENODEV; in acpi_table_parse_entries_array()
367 if (!id) in acpi_table_parse_entries_array()
368 return -EINVAL; in acpi_table_parse_entries_array()
371 return -EINVAL; in acpi_table_parse_entries_array()
373 if (!strncmp(id, ACPI_SIG_MADT, 4)) in acpi_table_parse_entries_array()
376 acpi_get_table(id, instance, &table_header); in acpi_table_parse_entries_array()
378 pr_warn("%4.4s not present\n", id); in acpi_table_parse_entries_array()
379 return -ENODEV; in acpi_table_parse_entries_array()
382 count = acpi_parse_entries_array(id, table_size, table_header, in acpi_table_parse_entries_array()
383 proc, proc_num, max_entries); in acpi_table_parse_entries_array()
389 int __init acpi_table_parse_entries(char *id, in acpi_table_parse_entries() argument
395 struct acpi_subtable_proc proc = { in acpi_table_parse_entries() local
396 .id = entry_id, in acpi_table_parse_entries()
400 return acpi_table_parse_entries_array(id, table_size, &proc, 1, in acpi_table_parse_entries()
404 int __init acpi_table_parse_madt(enum acpi_madt_type id, in acpi_table_parse_madt() argument
408 sizeof(struct acpi_table_madt), id, in acpi_table_parse_madt()
413 * acpi_table_parse - find table with @id, run @handler on it
414 * @id: table id to find
417 * Scan the ACPI System Descriptor Table (STD) for a table matching @id,
420 * Return 0 if table found, -errno if not.
422 int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler) in acpi_table_parse() argument
427 return -ENODEV; in acpi_table_parse()
429 if (!id || !handler) in acpi_table_parse()
430 return -EINVAL; in acpi_table_parse()
432 if (strncmp(id, ACPI_SIG_MADT, 4) == 0) in acpi_table_parse()
433 acpi_get_table(id, acpi_apic_instance, &table); in acpi_table_parse()
435 acpi_get_table(id, 0, &table); in acpi_table_parse()
442 return -ENODEV; in acpi_table_parse()
459 "notify linux-acpi@vger.kernel.org\n", in check_multiple_madt()
471 pr_warn("Override [%4.4s-%8.8s], this is unsafe: tainting kernel\n", in acpi_table_taint()
472 table->signature, table->oem_table_id); in acpi_table_taint()
528 size = initrd_end - initrd_start; in acpi_table_upgrade()
540 size -= offset; in acpi_table_upgrade()
551 if (!memcmp(table->signature, table_sigs[sig], 4)) in acpi_table_upgrade()
559 if (file.size != table->length) { in acpi_table_upgrade()
564 if (acpi_table_checksum(file.data, table->length)) { in acpi_table_upgrade()
571 table->signature, cpio_path, file.name, table->length); in acpi_table_upgrade()
573 all_tables_size += table->length; in acpi_table_upgrade()
624 if (clen > MAP_CHUNK_SIZE - slop) in acpi_table_upgrade()
625 clen = MAP_CHUNK_SIZE - slop; in acpi_table_upgrade()
632 size -= clen; in acpi_table_upgrade()
654 if (table_offset + table->length > all_tables_size) { in acpi_table_initrd_override()
660 table_length = table->length; in acpi_table_initrd_override()
663 if (memcmp(existing_table->signature, table->signature, 4) || in acpi_table_initrd_override()
664 memcmp(table->oem_id, existing_table->oem_id, in acpi_table_initrd_override()
666 memcmp(table->oem_table_id, existing_table->oem_table_id, in acpi_table_initrd_override()
676 existing_table->oem_revision >= table->oem_revision) { in acpi_table_initrd_override()
683 pr_info("Table Upgrade: override [%4.4s-%6.6s-%8.8s]\n", in acpi_table_initrd_override()
684 table->signature, table->oem_id, in acpi_table_initrd_override()
685 table->oem_table_id); in acpi_table_initrd_override()
709 if (table_offset + table->length > all_tables_size) { in acpi_table_initrd_scan()
715 table_length = table->length; in acpi_table_initrd_scan()
718 if (ACPI_COMPARE_NAMESEG(table->signature, ACPI_SIG_RSDT) || in acpi_table_initrd_scan()
719 ACPI_COMPARE_NAMESEG(table->signature, ACPI_SIG_XSDT)) { in acpi_table_initrd_scan()
733 pr_info("Table Upgrade: install [%4.4s-%6.6s-%8.8s]\n", in acpi_table_initrd_scan()
734 table->signature, table->oem_id, in acpi_table_initrd_scan()
735 table->oem_table_id); in acpi_table_initrd_scan()
782 if (!strncmp(existing_table->signature, "DSDT", 4)) { in acpi_os_table_override()
816 return -EINVAL; in acpi_locate_initial_tables()
827 u64 start = table_desc->address; in acpi_reserve_initial_tables()
828 u64 size = table_desc->length; in acpi_reserve_initial_tables()
833 pr_info("Reserving %4s table memory at [mem 0x%llx-0x%llx]\n", in acpi_reserve_initial_tables()
834 table_desc->signature.ascii, start, start + size - 1); in acpi_reserve_initial_tables()
862 return -EINVAL; in acpi_parse_apic_instance()
865 return -EINVAL; in acpi_parse_apic_instance()