Sorry, now to address your original question.
The AcpiOsDerivePciId interface was driven primarily by the needs of Linux, during the
time that the Linux PCI-to-ACPI interaction was being designed and implemented.
I suspect that the ** was needed for the original implementation and then became obsolete
To my knowledge, we have never been asked to change the interface, so it has remained
Since AcpiOsDerivePciId is going to go away soon (we have the code running already), we
will of course make the equivalent internal interface as simple as possible.
From: devel-bounces(a)acpica.org [mailto:firstname.lastname@example.org] On Behalf
Of Moore, Robert
Sent: Wednesday, August 04, 2010 2:37 PM
Subject: Re: [Devel] Error in documentation of AcpiOsDerivePciId?
Yes, there is a reason for ACPI_PCI_ID **.
From the ACPI Component Architecture User Guide and Programmer Reference:
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:email@example.com] 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''
>>> PCI-to-PCI bridges that are on the branch from AcpiOsDerivePciId's
>>> 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
Devel mailing list