Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Dec 2003 16:25:34 +0900
From:      Takanori Watanabe <takawata@axe-inc.co.jp>
To:        Nate Lawson <nate@root.org>
Cc:        imp@bsdimp.com
Subject:   Re: PERFORCE change 43464 for review
Message-ID:  <200312100725.QAA21650@axe-inc.co.jp>
In-Reply-To: Your message of "Tue, 09 Dec 2003 22:31:30 PST." <20031209222111.B44633@root.org>

index | next in thread | previous in thread | raw e-mail

In message <20031209222111.B44633@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


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200312100725.QAA21650>