From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Daniel Kaehn <kaehndan@gmail.com>,
Hans de Goede <hdegoede@redhat.com>,
robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org,
jikos@kernel.org, bartosz.golaszewski@linaro.org,
dmitry.torokhov@gmail.com, devicetree@vger.kernel.org,
linux-input@vger.kernel.org, ethan.twardy@plexus.com
Subject: Re: [PATCH v8 3/3] HID: cp2112: Fwnode Support
Date: Mon, 6 Mar 2023 15:48:18 +0100 [thread overview]
Message-ID: <1cab1439-77f3-6739-d4cd-5862ce8512d8@redhat.com> (raw)
In-Reply-To: <ZAXlh9ZVjGJh0l7n@smile.fi.intel.com>
[-- Attachment #1: Type: text/plain, Size: 13762 bytes --]
On Mon, Mar 6, 2023 at 2:07 PM Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>
> On Mon, Mar 06, 2023 at 01:36:51PM +0100, Benjamin Tissoires wrote:
> > On Mon, Mar 6, 2023 at 11:49 AM Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > On Thu, Mar 02, 2023 at 06:06:06PM +0100, Benjamin Tissoires wrote:
> > > > On Mar 01 2023, Andy Shevchenko wrote:
> > > > > On Tue, Feb 28, 2023 at 01:05:54PM -0600, Daniel Kaehn wrote:
>
> ...
>
> [1]: https://stackoverflow.com/a/60855157/2511795
>
> > > > Thanks Andy for your help here, and thanks for that link.
> > > >
> > > > I am trying to test Danny's patch as I want to use it for my HID CI,
> > > > being an owner of a CP2112 device myself.
> > > >
> > > > The current setup is using out of the tree patches [2] which are
> > > > implementing a platform i2c-hid support and some manual addition of a
> > > > I2C-HID device on top of it. This works fine but gets busted every now
> > > > and then when the tree sees a change that conflicts with these patches.
> > > >
> > > > So with Danny's series, I thought I could have an SSDT override to
> > > > declare that very same device instead of patching my kernel before
> > > > testing it.
> > > >
> > > > Of course, it gets tricky because I need to run that under qemu.
> > > >
> > > > I am currently stuck at the "sharing the firmware_node from usb with
> > > > HID" step and I'd like to know if you could help me.
> > > >
> > > > On my laptop, if I plug the CP2112 (without using a USB hub), I can get:
> > > >
> > > > $> ls -l /sys/bus/hid/devices/0003:10C4:EA90.*
> > > > lrwxrwxrwx. 1 root root 0 Mar 2 17:02 /sys/bus/hid/devices/0003:10C4:EA90.0079 -> ../../../devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/0003:10C4:EA90.0079
> > > > $> ls -l /sys/bus/usb/devices/2-9*/firmware_node
> > > > lrwxrwxrwx. 1 root root 0 Mar 2 17:03 /sys/bus/usb/devices/2-9:1.0/firmware_node -> ../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:25
> > > > lrwxrwxrwx. 1 root root 0 Mar 2 17:02 /sys/bus/usb/devices/2-9/firmware_node -> ../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:25
> > > >
> > > > So AFAIU the USB device is properly assigned a firmware node. My dsdt
> > > > also shows the "Device (RHUB)" and I guess everything is fine.
> > >
> > > Yes, so far so good.
> > >
> > > > However, playing with qemu is not so easy.
> > > >
> > > > I am running qemu with the following arguments (well, almost because I
> > > > have a wrapper script on top of it and I also run the compiled kernel
> > > > from the current tree):
> > > >
> > > > #> qemu-system-x86_64 -bios /usr/share/edk2/ovmf/OVMF_CODE.fd \
> > > > -netdev user,id=hostnet0 \
> > > > -device virtio-net-pci,netdev=hostnet0 \
> > > > -m 4G \
> > > > -enable-kvm \
> > > > -cpu host \
> > > > -device qemu-xhci -usb \
> > > > -device 'usb-host,vendorid=0x10c4,productid=0xea90' \
> > > > -cdrom ~/Downloads/Fedora-Workstation-Live-x86_64-37-1.7.iso
> > >
> > > Side question, where can I get those blobs from (EDKII and Fedora Live CD)?
> > > I'm using Debian unstable.
> >
> > You can install the ovmf package in debian[3], which should have a
> > similar file.
> > For the Fedora livecd -> https://getfedora.org/fr/workstation/download/
> > but any other distribution with a recent enough kernel should show the
> > same.
>
> Thank you!
>
> > > > And this is what I get:
> > > >
> > > > #> ls -l /sys/bus/hid/devices/0003:10C4:EA90.*
> > > > lrwxrwxrwx 1 root root 0 Mar 2 16:10 /sys/bus/hid/devices/0003:10C4:EA90.0001 -> ../../../devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/0003:10C4:EA90.0001
> > > >
> > > > #> ls -l /sys/bus/usb/devices/2-1*/firmware_node
> > > > ls: cannot access '/sys/bus/usb/devices/2-1*/firmware_node': No such file or directory
> > > >
> > > > Looking at the DSDT, I do not see any reference to the USB hub, so I
> > > > wonder if the firmware_node needs to be populated first in the DSDT.
> > >
> > > So, where QEMU takes DSDT (ACPI tables in general) from? Can you patch that?
> > > I believe that's the problem in qemu.
> >
> > That's a good question and it's one I am not sure I have the answer to.
> > I would have assumed that the DSDT was in the OVMF firmware, but given
> > that we can arbitrarily add command line arguments, I believe it
> > probably just provides a baseline and then we are screwed. The OVMF bios
> > is compiled only once, so I doubt there is any mechanism to
> > enable/disable a component in the DSDT, or make it dynamically
> > generated.
>
> We have two ways of filling missing parts:
> 1) update the original source of DSDT (firmware or bootloader,
> whichever provides that);
> 2) adding an overlay.
>
> The 2) works _if and only if_ there is *no* existing object in the tables.
> In such cases, you can simply provide a *full* hierarchy. See an example of
> PCI devices in the kernel documentation on how to do that. I believe something
> similar can be done for USB.
Please find attached the dsdt from the Qemu VM.
And after looking at it, your comments below, I think I am understanding
what is happening (on the qemu side at least):
#> grep PCI0.S /sys/bus/acpi/devices/*/path
/sys/bus/acpi/devices/device:02/path:\_SB_.PCI0.S00_
/sys/bus/acpi/devices/device:03/path:\_SB_.PCI0.S10_
/sys/bus/acpi/devices/device:04/path:\_SB_.PCI0.S18_
/sys/bus/acpi/devices/device:05/path:\_SB_.PCI0.S20_
/sys/bus/acpi/devices/device:06/path:\_SB_.PCI0.S28_
/sys/bus/acpi/devices/device:07/path:\_SB_.PCI0.S30_
/sys/bus/acpi/devices/device:08/path:\_SB_.PCI0.S38_
/sys/bus/acpi/devices/device:09/path:\_SB_.PCI0.S40_
/sys/bus/acpi/devices/device:0a/path:\_SB_.PCI0.S48_
/sys/bus/acpi/devices/device:0b/path:\_SB_.PCI0.S50_
/sys/bus/acpi/devices/device:0c/path:\_SB_.PCI0.S58_
/sys/bus/acpi/devices/device:0d/path:\_SB_.PCI0.S60_
/sys/bus/acpi/devices/device:0e/path:\_SB_.PCI0.S68_
/sys/bus/acpi/devices/device:0f/path:\_SB_.PCI0.S70_
/sys/bus/acpi/devices/device:10/path:\_SB_.PCI0.S78_
/sys/bus/acpi/devices/device:11/path:\_SB_.PCI0.S80_
/sys/bus/acpi/devices/device:12/path:\_SB_.PCI0.S88_
/sys/bus/acpi/devices/device:13/path:\_SB_.PCI0.S90_
/sys/bus/acpi/devices/device:14/path:\_SB_.PCI0.S98_
/sys/bus/acpi/devices/device:15/path:\_SB_.PCI0.SA0_
/sys/bus/acpi/devices/device:16/path:\_SB_.PCI0.SA8_
/sys/bus/acpi/devices/device:17/path:\_SB_.PCI0.SB0_
/sys/bus/acpi/devices/device:18/path:\_SB_.PCI0.SB8_
/sys/bus/acpi/devices/device:19/path:\_SB_.PCI0.SC0_
/sys/bus/acpi/devices/device:1a/path:\_SB_.PCI0.SC8_
/sys/bus/acpi/devices/device:1b/path:\_SB_.PCI0.SD0_
/sys/bus/acpi/devices/device:1c/path:\_SB_.PCI0.SD8_
/sys/bus/acpi/devices/device:1d/path:\_SB_.PCI0.SE0_
/sys/bus/acpi/devices/device:1e/path:\_SB_.PCI0.SE8_
/sys/bus/acpi/devices/device:1f/path:\_SB_.PCI0.SF0_
/sys/bus/acpi/devices/device:20/path:\_SB_.PCI0.SF8_
And those translate on the DSDT as (for the S30/S38 chunk I am
interested in):
Device (S30)
{
Name (_ADR, 0x00060000) // _ADR: Address
Name (ASUN, 0x06)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x06) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
Device (S38)
{
Name (_ADR, 0x00070000) // _ADR: Address
Name (ASUN, 0x07)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x07) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
The forwarded USB node is actually on device:07 -> S30_, and as much as
I'd like it to be a regular USB hub, this looks like a virtio node entry
that allows to forward a physical device to the VM.
So IMO, the missing piece might rely on the virtio-usb code which
doesn't export the firmware node, which means I can not extend the
device with an SSDT overlay ATM because the USB node doesn't have the
fw_node.
>
> > > > Also note that if I plug the CP2112 over a docking station, I lose the
> > > > firmware_node sysfs entries on the host too.
> > >
> > > This seems like a lack of firmware node propagating in the USB hub code in
> > > the Linux kernel.
> >
> > That would make a lot of sense.
> >
> > FWIW, in the VM I see a firmware node on the pci controller itself:
> > #> ls -l /sys/devices/pci0000\:00/0000\:00\:06.0/firmware_node
> > lrwxrwxrwx 1 root root 0 Mar 6 12:24 /sys/devices/pci0000:00/0000:00:06.0/firmware_node -> ../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07
> >
> > And one the host, through a USB hub:
> >
> > #> ls -l /sys/bus/hid/devices/0003:10C4:EA90.*
> > lrwxrwxrwx. 1 root root 0 Mar 6 13:26 /sys/bus/hid/devices/0003:10C4:EA90.007C -> ../../../devices/pci0000:00/0000:00:14.0/usb2/2-8/2-8.2/2-8.2.4/2-8.2.4:1.0/0003:10C4:EA90.007C
> > #> ls -l /sys/bus/usb/devices/2-8*/firmware_node
> > lrwxrwxrwx. 1 root root 0 Mar 2 16:53 /sys/bus/usb/devices/2-8:1.0/firmware_node -> ../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:1e
> > lrwxrwxrwx. 1 root root 0 Mar 2 16:53 /sys/bus/usb/devices/2-8/firmware_node -> ../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:1e
> >
> > Note that the firmware node propagation stopped at 2-8, and 2.8.2 is not
> > having a firmware node.
>
> It would be nice if you can run `grep -H 15 /sys/bus/acpi/devices/*/status`,
This command (both on the host and on the VM) does not show any USB
device or even the PCI USB controller itself (PNP0A08 or PNP0A03).
> filter out unneeded ones, and for the rest also print their paths:
> `cat filtered_list_of_acpi_devs | while read p; do grep -H . $p/path; done`
see above for the VM case, and in the host:
#> grep XHC /sys/bus/acpi/devices/*/path
/sys/bus/acpi/devices/device:15/path:\_SB_.PCI0.XHC_
/sys/bus/acpi/devices/device:16/path:\_SB_.PCI0.XHC_.RHUB
/sys/bus/acpi/devices/device:17/path:\_SB_.PCI0.XHC_.RHUB.HS01
/sys/bus/acpi/devices/device:18/path:\_SB_.PCI0.XHC_.RHUB.HS02
/sys/bus/acpi/devices/device:19/path:\_SB_.PCI0.XHC_.RHUB.HS03
/sys/bus/acpi/devices/device:1a/path:\_SB_.PCI0.XHC_.RHUB.HS04
/sys/bus/acpi/devices/device:1b/path:\_SB_.PCI0.XHC_.RHUB.HS05
/sys/bus/acpi/devices/device:1c/path:\_SB_.PCI0.XHC_.RHUB.HS06
/sys/bus/acpi/devices/device:1d/path:\_SB_.PCI0.XHC_.RHUB.HS07
/sys/bus/acpi/devices/device:1e/path:\_SB_.PCI0.XHC_.RHUB.HS08
/sys/bus/acpi/devices/device:1f/path:\_SB_.PCI0.XHC_.RHUB.SS01
/sys/bus/acpi/devices/device:20/path:\_SB_.PCI0.XHC_.RHUB.SS02
/sys/bus/acpi/devices/device:21/path:\_SB_.PCI0.XHC_.RHUB.SS03
/sys/bus/acpi/devices/device:22/path:\_SB_.PCI0.XHC_.RHUB.SS04
/sys/bus/acpi/devices/device:23/path:\_SB_.PCI0.XHC_.RHUB.SS05
/sys/bus/acpi/devices/device:24/path:\_SB_.PCI0.XHC_.RHUB.SS06
/sys/bus/acpi/devices/device:25/path:\_SB_.PCI0.XHC_.RHUB.HS09
/sys/bus/acpi/devices/device:26/path:\_SB_.PCI0.XHC_.RHUB.HS10
/sys/bus/acpi/devices/device:27/path:\_SB_.PCI0.XHC_.RHUB.USR1
/sys/bus/acpi/devices/device:28/path:\_SB_.PCI0.XHC_.RHUB.USR2
/sys/bus/acpi/devices/device:85/path:\_SB_.PCI0.TXHC
/sys/bus/acpi/devices/device:86/path:\_SB_.PCI0.TXHC.RHUB
/sys/bus/acpi/devices/device:87/path:\_SB_.PCI0.TXHC.RHUB.HS01
/sys/bus/acpi/devices/device:88/path:\_SB_.PCI0.TXHC.RHUB.SS01
/sys/bus/acpi/devices/device:89/path:\_SB_.PCI0.TXHC.RHUB.SS02
/sys/bus/acpi/devices/device:8a/path:\_SB_.PCI0.TXHC.RHUB.SS03
/sys/bus/acpi/devices/device:8b/path:\_SB_.PCI0.TXHC.RHUB.SS04
Which is coherent with the ../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:1e
I get when looking at the USB port.
>
> With this we will see what devices are actually present and up and running
> in the system and what their paths in the ACPI namespace.
So it seems that the USB hub functionality is not creating fw_nodes for
its children. But I am not sure this is a battle we want to fight right
now, because it doesn't make a lot of sense IMO to add an SSDT overlay
on a hub.
>
> > > > Do you think it would be achievable to emulate that over qemu and use a
> > > > mainline kernel without patches?
> > >
> > > As long as qemu provides correct DSDT it should work I assume.
> >
> > Just to be sure I understand, for this to work, we need the DSDT to
> > export a "Device(RHUB)"?
>
> Not sure I understand the term "export" here. We need a description
> of the (to describe) missing parts.
Yes, I meant "to describe" it.
>
> > Or if we fix the USB fw_node propagation, could we just overwrite
> > "\_SB_.PCI0.S30_"? "\_SB_.PCI0.S30_" is the name the ACPI is giving to
> > the USB port in my VM case AFAIU.
>
> I have no idea what is the S30 node.
That gave me the hint I needed, I think. The problem must be in the
virtio drivers, where it doesn't attach the fw_node to the components it
creates. We probably need kind of the same patch Danny is sending in 2/3
in this series, but for virtio.
Cheers,
Benjamin
>
> [2] https://gitlab.freedesktop.org/bentiss/gitlab-kernel-ci/-/tree/master/VM
> [3] https://packages.debian.org/buster/all/ovmf/filelist
>
> --
> With Best Regards,
> Andy Shevchenko
>
>
[-- Attachment #2: dsdt.dsl --]
[-- Type: text/x-dsl, Size: 49650 bytes --]
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20220331 (64-bit version)
* Copyright (c) 2000 - 2022 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of dsdt.dat, Thu Mar 2 15:16:39 2023
*
* Original Table Header:
* Signature "DSDT"
* Length 0x00001795 (6037)
* Revision 0x01 **** 32-bit table (V1), no 64-bit math support
* Checksum 0xDE
* OEM ID "BOCHS "
* OEM Table ID "BXPC "
* OEM Revision 0x00000001 (1)
* Compiler ID "BXPC"
* Compiler Version 0x00000001 (1)
*/
DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPC ", 0x00000001)
{
Scope (\)
{
OperationRegion (DBG, SystemIO, 0x0402, One)
Field (DBG, ByteAcc, NoLock, Preserve)
{
DBGB, 8
}
Method (DBUG, 1, NotSerialized)
{
ToHexString (Arg0, Local0)
ToBuffer (Local0, Local0)
Local1 = (SizeOf (Local0) - One)
Local2 = Zero
While ((Local2 < Local1))
{
DBGB = DerefOf (Local0 [Local2])
Local2++
}
DBGB = 0x0A
}
}
Scope (_SB)
{
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID
Name (_ADR, Zero) // _ADR: Address
Name (_UID, Zero) // _UID: Unique ID
}
}
Scope (_SB)
{
Device (HPET)
{
Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400)
Field (HPTM, DWordAcc, Lock, Preserve)
{
VEND, 32,
PRD, 32
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
Local0 = VEND /* \_SB_.HPET.VEND */
Local1 = PRD /* \_SB_.HPET.PRD_ */
Local0 >>= 0x10
If (((Local0 == Zero) || (Local0 == 0xFFFF)))
{
Return (Zero)
}
If (((Local1 == Zero) || (Local1 > 0x05F5E100)))
{
Return (Zero)
}
Return (0x0F)
}
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
)
})
}
}
Scope (_SB.PCI0)
{
Device (ISA)
{
Name (_ADR, 0x00010000) // _ADR: Address
OperationRegion (P40C, PCI_Config, 0x60, 0x04)
}
}
Scope (_SB.PCI0.ISA)
{
Device (KBD)
{
Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID
Name (_STA, 0x0F) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0060, // Range Minimum
0x0060, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x0064, // Range Minimum
0x0064, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IRQNoFlags ()
{1}
})
}
Device (MOU)
{
Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID
Name (_STA, 0x0F) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IRQNoFlags ()
{12}
})
}
Device (FDC0)
{
Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x03F2, // Range Minimum
0x03F2, // Range Maximum
0x00, // Alignment
0x04, // Length
)
IO (Decode16,
0x03F7, // Range Minimum
0x03F7, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IRQNoFlags ()
{6}
DMA (Compatibility, NotBusMaster, Transfer8, )
{2}
})
Device (FLPA)
{
Name (_ADR, Zero) // _ADR: Address
Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information
{
Zero,
0x05,
0x4F,
0x30,
One,
0xAF,
0x02,
0x25,
0x02,
0x12,
0x1B,
0xFF,
0x6C,
0xF6,
0x0F,
0x08
})
}
Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate
{
/* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........
/* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........
/* 0010 */ 0x02, 0x00, 0x00, 0x00 // ....
})
}
Device (LPT1)
{
Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
Name (_STA, 0x0F) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0378, // Range Minimum
0x0378, // Range Maximum
0x08, // Alignment
0x08, // Length
)
IRQNoFlags ()
{7}
})
}
Device (COM1)
{
Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
Name (_STA, 0x0F) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x03F8, // Range Minimum
0x03F8, // Range Maximum
0x00, // Alignment
0x08, // Length
)
IRQNoFlags ()
{4}
})
}
Device (RTC)
{
Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x01, // Alignment
0x08, // Length
)
IRQNoFlags ()
{8}
})
}
}
Scope (_SB.PCI0)
{
OperationRegion (PCST, SystemIO, 0xAE00, 0x08)
Field (PCST, DWordAcc, NoLock, WriteAsZeros)
{
PCIU, 32,
PCID, 32
}
OperationRegion (SEJ, SystemIO, 0xAE08, 0x04)
Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
{
B0EJ, 32
}
OperationRegion (BNMR, SystemIO, 0xAE10, 0x08)
Field (BNMR, DWordAcc, NoLock, WriteAsZeros)
{
BNUM, 32,
PIDX, 32
}
Mutex (BLCK, 0x00)
Method (PCEJ, 2, NotSerialized)
{
Acquire (BLCK, 0xFFFF)
BNUM = Arg0
B0EJ = (One << Arg1)
Release (BLCK)
Return (Zero)
}
Method (AIDX, 2, NotSerialized)
{
Acquire (BLCK, 0xFFFF)
BNUM = Arg0
PIDX = (One << Arg1)
Local0 = PIDX /* \_SB_.PCI0.PIDX */
Release (BLCK)
Return (Local0)
}
Method (PDSM, 6, Serialized)
{
If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
{
Local0 = AIDX (Arg4, Arg5)
If ((Arg2 == Zero))
{
If ((Arg1 == 0x02))
{
If (!((Local0 == Zero) | (Local0 == 0xFFFFFFFF)))
{
Return (Buffer (One)
{
0x81 // .
})
}
}
Return (Buffer (One)
{
0x00 // .
})
}
ElseIf ((Arg2 == 0x07))
{
Local1 = Package (0x02)
{
Zero,
""
}
Local1 [Zero] = Local0
Return (Local1)
}
}
}
}
Scope (_SB)
{
Scope (PCI0)
{
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
Local0 = Package (0x80) {}
Local1 = Zero
While ((Local1 < 0x80))
{
Local2 = (Local1 >> 0x02)
Local3 = ((Local1 + Local2) & 0x03)
If ((Local3 == Zero))
{
Local4 = Package (0x04)
{
Zero,
Zero,
LNKD,
Zero
}
}
If ((Local3 == One))
{
If ((Local1 == 0x04))
{
Local4 = Package (0x04)
{
Zero,
Zero,
LNKS,
Zero
}
}
Else
{
Local4 = Package (0x04)
{
Zero,
Zero,
LNKA,
Zero
}
}
}
If ((Local3 == 0x02))
{
Local4 = Package (0x04)
{
Zero,
Zero,
LNKB,
Zero
}
}
If ((Local3 == 0x03))
{
Local4 = Package (0x04)
{
Zero,
Zero,
LNKC,
Zero
}
}
Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF)
Local4 [One] = (Local1 & 0x03)
Local0 [Local1] = Local4
Local1++
}
Return (Local0)
}
}
Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve)
{
PRQ0, 8,
PRQ1, 8,
PRQ2, 8,
PRQ3, 8
}
Method (IQST, 1, NotSerialized)
{
If ((0x80 & Arg0))
{
Return (0x09)
}
Return (0x0B)
}
Method (IQCR, 1, Serialized)
{
Name (PRR0, ResourceTemplate ()
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00)
{
0x00000000,
}
})
CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts
If ((Arg0 < 0x80))
{
PRRI = Arg0
}
Return (PRR0) /* \_SB_.IQCR.PRR0 */
}
Device (LNKA)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, )
{
0x00000005,
0x0000000A,
0x0000000B,
}
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (IQST (PRQ0))
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
PRQ0 |= 0x80
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (IQCR (PRQ0))
}
Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings
{
CreateDWordField (Arg0, 0x05, PRRI)
PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */
}
}
Device (LNKB)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, )
{
0x00000005,
0x0000000A,
0x0000000B,
}
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (IQST (PRQ1))
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
PRQ1 |= 0x80
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (IQCR (PRQ1))
}
Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings
{
CreateDWordField (Arg0, 0x05, PRRI)
PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */
}
}
Device (LNKC)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x02) // _UID: Unique ID
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, )
{
0x00000005,
0x0000000A,
0x0000000B,
}
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (IQST (PRQ2))
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
PRQ2 |= 0x80
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (IQCR (PRQ2))
}
Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings
{
CreateDWordField (Arg0, 0x05, PRRI)
PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */
}
}
Device (LNKD)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x03) // _UID: Unique ID
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, )
{
0x00000005,
0x0000000A,
0x0000000B,
}
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (IQST (PRQ3))
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
PRQ3 |= 0x80
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (IQCR (PRQ3))
}
Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings
{
CreateDWordField (Arg0, 0x05, PRRI)
PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */
}
}
Device (LNKS)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x04) // _UID: Unique ID
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, )
{
0x00000009,
}
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0B)
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (_PRS) /* \_SB_.LNKS._PRS */
}
Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings
{
}
}
}
Scope (_SB)
{
Device (\_SB.PCI0.PRES)
{
Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID
Name (_UID, "CPU Hotplug resources") // _UID: Unique ID
Mutex (CPLK, 0x00)
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0xAF00, // Range Minimum
0xAF00, // Range Maximum
0x01, // Alignment
0x0C, // Length
)
})
OperationRegion (PRST, SystemIO, 0xAF00, 0x0C)
Field (PRST, ByteAcc, NoLock, WriteAsZeros)
{
Offset (0x04),
CPEN, 1,
CINS, 1,
CRMV, 1,
CEJ0, 1,
CEJF, 1,
Offset (0x05),
CCMD, 8
}
Field (PRST, DWordAcc, NoLock, Preserve)
{
CSEL, 32,
Offset (0x08),
CDAT, 32
}
Method (_INI, 0, Serialized) // _INI: Initialize
{
CSEL = Zero
}
}
Device (\_SB.CPUS)
{
Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID
Method (CTFY, 2, NotSerialized)
{
If ((Arg0 == Zero))
{
Notify (C000, Arg1)
}
}
Method (CSTA, 1, Serialized)
{
Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF)
\_SB.PCI0.PRES.CSEL = Arg0
Local0 = Zero
If ((\_SB.PCI0.PRES.CPEN == One))
{
Local0 = 0x0F
}
Release (\_SB.PCI0.PRES.CPLK)
Return (Local0)
}
Method (CEJ0, 1, Serialized)
{
Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF)
\_SB.PCI0.PRES.CSEL = Arg0
\_SB.PCI0.PRES.CEJ0 = One
Release (\_SB.PCI0.PRES.CPLK)
}
Method (CSCN, 0, Serialized)
{
Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF)
Name (CNEW, Package (0xFF) {})
Local3 = Zero
Local4 = One
While ((Local4 == One))
{
Local4 = Zero
Local0 = One
Local1 = Zero
While (((Local0 == One) && (Local3 < One)))
{
Local0 = Zero
\_SB.PCI0.PRES.CSEL = Local3
\_SB.PCI0.PRES.CCMD = Zero
If ((\_SB.PCI0.PRES.CDAT < Local3))
{
Break
}
If ((Local1 == 0xFF))
{
Local4 = One
Break
}
Local3 = \_SB.PCI0.PRES.CDAT
If ((\_SB.PCI0.PRES.CINS == One))
{
CNEW [Local1] = Local3
Local1++
Local0 = One
}
ElseIf ((\_SB.PCI0.PRES.CRMV == One))
{
CTFY (Local3, 0x03)
\_SB.PCI0.PRES.CRMV = One
Local0 = One
}
Local3++
}
Local2 = Zero
While ((Local2 < Local1))
{
Local3 = DerefOf (CNEW [Local2])
CTFY (Local3, One)
Debug = Local3
\_SB.PCI0.PRES.CSEL = Local3
\_SB.PCI0.PRES.CINS = One
Local2++
}
}
Release (\_SB.PCI0.PRES.CPLK)
}
Method (COST, 4, Serialized)
{
Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF)
\_SB.PCI0.PRES.CSEL = Arg0
\_SB.PCI0.PRES.CCMD = One
\_SB.PCI0.PRES.CDAT = Arg1
\_SB.PCI0.PRES.CCMD = 0x02
\_SB.PCI0.PRES.CDAT = Arg2
Release (\_SB.PCI0.PRES.CPLK)
}
Processor (C000, 0x00, 0x00000000, 0x00)
{
Method (_STA, 0, Serialized) // _STA: Status
{
Return (CSTA (Zero))
}
Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry
{
0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........
})
Method (_OST, 3, Serialized) // _OST: OSPM Status Indication
{
COST (Zero, Arg0, Arg1, Arg2)
}
}
}
}
Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF
{
\_SB.CPUS.CSCN ()
}
Scope (_GPE)
{
Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID
Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF
{
Acquire (\_SB.PCI0.BLCK, 0xFFFF)
\_SB.PCI0.PCNT ()
Release (\_SB.PCI0.BLCK)
}
}
Scope (\_SB.PCI0)
{
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
0x0000, // Granularity
0x0000, // Range Minimum
0x00FF, // Range Maximum
0x0000, // Translation Offset
0x0100, // Length
,, )
IO (Decode16,
0x0CF8, // Range Minimum
0x0CF8, // Range Maximum
0x01, // Alignment
0x08, // Length
)
WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, // Granularity
0x0000, // Range Minimum
0x0CF7, // Range Maximum
0x0000, // Translation Offset
0x0CF8, // Length
,, , TypeStatic, DenseTranslation)
WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, // Granularity
0x0D00, // Range Minimum
0xFFFF, // Range Maximum
0x0000, // Translation Offset
0xF300, // Length
,, , TypeStatic, DenseTranslation)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000A0000, // Range Minimum
0x000BFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00020000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
0x00000000, // Granularity
0xC0000000, // Range Minimum
0xFEBFFFFF, // Range Maximum
0x00000000, // Translation Offset
0x3EC00000, // Length
,, , AddressRangeMemory, TypeStatic)
QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x0000000000000000, // Granularity
0x0000000140000000, // Range Minimum
0x00000001BFFFFFFF, // Range Maximum
0x0000000000000000, // Translation Offset
0x0000000080000000, // Length
,, , AddressRangeMemory, TypeStatic)
})
Device (GPE0)
{
Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID
Name (_UID, "GPE0 resources") // _UID: Unique ID
Name (_STA, 0x0B) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0xAFE0, // Range Minimum
0xAFE0, // Range Maximum
0x01, // Alignment
0x04, // Length
)
})
}
Device (PHPR)
{
Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID
Name (_UID, "PCI Hotplug resources") // _UID: Unique ID
Name (_STA, 0x0B) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0xAE00, // Range Minimum
0xAE00, // Range Maximum
0x01, // Alignment
0x18, // Length
)
})
}
}
Scope (\)
{
Name (_S3, Package (0x04) // _S3_: S3 System State
{
One,
One,
Zero,
Zero
})
Name (_S4, Package (0x04) // _S4_: S4 System State
{
0x02,
0x02,
Zero,
Zero
})
Name (_S5, Package (0x04) // _S5_: S5 System State
{
Zero,
Zero,
Zero,
Zero
})
}
Scope (\_SB.PCI0)
{
Device (FWCF)
{
Name (_HID, "QEMU0002") // _HID: Hardware ID
Name (_STA, 0x0B) // _STA: Status
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0510, // Range Minimum
0x0510, // Range Maximum
0x01, // Alignment
0x0C, // Length
)
})
}
}
Scope (\_SB)
{
Scope (PCI0)
{
Name (BSEL, Zero)
Device (S00)
{
Name (_ADR, Zero) // _ADR: Address
Name (ASUN, Zero)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
}
Device (S10)
{
Name (_ADR, 0x00020000) // _ADR: Address
Name (ASUN, 0x02)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State
{
Return (Zero)
}
Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State
{
Return (Zero)
}
Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State
{
Return (Zero)
}
}
Device (S18)
{
Name (_ADR, 0x00030000) // _ADR: Address
Name (ASUN, 0x03)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x03) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
Device (S20)
{
Name (_ADR, 0x00040000) // _ADR: Address
Name (ASUN, 0x04)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x04) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
Device (S28)
{
Name (_ADR, 0x00050000) // _ADR: Address
Name (ASUN, 0x05)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x05) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
Device (S30)
{
Name (_ADR, 0x00060000) // _ADR: Address
Name (ASUN, 0x06)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x06) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
Device (S38)
{
Name (_ADR, 0x00070000) // _ADR: Address
Name (ASUN, 0x07)
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, ASUN))
}
Name (_SUN, 0x07) // _SUN: Slot User Number
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
}
Device (S40)
{
Name (_SUN, 0x08) // _SUN: Slot User Number
Name (_ADR, 0x00080000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S48)
{
Name (_SUN, 0x09) // _SUN: Slot User Number
Name (_ADR, 0x00090000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S50)
{
Name (_SUN, 0x0A) // _SUN: Slot User Number
Name (_ADR, 0x000A0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S58)
{
Name (_SUN, 0x0B) // _SUN: Slot User Number
Name (_ADR, 0x000B0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S60)
{
Name (_SUN, 0x0C) // _SUN: Slot User Number
Name (_ADR, 0x000C0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S68)
{
Name (_SUN, 0x0D) // _SUN: Slot User Number
Name (_ADR, 0x000D0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S70)
{
Name (_SUN, 0x0E) // _SUN: Slot User Number
Name (_ADR, 0x000E0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S78)
{
Name (_SUN, 0x0F) // _SUN: Slot User Number
Name (_ADR, 0x000F0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S80)
{
Name (_SUN, 0x10) // _SUN: Slot User Number
Name (_ADR, 0x00100000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S88)
{
Name (_SUN, 0x11) // _SUN: Slot User Number
Name (_ADR, 0x00110000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S90)
{
Name (_SUN, 0x12) // _SUN: Slot User Number
Name (_ADR, 0x00120000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (S98)
{
Name (_SUN, 0x13) // _SUN: Slot User Number
Name (_ADR, 0x00130000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SA0)
{
Name (_SUN, 0x14) // _SUN: Slot User Number
Name (_ADR, 0x00140000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SA8)
{
Name (_SUN, 0x15) // _SUN: Slot User Number
Name (_ADR, 0x00150000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SB0)
{
Name (_SUN, 0x16) // _SUN: Slot User Number
Name (_ADR, 0x00160000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SB8)
{
Name (_SUN, 0x17) // _SUN: Slot User Number
Name (_ADR, 0x00170000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SC0)
{
Name (_SUN, 0x18) // _SUN: Slot User Number
Name (_ADR, 0x00180000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SC8)
{
Name (_SUN, 0x19) // _SUN: Slot User Number
Name (_ADR, 0x00190000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SD0)
{
Name (_SUN, 0x1A) // _SUN: Slot User Number
Name (_ADR, 0x001A0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SD8)
{
Name (_SUN, 0x1B) // _SUN: Slot User Number
Name (_ADR, 0x001B0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SE0)
{
Name (_SUN, 0x1C) // _SUN: Slot User Number
Name (_ADR, 0x001C0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SE8)
{
Name (_SUN, 0x1D) // _SUN: Slot User Number
Name (_ADR, 0x001D0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SF0)
{
Name (_SUN, 0x1E) // _SUN: Slot User Number
Name (_ADR, 0x001E0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Device (SF8)
{
Name (_SUN, 0x1F) // _SUN: Slot User Number
Name (_ADR, 0x001F0000) // _ADR: Address
Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9
{
PCEJ (BSEL, _SUN)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Return (PDSM (Arg0, Arg1, Arg2, Arg3, BSEL, _SUN))
}
}
Method (DVNT, 2, NotSerialized)
{
If ((Arg0 & 0x08))
{
Notify (S18, Arg1)
}
If ((Arg0 & 0x10))
{
Notify (S20, Arg1)
}
If ((Arg0 & 0x20))
{
Notify (S28, Arg1)
}
If ((Arg0 & 0x40))
{
Notify (S30, Arg1)
}
If ((Arg0 & 0x80))
{
Notify (S38, Arg1)
}
If ((Arg0 & 0x0100))
{
Notify (S40, Arg1)
}
If ((Arg0 & 0x0200))
{
Notify (S48, Arg1)
}
If ((Arg0 & 0x0400))
{
Notify (S50, Arg1)
}
If ((Arg0 & 0x0800))
{
Notify (S58, Arg1)
}
If ((Arg0 & 0x1000))
{
Notify (S60, Arg1)
}
If ((Arg0 & 0x2000))
{
Notify (S68, Arg1)
}
If ((Arg0 & 0x4000))
{
Notify (S70, Arg1)
}
If ((Arg0 & 0x8000))
{
Notify (S78, Arg1)
}
If ((Arg0 & 0x00010000))
{
Notify (S80, Arg1)
}
If ((Arg0 & 0x00020000))
{
Notify (S88, Arg1)
}
If ((Arg0 & 0x00040000))
{
Notify (S90, Arg1)
}
If ((Arg0 & 0x00080000))
{
Notify (S98, Arg1)
}
If ((Arg0 & 0x00100000))
{
Notify (SA0, Arg1)
}
If ((Arg0 & 0x00200000))
{
Notify (SA8, Arg1)
}
If ((Arg0 & 0x00400000))
{
Notify (SB0, Arg1)
}
If ((Arg0 & 0x00800000))
{
Notify (SB8, Arg1)
}
If ((Arg0 & 0x01000000))
{
Notify (SC0, Arg1)
}
If ((Arg0 & 0x02000000))
{
Notify (SC8, Arg1)
}
If ((Arg0 & 0x04000000))
{
Notify (SD0, Arg1)
}
If ((Arg0 & 0x08000000))
{
Notify (SD8, Arg1)
}
If ((Arg0 & 0x10000000))
{
Notify (SE0, Arg1)
}
If ((Arg0 & 0x20000000))
{
Notify (SE8, Arg1)
}
If ((Arg0 & 0x40000000))
{
Notify (SF0, Arg1)
}
If ((Arg0 & 0x80000000))
{
Notify (SF8, Arg1)
}
}
Method (PCNT, 0, NotSerialized)
{
BNUM = Zero
DVNT (PCIU, One)
DVNT (PCID, 0x03)
}
}
}
}
next prev parent reply other threads:[~2023-03-06 14:50 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-27 14:07 [PATCH v8 0/3] Firmware Support for USB-HID Devices and CP2112 Danny Kaehn
2023-02-27 14:07 ` [PATCH v8 1/3] dt-bindings: i2c: Add CP2112 HID USB to SMBus Bridge Danny Kaehn
2023-02-27 14:07 ` [PATCH v8 2/3] HID: usbhid: Share USB device firmware node with child HID device Danny Kaehn
2023-02-27 14:07 ` [PATCH v8 3/3] HID: cp2112: Fwnode Support Danny Kaehn
2023-02-27 23:07 ` Andy Shevchenko
2023-02-28 19:05 ` Daniel Kaehn
2023-03-01 14:59 ` Andy Shevchenko
2023-03-01 15:04 ` Andy Shevchenko
2023-03-02 17:06 ` Benjamin Tissoires
2023-03-06 10:49 ` Andy Shevchenko
2023-03-06 12:36 ` Benjamin Tissoires
2023-03-06 13:07 ` Andy Shevchenko
2023-03-06 14:48 ` Benjamin Tissoires [this message]
2023-03-06 17:01 ` Andy Shevchenko
2023-03-06 19:40 ` Daniel Kaehn
2023-03-06 20:36 ` Andy Shevchenko
2023-03-07 13:17 ` Benjamin Tissoires
2023-03-07 13:53 ` Daniel Kaehn
2023-03-07 14:48 ` Benjamin Tissoires
2023-03-07 18:18 ` Andy Shevchenko
2023-03-08 15:26 ` Benjamin Tissoires
2023-03-08 15:37 ` Daniel Kaehn
2023-03-08 15:55 ` Benjamin Tissoires
2023-03-08 16:30 ` Andy Shevchenko
2023-03-08 16:36 ` Andy Shevchenko
2023-03-08 18:32 ` Daniel Kaehn
2023-03-09 11:43 ` Andy Shevchenko
2023-03-09 11:56 ` Andy Shevchenko
2023-03-09 9:38 ` Benjamin Tissoires
2023-03-09 13:50 ` Andy Shevchenko
2023-03-08 16:20 ` Andy Shevchenko
2023-03-07 18:15 ` Andy Shevchenko
2023-03-07 18:14 ` Andy Shevchenko
2023-03-07 19:57 ` Daniel Kaehn
2023-03-08 12:41 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1cab1439-77f3-6739-d4cd-5862ce8512d8@redhat.com \
--to=benjamin.tissoires@redhat.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bartosz.golaszewski@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=ethan.twardy@plexus.com \
--cc=hdegoede@redhat.com \
--cc=jikos@kernel.org \
--cc=kaehndan@gmail.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-input@vger.kernel.org \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.