Bluetooth not working anymore due to too agressive PM in hci_bcm ? (was: [PATCH v5 5/5] Bluetooth: hci_bcm: Add suspend/resume runtime PM functions)
Hi Frederic, Hi Marcel,
I've been trying to figure this out for quite some time: since the Bluetooth BCM chipset of my ThinkPad 8 tablet was added into Linux kernel 4.6, Bluetooth has never been working fully as expected.
To describe the issue: Bluetooth devices (keyboard, mouse) would work and keep connected *only* if a device scan was maintained running in the background. In my setup, the trick was achieved by having the Gnome Bluetooth setting page opened. Without this trick, devices would simply stop responding after a short amount of time; my BT keyboard would also seem disconnected during the session login (despite btattach being properly launched in the background) and would resume right away with a device scan.
I don't know if this issue is widespread but I've found references to at least 2 similar cases at [1] & [2], both for products using hci_bcm. In the bug descriptions, it was stated that kernel 4.3 was working fine while 4.4 wasn't anymore. And indeed, I was able to reproduce this on my side.
By investigating the various changes introduced in 4.4, I've been able to pinpoint the commit [3] that introduces the regression on my tablet:
commit: e88ab30d3669f08e94e66e7f926713be93af97fc
Bluetooth: hci_bcm: Add suspend/resume runtime PM functions
since building a kernel with its parent commit [4] works perfectly fine:
commit: 7649faff1cfe4f76dabf78cd53d659d39f65b3c1
Bluetooth: Remove useless rx_lock spinlock
The code change adding the runtime PM functions introduces an autosleep delay but it's unclear from the commit description how the BT chipset is supposed to get out of sleep afterwards.
For 3 different devices at least (Asus T100 Chi, Asus T100TA and Lenovo ThinkPad Tablet 8), it seems to lead in practice to a regression since the BT chipset doesn't wake up anymore on normal operations (moving the mouse, typing a key on the keyboard, etc) breaking Bluetooth from a user PoV. And maybe a few more products using hci_bcm are impacted too.
If you have a patch suggestion for a potential fix, I would be glad to give it a try in the coming days and confirm if it solves the issue or not.
If a proper fix is going to need quite more time otherwise, could you consider reverting this specific commit in the meantime? Thanks.
Regards,
Jérôme
[1] https://bugzilla.kernel.org/show_bug.cgi?id=109321#c3 (Comments 3 & 4) for Asus T100TA
[2] https://bugzilla.kernel.org/show_bug.cgi?id=114561#c1 for Asus T100 Chi [3] https://git.kernel.org/cgit/linux/kernel/git/bluetooth/bluetooth-next.gi
t/commit/?id=e88ab30d3669f08e94e66e7f926713be93af97fc
[4] https://git.kernel.org/cgit/linux/kernel/git/bluetooth/bluetooth-next.gi
t/commit/?id=7649faff1cfe4f76dabf78cd53d659d39f65b3c1
Hi Jerome,
Quoted 8 lines
since building a kernel with its parent commit [4] works perfectly fine:
commit:7649faff1cfe4f76dabf78cd53d659d39f65b3c1
Bluetooth: Remove uselessrx_lockspinlockThe code change adding the runtime PM functions introduces an autosleep delay but it's unclear from the commit description how the BT chipset is supposed to get out of sleep afterwards.
Using out-of-band gpio/irq which are retrieved from the ACPI device. wakeup can be initiated by host or controller depending which one wants to transfer hci data.
Quoted 6 lines
For 3 different devices at least (Asus T100 Chi, Asus T100TA and Lenovo ThinkPad Tablet 8), it seems to lead in practice to a regression since the BT chipset doesn't wake up anymore on normal operations (moving the mouse, typing a key on the keyboard, etc) breaking Bluetooth from a user PoV. And maybe a few more products using
hci_bcmare impacted too.
I'm going to retry on my T100 and let you know, but used to work.
Quoted 3 lines
If you have a patch suggestion for a potential fix, I would be glad to give it a try in the coming days and confirm if it solves the issue or not.
- What is the state of your interrupt counter ("host_wake") in /proc/interrupts when you try to generate host wake-up events (using mouse...).
- Could you confirm you don't meet the issue if you disable runtime-pm via sysfs. You should find the device (BCM43*) as a child node of your tty in /sys/class/tty*. (echo on > power/control).
Quoted 3 lines
If a proper fix is going to need quite more time otherwise, could you consider reverting this specific commit in the meantime? Thanks.
I remember Frederic had some gpio/irq polarity issues:5cebdfea32b89911d4540440c1c2854a1a3d591e
Bluetooth: hci_bcm: Fix IRQ polarity for T100 Maybe the ACPI table is not correct on some devices.
Regards,
Loic
Marcel Holtmann
maintainerHi Loic,
Quoted 11 lines
Quoted 7 lines
since building a kernel with its parent commit [4] works perfectly fine:
commit:7649faff1cfe4f76dabf78cd53d659d39f65b3c1
Bluetooth: Remove uselessrx_lockspinlockThe code change adding the runtime PM functions introduces an autosleep delay but it's unclear from the commit description how the BT chipset is supposed to get out of sleep afterwards.
Using out-of-band gpio/irq which are retrieved from the ACPI device. wakeup can be initiated by host or controller depending which one wants to transfer hci data.
I am actually curious if HCI remote wakeup might not work. So the HID mouse (I assume Classic here) will initiate a HCI Create Connection which will result in a HCI Connection Request. So that wakeup event needs to be allowed. I am curious if we might not set that correctly.
I would need to see the btmon trace from the controller initialization (start btmon before calling btattach). I am no longer sure that this has been tested with UART based controllers. On USB the remote wakeup works.
If the events for connection creation and remote wakeup set correctly, then it is some GPIO or Broadcom vendor specific thing.
Regards
Marcel
(trying a different email for Frederic as I got a delivery failure)
Hi Loic,
Quoted 3 lines
Using out-of-band gpio/irq which are retrieved from the ACPI device. wakeup can be initiated by host or controller depending which one wants to transfer hci data.
Thanks for this explanation.
Quoted 2 lines
I'm going to retry on my T100 and let you know, but used to work.
Did you have chance to retry on a T100. Is it a T100TA model by the way, or a T100 Chi (to make the distinction between the 2 bugzilla kernel entries)?
Quoted 4 lines
- What is the state of your interrupt counter ("
host_wake") in/proc/interruptswhen you try to generate host wake-up events (using mouse...).
Moving the mouse or clicking on it doesn't change the host_wake interrupt counter in /proc/interrupts after the autosleep period. If I manually trigger a new scan, then the counter starts increasing, but it freezes again after the next autosleep.
Quoted 4 lines
- Could you confirm you don't meet the issue if you disable runtime-pm via sysfs. You should find the device (BCM43*) as a child node of your tty in
/sys/class/tty*. (echo on > power/control).
I can confirm that with the following command, the mouse keeps working and doesn't suddenly stop after a sleep period.
root@thinkpad8:/sys/class/tty/ttyS1/device/BCM2E55:00# echo on > power/control
Quoted 3 lines
I remember Frederic had some gpio/irq polarity issues:>
5cebdfea32b89911d4540440c1c2854a1a3d591e
Bluetooth:hci_bcm: Fix IRQ polarity for T100
Maybe the ACPI table is not correct on some devices.
I had seen that patch indeed. I'm attaching the ACPI table I had shared on the list a long time ago for the ThinkPad Tablet 8. Is there anything that looks suspicious in there and that you could link to a similar gpio/irq polarity issue maybe?
If you think there is a good chance that this could be the issue as well, I will try to build a similar patch for this ThinkPad product and share my results.
Regards,
Jérôme
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20160212-64
* Copyright (c) 2000 - 2016 Intel Corporation *
* Disassembling to symbolic ASL+ operators *
* Disassembly of dsdt.dat, Sun Feb 28 21:04:47 2016 *
* Original Table Header:
* Signature "DSDT" * Length 0x0000F9BF (63935) * Revision 0x02 * Checksum 0xD7 * OEM ID "LENOVO" * OEM Table ID "TP-GY " * OEM Revision 0x00001260 (4704) * Compiler ID "INTL" * Compiler Version 0x20120711 (538052369)
*/
DefinitionBlock ("dsdt.aml", "DSDT", 2, "LENOVO", "TP-GY ", 0x00001260)
{
External (_PR_.CPU0._PPC, UnknownObj)
External (_SB_.PCI0.LPCB.TPM_.PTS_, MethodObj) // 1 Arguments
External (CFGD, UnknownObj)
External (NDN3, MethodObj) // 1 Arguments
External (PDC0, UnknownObj)
External (PDC1, UnknownObj)
External (PDC2, UnknownObj)
External (PDC3, UnknownObj)
External (STR2, UnknownObj)
Method (ADBG, 1, Serialized)
{
Return (Zero)
}
Name (SP3O, 0x2E)
Name (IO4B, 0x0A20)
Name (IO4L, 0x20)
Name (SP1O, 0x4E)
Name (PMBS, 0x0400)
Name (SMIP, 0xB2)
Name (GPBS, 0x0500)
Name (APCB, 0xFEC00000)
Name (APCL, 0x1000)
Name (PFDR, 0xFED03034)
Name (PMCB, 0xFED03000)
Name (PCLK, 0xFED03060)
Name (PUNB, 0xFED05000)
Name (IBAS, 0xFED08000)
Name (SRCB, 0xFED1C000)
Name (SRCL, 0x1000)
Name (HPTB, 0xFED00000)
Name (MCHB, 0xFED14000)
Name (MCHL, 0x4000)
Name (EGPB, 0xFED19000)
Name (EGPL, 0x1000)
Name (DMIB, 0xFED18000)
Name (DMIL, 0x1000)
Name (IFPB, 0xFED14000)
Name (IFPL, 0x1000)
Name (PEBS, 0xE0000000)
Name (PELN, 0x10000000)
Name (FMBL, One)
Name (FDTP, 0x02)
Name (GCDD, One)
Name (DSTA, 0x0A)
Name (DSLO, 0x02)
Name (DSLC, 0x03)
Name (PITS, 0x10)
Name (SBCS, 0x12)
Name (SALS, 0x13)
Name (LSSS, 0x2A)
Name (PSSS, 0x2B)
Name (SOOT, 0x35)
Name (ESCS, 0x48)
Name (SDGV, 0x1C)
Name (ACPH, 0xDE)
Name (ASSB, Zero)
Name (AOTB, Zero)
Name (AAXB, Zero)
Name (PEHP, One)
Name (SHPC, Zero)
Name (PEPM, One)
Name (PEER, One)
Name (PECS, One)
Name (ITKE, Zero)
Name (FTBL, 0x04)
OperationRegion (GNVS, SystemMemory, 0xB995AA98, 0x0339)
Field (GNVS, AnyAcc, Lock, Preserve)
{
OSYS, 16,
SMIF, 8,
PRM0, 8,
PRM1, 8,
SCIF, 8,
PRM2, 8,
PRM3, 8,
LCKF, 8,
PRM4, 8,
PRM5, 8,
P80D, 32,
LIDS, 8,
PWRS, 8,
DBGS, 8,
THOF, 8,
ACT1, 8,
ACTT, 8,
PSVT, 8,
TC1V, 8,
TC2V, 8,
TSPV, 8,
CRTT, 8,
DTSE, 8,
DTS1, 8,
DTS2, 8,
DTSF, 8,
BNUM, 8,
B0SC, 8,
B1SC, 8,
B2SC, 8,
B0SS, 8,
B1SS, 8,
B2SS, 8,
Offset (0x28),
APIC, 8,
MPEN, 8,
PCP0, 8,
PCP1, 8,
PPCM, 8,
PPMF, 32,
Offset (0x32),
NATP, 8,
CMAP, 8,
CMBP, 8,
LPTP, 8,
FDCP, 8,
CMCP, 8,
CIRP, 8,
W381, 8,
NPCE, 8,
Offset (0x3C),
IGDS, 8,
TLST, 8,
CADL, 8,
PADL, 8,
CSTE, 16,
NSTE, 16,
SSTE, 16,
NDID, 8,
DID1, 32,
DID2, 32,
DID3, 32,
DID4, 32,
DID5, 32,
KSV0, 32,
KSV1, 8,
Offset (0x67),
BLCS, 8,
BRTL, 8,
ALSE, 8,
ALAF, 8,
LLOW, 8,
LHIH, 8,
Offset (0x6E),
EMAE, 8,
EMAP, 16,
EMAL, 16,
Offset (0x74),
MEFE, 8,
DSTS, 8,
Offset (0x78),
TPMP, 8,
TPME, 8,
MORD, 8,
TCGP, 8,
PPRP, 32,
PPRQ, 8,
LPPR, 8,
GTF0, 56,
GTF2, 56,
IDEM, 8,
GTF1, 56,
Offset (0xAA),
ASLB, 32,
IBTT, 8,
IPAT, 8,
ITVF, 8,
ITVM, 8,
IPSC, 8,
IBLC, 8,
IBIA, 8,
ISSC, 8,
I409, 8,
I509, 8,
I609, 8,
I709, 8,
IDMM, 8,
IDMS, 8,
IF1E, 8,
HVCO, 8,
NXD1, 32,
NXD2, 32,
NXD3, 32,
NXD4, 32,
NXD5, 32,
NXD6, 32,
NXD7, 32,
NXD8, 32,
GSMI, 8,
PAVP, 8,
Offset (0xE1),
OSCC, 8,
NEXP, 8,
Offset (0xEB),
DSEN, 8,
ECON, 8,
GPIC, 8,
CTYP, 8,
L01C, 8,
VFN0, 8,
VFN1, 8,
Offset (0x100),
NVGA, 32,
NVHA, 32,
AMDA, 32,
DID6, 32,
DID7, 32,
DID8, 32,
Offset (0x14C),
USEL, 8,
PU1E, 8,
PU2E, 8,
LPE0, 32,
LPE1, 32,
LPE2, 32,
ACST, 8,
BTST, 8,
PFLV, 8,
Offset (0x15F),
AOAC, 8,
XHCI, 8,
PMEN, 8,
LPEE, 8,
ISPA, 32,
ISPD, 8,
PCIB, 32,
PCIT, 32,
D10A, 32,
D10L, 32,
D11A, 32,
D11L, 32,
P10A, 32,
P10L, 32,
P11A, 32,
P11L, 32,
P20A, 32,
P20L, 32,
P21A, 32,
P21L, 32,
U10A, 32,
U10L, 32,
U11A, 32,
U11L, 32,
U20A, 32,
U20L, 32,
U21A, 32,
U21L, 32,
SP0A, 32,
SP0L, 32,
SP1A, 32,
SP1L, 32,
D20A, 32,
D20L, 32,
D21A, 32,
D21L, 32,
I10A, 32,
I10L, 32,
I11A, 32,
I11L, 32,
I20A, 32,
I20L, 32,
I21A, 32,
I21L, 32,
I30A, 32,
I30L, 32,
I31A, 32,
I31L, 32,
I40A, 32,
I40L, 32,
I41A, 32,
I41L, 32,
I50A, 32,
I50L, 32,
I51A, 32,
I51L, 32,
I60A, 32,
I60L, 32,
I61A, 32,
I61L, 32,
I70A, 32,
I70L, 32,
I71A, 32,
I71L, 32,
EM0A, 32,
EM0L, 32,
EM1A, 32,
EM1L, 32,
SI0A, 32,
SI0L, 32,
SI1A, 32,
SI1L, 32,
SD0A, 32,
SD0L, 32,
SD1A, 32,
SD1L, 32,
MH0A, 32,
MH0L, 32,
MH1A, 32,
MH1L, 32,
OSSL, 8,
Offset (0x294),
DPTE, 8,
THM0, 8,
THM1, 8,
THM2, 8,
THM3, 8,
THM4, 8,
CHGR, 8,
DDSP, 8,
DSOC, 8,
DPSR, 8,
DPCT, 32,
DPPT, 32,
DGC0, 32,
DGP0, 32,
DGC1, 32,
DGP1, 32,
DGC2, 32,
DGP2, 32,
DGC3, 32,
DGP3, 32,
DGC4, 32,
DGP4, 32,
DLPM, 8,
DSC0, 32,
DSC1, 32,
DSC2, 32,
DSC3, 32,
DSC4, 32,
DDBG, 8,
LPOE, 32,
LPPS, 32,
LPST, 32,
LPPC, 32,
LPPF, 32,
DPME, 8,
BCSL, 8,
NFCS, 8,
Offset (0x2FC),
TPMA, 32,
TPML, 32,
ITSA, 8,
S0IX, 8,
SDMD, 8,
EMVR, 8,
BMBD, 32,
FSAS, 8,
BDID, 8,
FBID, 8,
OTGM, 8,
STEP, 8,
SOCS, 8,
AMTE, 8,
SCPE, 8,
SARE, 8,
PSSD, 8,
EDPV, 8,
DIDX, 32,
COMP, 8,
CAMI, 8,
COMB, 8
}
Scope (_SB)
{
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
)
})
}
Device (HPET)
{
Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RBUF, ResourceTemplate ()
{
Memory32Fixed (ReadWrite,
0xFED00000, // Address Base
0x00000400, // Address Length
)
Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, )
{
0x00000008,
}
})
Return (RBUF) /* \_SB_.HPET._CRS.RBUF */
}
}
Name (PR00, Package (0x12)
{
Package (0x04)
{
0x0010FFFF,
Zero,
LNKA,
Zero
},
Package (0x04)
{
0x0011FFFF,
Zero,
LNKB,
Zero
},
Package (0x04)
{
0x0012FFFF,
Zero,
LNKC,
Zero
},
Package (0x04)
{
0x0014FFFF,
Zero,
LNKE,
Zero
},
Package (0x04)
{
0x0015FFFF,
Zero,
LNKF,
Zero
},
Package (0x04)
{
0x0016FFFF,
Zero,
LNKG,
Zero
},
Package (0x04)
{
0x0017FFFF,
Zero,
LNKH,
Zero
},
Package (0x04)
{
0x0018FFFF,
Zero,
LNKB,
Zero
},
Package (0x04)
{
0x0018FFFF,
0x02,
LNKD,
Zero
},
Package (0x04)
{
0x0018FFFF,
0x03,
LNKC,
Zero
},
Package (0x04)
{
0x0018FFFF,
One,
LNKA,
Zero
},
Package (0x04)
{
0x001AFFFF,
Zero,
LNKF,
Zero
},
Package (0x04)
{
0x001DFFFF,
Zero,
LNKH,
Zero
},
Package (0x04)
{
0x001EFFFF,
Zero,
LNKD,
Zero
},
Package (0x04)
{
0x001EFFFF,
0x03,
LNKA,
Zero
},
Package (0x04)
{
0x001EFFFF,
One,
LNKB,
Zero
},
Package (0x04)
{
0x001EFFFF,
0x02,
LNKC,
Zero
},
Package (0x04)
{
0x0002FFFF,
Zero,
LNKA,
Zero
}
})
Name (AR00, Package (0x11)
{
Package (0x04)
{
0x0010FFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0x0011FFFF,
Zero,
Zero,
0x11
},
Package (0x04)
{
0x0012FFFF,
Zero,
Zero,
0x12
},
Package (0x04)
{
0x0014FFFF,
Zero,
Zero,
0x14
},
Package (0x04)
{
0x0015FFFF,
Zero,
Zero,
0x15
},
Package (0x04)
{
0x0016FFFF,
Zero,
Zero,
0x16
},
Package (0x04)
{
0x0018FFFF,
Zero,
Zero,
0x11
},
Package (0x04)
{
0x0018FFFF,
0x02,
Zero,
0x13
},
Package (0x04)
{
0x0018FFFF,
0x03,
Zero,
0x12
},
Package (0x04)
{
0x0018FFFF,
One,
Zero,
0x10
},
Package (0x04)
{
0x001AFFFF,
Zero,
Zero,
0x15
},
Package (0x04)
{
0x001DFFFF,
Zero,
Zero,
0x17
},
Package (0x04)
{
0x001EFFFF,
Zero,
Zero,
0x13
},
Package (0x04)
{
0x001EFFFF,
0x03,
Zero,
0x10
},
Package (0x04)
{
0x001EFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0x001EFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0x0002FFFF,
Zero,
Zero,
0x10
}
})
Name (PR04, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
LNKA,
Zero
},
Package (0x04)
{
0xFFFF,
One,
LNKB,
Zero
},
Package (0x04)
{
0xFFFF,
0x02,
LNKC,
Zero
},
Package (0x04)
{
0xFFFF,
0x03,
LNKD,
Zero
}
})
Name (AR04, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x13
}
})
Name (PR05, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
LNKB,
Zero
},
Package (0x04)
{
0xFFFF,
One,
LNKC,
Zero
},
Package (0x04)
{
0xFFFF,
0x02,
LNKD,
Zero
},
Package (0x04)
{
0xFFFF,
0x03,
LNKA,
Zero
}
})
Name (AR05, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x13
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x10
}
})
Name (PR06, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
LNKC,
Zero
},
Package (0x04)
{
0xFFFF,
One,
LNKD,
Zero
},
Package (0x04)
{
0xFFFF,
0x02,
LNKA,
Zero
},
Package (0x04)
{
0xFFFF,
0x03,
LNKB,
Zero
}
})
Name (AR06, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x12
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x13
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x11
}
})
Name (PR07, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
LNKD,
Zero
},
Package (0x04)
{
0xFFFF,
One,
LNKA,
Zero
},
Package (0x04)
{
0xFFFF,
0x02,
LNKB,
Zero
},
Package (0x04)
{
0xFFFF,
0x03,
LNKC,
Zero
}
})
Name (AR07, Package (0x04)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x13
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x10
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x11
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x12
}
})
Name (PR01, Package (0x10)
{
Package (0x04)
{
0xFFFF,
Zero,
LNKF,
Zero
},
Package (0x04)
{
0xFFFF,
One,
LNKG,
Zero
},
Package (0x04)
{
0xFFFF,
0x02,
LNKH,
Zero
},
Package (0x04)
{
0xFFFF,
0x03,
LNKE,
Zero
},
Package (0x04)
{
0x0001FFFF,
Zero,
LNKG,
Zero
},
Package (0x04)
{
0x0001FFFF,
One,
LNKF,
Zero
},
Package (0x04)
{
0x0001FFFF,
0x02,
LNKE,
Zero
},
Package (0x04)
{
0x0001FFFF,
0x03,
LNKH,
Zero
},
Package (0x04)
{
0x0002FFFF,
Zero,
LNKC,
Zero
},
Package (0x04)
{
0x0002FFFF,
One,
LNKD,
Zero
},
Package (0x04)
{
0x0002FFFF,
0x02,
LNKB,
Zero
},
Package (0x04)
{
0x0002FFFF,
0x03,
LNKA,
Zero
},
Package (0x04)
{
0x0003FFFF,
Zero,
LNKD,
Zero
},
Package (0x04)
{
0x0003FFFF,
One,
LNKC,
Zero
},
Package (0x04)
{
0x0003FFFF,
0x02,
LNKF,
Zero
},
Package (0x04)
{
0x0003FFFF,
0x03,
LNKG,
Zero
}
})
Name (AR01, Package (0x10)
{
Package (0x04)
{
0xFFFF,
Zero,
Zero,
0x15
},
Package (0x04)
{
0xFFFF,
One,
Zero,
0x16
},
Package (0x04)
{
0xFFFF,
0x02,
Zero,
0x17
},
Package (0x04)
{
0xFFFF,
0x03,
Zero,
0x14
},
Package (0x04)
{
0x0001FFFF,
Zero,
Zero,
0x16
},
Package (0x04)
{
0x0001FFFF,
One,
Zero,
0x15
},
Package (0x04)
{
0x0001FFFF,
0x02,
Zero,
0x14
},
Package (0x04)
{
0x0001FFFF,
0x03,
Zero,
0x17
},
Package (0x04)
{
0x0002FFFF,
Zero,
Zero,
0x12
},
Package (0x04)
{
0x0002FFFF,
One,
Zero,
0x13
},
Package (0x04)
{
0x0002FFFF,
0x02,
Zero,
0x11
},
Package (0x04)
{
0x0002FFFF,
0x03,
Zero,
0x10
},
Package (0x04)
{
0x0003FFFF,
Zero,
Zero,
0x13
},
Package (0x04)
{
0x0003FFFF,
One,
Zero,
0x12
},
Package (0x04)
{
0x0003FFFF,
0x02,
Zero,
0x15
},
Package (0x04)
{
0x0003FFFF,
0x03,
Zero,
0x16
}
})
Name (PRSA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{3,4,5,6,10,11,12,14,15}
})
Alias (PRSA, PRSB)
Alias (PRSA, PRSC)
Alias (PRSA, PRSD)
Alias (PRSA, PRSE)
Alias (PRSA, PRSF)
Alias (PRSA, PRSG)
Alias (PRSA, PRSH)
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID
Name (_ADR, Zero) // _ADR: Address
Method (^BN00, 0, NotSerialized)
{
Return (Zero)
}
Method (_BBN, 0, NotSerialized) // _BBN: BIOS Bus Number
{
Return (BN00 ())
}
Name (_UID, Zero) // _UID: Unique ID
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
{
If (PICM)
{
Return (AR00) /* \_SB_.AR00 */
}
Return (PR00) /* \_SB_.PR00 */
}
Device (VLVC)
{
Name (_ADR, Zero) // _ADR: Address
OperationRegion (HBUS, PCI_Config, Zero, 0xFF)
Field (HBUS, DWordAcc, NoLock, Preserve)
{
Offset (0xD0),
SMCR, 32,
SMDR, 32,
MCRX, 32
}
Method (RMBR, 2, Serialized)
{
Local0 = ((Arg0 << 0x10) | (Arg1 << 0x08))
SMCR = (0x100000F0 | Local0)
Return (SMDR) /* \_SB_.PCI0.VLVC.SMDR */
}
Method (WMBR, 3, Serialized)
{
SMDR = Arg2
Local0 = ((Arg0 << 0x10) | (Arg1 << 0x08))
SMCR = (0x110000F0 | Local0)
}
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
If (TPMP)
{
CreateDWordField (RES0, \_SB.PCI0._Y00._LEN, TPML) // _LEN: Length
TPML = 0x1000
}
CreateDWordField (RES0, \_SB.PCI0._Y01._MIN, ISMN) // _MIN: Minimum Base Address
CreateDWordField (RES0, \_SB.PCI0._Y01._MAX, ISMX) // _MAX: Maximum Base Address
CreateDWordField (RES0, \_SB.PCI0._Y01._LEN, ISLN) // _LEN: Length
If ((ISPD == One))
{
ISMN = ISPA /* \ISPA */
ISMX = (ISMN + ISLN) /* \_SB_.PCI0._CRS.ISLN */
ISMX -= One
}
Else
{
ISMN = Zero
ISMX = Zero
ISLN = Zero
}
CreateDWordField (RES0, \_SB.PCI0._Y02._MIN, M1MN) // _MIN: Minimum Base Address
CreateDWordField (RES0, \_SB.PCI0._Y02._MAX, M1MX) // _MAX: Maximum Base Address
CreateDWordField (RES0, \_SB.PCI0._Y02._LEN, M1LN) // _LEN: Length
M1MN = (BMBD & 0xFF000000)
M1MX = PCIT /* \PCIT */
M1LN = ((M1MX - M1MN) + One)
M1MX -= One
CreateDWordField (RES0, \_SB.PCI0._Y03._MIN, GSMN) // _MIN: Minimum Base Address
CreateDWordField (RES0, \_SB.PCI0._Y03._MAX, GSMX) // _MAX: Maximum Base Address
CreateDWordField (RES0, \_SB.PCI0._Y03._LEN, GSLN) // _LEN: Length
GSMN = ^GFX0.GSTM /* \_SB_.PCI0.GFX0.GSTM */
GSLN = (^GFX0.GUMA << 0x19)
GSMX = (GSMN + GSLN) /* \_SB_.PCI0._CRS.GSLN */
GSMX -= One
Return (RES0) /* \_SB_.PCI0.RES0 */
}
Name (RES0, ResourceTemplate ()
{
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
0x0000, // Granularity
0x0000, // Range Minimum
0x00FF, // Range Maximum
0x0000, // Translation Offset
0x0100, // Length
,, )
IO (Decode16,
0x0070, // Range Minimum
0x0077, // Range Maximum
0x01, // Alignment
0x08, // Length
)
IO (Decode16,
0x0CF8, // Range Minimum
0x0CF8, // Range Maximum
0x01, // Alignment
0x08, // Length
)
WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, // Granularity
0x0000, // Range Minimum
0x006F, // Range Maximum
0x0000, // Translation Offset
0x0070, // Length
,, , TypeStatic)
WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, // Granularity
0x0078, // Range Minimum
0x0CF7, // Range Maximum
0x0000, // Translation Offset
0x0C80, // Length
,, , TypeStatic)
WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, // Granularity
0x0D00, // Range Minimum
0xFFFF, // Range Maximum
0x0000, // Translation Offset
0xF300, // Length
,, , TypeStatic)
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, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000C0000, // Range Minimum
0x000DFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00020000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000E0000, // Range Minimum
0x000FFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00020000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x7A000000, // Range Minimum
0x7A3FFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00400000, // Length
,, _Y01, AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x7C000000, // Range Minimum
0x7FFFFFFF, // Range Maximum
0x00000000, // Translation Offset
0x04000000, // Length
,, _Y03, AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x80000000, // Range Minimum
0xDFFFFFFF, // Range Maximum
0x00000000, // Translation Offset
0x60000000, // Length
,, _Y02, AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0xFED40000, // Range Minimum
0xFED40FFF, // Range Maximum
0x00000000, // Translation Offset
0x00001000, // Length
,, _Y00, AddressRangeMemory, TypeStatic)
})
Name (GUID, ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)
Name (SUPP, Zero)
Name (CTRL, Zero)
Method (_OSC, 4, Serialized) // _OSC: Operating System Capabilities
{
Local0 = Arg3
CreateDWordField (Local0, Zero, CDW1)
CreateDWordField (Local0, 0x04, CDW2)
CreateDWordField (Local0, 0x08, CDW3)
If (((Arg0 == GUID) && NEXP))
{
SUPP = CDW2 /* \_SB_.PCI0._OSC.CDW2 */
CTRL = CDW3 /* \_SB_.PCI0._OSC.CDW3 */
If (~(CDW1 & One))
{
If ((CTRL & 0x02))
{
NHPG ()
}
If ((CTRL & 0x04))
{
NPME ()
}
}
If ((Arg1 != One))
{
CDW1 |= 0x08
}
If ((CDW3 != CTRL))
{
CDW1 |= 0x10
}
CDW3 = CTRL /* \_SB_.PCI0.CTRL */
OSCC = CTRL /* \_SB_.PCI0.CTRL */
Return (Local0)
}
Else
{
CDW1 |= 0x04
Return (Local0)
}
}
Device (LPCB)
{
Name (_ADR, 0x001F0000) // _ADR: Address
Scope (\_SB)
{
OperationRegion (ILBR, SystemMemory, IBAS, 0x8C)
Field (ILBR, AnyAcc, NoLock, Preserve)
{
Offset (0x08),
PARC, 8,
PBRC, 8,
PCRC, 8,
PDRC, 8,
PERC, 8,
PFRC, 8,
PGRC, 8,
PHRC, 8,
Offset (0x88),
, 3,
UI3E, 1,
UI4E, 1
}
Device (LNKA)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PARC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSA) /* \_SB_.PRSA */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLA, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLA, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PARC & 0x0F))
Return (RTLA) /* \_SB_.LNKA._CRS.RTLA */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PARC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PARC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKB)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x02) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PBRC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSB) /* \_SB_.PRSB */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLB, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLB, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PBRC & 0x0F))
Return (RTLB) /* \_SB_.LNKB._CRS.RTLB */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PBRC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PBRC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKC)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x03) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PCRC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSC) /* \_SB_.PRSC */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLC, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLC, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PCRC & 0x0F))
Return (RTLC) /* \_SB_.LNKC._CRS.RTLC */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PCRC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PCRC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKD)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x04) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PDRC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSD) /* \_SB_.PRSD */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLD, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLD, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PDRC & 0x0F))
Return (RTLD) /* \_SB_.LNKD._CRS.RTLD */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PDRC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PDRC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKE)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x05) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PERC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSE) /* \_SB_.PRSE */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLE, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLE, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PERC & 0x0F))
Return (RTLE) /* \_SB_.LNKE._CRS.RTLE */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PERC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PERC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKF)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x06) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PFRC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSF) /* \_SB_.PRSF */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLF, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLF, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PFRC & 0x0F))
Return (RTLF) /* \_SB_.LNKF._CRS.RTLF */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PFRC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PFRC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKG)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x07) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PGRC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSG) /* \_SB_.PRSG */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLG, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLG, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PGRC & 0x0F))
Return (RTLG) /* \_SB_.LNKG._CRS.RTLG */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PGRC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PGRC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
Device (LNKH)
{
Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID
Name (_UID, 0x08) // _UID: Unique ID
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
PHRC |= 0x80
}
Method (_PRS, 0, Serialized) // _PRS: Possible Resource Settings
{
Return (PRSH) /* \_SB_.PRSH */
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (RTLH, ResourceTemplate ()
{
IRQ (Level, ActiveLow, Shared, )
{}
})
CreateWordField (RTLH, One, IRQ0)
IRQ0 = Zero
IRQ0 = (One << (PHRC & 0x0F))
Return (RTLH) /* \_SB_.LNKH._CRS.RTLH */
}
Method (_SRS, 1, Serialized) // _SRS: Set Resource Settings
{
CreateWordField (Arg0, One, IRQ0)
FindSetRightBit (IRQ0, Local0)
Local0--
PHRC = Local0
}
Method (_STA, 0, Serialized) // _STA: Status
{
If ((PHRC & 0x80))
{
Return (0x09)
}
Else
{
Return (0x0B)
}
}
}
}
OperationRegion (LPC0, PCI_Config, Zero, 0xC0)
Field (LPC0, AnyAcc, NoLock, Preserve)
{
Offset (0x08),
SRID, 8,
Offset (0x80),
C1EN, 1,
Offset (0x84)
}
Device (FWHD)
{
Name (_HID, EisaId ("INT0800") /* Intel 82802 Firmware Hub Device */) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
Memory32Fixed (ReadOnly,
0xFF000000, // Address Base
0x01000000, // Address Length
)
})
}
Device (IPIC)
{
Name (_HID, EisaId ("PNP0000") /* 8259-compatible Programmable Interrupt Controller */) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0020, // Range Minimum
0x0020, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0024, // Range Minimum
0x0024, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0028, // Range Minimum
0x0028, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x002C, // Range Minimum
0x002C, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0030, // Range Minimum
0x0030, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0034, // Range Minimum
0x0034, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0038, // Range Minimum
0x0038, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x003C, // Range Minimum
0x003C, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00A0, // Range Minimum
0x00A0, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00A4, // Range Minimum
0x00A4, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00A8, // Range Minimum
0x00A8, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00AC, // Range Minimum
0x00AC, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00B0, // Range Minimum
0x00B0, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00B4, // Range Minimum
0x00B4, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00B8, // Range Minimum
0x00B8, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x00BC, // Range Minimum
0x00BC, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x04D0, // Range Minimum
0x04D0, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IRQNoFlags ()
{2}
})
}
Device (LDRC)
{
Name (_HID, EisaId ("PNP0C02") /* PNP Motherboard Resources */) // _HID: Hardware ID
Name (_UID, 0x02) // _UID: Unique ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x002E, // Range Minimum
0x002E, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x004E, // Range Minimum
0x004E, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0061, // Range Minimum
0x0061, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x0063, // Range Minimum
0x0063, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x0065, // Range Minimum
0x0065, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x0067, // Range Minimum
0x0067, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x0080, // Range Minimum
0x0080, // Range Maximum
0x01, // Alignment
0x10, // Length
)
IO (Decode16,
0x0092, // Range Minimum
0x0092, // Range Maximum
0x01, // Alignment
0x01, // Length
)
IO (Decode16,
0x00B2, // Range Minimum
0x00B2, // Range Maximum
0x01, // Alignment
0x02, // Length
)
IO (Decode16,
0x0680, // Range Minimum
0x0680, // Range Maximum
0x01, // Alignment
0x20, // Length
)
IO (Decode16,
0x0400, // Range Minimum
0x0400, // Range Maximum
0x01, // Alignment
0x80, // Length
)
IO (Decode16,
0x0500, // Range Minimum
0x0500, // Range Maximum
0x01, // Alignment
0xFF, // Length
)
IO (Decode16,
0x0600, // Range Minimum
0x0600, // Range Maximum
0x01, // Alignment
0x20, // Length
)
IO (Decode16,
0x164E, // Range Minimum
0x164E, // Range Maximum
0x01, // Alignment
0x02, // Length
)
})
}
Device (TIMR)
{
Name (_HID, EisaId ("PNP0100") /* PC-class System Timer */) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0040, // Range Minimum
0x0040, // Range Maximum
0x01, // Alignment
0x04, // Length
)
IO (Decode16,
0x0050, // Range Minimum
0x0050, // Range Maximum
0x10, // Alignment
0x04, // Length
)
IRQNoFlags ()
{0}
})
}
Device (IUR3)
{
Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
Method (_STA, 0, Serialized) // _STA: Status
{
If ((USEL == Zero))
{
If ((PU1E == One))
{
UI3E = One
UI4E = One
C1EN = One
Return (0x0F)
}
}
Return (Zero)
}
Method (_DIS, 0, Serialized) // _DIS: Disable Device
{
UI3E = Zero
UI4E = Zero
C1EN = Zero
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (BUF0, ResourceTemplate ()
{
IO (Decode16,
0x03F8, // Range Minimum
0x03F8, // Range Maximum
0x01, // Alignment
0x08, // Length
)
IRQNoFlags ()
{3}
})
Name (BUF1, ResourceTemplate ()
{
IO (Decode16,
0x03F8, // Range Minimum
0x03F8, // Range Maximum
0x01, // Alignment
0x08, // Length
)
IRQNoFlags ()
{4}
})
If ((SRID <= 0x04))
{
Return (BUF0) /* \_SB_.PCI0.LPCB.IUR3._CRS.BUF0 */
}
Else
{
Return (BUF1) /* \_SB_.PCI0.LPCB.IUR3._CRS.BUF1 */
}
}
}
OperationRegion (PKBS, SystemIO, 0x60, 0x05)
Field (PKBS, ByteAcc, Lock, Preserve)
{
PKBD, 8,
Offset (0x02),
Offset (0x03),
Offset (0x04),
PKBC, 8
}
Device (PS2K)
{
Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (((PKBD == 0xFF) & (PKBC == 0xFF)))
{
Return (Zero)
}
Return (0x0F)
}
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
)
IRQ (Edge, ActiveHigh, Exclusive, )
{1}
})
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
StartDependentFn (0x00, 0x00)
{
FixedIO (
0x0060, // Address
0x01, // Length
)
FixedIO (
0x0064, // Address
0x01, // Length
)
IRQNoFlags ()
{1}
}
EndDependentFn ()
})
}
Device (PS2M)
{
Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (((PKBD == 0xFF) & (PKBC == 0xFF)))
{
Return (Zero)
}
Return (0x0F)
}
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IRQ (Edge, ActiveHigh, Exclusive, )
{12}
})
Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings
{
StartDependentFn (0x00, 0x00)
{
IRQNoFlags ()
{12}
}
EndDependentFn ()
})
}
}
}
}
Scope (\)
{
OperationRegion (PMIO, SystemIO, PMBS, 0x46)
Field (PMIO, ByteAcc, NoLock, Preserve)
{
Offset (0x01),
PWBS, 1,
Offset (0x20),
, 13,
PMEB, 1,
Offset (0x30),
, 4,
SLPE, 1,
Offset (0x34),
, 4,
SLPS, 1,
Offset (0x35),
PM1S, 1,
Offset (0x42),
, 1,
GPEC, 1
}
Field (PMIO, ByteAcc, NoLock, WriteAsZeros)
{
Offset (0x20),
, 4,
PSCI, 1,
SCIS, 1
}
OperationRegion (PMCR, SystemMemory, PFDR, 0x04)
Field (PMCR, DWordAcc, Lock, Preserve)
{
L10D, 1,
L11D, 1,
L12D, 1,
L13D, 1,
L14D, 1,
L15D, 1,
Offset (0x01),
SD1D, 1,
SD2D, 1,
SD3D, 1,
HSID, 1,
, 1,
LPED, 1,
OTGD, 1,
Offset (0x02),
, 1,
, 1,
, 1,
, 1,
RP1D, 1,
RP2D, 1,
RP3D, 1,
RP4D, 1,
L20D, 1,
L21D, 1,
L22D, 1,
L23D, 1,
L24D, 1,
L25D, 1,
L26D, 1,
L27D, 1
}
OperationRegion (CLKC, SystemMemory, PCLK, 0x18)
Field (CLKC, DWordAcc, Lock, Preserve)
{
CKC0, 2,
CKF0, 1,
Offset (0x04),
CKC1, 2,
CKF1, 1,
Offset (0x08),
CKC2, 2,
CKF2, 1,
Offset (0x0C),
CKC3, 2,
CKF3, 1,
Offset (0x10),
CKC4, 2,
CKF4, 1,
Offset (0x14),
CKC5, 2,
CKF5, 1,
Offset (0x18)
}
}
Scope (_SB)
{
Device (LPEA)
{
Name (_ADR, Zero) // _ADR: Address
Name (_HID, "80860F28" /* Intel SST Audio DSP */) // _HID: Hardware ID
Name (_CID, "80860F28" /* Intel SST Audio DSP */) // _CID: Compatible ID
Name (_DDN, "Intel(R) Low Power Audio Controller - 80860F28") // _DDN: DOS Device Name
Name (_SUB, "221C17AA") // _SUB: Subsystem ID
Name (_UID, One) // _UID: Unique ID
Name (_DEP, Package (0x02) // _DEP: Dependencies
{
I2C2,
^I2C2.RTE2
})
Name (_PR0, Package (0x01) // _PR0: Power Resources for D0
{
PLPE
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (((LPEE == 0x02) && (LPED == Zero)))
{
Return (0x0F)
}
Return (Zero)
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
}
Name (RBUF, ResourceTemplate ()
{
Memory32Fixed (ReadWrite,
0xFE400000, // Address Base
0x00200000, // Address Length
_Y04)
Memory32Fixed (ReadWrite,
0xFE830000, // Address Base
0x00001000, // Address Length
_Y05)
Memory32Fixed (ReadWrite,
0x55AA55AA, // Address Base
0x00100000, // Address Length
_Y06)
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x00000018,
}
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x00000019,
}
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x0000001A,
}
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x0000001B,
}
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x0000001C,
}
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x0000001D,
}
GpioInt (Edge, ActiveBoth, ExclusiveAndWake, PullNone, 0x0000,
"\\_SB.GPO2", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x001C
}
})
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
CreateDWordField (RBUF, \_SB.LPEA._Y04._BAS, B0BA) // _BAS: Base Address
B0BA = LPE0 /* \LPE0 */
CreateDWordField (RBUF, \_SB.LPEA._Y05._BAS, B1BA) // _BAS: Base Address
B1BA = LPE1 /* \LPE1 */
CreateDWordField (RBUF, \_SB.LPEA._Y06._BAS, B2BA) // _BAS: Base Address
B2BA = LPE2 /* \LPE2 */
Return (RBUF) /* \_SB_.LPEA.RBUF */
}
OperationRegion (KEYS, SystemMemory, LPE1, 0x0100)
Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
{
Offset (0x84),
PSAT, 32
}
PowerResource (PLPE, 0x05, 0x0000)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (One)
}
Method (_ON, 0, NotSerialized) // _ON_: Power On
{
PSAT &= 0xFFFFFFFC
PSAT |= Zero
}
Method (_OFF, 0, NotSerialized) // _OFF: Power Off
{
PSAT |= 0x03
PSAT |= Zero
}
}
}
}
Scope (_SB.PCI0)
{
Device (XHC1)
{
Name (_ADR, 0x00140000) // _ADR: Address
Name (_DDN, "Baytrail XHCI controller (CCG core/Host only)") // _DDN: DOS Device Name
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
Name (_STR, Unicode ("Baytrail XHCI controller (CCG core/Host only)")) // _STR: Description String
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
Name (MSET, Zero)
Name (DDST, Zero)
OperationRegion (PCSL, SystemMemory, 0xE00A0074, One)
Field (PCSL, ByteAcc, NoLock, WriteAsZeros)
{
PMPS, 2
}
OperationRegion (PCSH, SystemMemory, 0xE00A0075, One)
Field (PCSH, ByteAcc, NoLock, Preserve)
{
PMCH, 8
}
OperationRegion (XMSE, SystemMemory, 0xE00A0000, 0x0100)
Field (XMSE, AnyAcc, NoLock, Preserve)
{
Offset (0x04),
, 1,
CMSE, 1,
Offset (0x10),
BAR0, 32,
Offset (0x74),
PMCS, 16,
Offset (0xB0),
, 13,
PHY2, 2,
, 13,
USHP, 1,
, 1,
SCFG, 1
}
Method (PWOF, 0, Serialized)
{
P8XH (Zero, 0xAA)
SCFG = One
}
Method (PWON, 0, Serialized)
{
P8XH (Zero, 0xBB)
SCFG = Zero
}
OperationRegion (XPRT, SystemMemory, (PEBS + 0x000A0000), 0x0100)
Field (XPRT, AnyAcc, NoLock, Preserve)
{
DVID, 16,
Offset (0x74),
D0D3, 2,
Offset (0x75),
PMEE, 1,
, 6,
PMES, 1,
Offset (0xB0),
, 13,
MB13, 1,
MB14, 1,
Offset (0xB4),
Offset (0xD0),
PR2, 32,
PR2M, 32,
PR3, 32,
PR3M, 32
}
OperationRegion (XHCP, SystemMemory, (PEBS + 0x000A0000), 0x0100)
Field (XHCP, AnyAcc, Lock, Preserve)
{
Offset (0x04),
PDBM, 16,
Offset (0x10),
MEMB, 32
}
Name (PCHS, Zero)
Name (SRMB, 0x90800000)
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
ADBG ("XHC D0")
P8XH (Zero, 0xA0)
If ((DVID == 0xFFFF))
{
Return (Zero)
}
SRMB = (MEMB & 0xFFFFFFF0)
Local2 = MEMB /* \_SB_.PCI0.XHC1.MEMB */
Local1 = PDBM /* \_SB_.PCI0.XHC1.PDBM */
PDBM &= 0xFFFFFFFFFFFFFFF9
MEMB = SRMB /* \_SB_.PCI0.XHC1.SRMB */
PDBM |= 0x02
OperationRegion (MCA1, SystemMemory, SRMB, 0x9000)
Field (MCA1, DWordAcc, Lock, Preserve)
{
Offset (0x510),
R510, 32,
Offset (0x520),
R520, 32,
Offset (0x530),
R530, 32,
Offset (0x540),
R540, 32,
Offset (0x8058),
Offset (0x8059),
CDES, 1,
Offset (0x805A),
STSP, 1,
, 3,
CFEC, 1,
Offset (0x8060),
, 25,
EPRE, 1,
Offset (0x8094),
, 14,
CMMF, 1,
, 6,
ESSP, 1,
, 1,
DAPA, 1,
Offset (0x80E0),
, 15,
AX15, 1,
Offset (0x80FC),
, 25,
PPL1, 1,
Offset (0x8110),
, 1,
CRNC, 1,
Offset (0x8111),
EPTD, 1,
, 2,
HTPP, 1,
, 8,
TRMC, 1,
Offset (0x8140),
MIDS, 12,
AWPC, 12,
EIHR, 8,
, 6,
SSII, 1,
SSIO, 1,
HSII, 1,
Offset (0x8154),
, 31,
CLK2, 1,
Offset (0x8164),
ETBC, 1,
ERBC, 1,
ESAI, 1,
ETMA, 1,
EOAI, 1,
EIAI, 1,
TTEA, 1,
ECMA, 1,
Offset (0x816C),
, 2,
CLK0, 1,
, 11,
CLK1, 1,
Offset (0x8188),
Offset (0x818B),
FIDD, 1,
, 1,
FTSS, 1
}
Local3 = D0D3 /* \_SB_.PCI0.XHC1.D0D3 */
If ((Local3 == 0x03))
{
D0D3 = Zero
Sleep (0x0A)
}
If ((PCHS == 0x02))
{
MB13 = Zero
MB14 = Zero
CLK0 = Zero
CLK1 = Zero
}
CLK2 = One
CDES = One
STSP = One
CFEC = Zero
EPRE = One
DAPA = One
ESSP = One
CMMF = One
PPL1 = One
CRNC = Zero
EPTD = Zero
HTPP = One
TRMC = One
MIDS = 0x3C
AWPC = 0x0F
EIHR = 0xFF
SSII = One
SSIO = One
HSII = One
ERBC = One
ETBC = One
ESAI = One
ETMA = One
EOAI = One
EIAI = One
TTEA = One
ECMA = One
FIDD = One
FTSS = One
USHP = Zero
If ((PCHS == 0x02))
{
While (((((R510 & 0x03FB) == 0x02E0) || ((R520 &
0x03FB) == 0x02E0)) || (((R530 & 0x03FB) == 0x02E0) || ((R540 &
0x03FB) == 0x02E0))))
{
Stall (0x32)
}
Local0 = R510 /* \_SB_.PCI0.XHC1._PS0.R510 */
If (((Local0 & 0x000203FB) == 0x02A0))
{
R510 = (Local0 | 0x80000000)
While (((R510 & 0x00180000) == Zero))
{
Stall (0x32)
}
Local0 = (R510 & 0xFFFFFFFFFFFFFFFD)
R510 = (Local0 | 0x00FE0000)
}
Local0 = R520 /* \_SB_.PCI0.XHC1._PS0.R520 */
If (((Local0 & 0x000203FB) == 0x02A0))
{
R520 = (Local0 | 0x80000000)
While (((R520 & 0x00180000) == Zero))
{
Stall (0x32)
}
Local0 = (R520 & 0xFFFFFFFFFFFFFFFD)
R520 = (Local0 | 0x00FE0000)
}
Local0 = R530 /* \_SB_.PCI0.XHC1._PS0.R530 */
If (((Local0 & 0x000203FB) == 0x02A0))
{
R530 = (Local0 | 0x80000000)
While (((R530 & 0x00180000) == Zero))
{
Stall (0x32)
}
Local0 = (R530 & 0xFFFFFFFFFFFFFFFD)
R530 = (Local0 | 0x00FE0000)
}
Local0 = R540 /* \_SB_.PCI0.XHC1._PS0.R540 */
If (((Local0 & 0x000203FB) == 0x02A0))
{
R540 = (Local0 | 0x80000000)
While (((R540 & 0x00180000) == Zero))
{
Stall (0x32)
}
Local0 = (R540 & 0xFFFFFFFFFFFFFFFD)
R540 = (Local0 | 0x00FE0000)
}
AX15 = One
}
If ((Local3 == 0x03))
{
ADBG ("PS0->D3")
P8XH (Zero, 0xA1)
D0D3 = 0x03
}
Else
{
P8XH (Zero, 0xA2)
}
PDBM &= 0xFFFFFFFFFFFFFFFD
MEMB = Local2
PDBM = Local1
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
ADBG ("XHC D3")
P8XH (Zero, 0xB0)
If ((DVID == 0xFFFF))
{
Return (Zero)
}
SRMB = (MEMB & 0xFFFFFFF0)
Local2 = MEMB /* \_SB_.PCI0.XHC1.MEMB */
Local1 = PDBM /* \_SB_.PCI0.XHC1.PDBM */
PDBM &= 0xFFFFFFFFFFFFFFF9
MEMB = SRMB /* \_SB_.PCI0.XHC1.SRMB */
PDBM |= 0x02
OperationRegion (MCA1, SystemMemory, SRMB, 0x9000)
Field (MCA1, DWordAcc, Lock, Preserve)
{
Offset (0x80E0),
, 15,
AX15, 1,
Offset (0x8154),
, 31,
CLK2, 1,
Offset (0x816C),
, 2,
CLK0, 1,
, 11,
CLK1, 1,
Offset (0x8170)
}
Local3 = D0D3 /* \_SB_.PCI0.XHC1.D0D3 */
If ((Local3 == 0x03))
{
D0D3 = Zero
}
If ((PCHS == 0x02))
{
MB13 = One
MB14 = One
CLK0 = One
CLK1 = One
}
CLK2 = Zero
If ((PCHS == 0x02))
{
AX15 = Zero
}
If ((PMEE == One))
{
USHP = One
}
If ((Local3 == 0x03))
{
ADBG ("PS3->D3")
P8XH (Zero, 0xB1)
D0D3 = 0x03
}
Else
{
P8XH (Zero, 0xB2)
}
PDBM &= 0xFFFFFFFFFFFFFFFD
MEMB = Local2
PDBM = Local1
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
}
Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
{
Return (Zero)
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
Return (Package (0x01)
{
USBC
})
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((XHCI != Zero))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Device (RHUB)
{
Name (_ADR, Zero) // _ADR: Address
Device (SSP1)
{
Name (_ADR, 0x07) // _ADR: Address
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
0xFF,
0x06,
Zero,
Zero
})
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.SSP1._UPC.UPCP */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x4B, 0x19, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, /* K....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.SSP1._PLD.PLDP */
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM11")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM12")
If ((Arg1 == Zero))
{
ADBG ("DSM13")
If ((Arg2 == Zero))
{
ADBG ("SSP1 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("SSP1 DSM")
Debug = "Method _DSM Function Index2"
Return (Zero)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
}
Device (HS01)
{
Name (_ADR, One) // _ADR: Address
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
0xFF,
0x06,
Zero,
Zero
})
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.HS01._UPC.UPCP */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x4B, 0x19, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, /* K....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.HS01._PLD.PLDP */
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM21")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM22")
If ((Arg1 == Zero))
{
ADBG ("DSM23")
If ((Arg2 == Zero))
{
ADBG ("HS01 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("HS01 DSM")
Debug = "Method _DSM Function Index2"
Return (Zero)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
}
Device (HS02)
{
Name (_ADR, 0x02) // _ADR: Address
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
Zero,
0xFF,
Zero,
Zero
})
Name (UPCR, Package (0x04)
{
0xFF,
Zero,
Zero,
Zero
})
If ((BDID == 0x02))
{
Return (UPCR) /* \_SB_.PCI0.XHC1.RHUB.HS02._UPC.UPCR */
}
Else
{
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.HS02._UPC.UPCP */
}
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x43, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, /* C....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Name (PLDR, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* A....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
If ((BDID == 0x02))
{
Return (PLDR) /* \_SB_.PCI0.XHC1.RHUB.HS02._PLD.PLDR */
}
Else
{
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.HS02._PLD.PLDP */
}
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM31")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM32")
If ((Arg1 == Zero))
{
ADBG ("DSM33")
If ((Arg2 == Zero))
{
ADBG ("HS02 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("HS02 DSM")
Debug = "Method _DSM Function Index2"
Return (Zero)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
}
Device (HS03)
{
Name (_ADR, 0x03) // _ADR: Address
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
GPO2
})
Name (PSTS, Zero)
PowerResource (WWPR, 0x00, 0x0000)
{
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
GPO2
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((\_SB.GPO2.AVBL == One))
{
Return (\_SB.GPO2.WWD3)
}
Return (Zero)
}
Method (_ON, 0, NotSerialized) // _ON_: Power On
{
If ((PSTS == Zero))
{
If ((\_SB.GPO2.AVBL == One))
{
Sleep (0x0200)
\_SB.GPO2.WWP3 = One
Sleep (0x50)
\_SB.GPO2.WWD3 = One
PSTS = One
}
}
}
Method (_OFF, 0, NotSerialized) // _OFF: Power Off
{
If ((\_SB.GPO2.AVBL == One))
{
\_SB.GPO2.WWD3 = Zero
Sleep (0x0A)
\_SB.GPO2.WWP3 = Zero
PSTS = Zero
}
}
}
Name (_S0W, 0x02) // _S0W: S0 Device Wake State
Name (_PR0, Package (0x01) // _PR0: Power Resources for D0
{
WWPR
})
Name (_PR2, Package (0x01) // _PR2: Power Resources for D2
{
WWPR
})
Name (_PR3, Package (0x01) // _PR3: Power Resources for D3hot
{
WWPR
})
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
0xFF,
0xFF,
Zero,
Zero
})
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.HS03._UPC.UPCP */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.HS03._PLD.PLDP */
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM41")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM42")
If ((Arg1 == Zero))
{
ADBG ("DSM43")
If ((Arg2 == Zero))
{
ADBG ("HS03 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("HS03 DSM")
Debug = "Method _DSM Function Index2"
Return (Zero)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
Device (MODM)
{
Name (_ADR, 0x03) // _ADR: Address
Name (_PR0, Package (0x01) // _PR0: Power Resources for D0
{
WWPR
})
Name (_PR2, Package (0x01) // _PR2: Power Resources for D2
{
WWPR
})
Name (_PR3, Package (0x01) // _PR3: Power Resources for D3hot
{
WWPR
})
}
}
Device (HS04)
{
Name (_ADR, 0x04) // _ADR: Address
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
0xFF,
0xFF,
Zero,
Zero
})
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.HS04._UPC.UPCP */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.HS04._PLD.PLDP */
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM51")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM52")
If ((Arg1 == Zero))
{
ADBG ("DSM53")
If ((Arg2 == Zero))
{
ADBG ("HS04 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("HS04 DSM")
Debug = "Method _DSM Function Index2"
Return (Zero)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
}
Device (HSC1)
{
Name (_ADR, 0x05) // _ADR: Address
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
0xFF,
0xFF,
Zero,
Zero
})
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.HSC1._UPC.UPCP */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.HSC1._PLD.PLDP */
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM61")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM62")
If ((Arg1 == Zero))
{
ADBG ("DSM63")
If ((Arg2 == Zero))
{
ADBG ("HSIC1 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("HSIC1 DSM")
Debug = "Method _DSM Function Index2"
Return (One)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
}
Device (HSC2)
{
Name (_ADR, 0x06) // _ADR: Address
Method (_UPC, 0, Serialized) // _UPC: USB Port Capabilities
{
Name (UPCP, Package (0x04)
{
0xFF,
0xFF,
Zero,
Zero
})
Return (UPCP) /* \_SB_.PCI0.XHC1.RHUB.HSC2._UPC.UPCP */
}
Method (_PLD, 0, Serialized) // _PLD: Physical Location of Device
{
Name (PLDP, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
/* 0008 */ 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0....... */
/* 0010 */ 0xFF, 0xFF, 0xFF, 0xFF /* .... */
}
})
Return (PLDP) /* \_SB_.PCI0.XHC1.RHUB.HSC2._PLD.PLDP */
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
ADBG ("DSM71")
If ((Arg0 == ToUUID ("ce2ee385-00e6-48cb-9f05-2edb927c4899") /* USB Controller */))
{
ADBG ("DSM72")
If ((Arg1 == Zero))
{
ADBG ("DSM73")
If ((Arg2 == Zero))
{
ADBG ("HSIC2 QUERY")
Debug = "Method _DSM Function Query"
Return (Buffer (One)
{
0x05 /* . */
})
}
If ((Arg2 == 0x02))
{
ADBG ("HSIC2 DSM called")
Debug = "Method _DSM Function Index2"
Return (One)
}
}
}
Else
{
Return (Zero)
}
Return (Zero)
}
}
}
}
Device (OTG1)
{
Name (_ADR, 0x00160000) // _ADR: Address
Name (_DDN, "Baytrail XHCI controller (Synopsys core/OTG)") // _DDN: DOS Device Name
Name (_STR, Unicode ("Baytrail XHCI controller (Synopsys core/OTG)")) // _STR: Description String
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
OperationRegion (PMEB, PCI_Config, 0x84, 0x04)
Field (PMEB, WordAcc, NoLock, Preserve)
{
Offset (0x01),
PMEE, 1,
, 6,
PMES, 1
}
OperationRegion (GENR, PCI_Config, 0xA0, 0x10)
Field (GENR, WordAcc, NoLock, Preserve)
{
, 18,
CPME, 1,
U2EN, 1,
U3EN, 1
}
Method (_PS3, 0, NotSerialized) // _PS3: Power State 3
{
CPME = One
U2EN = One
U3EN = One
}
Method (_PS0, 0, NotSerialized) // _PS0: Power State 0
{
CPME = Zero
U2EN = Zero
U3EN = Zero
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
}
Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
{
Return (Zero)
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
Return (Package (0x01)
{
USBC
})
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((OTGM != Zero))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
}
Scope (\_SB)
{
PowerResource (USBC, 0x00, 0x0000)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
Method (_ON, 0, NotSerialized) // _ON_: Power On
{
}
Method (_OFF, 0, NotSerialized) // _OFF: Power Off
{
}
}
}
Device (EHC1)
{
Name (_ADR, 0x001D0000) // _ADR: Address
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
OperationRegion (PWKE, PCI_Config, 0x62, 0x04)
Field (PWKE, DWordAcc, NoLock, Preserve)
{
, 1,
PWUC, 8
}
Method (_PSW, 1, NotSerialized) // _PSW: Power State Wake
{
If (Arg0)
{
PWUC = Ones
}
Else
{
PWUC = Zero
}
}
Device (HUBN)
{
Name (_ADR, Zero) // _ADR: Address
Device (PR01)
{
Name (_ADR, One) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
Zero,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x0,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "UPPER",
PLD_HorizontalPosition = "LEFT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
Device (PR11)
{
Name (_ADR, One) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "FRONT",
PLD_VerticalPosition = "",
PLD_HorizontalPosition = "LEFT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
}
Device (PR12)
{
Name (_ADR, 0x02) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "FRONT",
PLD_VerticalPosition = "",
PLD_HorizontalPosition = "CENTER",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
}
Device (PR13)
{
Name (_ADR, 0x03) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "FRONT",
PLD_VerticalPosition = "",
PLD_HorizontalPosition = "CENTER",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
}
Device (PR14)
{
Name (_ADR, 0x04) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "FRONT",
PLD_VerticalPosition = "",
PLD_HorizontalPosition = "RIGHT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Name (_T_0, Zero) // _T_x: Emitted by ASL Compiler
If ((Arg0 == ToUUID ("a5fc708f-8775-4ba6-bd0c-ba90a1ec72f8")))
{
While (One)
{
_T_0 = ToInteger (Arg2)
If ((_T_0 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x07 /* . */
})
}
Else
{
Return (Buffer (One)
{
0x00 /* . */
})
}
}
ElseIf ((_T_0 == One))
{
If ((SDGV == 0xFF))
{
Return (Zero)
}
Else
{
Return (One)
}
}
ElseIf ((_T_0 == 0x02))
{
Return (SDGV) /* \SDGV */
}
Break
}
}
Return (Zero)
}
}
Device (PR15)
{
Name (_ADR, 0x05) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "LOWER",
PLD_HorizontalPosition = "RIGHT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Name (_T_0, Zero) // _T_x: Emitted by ASL Compiler
If ((Arg0 == ToUUID ("a5fc708f-8775-4ba6-bd0c-ba90a1ec72f8")))
{
While (One)
{
_T_0 = ToInteger (Arg2)
If ((_T_0 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x07 /* . */
})
}
Else
{
Return (Buffer (One)
{
0x00 /* . */
})
}
}
ElseIf ((_T_0 == One))
{
If ((SDGV == 0xFF))
{
Return (Zero)
}
Else
{
Return (One)
}
}
ElseIf ((_T_0 == 0x02))
{
Return (SDGV) /* \SDGV */
}
Break
}
}
Return (Zero)
}
}
Device (PR16)
{
Name (_ADR, 0x06) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "LOWER",
PLD_HorizontalPosition = "RIGHT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Name (_T_0, Zero) // _T_x: Emitted by ASL Compiler
If ((Arg0 == ToUUID ("a5fc708f-8775-4ba6-bd0c-ba90a1ec72f8")))
{
While (One)
{
_T_0 = ToInteger (Arg2)
If ((_T_0 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x07 /* . */
})
}
Else
{
Return (Buffer (One)
{
0x00 /* . */
})
}
}
ElseIf ((_T_0 == One))
{
If ((SDGV == 0xFF))
{
Return (Zero)
}
Else
{
Return (One)
}
}
ElseIf ((_T_0 == 0x02))
{
Return (SDGV) /* \SDGV */
}
Break
}
}
Return (Zero)
}
}
Device (PR17)
{
Name (_ADR, 0x07) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "LOWER",
PLD_HorizontalPosition = "RIGHT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
Name (_T_0, Zero) // _T_x: Emitted by ASL Compiler
If ((Arg0 == ToUUID ("a5fc708f-8775-4ba6-bd0c-ba90a1ec72f8")))
{
While (One)
{
_T_0 = ToInteger (Arg2)
If ((_T_0 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x07 /* . */
})
}
Else
{
Return (Buffer (One)
{
0x00 /* . */
})
}
}
ElseIf ((_T_0 == One))
{
If ((SDGV == 0xFF))
{
Return (Zero)
}
Else
{
Return (One)
}
}
ElseIf ((_T_0 == 0x02))
{
Return (SDGV) /* \SDGV */
}
Break
}
}
Return (Zero)
}
}
Device (PR18)
{
Name (_ADR, 0x08) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0xFF,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x1,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "LOWER",
PLD_HorizontalPosition = "RIGHT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x0,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0)
})
}
}
}
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
OperationRegion (USBR, PCI_Config, 0x54, 0x04)
Field (USBR, WordAcc, NoLock, Preserve)
{
Offset (0x01),
PMEE, 1,
, 6,
PMES, 1
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((XHCI == Zero))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
}
Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
{
Return (Zero)
}
Method (_PR3, 0, NotSerialized) // _PR3: Power Resources for D3hot
{
Return (Package (0x01)
{
USBC
})
}
}
Device (SEC0)
{
Name (_ADR, 0x001A0000) // _ADR: Address
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
OperationRegion (PMEB, PCI_Config, 0x84, 0x04)
Field (PMEB, WordAcc, NoLock, Preserve)
{
Offset (0x01),
PMEE, 1,
, 6,
PMES, 1
}
Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
{
}
}
}
Scope (_SB.PCI0)
{
Device (GFX0)
{
Name (_ADR, 0x00020000) // _ADR: Address
Name (NDEP, Package (0x03)
{
PEPD,
I2C7,
^^I2C7.PMIC
})
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
Method (_DOS, 1, NotSerialized) // _DOS: Disable Output Switching
{
DSEN = (Arg0 & 0x07)
}
Method (_DOD, 0, NotSerialized) // _DOD: Display Output Devices
{
NDID = Zero
If ((DIDL != Zero))
{
DID1 = SDDL (DIDL)
}
If ((DDL2 != Zero))
{
DID2 = SDDL (DDL2)
}
If ((DDL3 != Zero))
{
DID3 = SDDL (DDL3)
}
If ((DDL4 != Zero))
{
DID4 = SDDL (DDL4)
}
If ((DDL5 != Zero))
{
DID5 = SDDL (DDL5)
}
If ((NDID == One))
{
Name (TMP1, Package (0x02)
{
0xFFFFFFFF,
0xFFFFFFFF
})
TMP1 [Zero] = (0x00010000 | DID1)
If ((SOCS < 0x02))
{
TMP1 [One] = 0x00020F39
}
Else
{
TMP1 [One] = 0x00020F38
}
Return (TMP1) /* \_SB_.PCI0.GFX0._DOD.TMP1 */
}
If ((NDID == 0x02))
{
Name (TMP2, Package (0x03)
{
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
TMP2 [Zero] = (0x00010000 | DID1)
TMP2 [One] = (0x00010000 | DID2)
If ((SOCS < 0x02))
{
TMP2 [0x02] = 0x00020F39
}
Else
{
TMP2 [0x02] = 0x00020F38
}
Return (TMP2) /* \_SB_.PCI0.GFX0._DOD.TMP2 */
}
If ((NDID == 0x03))
{
Name (TMP3, Package (0x04)
{
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
TMP3 [Zero] = (0x00010000 | DID1)
TMP3 [One] = (0x00010000 | DID2)
TMP3 [0x02] = (0x00010000 | DID3)
If ((SOCS < 0x02))
{
TMP3 [0x03] = 0x00020F39
}
Else
{
TMP3 [0x03] = 0x00020F38
}
Return (TMP3) /* \_SB_.PCI0.GFX0._DOD.TMP3 */
}
If ((NDID == 0x04))
{
Name (TMP4, Package (0x05)
{
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
TMP4 [Zero] = (0x00010000 | DID1)
TMP4 [One] = (0x00010000 | DID2)
TMP4 [0x02] = (0x00010000 | DID3)
TMP4 [0x03] = (0x00010000 | DID4)
If ((SOCS < 0x02))
{
TMP4 [0x04] = 0x00020F39
}
Else
{
TMP4 [0x04] = 0x00020F38
}
Return (TMP4) /* \_SB_.PCI0.GFX0._DOD.TMP4 */
}
If ((NDID > 0x04))
{
Name (TMP5, Package (0x06)
{
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
TMP5 [Zero] = (0x00010000 | DID1)
TMP5 [One] = (0x00010000 | DID2)
TMP5 [0x02] = (0x00010000 | DID3)
TMP5 [0x03] = (0x00010000 | DID4)
TMP5 [0x04] = (0x00010000 | DID5)
If ((SOCS < 0x02))
{
TMP5 [0x05] = 0x00020F39
}
Else
{
TMP5 [0x05] = 0x00020F38
}
Return (TMP5) /* \_SB_.PCI0.GFX0._DOD.TMP5 */
}
If ((SOCS < 0x02))
{
Return (Package (0x02)
{
0x0400,
0x00020F39
})
}
Else
{
Return (Package (0x02)
{
0x0400,
0x00020F38
})
}
}
Method (_PS3, 0, NotSerialized) // _PS3: Power State 3
{
^^^I2C1.BAT0.LEDR = Zero
If ((^^^I2C1.BAT0.LEDR != ^^^I2C1.BAT0.LEDS))
{
Notify (^^^I2C1.BAT0, 0x80) // Status Change
}
}
Method (_PS0, 0, NotSerialized) // _PS0: Power State 0
{
}
Device (DD01)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID1) == 0x0400))
{
EDPV = One
DIDX = DID1 /* \DID1 */
Return (One)
}
If ((DID1 == Zero))
{
Return (One)
}
Else
{
Return ((0xFFFF & DID1))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
Return (CDDS (DID1))
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID1))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD02)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID2) == 0x0400))
{
EDPV = 0x02
DIDX = DID2 /* \DID2 */
Return (0x02)
}
If ((DID2 == Zero))
{
Return (0x02)
}
Else
{
Return ((0xFFFF & DID2))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
Return (CDDS (DID2))
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID2))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD03)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID3) == 0x0400))
{
EDPV = 0x03
DIDX = DID3 /* \DID3 */
Return (0x03)
}
If ((DID3 == Zero))
{
Return (0x03)
}
Else
{
Return ((0xFFFF & DID3))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((DID3 == Zero))
{
Return (0x0B)
}
Else
{
Return (CDDS (DID3))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID3))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD04)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID4) == 0x0400))
{
EDPV = 0x04
DIDX = DID4 /* \DID4 */
Return (0x04)
}
If ((DID4 == Zero))
{
Return (0x04)
}
Else
{
Return ((0xFFFF & DID4))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((DID4 == Zero))
{
Return (0x0B)
}
Else
{
Return (CDDS (DID4))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID4))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD05)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID5) == 0x0400))
{
EDPV = 0x05
DIDX = DID5 /* \DID5 */
Return (0x05)
}
If ((DID5 == Zero))
{
Return (0x05)
}
Else
{
Return ((0xFFFF & DID5))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((DID5 == Zero))
{
Return (0x0B)
}
Else
{
Return (CDDS (DID5))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID5))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD06)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID6) == 0x0400))
{
EDPV = 0x06
DIDX = DID6 /* \DID6 */
Return (0x06)
}
If ((DID6 == Zero))
{
Return (0x06)
}
Else
{
Return ((0xFFFF & DID6))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((DID6 == Zero))
{
Return (0x0B)
}
Else
{
Return (CDDS (DID6))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID6))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD07)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID7) == 0x0400))
{
EDPV = 0x07
DIDX = DID7 /* \DID7 */
Return (0x07)
}
If ((DID7 == Zero))
{
Return (0x07)
}
Else
{
Return ((0xFFFF & DID7))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((DID7 == Zero))
{
Return (0x0B)
}
Else
{
Return (CDDS (DID7))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID7))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD08)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If (((0x0F00 & DID8) == 0x0400))
{
EDPV = 0x08
DIDX = DID8 /* \DID8 */
Return (0x08)
}
If ((DID8 == Zero))
{
Return (0x08)
}
Else
{
Return ((0xFFFF & DID8))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((DID8 == Zero))
{
Return (0x0B)
}
Else
{
Return (CDDS (DID8))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DID8))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
}
}
Device (DD1F)
{
Method (_ADR, 0, Serialized) // _ADR: Address
{
If ((EDPV == Zero))
{
Return (0x1F)
}
Else
{
Return ((0xFFFF & DIDX))
}
}
Method (_DCS, 0, NotSerialized) // _DCS: Display Current Status
{
If ((EDPV == Zero))
{
Return (Zero)
}
Else
{
Return (CDDS (DIDX))
}
}
Method (_DGS, 0, NotSerialized) // _DGS: Display Graphics State
{
Return (NDDS (DIDX))
}
Method (_DSS, 1, NotSerialized) // _DSS: Device Set State
{
If (((Arg0 & 0xC0000000) == 0xC0000000))
{
CSTE = NSTE /* \NSTE */
}
^^^^I2C1.BAT0.LEDR = One
If ((^^^^I2C1.BAT0.LEDR != ^^^^I2C1.BAT0.LEDS))
{
Notify (^^^^I2C1.BAT0, 0x80) // Status Change
}
}
Method (_BCL, 0, NotSerialized) // _BCL: Brightness Control Levels
{
Return (Package (0x67)
{
0x50,
0x32,
Zero,
One,
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08,
0x09,
0x0A,
0x0B,
0x0C,
0x0D,
0x0E,
0x0F,
0x10,
0x11,
0x12,
0x13,
0x14,
0x15,
0x16,
0x17,
0x18,
0x19,
0x1A,
0x1B,
0x1C,
0x1D,
0x1E,
0x1F,
0x20,
0x21,
0x22,
0x23,
0x24,
0x25,
0x26,
0x27,
0x28,
0x29,
0x2A,
0x2B,
0x2C,
0x2D,
0x2E,
0x2F,
0x30,
0x31,
0x32,
0x33,
0x34,
0x35,
0x36,
0x37,
0x38,
0x39,
0x3A,
0x3B,
0x3C,
0x3D,
0x3E,
0x3F,
0x40,
0x41,
0x42,
0x43,
0x44,
0x45,
0x46,
0x47,
0x48,
0x49,
0x4A,
0x4B,
0x4C,
0x4D,
0x4E,
0x4F,
0x50,
0x51,
0x52,
0x53,
0x54,
0x55,
0x56,
0x57,
0x58,
0x59,
0x5A,
0x5B,
0x5C,
0x5D,
0x5E,
0x5F,
0x60,
0x61,
0x62,
0x63,
0x64
})
}
Method (_BCM, 1, NotSerialized) // _BCM: Brightness Control Method
{
If (((Arg0 >= Zero) && (Arg0 <= 0x64)))
{
AINT (One, Arg0)
BRTL = Arg0
}
}
Method (_BQC, 0, NotSerialized) // _BQC: Brightness Query Current
{
Return (BRTL) /* \BRTL */
}
}
Method (SDDL, 1, NotSerialized)
{
NDID++
Local0 = (Arg0 & 0x0F0F)
Local1 = (0x80000000 | Local0)
If ((DIDL == Local0))
{
Return (Local1)
}
If ((DDL2 == Local0))
{
Return (Local1)
}
If ((DDL3 == Local0))
{
Return (Local1)
}
If ((DDL4 == Local0))
{
Return (Local1)
}
If ((DDL5 == Local0))
{
Return (Local1)
}
If ((DDL6 == Local0))
{
Return (Local1)
}
If ((DDL7 == Local0))
{
Return (Local1)
}
If ((DDL8 == Local0))
{
Return (Local1)
}
Return (Zero)
}
Method (CDDS, 1, NotSerialized)
{
Local0 = (Arg0 & 0x0F0F)
If ((Zero == Local0))
{
Return (0x1D)
}
If ((CADL == Local0))
{
Return (0x1F)
}
If ((CAL2 == Local0))
{
Return (0x1F)
}
If ((CAL3 == Local0))
{
Return (0x1F)
}
If ((CAL4 == Local0))
{
Return (0x1F)
}
If ((CAL5 == Local0))
{
Return (0x1F)
}
If ((CAL6 == Local0))
{
Return (0x1F)
}
If ((CAL7 == Local0))
{
Return (0x1F)
}
If ((CAL8 == Local0))
{
Return (0x1F)
}
Return (0x1D)
}
Method (NDDS, 1, NotSerialized)
{
Local0 = (Arg0 & 0x0F0F)
If ((Zero == Local0))
{
Return (Zero)
}
If ((NADL == Local0))
{
Return (One)
}
If ((NDL2 == Local0))
{
Return (One)
}
If ((NDL3 == Local0))
{
Return (One)
}
If ((NDL4 == Local0))
{
Return (One)
}
If ((NDL5 == Local0))
{
Return (One)
}
If ((NDL6 == Local0))
{
Return (One)
}
If ((NDL7 == Local0))
{
Return (One)
}
If ((NDL8 == Local0))
{
Return (One)
}
Return (Zero)
}
OperationRegion (IGDP, PCI_Config, Zero, 0x0100)
Field (IGDP, AnyAcc, NoLock, Preserve)
{
Offset (0x10),
MADR, 32,
Offset (0x50),
, 1,
GIVD, 1,
, 1,
GUMA, 5,
Offset (0x52),
Offset (0x54),
, 4,
GMFN, 1,
Offset (0x58),
Offset (0x5C),
GSTM, 32,
Offset (0xE0),
GSSE, 1,
GSSB, 14,
GSES, 1,
Offset (0xE4),
ASLE, 8,
Offset (0xE8),
Offset (0xFC),
ASLS, 32
}
OperationRegion (IGMM, SystemMemory, MADR, 0x3000)
Field (IGMM, AnyAcc, NoLock, Preserve)
{
Offset (0x20C8),
, 4,
DCFE, 4
}
OperationRegion (IGDM, SystemMemory, ASLB, 0x2000)
Field (IGDM, AnyAcc, NoLock, Preserve)
{
SIGN, 128,
SIZE, 32,
OVER, 32,
SVER, 256,
VVER, 128,
GVER, 128,
MBOX, 32,
DMOD, 32,
Offset (0x100),
DRDY, 32,
CSTS, 32,
CEVT, 32,
Offset (0x120),
DIDL, 32,
DDL2, 32,
DDL3, 32,
DDL4, 32,
DDL5, 32,
DDL6, 32,
DDL7, 32,
DDL8, 32,
CPDL, 32,
CPL2, 32,
CPL3, 32,
CPL4, 32,
CPL5, 32,
CPL6, 32,
CPL7, 32,
CPL8, 32,
CAD1, 32,
CAL2, 32,
CAL3, 32,
CAL4, 32,
CAL5, 32,
CAL6, 32,
CAL7, 32,
CAL8, 32,
NADL, 32,
NDL2, 32,
NDL3, 32,
NDL4, 32,
NDL5, 32,
NDL6, 32,
NDL7, 32,
NDL8, 32,
ASLP, 32,
TIDX, 32,
CHPD, 32,
CLID, 32,
CDCK, 32,
SXSW, 32,
EVTS, 32,
CNOT, 32,
NRDY, 32,
Offset (0x200),
SCIE, 1,
GEFC, 4,
GXFC, 3,
GESF, 8,
Offset (0x204),
PARM, 32,
DSLP, 32,
Offset (0x300),
ARDY, 32,
ASLC, 32,
TCHE, 32,
ALSI, 32,
BCLP, 32,
PFIT, 32,
CBLV, 32,
BCLM, 320,
CPFM, 32,
EPFM, 32,
PLUT, 592,
PFMB, 32,
CCDV, 32,
PCFT, 32,
Offset (0x400),
GVD1, 49152,
PHED, 32,
BDDC, 2048
}
Name (DBTB, Package (0x15)
{
Zero,
0x07,
0x38,
0x01C0,
0x0E00,
0x3F,
0x01C7,
0x0E07,
0x01F8,
0x0E38,
0x0FC0,
Zero,
Zero,
Zero,
Zero,
Zero,
0x7000,
0x7007,
0x7038,
0x71C0,
0x7E00
})
Name (CDCT, Package (0x06)
{
Package (0x01)
{
0xA0
},
Package (0x01)
{
0xC8
},
Package (0x01)
{
0x010B
},
Package (0x01)
{
0x0140
},
Package (0x01)
{
0x0164
},
Package (0x01)
{
0x0190
}
})
Name (SUCC, One)
Name (NVLD, 0x02)
Name (CRIT, 0x04)
Name (NCRT, 0x06)
Method (GSCI, 0, Serialized)
{
Method (GBDA, 0, Serialized)
{
If ((GESF == Zero))
{
PARM = 0x0279
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == One))
{
PARM = 0x0240
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x04))
{
PARM &= 0xEFFF0000
PARM &= (DerefOf (DBTB [IBTT]) << 0x10)
PARM |= IBTT /* \_SB_.PCI0.GFX0.PARM */
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x05))
{
PARM = IPSC /* \IPSC */
PARM |= (IPAT << 0x08)
PARM += 0x0100
PARM |= (LIDS << 0x10)
PARM += 0x00010000
PARM |= (IBLC << 0x12)
PARM |= (IBIA << 0x14)
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x06))
{
PARM = ITVF /* \ITVF */
PARM |= (ITVM << 0x04)
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x07))
{
PARM = GIVD /* \_SB_.PCI0.GFX0.GIVD */
PARM ^= One
PARM |= (GMFN << One)
PARM |= 0x1800
PARM |= (IDMS << 0x11)
PARM |= (DerefOf (CDCT [DCFE]) << 0x15) /* \_SB_.PCI0.GFX0.PARM */
GESF = One
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x0A))
{
PARM = Zero
If (ISSC)
{
PARM |= 0x03
}
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
GESF = Zero
Return (CRIT) /* \_SB_.PCI0.GFX0.CRIT */
}
Method (SBCB, 0, Serialized)
{
If ((GESF == Zero))
{
PARM = Zero
If ((PFLV == FMBL))
{
PARM = 0x000F87FD
}
If ((PFLV == FDTP))
{
PARM = 0x000F87BD
}
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == One))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x03))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x04))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x05))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x06))
{
ITVF = (PARM & 0x0F)
ITVM = ((PARM & 0xF0) >> 0x04)
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x07))
{
If ((PARM == Zero))
{
Local0 = CLID /* \_SB_.PCI0.GFX0.CLID */
If ((0x80000000 & Local0))
{
CLID &= 0x0F
GLID (CLID)
}
}
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x08))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x09))
{
IBTT = (PARM & 0xFF)
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x0A))
{
IPSC = (PARM & 0xFF)
If (((PARM >> 0x08) & 0xFF))
{
IPAT = ((PARM >> 0x08) & 0xFF)
IPAT--
}
IBLC = ((PARM >> 0x12) & 0x03)
IBIA = ((PARM >> 0x14) & 0x07)
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x0B))
{
IF1E = ((PARM >> One) & One)
IDMS = ((PARM >> 0x11) & 0x0F)
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x10))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x11))
{
PARM = (LIDS << 0x08)
PARM += 0x0100
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x12))
{
If ((PARM & One))
{
If (((PARM >> One) == One))
{
ISSC = One
}
Else
{
GESF = Zero
Return (CRIT) /* \_SB_.PCI0.GFX0.CRIT */
}
}
Else
{
ISSC = Zero
}
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x13))
{
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GESF == 0x14))
{
PAVP = (PARM & 0x0F)
GESF = Zero
PARM = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
GESF = Zero
Return (SUCC) /* \_SB_.PCI0.GFX0.SUCC */
}
If ((GEFC == 0x04))
{
GXFC = GBDA ()
}
If ((GEFC == 0x06))
{
GXFC = SBCB ()
}
GEFC = Zero
SCIS = One
GSSE = Zero
SCIE = Zero
Return (Zero)
}
Method (PDRD, 0, NotSerialized)
{
If (!DRDY)
{
Sleep (ASLP)
}
Return (!DRDY)
}
Method (PSTS, 0, NotSerialized)
{
If ((CSTS > 0x02))
{
Sleep (ASLP)
}
Return ((CSTS == 0x03))
}
Method (GNOT, 2, NotSerialized)
{
If (PDRD ())
{
Return (One)
}
CEVT = Arg0
CSTS = 0x03
If (((CHPD == Zero) && (Arg1 == Zero)))
{
If (((OSYS > 0x07D0) || (OSYS < 0x07D6)))
{
Notify (PCI0, Arg1)
}
Else
{
Notify (GFX0, Arg1)
}
}
Notify (GFX0, 0x80) // Status Change
Return (Zero)
}
Method (GHDS, 1, NotSerialized)
{
TIDX = Arg0
Return (GNOT (One, Zero))
}
Method (GLID, 1, NotSerialized)
{
CLID = Arg0
Return (GNOT (0x02, Zero))
}
Method (GDCK, 1, NotSerialized)
{
CDCK = Arg0
Return (GNOT (0x04, Zero))
}
Method (PARD, 0, NotSerialized)
{
If (!ARDY)
{
Sleep (ASLP)
}
Return (!ARDY)
}
Method (AINT, 2, NotSerialized)
{
If (!(TCHE & (One << Arg0)))
{
Return (One)
}
If (PARD ())
{
Return (One)
}
If ((Arg0 == 0x02))
{
If (CPFM)
{
Local0 = (CPFM & 0x0F)
Local1 = (EPFM & 0x0F)
If ((Local0 == One))
{
If ((Local1 & 0x06))
{
PFIT = 0x06
}
ElseIf ((Local1 & 0x08))
{
PFIT = 0x08
}
Else
{
PFIT = One
}
}
If ((Local0 == 0x06))
{
If ((Local1 & 0x08))
{
PFIT = 0x08
}
ElseIf ((Local1 & One))
{
PFIT = One
}
Else
{
PFIT = 0x06
}
}
If ((Local0 == 0x08))
{
If ((Local1 & One))
{
PFIT = One
}
ElseIf ((Local1 & 0x06))
{
PFIT = 0x06
}
Else
{
PFIT = 0x08
}
}
}
Else
{
PFIT ^= 0x07
}
PFIT |= 0x80000000
ASLC = 0x04
}
ElseIf ((Arg0 == One))
{
BCLP = ((Arg1 * 0xFF) / 0x64)
BCLP |= 0x80000000
ASLC = 0x02
}
ElseIf ((Arg0 == Zero))
{
ALSI = Arg1
ASLC = One
}
Else
{
Return (One)
}
ASLE = One
Return (Zero)
}
Method (SCIP, 0, NotSerialized)
{
If ((OVER != Zero))
{
Return (!GSMI)
}
Return (Zero)
}
Device (ISP0)
{
Name (_ADR, 0x0F38) // _ADR: Address
Name (_DDN, "VLV2 ISP - 80860F38") // _DDN: DOS Device Name
Name (_UID, One) // _UID: Unique ID
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((SOCS >= 0x02))
{
If ((ISPD == One))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Else
{
_ADR = 0x0F39
_DDN = "VLV2 ISP - 80860F39"
If ((ISPD == One))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
}
Name (SBUF, ResourceTemplate ()
{
Memory32Fixed (ReadWrite,
0xD0C00000, // Address Base
0x00400000, // Address Length
)
})
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (SBUF) /* \_SB_.PCI0.GFX0.ISP0.SBUF */
}
Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings
{
}
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
}
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
If ((Arg0 == One))
{
Return (One)
}
ElseIf ((Arg0 == 0x02))
{
Return (0x02)
}
Else
{
Return (0x0F)
}
}
}
}
}
Scope (_PR)
{
Processor (CPU0, 0x01, 0x00000000, 0x00) {}
Processor (CPU1, 0x02, 0x00000000, 0x00) {}
Processor (CPU2, 0x03, 0x00000000, 0x00) {}
Processor (CPU3, 0x04, 0x00000000, 0x00) {}
}
Mutex (MUTX, 0x00)
OperationRegion (PRT0, SystemIO, 0x80, 0x04)
Field (PRT0, DWordAcc, Lock, Preserve)
{
P80H, 32
}
Method (P8XH, 2, Serialized)
{
If ((Arg0 == Zero))
{
P80D = ((P80D & 0xFFFFFF00) | Arg1)
}
If ((Arg0 == One))
{
P80D = ((P80D & 0xFFFF00FF) | (Arg1 << 0x08))
}
If ((Arg0 == 0x02))
{
P80D = ((P80D & 0xFF00FFFF) | (Arg1 << 0x10))
}
If ((Arg0 == 0x03))
{
P80D = ((P80D & 0x00FFFFFF) | (Arg1 << 0x18))
}
P80H = P80D /* \P80D */
}
OperationRegion (SPRT, SystemIO, 0xB2, 0x02)
Field (SPRT, ByteAcc, Lock, Preserve)
{
SSMP, 8
}
Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model
{
GPIC = Arg0
PICM = Arg0
}
OperationRegion (SWC0, SystemIO, 0x0610, 0x0F)
Field (SWC0, ByteAcc, NoLock, Preserve)
{
G1S, 8,
Offset (0x04),
G1E, 8,
Offset (0x0A),
G1S2, 8,
G1S3, 8
}
OperationRegion (SWC1, SystemIO, PMBS, 0x2C)
Field (SWC1, DWordAcc, NoLock, Preserve)
{
Offset (0x20),
G0S, 32,
Offset (0x28),
G0EN, 32
}
Method (_PTS, 1, NotSerialized) // _PTS: Prepare To Sleep
{
P80D = Zero
P8XH (Zero, Arg0)
G1S3 = Ones
G1S2 = Ones
G1S = One
G1E = One
G0S = Ones
If (((Arg0 == 0x04) || (Arg0 == 0x05)))
{
G0EN = Zero
SLPS = One
SLPE = Zero
PWBS = One
PM1S = One
}
If (CondRefOf (TCGM))
{
\_SB.PCI0.LPCB.TPM.PTS (Arg0)
}
}
Method (_WAK, 1, Serialized) // _WAK: Wake
{
P8XH (One, 0xAB)
If (NEXP)
{
If ((OSCC & 0x02))
{
\_SB.PCI0.NHPG ()
}
If ((OSCC & 0x04))
{
\_SB.PCI0.NPME ()
}
}
If (((Arg0 == 0x03) || (Arg0 == 0x04)))
{
If ((PFLV == FMBL))
{
If ((Arg0 == 0x04))
{
PNOT ()
}
}
If ((CFGD & 0x01000000)) {}
If ((OSYS == 0x07D2))
{
If ((CFGD & One))
{
If ((\_PR.CPU0._PPC > Zero))
{
\_PR.CPU0._PPC -= One
PNOT ()
\_PR.CPU0._PPC += One
PNOT ()
}
Else
{
\_PR.CPU0._PPC += One
PNOT ()
\_PR.CPU0._PPC -= One
PNOT ()
}
}
}
}
Return (Package (0x02)
{9,088 lines not shown · raw message
Part of this message is not shown here. View the raw message.
Hi Marcel,
Quoted 8 lines
Quoted 3 lines
Using out-of-band gpio/irq which are retrieved from the ACPI device. wakeup can be initiated by host or controller depending which one wants to transfer hci data.
I am actually curious if HCI remote wakeup might not work. So the HID mouse (I assume Classic here) will initiate a HCI Create Connection which will result in a HCI Connection Request. So that wakeup event needs to be allowed. I am curious if we might not set that correctly.
That's correct, my HID mouse is using standard Bluetooth BR/EDR, not LE.
Quoted 3 lines
I would need to see the btmon trace from the controller initialization (start btmon before calling btattach). I am no longer sure that this has been tested with UART based controllers. On USB the remote wakeup works.
Here you go, I'm attaching traces taken with btmon:
1/ btmon.thinkpad8-init: the one you've asked, showing the controller init
and 2 other ones, just in case:
2/ btmon.thinkpad8-connecting: showing the mouse connecting right after the init 1/ so still properly detected at that time and doing some cursor moves
3/ btmon.thinkpad8-not-connecting: traces taken if the mouse is not switched on during the controller initialization, but only a bit later (roughly 30s or 1min). Switching on the mouse then shows simply no trace at all.
Quoted 4 lines
If the events for connection creation and remote wakeup set correctly, then it is some GPIO or Broadcom vendor specific thing.
From the attached traces 1/, do the events seem to be set up correctly
according to you?
Regards,
Jérôme
Hi Loic,
Quoted 11 lines
Quoted 4 lines
I remember Frederic had some gpio/irq polarity issues:>
5cebdfea32b89911d4540440c1c2854a1a3d591e
Bluetooth:hci_bcm: Fix IRQ polarity for T100 Maybe the ACPI table is not correct on some devices.I had seen that patch indeed. I'm attaching the ACPI table I had shared on the list a long time ago for the ThinkPad Tablet 8. Is there anything that looks suspicious in there and that you could link to a similar gpio/irq polarity issue maybe?
Quoted 4 lines
If you think there is a good chance that this could be the issue as well, I
will try to build a similar patch for this ThinkPad product and share my results.
Just to let you know, after finding the right DMI values to simply adapt the above patch for my ThinkPad tablet, I can confirm that a quick local kernel modification indeed fixes the issue.
I will need a bit more time to propose a proper patch, adding this other impacted tablet instead of replacing the above Asus one, and supporting potentially even more products facing the same polarity issue.
Is hard-coding such exceptions / polarity issues manually the only way to go or could there be a way to detect this programmatically instead?
Regards,
Jérôme