From 523c6b65d18a85acc4044b5eb796f589d131477b Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 6 Aug 2017 00:33:47 +0200 Subject: [PATCH] serial_setup() in serial_old.c now returns without doing anything if the specified serial port is disabled in Settings, fixes ports being enabled where they shouldn't be on machines with Super I/O chips; LPT code now takes the lpt_enabled variable into account at all levels. --- src/lpt.c | 40 +++++++++++++++++++++++++++++----------- src/serial_old.c | 8 ++++++++ 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/lpt.c b/src/lpt.c index 73cd3ce6d..eb25900af 100644 --- a/src/lpt.c +++ b/src/lpt.c @@ -61,32 +61,50 @@ uint16_t lpt_addr[2] = { 0x378, 0x278 }; void lpt_init() { - io_sethandler(0x0378, 0x0003, lpt1_read, NULL, NULL, lpt1_write, NULL, NULL, NULL); - io_sethandler(0x0278, 0x0003, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); - lpt_addr[0] = 0x378; - lpt_addr[1] = 0x278; + if (lpt_enabled) + { + io_sethandler(0x0378, 0x0003, lpt1_read, NULL, NULL, lpt1_write, NULL, NULL, NULL); + io_sethandler(0x0278, 0x0003, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); + lpt_addr[0] = 0x378; + lpt_addr[1] = 0x278; + } } void lpt1_init(uint16_t port) { - io_sethandler(port, 0x0003, lpt1_read, NULL, NULL, lpt1_write, NULL, NULL, NULL); - lpt_addr[0] = port; + if (lpt_enabled) + { + io_sethandler(port, 0x0003, lpt1_read, NULL, NULL, lpt1_write, NULL, NULL, NULL); + lpt_addr[0] = port; + } } void lpt1_remove() { - io_removehandler(lpt_addr[0], 0x0003, lpt1_read, NULL, NULL, lpt1_write, NULL, NULL, NULL); + if (lpt_enabled) + { + io_removehandler(lpt_addr[0], 0x0003, lpt1_read, NULL, NULL, lpt1_write, NULL, NULL, NULL); + } } void lpt2_init(uint16_t port) { - io_sethandler(port, 0x0003, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); - lpt_addr[1] = port; + if (lpt_enabled) + { + io_sethandler(port, 0x0003, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); + lpt_addr[1] = port; + } } void lpt2_remove() { - io_removehandler(lpt_addr[1], 0x0003, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); + if (lpt_enabled) + { + io_removehandler(lpt_addr[1], 0x0003, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); + } } void lpt2_remove_ams() { - io_removehandler(0x0379, 0x0002, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); + if (lpt_enabled) + { + io_removehandler(0x0379, 0x0002, lpt2_read, NULL, NULL, lpt2_write, NULL, NULL, NULL); + } } diff --git a/src/serial_old.c b/src/serial_old.c index 7dbb3e928..a195c310e 100644 --- a/src/serial_old.c +++ b/src/serial_old.c @@ -286,6 +286,10 @@ void serial_setup(int port, uint16_t addr, int irq) switch(port) { case 1: + if (!serial_enabled[0]) + { + return; + } if (base_address[0] != 0x0000) { serial_remove(port); @@ -298,6 +302,10 @@ void serial_setup(int port, uint16_t addr, int irq) serial1.irq = irq; break; case 2: + if (!serial_enabled[1]) + { + return; + } if (base_address[1] != 0x0000) { serial_remove(port);