Yes, there is a reason for ACPI_PCI_ID **.
From the ACPI Component Architecture User Guide and Programmer
Input: The full PCI ID (The full PCI configuration space address, consisting of a segment
number, bus number, device number, and function number) as obtained from control methods
within the BIOS ACPI tables.
Output: Where the derived PCI ID is returned. Some or all of the PCI ID subfields may be
updated by this function.
This function derives a full PCI ID for a PCI device, consisting of a Segment number, a
Bus number, and a Device number.
The PCI hardware dynamically configures PCI bus numbers depending on the bus topology
discovered during system initialization. The AcpiOsDerivePciId function is invoked by the
ACPICA subsystem during configuration of a PCI_Config Operation Region in order to
(possibly) update the Bus number in the PciId with the actual Bus number as determined by
the hardware and operating system configuration.
The PciId parameter is initially populated by the ACPICA subsystem during the Operation
Region initialization. ACPICA then calls AcpiOsDerivePciId, which is expected to make any
necessary modifications to the Segment, Bus, or Device number PCI ID subfields as
appropriate for the current hardware and OS configuration.
From: devel-bounces(a)acpica.org [mailto:firstname.lastname@example.org] On Behalf
Sent: Sunday, August 01, 2010 4:31 AM
Subject: Re: [Devel] Error in documentation of AcpiOsDerivePciId?
is that still in the agenda ? Also, what is the reason why the last
parameter of AcpiOsDerivePciId() is "ACPI_PCI_ID **" and not just
"ACPI_PCI_ID *" ? Are there any situations, where AcpiOsDerivePciId
would want to reallocate PciId ?
Lin Ming wrote:
> 2010/4/22 Grégoire Sutre <gregoire.sutre(a)gmail.com>:
>> Hi Lin,
>> Many thanks for your explanantion, I understand now why the second
>> argument passed to AcpiOsDerivePciId is a handle to the (PCI_Config)
>> operation region.
>> But regarding the first argument of AcpiOsDerivePciId: the ACPICA
>> programmer reference says that: it is a handle to _the PCI device_.
>> My question is: which PCI device?
>> In my (possibly wrong) interpretation of the documentation, _the PCI
>> device_ is the device for which AcpiOsDerivePciId shall return an
>> updated Pci id.
>> However, as far as I understand the code of AcpiEvPciConfigRegionSetup
>> (in file evrgnini.c), _the PCI device_ turns out to be an ancestor of
>> the device for which AcpiOsDerivePciId shall return an updated Pci id.
>> This ancestor being the upstream PCI root bridge (or the ACPI root node
>> if none was found). This interpretation of _the PCI device_ is also
>> consistent with my understanding of the Linux implementation of
>> AcpiOsDerivePciId, which finds the updated PCI id by ``traversing'' the
>> PCI-to-PCI bridges that are on the branch from AcpiOsDerivePciId's first
>> argument to its second argument.
> You are right, the first argument is the PCI root node.
> We may need to update the doc to figure out this.
> Lin Ming
> Devel mailing list
> To: gregoire.sutre(a)gmail.com
> Cc: devel(a)acpica.org
Ruediger "Rudi" Ihle
"There's a fine line between wrong and visionary. Unfortunately
you have to be a visionary to see it." - Sheldon Cooper, Ph.D.
Devel mailing list