https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e318d2294058787af83710...
commit e318d2294058787af83710feb4b581ba36282d46 Author: Dmitry Borisov di.sean@protonmail.com AuthorDate: Sat Mar 20 20:53:06 2021 +0600 Commit: Dmitry Borisov di.sean@protonmail.com CommitDate: Sun Jun 20 19:24:31 2021 +0600
[ISAPNP] Disable I/O range check before activation
See Table A-2 of "Plug and Play ISA Specification 1.0a" --- drivers/bus/isapnp/hardware.c | 10 ++++++++-- drivers/bus/isapnp/isapnp.h | 1 + drivers/bus/isapnp/pdo.c | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/bus/isapnp/hardware.c b/drivers/bus/isapnp/hardware.c index 62e538a49d4..188d1732447 100644 --- a/drivers/bus/isapnp/hardware.c +++ b/drivers/bus/isapnp/hardware.c @@ -168,9 +168,14 @@ static inline VOID ActivateDevice( + _In_ PUCHAR ReadDataPort, _In_ UCHAR LogDev) { WriteLogicalDeviceNumber(LogDev); + + WriteByte(ISAPNP_IORANGECHECK, + ReadByte(ReadDataPort, ISAPNP_IORANGECHECK) & ~2); + WriteByte(ISAPNP_ACTIVATE, 1); }
@@ -1341,7 +1346,7 @@ IsaHwFillDeviceList( PISAPNP_PDO_EXTENSION PdoExt = LogDevice->Pdo->DeviceExtension;
if (PdoExt->Common.State == dsStarted) - ActivateDevice(LogDev); + ActivateDevice(FdoExt->ReadDataPort, LogDev); }
DPRINT("Skip CSN %u, LDN %u\n", LogDevice->CSN, LogDevice->LDN); @@ -1412,9 +1417,10 @@ IsaHwWakeDevice( _IRQL_requires_max_(DISPATCH_LEVEL) VOID IsaHwActivateDevice( + _In_ PISAPNP_FDO_EXTENSION FdoExt, _In_ PISAPNP_LOGICAL_DEVICE LogicalDevice) { - ActivateDevice(LogicalDevice->LDN); + ActivateDevice(FdoExt->ReadDataPort, LogicalDevice->LDN); }
_IRQL_requires_max_(DISPATCH_LEVEL) diff --git a/drivers/bus/isapnp/isapnp.h b/drivers/bus/isapnp/isapnp.h index e941020f783..19702f36274 100644 --- a/drivers/bus/isapnp/isapnp.h +++ b/drivers/bus/isapnp/isapnp.h @@ -388,6 +388,7 @@ IsaHwDeactivateDevice( _IRQL_requires_max_(DISPATCH_LEVEL) VOID IsaHwActivateDevice( + _In_ PISAPNP_FDO_EXTENSION FdoExt, _In_ PISAPNP_LOGICAL_DEVICE LogicalDevice);
_IRQL_requires_max_(DISPATCH_LEVEL) diff --git a/drivers/bus/isapnp/pdo.c b/drivers/bus/isapnp/pdo.c index 2c0a4641cb2..1ee0e51b7ea 100644 --- a/drivers/bus/isapnp/pdo.c +++ b/drivers/bus/isapnp/pdo.c @@ -899,7 +899,7 @@ IsaPdoPnp(
Status = STATUS_SUCCESS;
- IsaHwActivateDevice(PdoExt->IsaPnpDevice); + IsaHwActivateDevice(PdoExt->FdoExt, PdoExt->IsaPnpDevice); IsaHwWaitForKey(); } else