Because ACPI spec doesn't provide any way for firmware (AML)
to return as error.
In addtion, I think we should not trust the _SUN value of
non-existing device because the ACPI spec says in "6.5.1 _INI
(Init)" that _INI method is run before _ADR, _CID, _HID, _SUN, and
_UID are run. It means _SUN could be initialized in _INI method
implecitely. And it also says that "If the _STA method indicates
that the device is not present, OSPM will not run the _INI and will
not examine the children of the device for _INI methods.". After all,
_SUN for non-existing device is not reliable because it might not
initialized by _INI method.
Maybe the result is as you guess.
The first block doesn't help me (with the first block, all of the
slot disappeared. Please see the bottom of this mail for details).
The second block helps me.
There seems a difference of the interpretation about _STA for PCI
hotplug slot between your firmware and my firmware. The difference
is:
- Your firmware provides the _STA method to represent the presence
of PCI adapter card on the slot.
- My firmware provides the _STA method to represent the presence
of the slot.
Providing _STA method to represent the presence of PCI adpater card
on the slot (as your firmware does) doesn't seem right to me because
of the following reasons.
- ACPI spec says "After calling _EJ0, OSPM verifies the device no
longer exists to determine if the eject succeeded. For _HID devices,
OSPM evaluates the _STA method. For _ADR devices, OSPM checks with
the bus driver for that device." in "6.3.3 _EJx (Eject)". Because
PCI adapter card on the slot is _ADR device, the presence of the
card must be checked with bus driver, not _STA.
- ACPI spec provides the example AML code which uses _STA to
represent Docking Station (See 6.3.2 _EJD (Ejection Dependent
Device)". The usage of this is same as my firmware.
What do you think about that?
P.S. None of the slots except the strange slot named '1023' were
detected with your patch. It would happen on other machines
(might including hp machine) too. The reason is _STA evaluation
fails on the hotplug slot which doesn't have _STA method. If the
device object doesn't have a _STA method, we need to handle it as
if it is present. I believe firmware normally doesn't provide
_STA method for PCI hotplug slots.
Thanks,
Kenji Kaneshige
--