My driver interacts with serial.sys.
At 115200 baud, I was getting FIFO overrun errors and losing bytes, so I
investigated using an oscilloscope and some pin-toggling code inserted into
my driver and serial.sys.
When a stream of 27 bytes appears at the serial port, the Interrupt Service
Routine of serial.sys is called after the first 8 bytes (FIFO Rx threshold
is set to 8) but not again until 4 milliseconds after the 27th byte. This
delay causes the FIFO overrun.
Is it possible that when the ISR of serial.sys queues a DPC (my
IoCompletion routine) it causes some IRQs to be suppressed? My
IoCompletion routine itself is not the problem – it isn’t getting called
until after the stream of 27 bytes is over.
Has anyone else come across this behaviour?
Is there any work-around?
Any answers greatly appreciated,
Malcolm Hannah (xxxxx@mhannah.co.uk)