w83627hf/acpi: Move floppy drive enumeration from _INI into _FDE.
Move the floppy drive enumeration from _INI() and PROB(), which stored the enumeration results into _FDE into _FDE(). _INI is called by any ACPI-capable OS on boot while _FDE is rarely used. So it's better to run the enumeration when requested rather than unconditionally. Change-Id: Icf1e2a551806592faa8ba8d80fa8d02681602007 Signed-off-by: Christoph Grenz <christophg+cb@grenz-bonn.de> Reviewed-on: http://review.coreboot.org/3604 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
bbf096911d
commit
7037840ece
|
@ -212,24 +212,6 @@ Device(SIO) {
|
||||||
Name (_STR, Unicode ("W83627HF Floppy Disk Controller"))
|
Name (_STR, Unicode ("W83627HF Floppy Disk Controller"))
|
||||||
Name (_UID, "w83627hf-fdc")
|
Name (_UID, "w83627hf-fdc")
|
||||||
|
|
||||||
#ifndef NO_W83627HF_FDC_ENUM
|
|
||||||
/* Initialization method: Should be run once on boot
|
|
||||||
If FDC is active, enumerate all connected devices */
|
|
||||||
Method (_INI) {
|
|
||||||
ENCM (0)
|
|
||||||
Store (ACTR, Local0)
|
|
||||||
Store (IO1H, Local1)
|
|
||||||
Store (IO1L, Local2)
|
|
||||||
EXCM ()
|
|
||||||
ShiftLeft(Local1, 8, Local1)
|
|
||||||
Or(Local1, Local2, Local1)
|
|
||||||
If (Local0) {
|
|
||||||
/* Try probing drives and save result in _FDE */
|
|
||||||
PROB(Local1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Method (_STA)
|
Method (_STA)
|
||||||
{
|
{
|
||||||
Store (0x00, Local0)
|
Store (0x00, Local0)
|
||||||
|
@ -317,18 +299,33 @@ Device(SIO) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NO_W83627HF_FDC_ENUM
|
#ifndef NO_W83627HF_FDC_ENUM
|
||||||
Name(_FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
|
Method (_FDE, 0) {
|
||||||
#endif
|
/* Try probing drives.
|
||||||
|
|
||||||
Method (PROB, 1) {
|
|
||||||
#ifndef NO_W83627HF_FDC_ENUM
|
|
||||||
/* Try probing drives and save result in _FDE
|
|
||||||
Probing is done through selecting and activating a drive
|
Probing is done through selecting and activating a drive
|
||||||
and reading 0x03F7 aka the "shared IDE and floppy register"
|
and reading 0x03F7 aka the "shared IDE and floppy register"
|
||||||
as any value there besides zero seems to indicate a
|
as any value there besides zero seems to indicate a
|
||||||
connected drive.
|
connected drive.
|
||||||
*/
|
*/
|
||||||
OperationRegion (FIO1, SystemIO, Arg0, 0x06)
|
// Create template
|
||||||
|
Name(FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
|
||||||
|
CreateByteField (FDE, 1, FD1)
|
||||||
|
CreateByteField (FDE, 4, FD2)
|
||||||
|
CreateByteField (FDE, 8, FD3)
|
||||||
|
CreateByteField (FDE, 12, FD4)
|
||||||
|
|
||||||
|
// Get resources from logical device
|
||||||
|
ENCM (0)
|
||||||
|
Store (ACTR, Local0)
|
||||||
|
Store (IO1H, Local1)
|
||||||
|
Store (IO1L, Local2)
|
||||||
|
EXCM ()
|
||||||
|
ShiftLeft(Local1, 8, Local1)
|
||||||
|
Or(Local1, Local2, Local1)
|
||||||
|
If (LNot(Local0)) {
|
||||||
|
Return (FDE)
|
||||||
|
}
|
||||||
|
|
||||||
|
OperationRegion (FIO1, SystemIO, Local1, 0x06)
|
||||||
Field (FIO1, ByteAcc, NoLock, Preserve)
|
Field (FIO1, ByteAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
Offset(0x02),
|
Offset(0x02),
|
||||||
|
@ -356,11 +353,6 @@ Device(SIO) {
|
||||||
SIFR, 8
|
SIFR, 8
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateByteField (_FDE, 1, FD1)
|
|
||||||
CreateByteField (_FDE, 4, FD2)
|
|
||||||
CreateByteField (_FDE, 8, FD3)
|
|
||||||
CreateByteField (_FDE, 12, FD4)
|
|
||||||
|
|
||||||
Store(One, ACT1)
|
Store(One, ACT1)
|
||||||
Store(0, SELE)
|
Store(0, SELE)
|
||||||
Sleep(0x64)
|
Sleep(0x64)
|
||||||
|
@ -385,8 +377,10 @@ Device(SIO) {
|
||||||
If (SIFR) { Store (One, FD4) }
|
If (SIFR) { Store (One, FD4) }
|
||||||
Store(Zero, ACT4)
|
Store(Zero, ACT4)
|
||||||
Store(Zero, SELE)
|
Store(Zero, SELE)
|
||||||
#endif
|
|
||||||
|
Return (FDE)
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Method (_SRS, 1, Serialized)
|
Method (_SRS, 1, Serialized)
|
||||||
|
@ -407,9 +401,6 @@ Device(SIO) {
|
||||||
Store (Local1, IO1H)
|
Store (Local1, IO1H)
|
||||||
Store (One, ACTR)
|
Store (One, ACTR)
|
||||||
EXCM ()
|
EXCM ()
|
||||||
|
|
||||||
/* Try probing drives and save result in _FDE */
|
|
||||||
PROB(IOA0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue