PERFORCE change 43464 for review

Takanori Watanabe takawata at axe-inc.co.jp
Tue Dec 9 23:25:50 PST 2003


In message <20031209222111.B44633 at root.org>, Nate Lawson wrote:
>It may hurt to switch a device on twice, depending on how state is kept in
>the AML.  In the ACPI case, there are several things that need to happen,
>noted below.
>
>        Device (LID)
>        Device (SLPB)
>        Device (PCI0)
>            Device (LPC)
>                Device (SIO)
>                Device (PIC)      // i8259
>                Device (TIMR)
>                Device (KBD)      // atkbd0
>                Device (MOU)      // psm0
>                Device (FDC)      // Call _PS0, fdc0
>                    Device (FDD0)
>                Device (UART)     // Call _PS0
>                Device (LPT)      // lpt0
>                Device (ECP)
>                Device (FIR)      // ir port
>                Device (EC)       // Call _PS0, embedded controller
>                    Device (BAT0)
>                    Device (BAT1)
>                    Device (AC)
>                    Device (HKEY)
>            Device (AGP)          // agp0
>                Device (VID)
>                    Device (LCD0)
>                    Device (CRT0)
>                    Device (TV0)
>            Device (PCI1)
>                Device (CBS0)     // cardbus0
>                Device (CBS1)     // cardbus1
>                Device (DOCK)
>                    Device (IDE1)
>                        Device (PRIM)
>                            Device (MSTR)
>                    Device (CBS2) // cardbus2
>                    Device (CBS3)
>
>So I guess my question is what to do about things like the AGP card or the
>cardbus slots, especially the ones that are accessible through a dock.  I
>know about all these via acpi.  However, we don't want to duplicate
>calling power methods through both cardbus and acpi, for instance.  This
>tree doesn't exactly map to the devinfo tree:
>
>nexus0
>  npx0
>  acpi0
>    acpi_ec0
>    acpi_timer0
>    acpi_cpu0
>    acpi_tz0
>    acpi_lid0
>    acpi_button0
>    pcib0
>      pci0
>        hostb0
>        pcib1
>          pci1
>        pcib2
>          pci2
>            cbb0
>              cardbus0
>              pccard0
>            cbb1
>              cardbus1
>              pccard1
>            fxp0
>              miibus0
>                inphy0
>        isab0
>          isa0
>            pmtimer0
>            sc0
>            vga0
>            orm0
>        atapci0
>          ata0
>          ata1
>        ichsmb0
>          smbus0
>        pcm0
>    acpi_sysresource0
>    atpic0
>    attimer0
>    atdma0
>    npxisa0
>    attimer1
>    atkbdc0
>      atkbd0
>      psm0
>    psmcpnp0
>    fdc0
>      fd0
>    sio0
>    ppc0
>      ppbus0
>        plip0
>        lpt0
>        ppi0
>    sio1
>    acpi_cmbat0
>    acpi_cmbat1
>    acpi_acad0
>
>Anyway, I'd love to hear how the ACPI AML and devinfo trees map to the
>fact that we need to call _PSx on all devices, eject uses _EJx, etc.


As far as I know, All PCI devices know ACPI handle, through the ACPI
namespace itself is maped into flat structure.
This is my 'devinfo -v' output, with the kernel from my perforce tree 
(//depot/user/takawata/workplace/...) which implement pnpinfo functions.


nexus0
  legacy0
  npx0
  acpi0
    acpi_ec0 pnpinfo _HID=PNP0C09 _UID=0 at path=\_SB_.PCI0.LPC_.EC__
    acpi_timer0 pnpinfo Unknown at magic=unknown
    acpi_cpu0 pnpinfo _HID=UNKNOWN _UID=0 at path=\_PR_.CPU_
    acpi_tz0 pnpinfo _HID=UNKNOWN _UID=0 at path=\_TZ_.THM0
    unknown pnpinfo _HID=PNP0C0F _UID=1 at path=\_SB_.LNKA
    unknown pnpinfo _HID=PNP0C0F _UID=2 at path=\_SB_.LNKB
    unknown pnpinfo _HID=PNP0C0F _UID=3 at path=\_SB_.LNKC
    unknown pnpinfo _HID=PNP0C0F _UID=4 at path=\_SB_.LNKD
    unknown pnpinfo _HID=PNP0C0F _UID=5 at path=\_SB_.LNKE
    unknown pnpinfo _HID=PNP0C0F _UID=6 at path=\_SB_.LNKF
    unknown pnpinfo _HID=PNP0C0F _UID=7 at path=\_SB_.LNKG
    unknown pnpinfo _HID=PNP0C0F _UID=8 at path=\_SB_.LNKH
    unknown pnpinfo _HID=PNP0C01 _UID=0 at path=\_SB_.MEM_
    acpi_lid0 pnpinfo _HID=PNP0C0D _UID=0 at path=\_SB_.LID_
    acpi_button0 pnpinfo _HID=PNP0C0E _UID=0 at path=\_SB_.SLPB
    pcib0 pnpinfo _HID=PNP0A03 _UID=0 at path=\_SB_.PCI0
      pci0
        agp0 pnpinfo vendor=0x8086 device=0x3340 subvendor=0x1014 subdevice=0x0529 class=0x060000 at slot=0 function=0
        pcib1 pnpinfo vendor=0x8086 device=0x3341 subvendor=0x0000 subdevice=0x0000 class=0x060400 at slot=1 function=0
          pci1
            unknown pnpinfo vendor=0x1002 device=0x4c59 subvendor=0x1014 subdevice=0x052f class=0x030000 at slot=0 function=0
        unknown pnpinfo vendor=0x8086 device=0x24c2 subvendor=0x1014 subdevice=0x052d class=0x0c0300 at slot=29 function=0
        unknown pnpinfo vendor=0x8086 device=0x24c4 subvendor=0x1014 subdevice=0x052d class=0x0c0300 at slot=29 function=1
        unknown pnpinfo vendor=0x8086 device=0x24c7 subvendor=0x1014 subdevice=0x052d class=0x0c0300 at slot=29 function=2
        unknown pnpinfo vendor=0x8086 device=0x24cd subvendor=0x1014 subdevice=0x052e class=0x0c0320 at slot=29 function=7
        pcib2 pnpinfo vendor=0x8086 device=0x2448 subvendor=0x0000 subdevice=0x0000 class=0x060400 at slot=30 function=0
          pci2
            unknown pnpinfo vendor=0x1180 device=0x0476 subvendor=0x1014 subdevice=0x0532 class=0x060700 at slot=0 function=0
            unknown pnpinfo vendor=0x1180 device=0x0476 subvendor=0x1014 subdevice=0x0532 class=0x060700 at slot=0 function=1
            unknown pnpinfo vendor=0x1180 device=0x0552 subvendor=0x1014 subdevice=0x0533 class=0x0c0010 at slot=0 function=2
            em0 pnpinfo vendor=0x8086 device=0x101e subvendor=0x1014 subdevice=0x0549 class=0x020000 at slot=1 function=0
            unknown pnpinfo vendor=0x168c device=0x0012 subvendor=0x17ab subdevice=0x8310 class=0x020000 at slot=2 function=0
        isab0 pnpinfo vendor=0x8086 device=0x24cc subvendor=0x0000 subdevice=0x0000 class=0x060100 at slot=31 function=0
          isa0
            sc0
            orm0
            pmtimer0
            vga0
        atapci0 pnpinfo vendor=0x8086 device=0x24ca subvendor=0x1014 subdevice=0x052d class=0x01018a at slot=31 function=1
          ata0
          ata1
        unknown pnpinfo vendor=0x8086 device=0x24c3 subvendor=0x1014 subdevice=0x052d class=0x0c0500 at slot=31 function=3
        unknown pnpinfo vendor=0x8086 device=0x24c5 subvendor=0x1014 subdevice=0x0534 class=0x040100 at slot=31 function=5
        unknown pnpinfo vendor=0x8086 device=0x24c6 subvendor=0x1014 subdevice=0x0525 class=0x070300 at slot=31 function=6
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.LPC_
    acpi_sysresource0 pnpinfo _HID=PNP0C02 _UID=0 at path=\_SB_.PCI0.LPC_.SIO_
    atpic0 pnpinfo _HID=PNP0000 _UID=0 at path=\_SB_.PCI0.LPC_.PIC_
    attimer0 pnpinfo _HID=PNP0100 _UID=0 at path=\_SB_.PCI0.LPC_.TIMR
    atdma0 pnpinfo _HID=PNP0200 _UID=0 at path=\_SB_.PCI0.LPC_.DMAC
    unknown pnpinfo _HID=PNP0800 _UID=0 at path=\_SB_.PCI0.LPC_.SPKR
    npxisa0 pnpinfo _HID=PNP0C04 _UID=0 at path=\_SB_.PCI0.LPC_.FPU_
    attimer1 pnpinfo _HID=PNP0B00 _UID=0 at path=\_SB_.PCI0.LPC_.RTC_
    atkbdc0 pnpinfo _HID=PNP0303 _UID=0 at path=\_SB_.PCI0.LPC_.KBD_
      atkbd0
      psm0
    psmcpnp0 pnpinfo _HID=IBM3780 _UID=0 at path=\_SB_.PCI0.LPC_.MOU_
    unknown pnpinfo _HID=PNP0700 _UID=0 at path=\_SB_.PCI0.LPC_.FDC_
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.LPC_.FDC_.FDD0
    sio0 pnpinfo _HID=PNP0501 _UID=0 at path=\_SB_.PCI0.LPC_.UART
    ppc0 pnpinfo _HID=PNP0400 _UID=0 at path=\_SB_.PCI0.LPC_.LPT_
      ppbus0
        plip0
        lpt0
        ppi0
    unknown pnpinfo _HID=PNP0401 _UID=0 at path=\_SB_.PCI0.LPC_.ECP_
    sio1 pnpinfo _HID=IBM0071 _UID=0 at path=\_SB_.PCI0.LPC_.FIR_
    unknown pnpinfo _HID=PNP0C09 _UID=0 at path=\_SB_.PCI0.LPC_.EC__
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.LPC_.EC__.PUBS
    acpi_cmbat0 pnpinfo _HID=PNP0C0A _UID=0 at path=\_SB_.PCI0.LPC_.EC__.BAT0
    unknown pnpinfo _HID=PNP0C0A _UID=2 at path=\_SB_.PCI0.LPC_.EC__.BAT1
    acpi_cmbat1 pnpinfo _HID=PNP0C0A _UID=1 at path=\_SB_.PCI0.LPC_.EC__.BAT2
    acpi_acad0 pnpinfo _HID=ACPI0003 _UID=0 at path=\_SB_.PCI0.LPC_.EC__.AC__
    unknown pnpinfo _HID=IBM0068 _UID=0 at path=\_SB_.PCI0.LPC_.EC__.HKEY
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.AGP_
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.AGP_.VID_
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.AGP_.VID_.LCD0
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.AGP_.VID_.CRT0
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.CBS0
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.CBS1
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.DOCK
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.DOCK.IDE1
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.DOCK.IDE1.PRIM
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.DOCK.IDE1.PRIM.MSTR
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.DOCK.CBS2
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.PCI1.DOCK.CBS3
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.IDE0
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.IDE0.PRIM
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.IDE0.PRIM.MSTR
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.IDE0.SCND
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.IDE0.SCND.MSTR
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB0
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB0.URTH
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB0.URTH.UNST
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB1
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB2
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB7
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB7.URTH
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB7.URTH.UPDK
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.USB7.URTH.UNST
    unknown pnpinfo _HID=UNKNOWN _UID=0 at path=\_SB_.PCI0.AC9M
    unknown pnpinfo _HID=IBM0079 _UID=0 at path=\_SB_.GDCK
    unknown pnpinfo _HID=IBM006A _UID=0 at path=\_SB_.NEST
    unknown pnpinfo _HID=IBM0069 _UID=0 at path=\_SB_.SWAP

Now, ACPI namespace object can hold OS-specified data with 
AcpiAttachData(); So, we may attach device_t object to ACPI object and
PCI devices in ACPI namespace is only attaced to PCI, not under acpi.

like...

ACPI attach child with 1 depth
  Found PCI bus on ACPI
    PCI device found
      Search ACPI handle->no
    PCI device found
      Search ACPI handle->yes
        Attach device_t in namespace.
    ....
    ISAB found..
      attach acpi version of ISA bus.
        attach ISA devices....
End.
ACPI attach child with all tree.
     Attach all stray objects.
End


More information about the p4-projects mailing list