Return to BSD News archive
Newsgroups: comp.os.386bsd.development
Path: sserve!newshost.anu.edu.au!munnari.oz.au!mel.dit.csiro.au!its.csiro.au!dmssyd.syd.dms.CSIRO.AU!metro!news.cs.su.oz.au!harbinger.cc.monash.edu.au!yeshua.marcam.com!MathWorks.Com!europa.eng.gtefsd.com!howland.reston.ans.net!gatech!swrinde!news.dell.com!obiwan!bob
From: bob@obiwan.uucp (Bob Willcox)
Subject: Re: multi-port serial card support?
References: <1994Mar8.175010.24603@pegasus.com> <CMq4I9.1LG@obiwan.uucp>
Organization: Bob's Place, Austin TX
Date: Mon, 21 Mar 1994 01:57:31 GMT
Message-ID: <CMzs49.KIo@obiwan.uucp>
Lines: 157
I had a couple of requests for these diffs to sio.c to support the
BocaBoard multi-port cards so I thought I might as well go ahead
and post them.
What follows are a set of diffs for 1.0.2 ant then the diffs for
1.1-BETA. I have successfully applied the 1.1-BETA diffs to my
-current level system as well. Note that the 1.0.2 diffs have not
been tested. I synthesized them from the 1.1-BETA version and
parts of the (significantly hacked) sio driver that I am running
on my 1.0.2 system.
Use at your own risk and be sure to have a backup of your kernel
before running with these changes.
*-------------------- FreeBSD 1.0.2 sio.c diff start -----------------------*
*** sio.c Fri Oct 15 18:46:04 1993
--- /tmp/sio.c Sun Mar 20 19:26:00 1994
***************
*** 83,88 ****
--- 83,89 ----
*/
#define COM_ISMULTIPORT(dev) ((dev)->id_flags & 0x01)
#define COM_MPMASTER(dev) (((dev)->id_flags >> 8) & 0x0ff)
+ #define COM_NOMASTER(dev) ((dev)->id_flags & 0x04)
#endif /* COM_MULTIPORT */
#define com_scr 7 /* scratch register for 16450-16550 (R/W) */
***************
*** 486,495 ****
}
#ifdef COM_MULTIPORT
if (COM_ISMULTIPORT(isdp)) {
! struct isa_device *masterdev;
! com->multiport = TRUE;
! printf(" (multiport)");
/* set the master's common-interrupt-enable reg.,
* as appropriate. YYY See your manual
--- 487,498 ----
}
#ifdef COM_MULTIPORT
if (COM_ISMULTIPORT(isdp)) {
! com->multiport = TRUE;
! printf(" (multiport)");
! /* Note: some cards have no master port (e.g., BocaBoards) */
! if (!COM_NOMASTER(isdp)) {
! struct isa_device *masterdev;
/* set the master's common-interrupt-enable reg.,
* as appropriate. YYY See your manual
***************
*** 500,505 ****
--- 503,509 ----
masterdev = find_isadev(isa_devtab_tty, &siodriver,
COM_MPMASTER(isdp));
outb(masterdev->id_iobase+com_scr, 0x80);
+ }
}
else
com->multiport = FALSE;
***************
*** 1491,1497 ****
/* YYY maybe your card doesn't want IENABLE to be reset? */
if(com->multiport)
outb(com->modem_ctl_port,
! com->mcr_image = bits);
else
#endif /* COM_MULTIPORT */
outb(com->modem_ctl_port,
--- 1495,1501 ----
/* YYY maybe your card doesn't want IENABLE to be reset? */
if(com->multiport)
outb(com->modem_ctl_port,
! com->mcr_image = bits | (com->mcr_image & MCR_IENABLE));
else
#endif /* COM_MULTIPORT */
outb(com->modem_ctl_port,
*-------------------- FreeBSD 1.0.2 sio.c diff end -----------------------*
*------------------- FreeBSD 1.1-BETA sio.c diff start ---------------------*
*** sio.c.orig Fri Mar 18 17:48:41 1994
--- sio.c Fri Mar 18 17:48:50 1994
***************
*** 31,37 ****
* SUCH DAMAGE.
*
* from: @(#)com.c 7.5 (Berkeley) 5/16/91
! * $Id: sio.c,v 1.1 1994/03/08 22:42:01 bob Exp $
*/
#include "sio.h"
--- 31,37 ----
* SUCH DAMAGE.
*
* from: @(#)com.c 7.5 (Berkeley) 5/16/91
! * $Id: sio.c,v 1.2 1994/03/08 22:43:34 bob Exp $
*/
#include "sio.h"
***************
*** 82,87 ****
--- 82,88 ----
*/
#define COM_ISMULTIPORT(dev) ((dev)->id_flags & 0x01)
#define COM_MPMASTER(dev) (((dev)->id_flags >> 8) & 0x0ff)
+ #define COM_NOMASTER(dev) ((dev)->id_flags & 0x04)
#endif /* COM_MULTIPORT */
#define COM_NOFIFO(dev) ((dev)->id_flags & 0x02)
***************
*** 487,496 ****
#ifdef COM_MULTIPORT
if (COM_ISMULTIPORT(isdp)) {
! struct isa_device *masterdev;
! com->multiport = TRUE;
! printf(" (multiport)");
/* set the master's common-interrupt-enable reg.,
* as appropriate. YYY See your manual
--- 488,499 ----
#ifdef COM_MULTIPORT
if (COM_ISMULTIPORT(isdp)) {
! com->multiport = TRUE;
! printf(" (multiport)");
! /* Note: some cards have no master port (e.g., BocaBoards) */
! if (!COM_NOMASTER(isdp)) {
! struct isa_device *masterdev;
/* set the master's common-interrupt-enable reg.,
* as appropriate. YYY See your manual
***************
*** 501,506 ****
--- 504,511 ----
masterdev = find_isadev(isa_devtab_tty, &siodriver,
COM_MPMASTER(isdp));
outb(masterdev->id_iobase + com_scr, 0x80);
+ }
+
} else
com->multiport = FALSE;
#endif /* COM_MULTIPORT */
*------------------- FreeBSD 1.1-BETA sio.c diff end ---------------------*
--
Bob Willcox ...!{rutgers|ames}!cs.utexas.edu!uudell!obiwan!bob
Phone: 512 258-4224 (home)
512 838-3914 (work)
--
Bob Willcox ...!{rutgers|ames}!cs.utexas.edu!uudell!obiwan!bob
Phone: 512 258-4224 (home)
512 838-3914 (work)