diff options
Diffstat (limited to 'com32/lib/syslinux/serial.c')
-rw-r--r-- | com32/lib/syslinux/serial.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/com32/lib/syslinux/serial.c b/com32/lib/syslinux/serial.c index f06e8c8e..aa5690fa 100644 --- a/com32/lib/syslinux/serial.c +++ b/com32/lib/syslinux/serial.c @@ -34,19 +34,22 @@ #include <klibc/compiler.h> #include <syslinux/config.h> #include <string.h> -#include <com32.h> +#include <bios.h> +#include <core.h> struct syslinux_serial_console_info __syslinux_serial_console_info; -void __constructor __syslinux_get_serial_console_info(void) +void __syslinux_set_serial_console_info(void) { - static com32sys_t reg; + uint16_t flowctl; - memset(®, 0, sizeof reg); - reg.eax.w[0] = 0x000b; - __intcall(0x22, ®, ®); + __syslinux_serial_console_info.iobase = SerialPort; + __syslinux_serial_console_info.divisor = BaudDivisor; - __syslinux_serial_console_info.iobase = reg.edx.w[0]; - __syslinux_serial_console_info.divisor = reg.ecx.w[0]; - __syslinux_serial_console_info.flowctl = reg.ebx.w[0]; + flowctl = FlowOutput | FlowInput | (FlowIgnore << 4); + + if (!DisplayCon) + flowctl |= (0x80 << 8); + + __syslinux_serial_console_info.flowctl = flowctl; } |