Return to BSD News archive
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!elroy.jpl.nasa.gov!swrinde!news.dell.com!uudell!obiwan!bob
From: bob@obiwan.uucp (Bob Willcox)
Newsgroups: comp.os.386bsd.questions
Subject: Re: still fighting the multiport driver ;-)
Keywords: multiport
Message-ID: <C9xFD4.36M@obiwan.uucp>
Date: 10 Jul 93 02:10:02 GMT
References: <570@apdnews.idca.tds.philips.nl>
Organization: /etc/organization
Lines: 68
In article <570@apdnews.idca.tds.philips.nl> wilko@idca.tds.philips.nl (Wilko Bulte) writes:
>I managed to get the multiport driver to recognize my AST/4. Strangely
>this only succeeded when the board was no longer on IRQ2. But
>completely right it is not.. See the config file below:
> [bunch of configuration and syslog stuff deleted...]
>Jul 5 17:58:00 murphy /386bsd: sio0 <16450> at 0x3f8 irq 4 on isa
>Jul 5 17:58:00 murphy /386bsd: sio2 <16450> (multiport) at 0x2a8 irq 3 flags 0x401 on isa
>Jul 5 17:58:00 murphy /386bsd: sio3 <16450> (multiport) at 0x2b0 irq 3 flags 0x401 on isa
>Jul 5 17:58:00 murphy /386bsd: sio4 <8250> (multiport) at 0x2b8 irq 3 flags 0x401 on isa
> [and a bunch more syslog stuff deleted...]
>
>So, this leaves me somewhat flabbergasted. The AST definetely has 4
>16450, and no 8250. The first port isnot detected at all.
>
>ANybody who can shed some light here?
I have expierenced similar problems. The test in the sio.c driver (in
the sioattach() routine) that is causing it to *think* it is a 8250 is:
/* attempt to determine UART type */
scr = inb(iobase + com_scr);
outb(iobase + com_scr, 0xa5);
scr1 = inb(iobase + com_scr);
outb(iobase + com_scr, 0x5a);
scr2 = inb(iobase + com_scr);
outb(iobase + com_scr, scr);
if (scr1 != 0xa5 || scr2 != 0x5a) <--- this is it!
printf(" <8250>");
This test seems to be depending upon the absence of the com_scr
register in the 8250 (iobase+7). Unfortunately, the AST 4-port
card uses this last register of the last UART for interrupt status
(for the 4 UARTs) (I believe), hence the last port of the 4 fails
the test. I simply deleted this test in my copy of sio.c (I *know
that I have no 8250's...mine are all 16550s).
Note: My Bocaboard (BB1008) failed the same way on *all* 8 of its
ports (the +7 address register is replicated for each port
according to the documentation).
I have also had some problems with another test in the if statement:
if ( inb(iobase + com_cfcr) != CFCR_8BITS
|| inb(iobase + com_ier) != IER_ETXRDY
|| inb(iobase + com_mcr) != MCR_IENABLE
|| !isa_irq_pending(dev) <--- this one fails!
|| (inb(iobase + com_iir) & IIR_IMASK) != IIR_TXRDY
|| isa_irq_pending(dev)
|| (inb(iobase + com_iir) & IIR_IMASK) != IIR_NOPEND)
result = 0;
in the sioprobe() routine for a couple of the ports on my 4-port
card (thats right, two worked and two failed :-( (This is *not* an
AST card, its a clone of some kind). Again, I simply removed that
particular test and everything seems to be okay. These are admittedly
pretty ugly hacks, but when you're in a pinch to the system back
up...
--
Bob Willcox ...!{rutgers|ames}!cs.utexas.edu!uudell!obiwan!bob
Phone: 512 258-4224 (home)
512 838-3914 (work)