*BSD News Article 28331


Return to BSD News archive

Xref: sserve comp.os.386bsd.questions:9257 comp.os.386bsd.misc:2058
Path: sserve!newshost.anu.edu.au!munnari.oz.au!constellation!paladin.american.edu!europa.eng.gtefsd.com!emory!swrinde!sgiblab!cs.uoregon.edu!nntpserver!cogswell
From: cogswell@creampie.cs.uoregon.edu (Bryce Howard Cogswell)
Newsgroups: comp.os.386bsd.questions,comp.os.386bsd.misc
Subject: Re: problems with driver for a DEC pc mouse - help
Date: 10 Mar 94 16:36:57
Organization: /home/faculty/cogswell/.organization
Lines: 36
Message-ID: <COGSWELL.94Mar10163657@creampie.cs.uoregon.edu>
References: <CMCovn.18q@curia.ucc.ie>
NNTP-Posting-Host: creampie.cs.uoregon.edu
In-reply-to: dave@odyssey.ucc.ie's message of Tue, 8 Mar 1994 14:44:42 GMT

In article <CMCovn.18q@curia.ucc.ie> dave@odyssey.ucc.ie writes:

>   Hi I am trying to get Xfree86 2.0 to work on a FreeBSD 1.02 box
>   (a DEC PC LPv 466 d2).
>   I am having problems with the mouse (a model PCXAS-AA - is this a logitech
>   or microsoft ?).
>
>   Anyway I downloaded a psmouse driver, but when I ran the new kernel
>   it works ok (I had a problem with trying to use the reccomended
>   line in the config file, as it seemed to have a conflict for the "IO_KBD"
>   port.
>
>   the line was
>   device          psm0    at isa? port "IO_KBD" tty irq 12 vector psmintr
>   and it caused the message
>   psm0 not probed due to i/o address conflict with sc0 at 0x60

You have to hack the kernel code.  There is a small test that checks
if two devices are at the same address and ignores the second if so.
You need to disable this check for the IO_KBD address, since it really
is shared with between two drivers.  Look in haveseen() in isa.c and
change the first block of code to something like:
        if (tmpdvp->id_alive != -1) {
                if ((dvp->id_iobase != IO_KBD) && /* <-- hack for mouse!! */
                    (dvp->id_iobase >= tmpdvp->id_iobase) &&
                    (dvp->id_iobase <=
                          (tmpdvp->id_iobase + tmpdvp->id_alive - 1)))  {
                          conflict(dvp, tmpdvp, dvp->id_iobase,
                                   "I/O address", "0x%x");
                        status = 1;
                }
        }

BTW: This really belongs in the FAQ.

-- Bryce