Port-amiga archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Problems with IOblix serial ports



John Klos wrote:

> One part of the problem turned out to be the lpt port(s). My card only
> has one lpt chip (78C36; the second one is an option on these boards),
> but the kernel was configuring two lpt ports:
>
> lpt0 at iobl0 port 0x0200 ipl 6
> lpt1 at iobl0 port 0x0300 ipl 6
>
> with lpt0 in the kernel config instead of lpt*, it still paniced when I 
> tried to use the com ports, but with neither lpt0 nor lpt*, the com
> ports work fine, so I assume that there's a problem with the lpt port
> driver.

All IOblix devices, the com ports and the lpt ports install a level 6
insterrupt handler. So when you get an interrupt from one of your com ports
all handlers (4 x comintr() and 2 x lptintr()) might be called until the
first confirmed having handled the interrupt.

Which means when the lpt-handlers are before the com-handlers in the isr
queue, they will be called first and might cause a crash when something bad
happens (ok, this doesn't explain your success with printf in comintr).


> I wouldn't have any way to test an lpt port, anyhow.

I guess nobody ever tested it. I found a message from Ignatios in the
cvs-log where he wrote that IOblix lpt is untested. But I think he tested
the serial port without panics.


> Any ideas?

You could continue to explore the problem in two directions:

- Debug lptintr(). Although not used, the lptintr() will probably be called 
 on each level 6 interrupt.

- Revert busfuncs.c to 1.10, simple_busfuncs.c to 1.5 and 
  amiga_bus_simple_4.c to 1.5. This will make sure I didn't introduce a bug 
  there.

-- 
Frank Wille



Home | Main Index | Thread Index | Old Index