|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 10/12] libacpi: build ACPI MCFG table if requested
On Tue, Mar 20, 2018 at 07:46:04AM +1000, Alexey G wrote:
> On Mon, 19 Mar 2018 17:33:34 +0000
> Roger Pau Monné <roger.pau@xxxxxxxxxx> wrote:
>
> >On Tue, Mar 13, 2018 at 04:33:55AM +1000, Alexey Gerasimenko wrote:
> >> This adds construct_mcfg() function to libacpi which allows to build
> >> MCFG table for a given mmconfig_addr/mmconfig_len pair if the
> >> ACPI_HAS_MCFG flag was specified in acpi_config struct.
> >>
> >> The maximum bus number is calculated from mmconfig_len using
> >> MCFG_SIZE_TO_NUM_BUSES macro (1MByte of MMIO space per bus).
> >>
> >> Signed-off-by: Alexey Gerasimenko <x1917x@xxxxxxxxx>
> >> ---
> >> tools/libacpi/acpi2_0.h | 21 +++++++++++++++++++++
> >> tools/libacpi/build.c | 42
> >> ++++++++++++++++++++++++++++++++++++++++++ tools/libacpi/libacpi.h
> >> | 4 ++++ 3 files changed, 67 insertions(+)
> >>
> >> diff --git a/tools/libacpi/acpi2_0.h b/tools/libacpi/acpi2_0.h
> >> index 2619ba32db..209ad1acd3 100644
> >> --- a/tools/libacpi/acpi2_0.h
> >> +++ b/tools/libacpi/acpi2_0.h
> >> @@ -422,6 +422,25 @@ struct acpi_20_slit {
> >> };
> >>
> >> /*
> >> + * PCI Express Memory Mapped Configuration Description Table
> >> + */
> >> +struct mcfg_range_entry {
> >> + uint64_t base_address;
> >> + uint16_t pci_segment;
> >> + uint8_t start_pci_bus_num;
> >> + uint8_t end_pci_bus_num;
> >> + uint32_t reserved;
> >> +};
> >> +
> >> +struct acpi_mcfg {
> >> + struct acpi_header header;
> >> + uint8_t reserved[8];
> >> + struct mcfg_range_entry entries[1];
> >> +};
> >
> >I would define this as:
> >
> >struct acpi_10_mcfg {
> > struct acpi_header header;
> > uint8_t reserved[8];
> > struct acpi_10_mcfg_entry {
> > uint64_t base_address;
> > uint16_t pci_segment;
> > uint8_t start_pci_bus;
> > uint8_t end_pci_bus;
> > uint32_t reserved;
> > } entries[1];
> >};
>
> Hmm, a choice of preference, but OK, will move it inside.
Note the name change also (acpi_10_mcfg). Also I think you can drop
the acpi_10_mcfg_entry name and just use an anonymous struct.
> >> +
> >> + mcfg->entries[0].base_address = config->mmconfig_addr;
> >> + mcfg->entries[0].pci_segment = 0;
> >> + mcfg->entries[0].start_pci_bus_num = 0;
> >> + mcfg->entries[0].end_pci_bus_num =
> >> + MCFG_SIZE_TO_NUM_BUSES(config->mmconfig_len) - 1;
> >
> >Why not pass the start_bus and end_bus values in acpi_config at least?
>
> start_pci_bus_num will be always 0.
>
> It will be kinda ugly to pass config->mmconfig_addr along with
> config->end_pci_bus_num, baseaddr+size combo looks nicer I think.
I'm not going to insist, but ACPI doesn't really care about the size,
it just needs to know the start and end. Seems pointless to write a
value here that later libacpi needs to convert to the value it
actually needs. Also start/end buses are uint8_t, size is uint32_t.
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |