From: andrew@megadata.mega.oz.au (Andrew McRae)
Subject: Re: High Speed Serial Patch
Originator: andrew@noah
Organization: Megadata P/L, North Ryde, Sydney, Aust.
Date: Tue, 10 Nov 1992 03:18:18 GMT

searsk@med.ge.com (Kevin Sears):
> CONSULT-HSPEED version 1.3
> 
> This special consists of a streamlined, low-overhead STREAMS module that
> provides reliable input at
> speeds up to 38.4 Kbps over any Sun serial RS-232 port.
> 
> This special provides only raw character input to a user process. No
> canonical processing, newline, 
> carriage return or uppercase conversion is performed on the input stream.

How is this different from the bottom end STREAMS driver (the one
that talks to the h/w)? I mean, none of these things mentioned
above are actually performed in the bottom end driver (are they?),
but in the ttcompat and ldterm STREAMS module. If you popped *all*
the STREAMS modules, then you should get a `streamlined, low-overhead
STREAMS module' that's simply the serial port driver.

Taken from the zs man entry:

     The Zilog 8530 provides 2 serial  communication  ports  with
     full modem control in asynchronous mode.  Each port supports
     those termio(4) device control functions specified by  flags
     in  the  c_cflag  word  of  the termios structure and by the
     IGNBRK, IGNPAR, PARMRK, or INPCK flags in the  c_iflag  word
     of  the  termios  structure  are performed by the zs driver.
     All other termio(4) functions must be performed  by  STREAMS
     modules pushed atop the driver; when a device is opened, the
     ldterm(4M) and ttcompat(4M) STREAMS  modules  are  automati-
     cally  pushed  on  top of the stream, providing the standard
     termio(4) interface.

The c_cflag word of termios gives you:

          CBAUD   0000017       Baud rate:
          CSIZE   0000060       Character size:
          CSTOPB  0000100       Send two stop bits, else one.
          CREAD   0000200       Enable receiver.
          PARENB  0000400       Parity enable.
          PARODD  0001000       Odd parity, else even.
          HUPCL   0002000       Hang up on last close.
          CLOCAL  0004000       Local line, else dial-up.
          CIBAUD  03600000      Input baud rate, if different from output rate.
          CRTSCTS 020000000000  Enable RTS/CTS flow control.

It is hard to see how you could still do without these in *any*
driver, streamlined or not, since these flags control the hardware
modes of the serial line such as the baud rate, stop bits etc.

This HSPEED module doesn't seem to allow any other STREAMS modules
to be pushed on top - what if I have a SL/IP module I want to
run at 19.2 Kbaud? Or any other special protocol?
Why can't I push a STREAMS module onto the driver - how does the
driver interface with the rest of the system - if it is a true STREAMS
module than I should be able to push another module onto it (by
definition)! If it ISN'T a STREAMS module, but simply a
character device driver for the serial port (i.e. no STREAMS overhead),
then it may be much more efficient, but why call it a STREAMS module?
And why can't this efficiency be placed into the *real* serial
driver?

What is the point? Isn't the *whole* aim of STREAMS to get AWAY from
these special drivers that you can't place line disciplines on top of?

I have never got a straight answer from *anyone* about why Sun
serial drivers are so slow and inefficient - this just confuses
me even more. I can't see any reason for keeping the driver so
inefficient; it's not like keeping the CPU slow deliberately so that
the customer will have to buy a bigger and much more expensive CPU :-)

> Kevin D. Sears

Andrew McRae			inet:	andrew@megadata.mega.oz.au
Megadata Pty Ltd,		uucp:	..!uunet!megadata.mega.oz.au!andrew
North Ryde  2113		Phone:	+61 2 805 0899
NSW    AUSTRALIA		Fax:	+61 2 887 4847
Newsgroups: comp.sys.sun.admin