[syslinux] Enumeration of ISA serial ports inconsistent between Linux and Syslinux

Oliver Mangold o.mangold at gmail.com
Sun Oct 9 04:25:37 PDT 2016


Hi,

I would like to point out an issue with the enumeration of ISA serial 
devices in Syslinux. If I interpret the snippet below correctly, 
Syslinux looks up the device order with the BIOS, while Linux uses the 
fixed order 3F8,2F8,3E8,2E8.

Note that this inconsistency is a real problem, as some motherboards 
(like e.g. a Supermicro X10DRi with default BIOS settings) have a 
different order stored in BIOS:

---
# hexdump -s 0x400 -n 8 /dev/mem
0000400 02f8 03f8 0000 0000
---


Best regards,

Oliver

--- /syslinux/core/include/bios.h ---
#define SERIAL_BASE     0x0400  /* Base address for 4 serial ports */
...
static inline uint16_t get_serial_port(uint16_t port)
{
      /* Magic array in BIOS memory, contains four entries */
      const uint16_t * const serial_ports = (const uint16_t *)SERIAL_BASE;

      /*
       * If port > 3 then the port is simply the I/O base address
       */
      if (port > 3)
          return port;

      /* Get the I/O port from the BIOS */
      return serial_ports[port];
}
---


More information about the Syslinux mailing list