From: Shannon Zhao <zhaoshenglong@huawei.com>
To: xen-devel@lists.xen.org
Cc: ian.campbell@citrix.com, peter.huangpeng@huawei.com,
stefano.stabellini@citrix.com, shannon.zhao@linaro.org,
Jan Beulich <jbeulich@suse.com>,
zhaoshenglong@huawei.com
Subject: [PATCH v6 10/22] acpi/table: Introduce acpi_table_get_entry_madt to get specified entry
Date: Sat, 27 Feb 2016 14:37:21 +0800 [thread overview]
Message-ID: <1456555041-15180-1-git-send-email-zhaoshenglong@huawei.com> (raw)
In-Reply-To: <1456467780-8476-11-git-send-email-zhaoshenglong@huawei.com>
From: Shannon Zhao <shannon.zhao@linaro.org>
This function could get the specified index entry of MADT table. This
would be useful when it needs to get the contens of the entry.
Cc: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
---
V6: address Jan's comments
---
xen/drivers/acpi/tables.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++
xen/include/xen/acpi.h | 2 ++
2 files changed, 61 insertions(+)
diff --git a/xen/drivers/acpi/tables.c b/xen/drivers/acpi/tables.c
index f81c369..1d15d3a 100644
--- a/xen/drivers/acpi/tables.c
+++ b/xen/drivers/acpi/tables.c
@@ -221,6 +221,65 @@ void __init acpi_table_print_madt_entry(struct acpi_subtable_header *header)
}
}
+static struct acpi_subtable_header * __init
+acpi_get_entry(const char *id, unsigned long table_size,
+ const struct acpi_table_header *table_header,
+ enum acpi_madt_type entry_id, unsigned int entry_index)
+{
+ struct acpi_subtable_header *entry;
+ int count = 0;
+ unsigned long table_end;
+
+ if (!table_size)
+ return NULL;
+
+ if (!table_header) {
+ printk(KERN_WARNING PREFIX "%4.4s not present\n", id);
+ return NULL;
+ }
+
+ table_end = (unsigned long)table_header + table_header->length;
+
+ /* Parse all entries looking for a match. */
+ entry = (void *)table_header + table_size;
+
+ while ((unsigned long)(entry + 1) < table_end) {
+ if (entry->length < sizeof(*entry)) {
+ printk(KERN_ERR PREFIX "[%4.4s:%#x] Invalid length\n",
+ id, entry_id);
+ return NULL;
+ }
+
+ if (entry->type == entry_id) {
+ if (count == entry_index)
+ return entry;
+ count++;
+ }
+
+ entry = (void *)entry + entry->length;
+ }
+
+ return NULL;
+}
+
+struct acpi_subtable_header * __init
+acpi_table_get_entry_madt(enum acpi_madt_type entry_id,
+ unsigned int entry_index)
+{
+ struct acpi_table_header *table_header;
+ acpi_status status;
+
+ status = acpi_get_table(ACPI_SIG_MADT, acpi_apic_instance,
+ &table_header);
+ if (ACPI_FAILURE(status)) {
+ printk(KERN_WARNING PREFIX "%4.4s not present\n",
+ ACPI_SIG_MADT);
+ return NULL;
+ }
+
+ return acpi_get_entry(ACPI_SIG_MADT, sizeof(struct acpi_table_madt),
+ table_header, entry_id, entry_index);
+}
int __init
acpi_parse_entries(char *id, unsigned long table_size,
diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index f05b160..946877f 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -79,6 +79,8 @@ int acpi_parse_entries(char *id, unsigned long table_size,
int entry_id, unsigned int max_entries);
int acpi_table_parse_entries(char *id, unsigned long table_size,
int entry_id, acpi_table_entry_handler handler, unsigned int max_entries);
+struct acpi_subtable_header *acpi_table_get_entry_madt(enum acpi_madt_type id,
+ unsigned int entry_index);
int acpi_table_parse_madt(enum acpi_madt_type id, acpi_table_entry_handler handler, unsigned int max_entries);
int acpi_table_parse_srat(int id, acpi_madt_entry_handler handler,
unsigned int max_entries);
--
2.0.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-02-27 6:37 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-26 6:22 [PATCH v5 00/22] Add ACPI support for Xen itself on ARM64 Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 01/22] arm/acpi: Emulate io ports for arm Shannon Zhao
2016-02-26 12:00 ` Stefano Stabellini
2016-02-26 6:22 ` [PATCH v5 02/22] arm/acpi: Add arm specific acpi header file Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 03/22] arm/acpi: Add __acpi_map_table function for ARM Shannon Zhao
2016-02-26 14:12 ` Stefano Stabellini
2016-02-26 16:29 ` Jan Beulich
2016-02-26 16:30 ` Stefano Stabellini
2016-02-27 6:29 ` [PATCH v6 " Shannon Zhao
2016-02-29 10:54 ` Stefano Stabellini
2016-02-29 11:38 ` Jan Beulich
2016-02-29 11:43 ` Stefano Stabellini
2016-02-29 11:53 ` Jan Beulich
2016-02-29 11:56 ` Stefano Stabellini
2016-02-29 12:05 ` Jan Beulich
2016-02-29 20:29 ` [PATCH v7 " Shannon Zhao
2016-03-01 10:08 ` Jan Beulich
2016-02-26 6:22 ` [PATCH v5 04/22] arm/acpi: Add basic ACPI initialization Shannon Zhao
2016-02-26 13:39 ` Stefano Stabellini
2016-02-26 6:22 ` [PATCH v5 05/22] arm/acpi: Move end_boot_allocator after acpi_boot_table_init Shannon Zhao
2016-02-26 12:08 ` Stefano Stabellini
2016-02-26 6:22 ` [PATCH v5 06/22] arm/acpi: Parse FADT table and get PSCI flags Shannon Zhao
2016-02-26 12:10 ` Stefano Stabellini
2016-02-26 6:22 ` [PATCH v5 07/22] ACPI / table: Print GIC information when MADT is parsed Shannon Zhao
2016-02-26 9:39 ` Jan Beulich
2016-02-26 6:22 ` [PATCH v5 08/22] arm/acpi: Parse MADT to map logical cpu to MPIDR and get cpu_possible_map Shannon Zhao
2016-02-26 9:49 ` Jan Beulich
2016-02-26 10:18 ` Shannon Zhao
2016-02-26 12:18 ` Stefano Stabellini
2016-02-27 6:33 ` [PATCH v6 " Shannon Zhao
2016-02-29 12:38 ` Jan Beulich
2016-02-26 6:22 ` [PATCH v5 09/22] arm/acpi: Add ACPI support for SMP initialization Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 10/22] acpi/table: Introduce acpi_table_get_entry_madt to get specified entry Shannon Zhao
2016-02-26 9:59 ` Jan Beulich
2016-02-27 6:37 ` Shannon Zhao [this message]
2016-02-29 12:39 ` [PATCH v6 " Jan Beulich
2016-02-26 6:22 ` [PATCH v5 11/22] arm: Introduce a generic way to use a device from acpi Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 12/22] arm/irq: Drop the DT prefix of the irq line type Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 13/22] arm/gic-v2: Add ACPI boot support for GICv2 Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 14/22] arm/gic-v3: Add ACPI boot support for GICv3 Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 15/22] arm/gic: Add ACPI support for GIC preinit Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 16/22] arm/irq: Add helper function for setting interrupt type Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 17/22] arm/acpi: Parse GTDT to initialize timer Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 18/22] arm/acpi: Add a new ACPI initialized function for UART Shannon Zhao
2016-02-26 13:46 ` Stefano Stabellini
2016-02-26 6:22 ` [PATCH v5 19/22] ACPICA: Headers: Add support for CSRT and DBG2 ACPI tables Shannon Zhao
2016-02-26 6:22 ` [PATCH v5 20/22] arm/acpi: Initialize serial port from ACPI SPCR table Shannon Zhao
2016-02-26 10:04 ` Jan Beulich
2016-02-26 10:20 ` Shannon Zhao
2016-02-26 11:10 ` Shannon Zhao
2016-02-26 12:32 ` Jan Beulich
2016-02-26 6:22 ` [PATCH v5 21/22] arm/fdt: Export device_tree_for_each_node Shannon Zhao
2016-02-26 6:23 ` [PATCH v5 22/22] arm/acpi: Add acpi parameter to enable/disable acpi Shannon Zhao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1456555041-15180-1-git-send-email-zhaoshenglong@huawei.com \
--to=zhaoshenglong@huawei.com \
--cc=ian.campbell@citrix.com \
--cc=jbeulich@suse.com \
--cc=peter.huangpeng@huawei.com \
--cc=shannon.zhao@linaro.org \
--cc=stefano.stabellini@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).