From owner-p4-projects@FreeBSD.ORG Tue Dec 9 23:25:50 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E524116A4D0; Tue, 9 Dec 2003 23:25:49 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A751916A4CE; Tue, 9 Dec 2003 23:25:49 -0800 (PST) Received: from axe-inc.co.jp (axegw.axe-inc.co.jp [61.199.217.66]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7E5E243D09; Tue, 9 Dec 2003 23:25:46 -0800 (PST) (envelope-from takawata@axe-inc.co.jp) Received: from localhost (localhost [127.0.0.1]) by axe-inc.co.jp (8.9.3+3.2W/3.7W) with SMTP id QAA21650; Wed, 10 Dec 2003 16:25:34 +0900 (JST) Message-Id: <200312100725.QAA21650@axe-inc.co.jp> X-Authentication-Warning: axegw.axe-inc.co.jp: localhost [127.0.0.1] didn't use HELO protocol To: Nate Lawson In-reply-to: Your message of "Tue, 09 Dec 2003 22:31:30 PST." <20031209222111.B44633@root.org> Date: Wed, 10 Dec 2003 16:25:34 +0900 From: Takanori Watanabe cc: perforce@freebsd.org cc: jhb@freebsd.org cc: imp@bsdimp.com Subject: Re: PERFORCE change 43464 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Dec 2003 07:25:50 -0000 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