ISA to PCI Dev.ser migration

I am migrating software from an ISA based system to a newer PCI based chassis. The old ISA system used a DIGI PC/8 board for multiple serial devices which were set through the Dev.ser in the sysinit file. For some reason when I try to start the serial drivers for a DIGI PCI-8 Classicboard on the PCI chassis the drivers do not communicate with the port. I have used the IO address shown from the ‘show_pci -vvv’ command, but nothing flows on the ports. We are using QNX 4.25.

Any suggestions and cures would sure be appreciated.


Are you supplying IRQ? Are you sure the board is register compatible with 8250 serial chip?

The boards use dual quad ST16C654 UARTs, not the 8250. The QNX show_pci indicates that the IRQ is on 15, with 2 IO spaces listed at C000h and C400h. I have found that the IO @ C400h does attempt to output something, but it is not distinguishable. I believe that the 8250 forms a subset of the ST16C654 registers and that they are compatible, but I have to admit that I am not sure. The older DIGI PC/8 board used the TI 16C450N device.

I am setting the IRQ in the sysinit file based on the data from the show_pci information, ie Dev.ser C400, 15.

Apparenlty 16654 is same as 16550 but with 64 byte FIFO. It looks like it should work. What do you mean by “not distinguishable”? What does traceinfo says? Is the IRQ shared with other devices?

QNX Master,

By the ‘not distinguishable’ I mean that instead of an ASCII character string being output across the serial port, a single ‘0x7F’ is output. The sysinit file for the ISA bus was set as Dev.ser -F 3E8,5 320,5 3E0,5 388,5 338,5 360,5 368,5 390,5 & so that all of the PC/8 serial ports shared the same IRQ 5 at different port addresses as set on the DIGI board by dip switchs. The sysinit that I have been using has Dev.ser -F C400,15 C408, 15 etc.

The traceinfo shows timeouts for the serial ports at C400 and C410. The IRQ is only shared for the 8 serial ports as shown above.

Thanks for the help,

It’s possible the board serial devices are not starting at address 0xc400 but are located a bit higher in the address space (0xc410 for example), maybe the board has some special register of its own at address 0xc400.? Just a guess.

Have you disable the secondary IDE controler to make sure it’s not somehow connected to IRQ 15 and causing problem.

You have to ask DIGI tech support how the UART base i/o adresses related to those adresses in PCI config space. Usually they are 8 sequential adresses with some predefined offset in one or both i/o regions. But sometimes it’s easier. For example, Lava Octopus board ( implement multifunctional PCI device with 4 base i/o adresses for each function. So, show_pci will show you the exactly i/o base adresses for starting the serial driver.


I have the secondary IDE disabled and I believe you are correct about a register and offset difference. I am contacting DIGI to try and glean some more information from their engineering group.

Thank you for all the assistance and if and when this is resolved, I will post for others that may encounter this problem.

Best Regards,

According to
you need a custom driver (or slightly modificated driver, at least) because it has to program PLX 9052 to enable interrupts from quad UARTs and enable interrupt on PCI bus. Might be some additional programming required, I can’t tell you just after briefly reviewing.