Instead of generating each table entry inline, move the individual PCI host bridge
table entry generation to a separate build_pci_host_range() function.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/acpi/viot.c | 48 +++++++++++++++++++++++++++---------------------
1 file changed, 27 insertions(+), 21 deletions(-)
diff --git a/hw/acpi/viot.c b/hw/acpi/viot.c
index 2897aa8c88..662124812f 100644
--- a/hw/acpi/viot.c
+++ b/hw/acpi/viot.c
@@ -16,6 +16,31 @@ struct viot_pci_ranges {
uint16_t output_node;
};
+static void build_pci_host_range(GArray *table_data, int min_bus, int max_bus,
+ uint16_t output_node)
+{
+ /* Type */
+ build_append_int_noprefix(table_data, 1 /* PCI range */, 1);
+ /* Reserved */
+ build_append_int_noprefix(table_data, 0, 1);
+ /* Length */
+ build_append_int_noprefix(table_data, 24, 2);
+ /* Endpoint start */
+ build_append_int_noprefix(table_data, PCI_BUILD_BDF(min_bus, 0), 4);
+ /* PCI Segment start */
+ build_append_int_noprefix(table_data, 0, 2);
+ /* PCI Segment end */
+ build_append_int_noprefix(table_data, 0, 2);
+ /* PCI BDF start */
+ build_append_int_noprefix(table_data, PCI_BUILD_BDF(min_bus, 0), 2);
+ /* PCI BDF end */
+ build_append_int_noprefix(table_data, PCI_BUILD_BDF(max_bus, 0xff), 2);
+ /* Output node */
+ build_append_int_noprefix(table_data, output_node, 2);
+ /* Reserved */
+ build_append_int_noprefix(table_data, 0, 6);
+}
+
/* Build PCI range for a given PCI host bridge */
static int pci_host_bridges(Object *obj, void *opaque)
{
@@ -30,27 +55,8 @@ static int pci_host_bridges(Object *obj, void *opaque)
pci_bus_range(bus, &min_bus, &max_bus);
- /* Type */
- build_append_int_noprefix(blob, 1 /* PCI range */, 1);
- /* Reserved */
- build_append_int_noprefix(blob, 0, 1);
- /* Length */
- build_append_int_noprefix(blob, 24, 2);
- /* Endpoint start */
- build_append_int_noprefix(blob, PCI_BUILD_BDF(min_bus, 0), 4);
- /* PCI Segment start */
- build_append_int_noprefix(blob, 0, 2);
- /* PCI Segment end */
- build_append_int_noprefix(blob, 0, 2);
- /* PCI BDF start */
- build_append_int_noprefix(blob, PCI_BUILD_BDF(min_bus, 0), 2);
- /* PCI BDF end */
- build_append_int_noprefix(blob, PCI_BUILD_BDF(max_bus, 0xff), 2);
- /* Output node */
- build_append_int_noprefix(blob, pci_ranges->output_node, 2);
- /* Reserved */
- build_append_int_noprefix(blob, 0, 6);
-
+ build_pci_host_range(blob, min_bus, max_bus,
+ pci_ranges->output_node);
pci_ranges->count++;
}
}
--
2.20.1
On Wed, May 18, 2022 at 4:38 PM Mark Cave-Ayland
<mark.cave-ayland@ilande.co.uk> wrote:
>
> Instead of generating each table entry inline, move the individual PCI host bridge
> table entry generation to a separate build_pci_host_range() function.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Ani Sinha <ani@anisinha.ca>
> ---
> hw/acpi/viot.c | 48 +++++++++++++++++++++++++++---------------------
> 1 file changed, 27 insertions(+), 21 deletions(-)
>
> diff --git a/hw/acpi/viot.c b/hw/acpi/viot.c
> index 2897aa8c88..662124812f 100644
> --- a/hw/acpi/viot.c
> +++ b/hw/acpi/viot.c
> @@ -16,6 +16,31 @@ struct viot_pci_ranges {
> uint16_t output_node;
> };
>
> +static void build_pci_host_range(GArray *table_data, int min_bus, int max_bus,
> + uint16_t output_node)
> +{
> + /* Type */
> + build_append_int_noprefix(table_data, 1 /* PCI range */, 1);
> + /* Reserved */
> + build_append_int_noprefix(table_data, 0, 1);
> + /* Length */
> + build_append_int_noprefix(table_data, 24, 2);
> + /* Endpoint start */
> + build_append_int_noprefix(table_data, PCI_BUILD_BDF(min_bus, 0), 4);
> + /* PCI Segment start */
> + build_append_int_noprefix(table_data, 0, 2);
> + /* PCI Segment end */
> + build_append_int_noprefix(table_data, 0, 2);
> + /* PCI BDF start */
> + build_append_int_noprefix(table_data, PCI_BUILD_BDF(min_bus, 0), 2);
> + /* PCI BDF end */
> + build_append_int_noprefix(table_data, PCI_BUILD_BDF(max_bus, 0xff), 2);
> + /* Output node */
> + build_append_int_noprefix(table_data, output_node, 2);
> + /* Reserved */
> + build_append_int_noprefix(table_data, 0, 6);
> +}
> +
> /* Build PCI range for a given PCI host bridge */
> static int pci_host_bridges(Object *obj, void *opaque)
> {
> @@ -30,27 +55,8 @@ static int pci_host_bridges(Object *obj, void *opaque)
>
> pci_bus_range(bus, &min_bus, &max_bus);
>
> - /* Type */
> - build_append_int_noprefix(blob, 1 /* PCI range */, 1);
> - /* Reserved */
> - build_append_int_noprefix(blob, 0, 1);
> - /* Length */
> - build_append_int_noprefix(blob, 24, 2);
> - /* Endpoint start */
> - build_append_int_noprefix(blob, PCI_BUILD_BDF(min_bus, 0), 4);
> - /* PCI Segment start */
> - build_append_int_noprefix(blob, 0, 2);
> - /* PCI Segment end */
> - build_append_int_noprefix(blob, 0, 2);
> - /* PCI BDF start */
> - build_append_int_noprefix(blob, PCI_BUILD_BDF(min_bus, 0), 2);
> - /* PCI BDF end */
> - build_append_int_noprefix(blob, PCI_BUILD_BDF(max_bus, 0xff), 2);
> - /* Output node */
> - build_append_int_noprefix(blob, pci_ranges->output_node, 2);
> - /* Reserved */
> - build_append_int_noprefix(blob, 0, 6);
> -
> + build_pci_host_range(blob, min_bus, max_bus,
> + pci_ranges->output_node);
> pci_ranges->count++;
> }
> }
> --
> 2.20.1
>
© 2016 - 2026 Red Hat, Inc.