Re: arbitrary serial speeds

2002-02-28 Thread John Hay

Don't the stuff I committed to current do what you guys want? I'm planning
to MFC it, but haven't asked Bruce yet. I'll need it before I MFC the puc
driver.

John
-- 
John Hay -- [EMAIL PROTECTED] / [EMAIL PROTECTED]

> I had changes to do this 
> BDE refused to commit them.
> 
> 
> On Thu, 28 Feb 2002, Luuk van Dijk wrote:
> 
> > This is a multi-part message in MIME format.
> > --17932B47B695003DFEDACE26
> > Content-Type: text/plain; charset=us-ascii
> > Content-Transfer-Encoding: 7bit
> > 
> > L.S.
> > 
> > for a project in which I communicate with embedded controllers in cars I
> > need to read and write serial data at weird speeds of 5 and 10400 baud. 
> > 
> > the beauty of the freebsd interface to the serial ports is that the
> > speed
> > can be specified as an integer, i.e. not neccesarily as some predefined
> > constant
> > like B9600, but in src/sys/isa/sio.c the supplied value is looked up in
> > a table,
> > so using an arbitrary baudrate like 5 will return EINVAL.
> > 
> > (On linux there is an ugly way to set these weird baud rates by setting
> > the
> > baudrate to 38400, and using a special syscall to tell the kernel to use
> > some other divisor of 115200 to generate the uart speed. needless to
> > say, I prefer
> > the hygiene commonly observed in bsd's api's)
> > 
> > an easy way would be to add my special baudrates to the table
> > 'comspeedtab' 
> > that maps speed to divisor, but it is even more flexible to calculate
> > the divisor
> > on the spot, with the same macro COMBRD() as used in the initializer of
> > 'comspeedtab';
> > note that this macro will automatically round to the next higher
> > baudrate that is
> > a divisor of 115200.
> > 
> > The attached patch contains the neccesary changes.  It works well for
> > me,
> > but who knows what I broke
> > 
> > As far as I can tell, this renders the comspeedtab table, as well as the 
> > routine ttspeedtab in kern/tty.c superfluous, but as I'm not sure I
> > haven't
> > included their removal in the patch.
> > 
> > Whoever maintains isa/sio.c, feel free to use this.  I'd be very happy
> > if
> > in future versions of FreeBSD I could use baudrates of 5 and 10400
> > (actually the
> > latter is rounded to 10475 == 115200/11, but that's good enough for me),
> > without
> > recompiling.
> > 
> > Regards,
> > Luuk van Dijk
> > 
> > ___
> > Mind over Matter  lvd at mndmttr.nl
> > The Netherlandstel +31 6 224 97 227
> > ___
> > --17932B47B695003DFEDACE26
> > Content-Type: text/plain; charset=us-ascii;
> >  name="freebsd-src-sys-isa-sio-arbitrary-speed.patch"
> > Content-Transfer-Encoding: 7bit
> > Content-Disposition: inline;
> >  filename="freebsd-src-sys-isa-sio-arbitrary-speed.patch"
> > 
> > --- isa.org/sio.c   Wed Feb  6 23:58:00 2002
> > +++ isa/sio.c   Thu Feb  7 00:08:25 2002
> > @@ -2153,7 +2153,7 @@
> > t->c_ispeed = t->c_ospeed;
> >  
> > /* check requested parameters */
> > -   divisor = ttspeedtab(t->c_ospeed, comspeedtab);
> > +   divisor = (t->c_ospeed) ? COMBRD(t->c_ospeed) : 0; /* was 
>ttspeedtab(t->c_ospeed, comspeedtab); lvd */
> > if (divisor < 0 || (divisor > 0 && t->c_ispeed != t->c_ospeed))
> > return (EINVAL);
> >  
> > @@ -2794,7 +2794,7 @@
> >  * data input register.  This also reduces the effects of the
> >  * UMC8669F bug.
> >  */
> > -   divisor = ttspeedtab(speed, comspeedtab);
> > +   divisor = (speed) ? COMBRD(speed) : 0; /* was ttspeedtab(speed, comspeedtab); 
>lvd */
> > dlbl = divisor & 0xFF;
> > if (sp->dlbl != dlbl)
> > outb(iobase + com_dlbl, dlbl);
> > 
> > --17932B47B695003DFEDACE26--
> > 
> > 
> > To Unsubscribe: send mail to [EMAIL PROTECTED]
> > with "unsubscribe freebsd-hackers" in the body of the message
> > 
> 
> 
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-hackers" in the body of the message
> 



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message



Re: arbitrary serial speeds

2002-02-28 Thread Julian Elischer

I had changes to do this 
BDE refused to commit them.


On Thu, 28 Feb 2002, Luuk van Dijk wrote:

> This is a multi-part message in MIME format.
> --17932B47B695003DFEDACE26
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
> 
> L.S.
> 
> for a project in which I communicate with embedded controllers in cars I
> need to read and write serial data at weird speeds of 5 and 10400 baud. 
> 
> the beauty of the freebsd interface to the serial ports is that the
> speed
> can be specified as an integer, i.e. not neccesarily as some predefined
> constant
> like B9600, but in src/sys/isa/sio.c the supplied value is looked up in
> a table,
> so using an arbitrary baudrate like 5 will return EINVAL.
> 
> (On linux there is an ugly way to set these weird baud rates by setting
> the
> baudrate to 38400, and using a special syscall to tell the kernel to use
> some other divisor of 115200 to generate the uart speed. needless to
> say, I prefer
> the hygiene commonly observed in bsd's api's)
> 
> an easy way would be to add my special baudrates to the table
> 'comspeedtab' 
> that maps speed to divisor, but it is even more flexible to calculate
> the divisor
> on the spot, with the same macro COMBRD() as used in the initializer of
> 'comspeedtab';
> note that this macro will automatically round to the next higher
> baudrate that is
> a divisor of 115200.
> 
> The attached patch contains the neccesary changes.  It works well for
> me,
> but who knows what I broke
> 
> As far as I can tell, this renders the comspeedtab table, as well as the 
> routine ttspeedtab in kern/tty.c superfluous, but as I'm not sure I
> haven't
> included their removal in the patch.
> 
> Whoever maintains isa/sio.c, feel free to use this.  I'd be very happy
> if
> in future versions of FreeBSD I could use baudrates of 5 and 10400
> (actually the
> latter is rounded to 10475 == 115200/11, but that's good enough for me),
> without
> recompiling.
> 
> Regards,
>   Luuk van Dijk
> 
> ___
> Mind over Matter  lvd at mndmttr.nl
> The Netherlandstel +31 6 224 97 227
> ___
> --17932B47B695003DFEDACE26
> Content-Type: text/plain; charset=us-ascii;
>  name="freebsd-src-sys-isa-sio-arbitrary-speed.patch"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: inline;
>  filename="freebsd-src-sys-isa-sio-arbitrary-speed.patch"
> 
> --- isa.org/sio.c Wed Feb  6 23:58:00 2002
> +++ isa/sio.c Thu Feb  7 00:08:25 2002
> @@ -2153,7 +2153,7 @@
>   t->c_ispeed = t->c_ospeed;
>  
>   /* check requested parameters */
> - divisor = ttspeedtab(t->c_ospeed, comspeedtab);
> + divisor = (t->c_ospeed) ? COMBRD(t->c_ospeed) : 0; /* was 
>ttspeedtab(t->c_ospeed, comspeedtab); lvd */
>   if (divisor < 0 || (divisor > 0 && t->c_ispeed != t->c_ospeed))
>   return (EINVAL);
>  
> @@ -2794,7 +2794,7 @@
>* data input register.  This also reduces the effects of the
>* UMC8669F bug.
>*/
> - divisor = ttspeedtab(speed, comspeedtab);
> + divisor = (speed) ? COMBRD(speed) : 0; /* was ttspeedtab(speed, comspeedtab); 
>lvd */
>   dlbl = divisor & 0xFF;
>   if (sp->dlbl != dlbl)
>   outb(iobase + com_dlbl, dlbl);
> 
> --17932B47B695003DFEDACE26--
> 
> 
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-hackers" in the body of the message
> 


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message



arbitrary serial speeds

2002-02-28 Thread Luuk van Dijk

This is a multi-part message in MIME format.
--17932B47B695003DFEDACE26
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

L.S.

for a project in which I communicate with embedded controllers in cars I
need to read and write serial data at weird speeds of 5 and 10400 baud. 

the beauty of the freebsd interface to the serial ports is that the
speed
can be specified as an integer, i.e. not neccesarily as some predefined
constant
like B9600, but in src/sys/isa/sio.c the supplied value is looked up in
a table,
so using an arbitrary baudrate like 5 will return EINVAL.

(On linux there is an ugly way to set these weird baud rates by setting
the
baudrate to 38400, and using a special syscall to tell the kernel to use
some other divisor of 115200 to generate the uart speed. needless to
say, I prefer
the hygiene commonly observed in bsd's api's)

an easy way would be to add my special baudrates to the table
'comspeedtab' 
that maps speed to divisor, but it is even more flexible to calculate
the divisor
on the spot, with the same macro COMBRD() as used in the initializer of
'comspeedtab';
note that this macro will automatically round to the next higher
baudrate that is
a divisor of 115200.

The attached patch contains the neccesary changes.  It works well for
me,
but who knows what I broke

As far as I can tell, this renders the comspeedtab table, as well as the 
routine ttspeedtab in kern/tty.c superfluous, but as I'm not sure I
haven't
included their removal in the patch.

Whoever maintains isa/sio.c, feel free to use this.  I'd be very happy
if
in future versions of FreeBSD I could use baudrates of 5 and 10400
(actually the
latter is rounded to 10475 == 115200/11, but that's good enough for me),
without
recompiling.

Regards,
Luuk van Dijk

___
Mind over Matter  lvd at mndmttr.nl
The Netherlandstel +31 6 224 97 227
___
--17932B47B695003DFEDACE26
Content-Type: text/plain; charset=us-ascii;
 name="freebsd-src-sys-isa-sio-arbitrary-speed.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="freebsd-src-sys-isa-sio-arbitrary-speed.patch"

--- isa.org/sio.c   Wed Feb  6 23:58:00 2002
+++ isa/sio.c   Thu Feb  7 00:08:25 2002
@@ -2153,7 +2153,7 @@
t->c_ispeed = t->c_ospeed;
 
/* check requested parameters */
-   divisor = ttspeedtab(t->c_ospeed, comspeedtab);
+   divisor = (t->c_ospeed) ? COMBRD(t->c_ospeed) : 0; /* was 
+ttspeedtab(t->c_ospeed, comspeedtab); lvd */
if (divisor < 0 || (divisor > 0 && t->c_ispeed != t->c_ospeed))
return (EINVAL);
 
@@ -2794,7 +2794,7 @@
 * data input register.  This also reduces the effects of the
 * UMC8669F bug.
 */
-   divisor = ttspeedtab(speed, comspeedtab);
+   divisor = (speed) ? COMBRD(speed) : 0; /* was ttspeedtab(speed, comspeedtab); 
+lvd */
dlbl = divisor & 0xFF;
if (sp->dlbl != dlbl)
outb(iobase + com_dlbl, dlbl);

--17932B47B695003DFEDACE26--


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message