*BSD News Article 18224


Return to BSD News archive

Path: sserve!newshost.anu.edu.au!munnari.oz.au!uunet!elroy.jpl.nasa.gov!swrinde!news.dell.com!uudell!obiwan!bob
From: bob@obiwan.uucp (Bob Willcox)
Newsgroups: comp.os.386bsd.questions
Subject: Re: how to configure multiport cards using pk024
Message-ID: <C9zA9I.oF@obiwan.uucp>
Date: 11 Jul 93 02:15:04 GMT
References: <568@apdnews.idca.tds.philips.nl>
Organization: /etc/organization
Lines: 82

In article <568@apdnews.idca.tds.philips.nl> wilko@idca.tds.philips.nl (Wilko Bulte) writes:
>Patchkit 0.2.4. has introduced the possibility to use multiport serial 
>boards. Very nice to have it, especially since my AST/4 is sitting idle
>on my EISA bus for months now ;-)
>
>Only: how do you configure an AST/4 in the kernel?

I have an AST/4 (actually, a clone) multiport card running on my system.
I had to hack the sioprobe() and sioattach() code in sio.c to get it to
properly detect the ports and then recognize the type of UARTs installed
(16550As).  From a previous posting of mine:

------------------------------------------------------------------------
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...
------------------------------------------------------------------------

>
>What I have in the config file is:
>
>	sio0	-> COM1 
>	sio1	-> COM2
>
>(both are recognized and work just fine)
>
>	sio2	@ 0x1a0	irq 2 flags 0x0501
>	sio3	@ 0x1a8	irq 2 flags 0x0501
>	sio4	@ 0x1b0 irq 2 flags 0x0501
>	sio5	@ 0x1b8 irq 2 flags 0x0501
>
>Hmm, might be that I had to take irq 9 to get config happy, but essentially
>the above is what I used. 

My configuration looks very similar to yours, though I am using irq 5
for the 4-port card.


-- 
Bob Willcox                ...!{rutgers|ames}!cs.utexas.edu!uudell!obiwan!bob
Phone: 512 258-4224 (home)
       512 838-3914 (work)