Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Nov 2004 10:05:15 -0800
From:      John-Mark Gurney <gurney_j@resnet.uoregon.edu>
To:        Paul Sandys <myj@nyct.net>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: SIIG cards and puc
Message-ID:  <20041122180515.GX57546@funkthat.com>
In-Reply-To: <20041122113525.G31812@bsd3.nyct.net>
References:  <20041114231939.Y71461@bsd3.nyct.net> <20041120084456.GU57546@funkthat.com> <20041122113525.G31812@bsd3.nyct.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Paul Sandys wrote this message on Mon, Nov 22, 2004 at 11:46 -0500:
> The SIIG card I have does use shared interrupt for both ports, so I don't see
> any other way around it.
> 
> The 0x40000001 is a regular flag that's used by sio.c . I found an undocumented
> feature in there, that allows you to set a FIFO size, so I used it in
> combination with the shared irq flag.

Ahh, yes...  Then we now have the interesting problem that it appears
that PUC and sio share flags... :(

from puc.c:
                type = (sc->sc_desc.ports[i].flags & PUC_FLAGS_MEMORY)
                    ? SYS_RES_MEMORY : SYS_RES_IOPORT;

and:
                device_set_flags(sc->sc_ports[i].dev,
                    sc->sc_desc.ports[i].flags);

which means you are also turning on memory mapping for the card...

I'm not comfortable including a flag for an undocumented feature as a
standard part of the system..  Care to document it? :)

Also, are you sure it's the ISMULTIPORT that needs to be set?  (and not
the MEMORY flag you are acidentally also setting?)  From what I've read
of the PUC driver, it handles the multiport case for you since it hands
out the interrupts to the sio driver... see this comment above puc_intr:
 * This is an interrupt handler. For boards that can't tell us which
 * device generated the interrupt it just calls all the registered
 * handlers sequencially, but for boards that can tell us which

hmmm.. that's probably how it gets around the fact that it doesn't need
to pass in the multiport flag, so we should probably be clearing that
flag before passing it down to the lower layers...

> from sio.c:
> #define COM_ISMULTIPORT(flags)  ((flags) & 0x01)
> #define COM_FIFOSIZE(flags)     (((flags) & 0xff000000) >> 24)
> 
> Here's the diff:
> 
> *** pucdata.c.orig      Mon Nov 22 11:40:30 2004
> --- pucdata.c   Mon Nov 22 11:41:02 2004
> ***************
> *** 539,546 ****
>             {   0x131f, 0x2031, 0,      0       },
>             {   0xffff, 0xffff, 0,      0       },
>             {
> !               { PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ },
> !               { PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
>             },
>         },
> 
> --- 539,546 ----
>             {   0x131f, 0x2031, 0,      0       },
>             {   0xffff, 0xffff, 0,      0       },
>             {
> !               { PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ, 0x40000001 },
> !               { PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ, 0x40000001 },
>             },
>         },
> 
> 
> On Sat, 20 Nov 2004, John-Mark Gurney wrote:
> 
> > Date: Sat, 20 Nov 2004 00:44:56 -0800
> > From: John-Mark Gurney <gurney_j@resnet.uoregon.edu>
> > To: Paul Sandys <myj@nyct.net>
> > Cc: freebsd-stable@freebsd.org
> > Subject: Re: SIIG cards and puc
> >
> > Paul Sandys wrote this message on Sun, Nov 14, 2004 at 23:25 -0500:
> > > I've tried to get one of the 20x family 16C650 64-byte buffer SIIG cards to
> > > work. It does not work out of the box.
> > >
> > > I had to add 0x40000001 into the flags in pucdata.c for my card and "options
> >
> > where does this magic value come from?  Could you express it in defines
> > in the code?  i.e. PUC_FLAGS_MEMORY
> >
> > > COM_MULTIPORT" into the kernel config. It's still limited to 115200 baud, but
> > > all I was interested is 9600 anyway.
> >
> > COM_MULTIPORT will not be default due to the impact of having to test
> > every sio port on any sio interrupt...
> >
> > > Can this be implemented into the source tree ?
> >
> > A patch is helpful.

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041122180515.GX57546>