freebsd-skq/sys/i386/isa/README.stl
1996-05-04 06:16:23 +00:00

262 lines
10 KiB
Plaintext

Stallion Multiport Serial Driver Readme
---------------------------------------
Version: 0.0.4 alpha
Date: 06FEB96
Author: Greg Ungerer (gerg@stallion.oz.au)
1. INTRODUCTION
This is a FreeBSD driver for some of the Stallion Technologies range of
multiport serial boards. This driver is still very new, so it should be
considered to be of very alpha quality.
This driver has not been developed by Stallion Technologies. I developed it
in my spare time in the hope that it would be useful. As such there is no
warranty or support of any form.
What this means is that this driver is not officially supported by Stallion
Technologies, so don't ring their support if you can't get it working. They
will probably not be able to help you. Instead email me if you have problems
or bug reports and I will do what I can... (Sorry to sound so heavy handed,
but I need to stress that this driver is not officially supported in any way.)
This driver supports the EasyIO and EasyConnection 8/32 range of boards.
All of these boards are not classical intelligent multiport boards, but are
host based multiport boards that use high performance Cirrus Logic CL-CD1400
RISC UART's (they have built in FIFO's, automatic flow control, and some
other good stuff).
The EasyIO range of cards comes in 3 forms, the EasyIO-4, EasyIO-8 and the
EasyIO-8M. All of these are non-expandable, low cost, ISA, multiport boards
with 4, 8 and 8 RS-232C ports respectively. Each EasyIO board requires 8
bytes of IO address space and 1 interrupt. On an EISA system it is possible
to share 1 interrupt between multiple boards. The EasyIO-4 has 10 pin RJ
connectors, and the EasyIO-8 comes with a dongle cable that can be either
10 pin RJ connectors or DB-25 connectors. The EasyIO-8M has 6 pin RJ
connectors.
The EasyConnection 8/32 family of boards is a relatively low cost modular
range of multiport serial boards. The EasyConnection 8/32 boards can be
configured to have from 8 to 32 serial ports by plugging in external serial
port modules that contain from 8 to 16 ports each. There is a wide range of
external modules available that offer: DB-25 connectors, RJ-45 connectors
(both with RS-232 D and E compatible drivers), and also RS-422 ports. The
EasyConnection 8/32 boards come in ISA and MCA bus versions. The board takes
the form of a host adapter card, with an external connector cable that plugs
into the external modules. The external modules just clip together to add
ports (BTW they are not hot pluggable). Each EasyConnection 8/32 board
requires 2 separate IO address ranges, one 2 bytes in size and a secondary
region of 32 bytes. Each board also requires 1 interrupt, on EISA systems
multiple boards can share 1 interrupt. The secondary IO range (the 32 byte
range) can be shared between multiple boards on any bus type.
So thats the hardware supported (sounds like a marketing spiel doesn't it!).
I am working on drivers for other boards in the Stallion range, so look
out for those some time soon...
1.1 HOW TO GET BOARDS
Stallion Technologies has offices all over the world, as well as many more
distributors and resellers. To find out about local availability please
contact the nearest Stallion office and they can give you all the information
you need. Look in the "Offices" file in the driver package for a current list
of Stallion Technologies offices.
Another good source of information about the Stallion range of boards and
local availability is on the Stallion Web page. Check it out at
http://www.stallion.com.
2. INSTALLATION
This driver, as is, will work on a FreeBSD 2.1 system. It will run on
a 2.0.5 system, or -current version systems by changing a define in the
driver source.
You will need to build a new kernel to use this driver. So the first thing
you need is to have the full kernel source. Most people will have this
(I hope!). The following assumes that the kernel source is in /usr/src/sys.
The driver can support up to 8 boards, with any combination of EasyIO and
EasyConnection 8/32 boards. So there is a theoretical maximum of 256 ports.
(Off-course I have not tested a system with this many!)
Instructions to install:
1. Copy the driver source files into the kernel source tree.
cp stallion.c /usr/src/sys/i386/isa
cp scd1400.h /usr/src/sys/i386/ic
Note: if you are NOT using FreeBSD 2.1.0 then you will need to edit the
stallion.c file and change the VFREEBSD define to match your version.
2. (Note: skip to next step if on a FreeBSD kernel later than 2.1.0)
Add a character device switch table entry for the driver into the cdevsw
table structure. This involves adding some code into the kernel conf.c
file:
cd /usr/src/sys/i386/i386
vi conf.c
- add the following lines (in 2.1 I put them at line 729):
/* Stallion Multiport Serial Driver */
#include "stl.h"
#if NSTL > 0
d_open_t stlopen;
d_close_t stlclose;
d_read_t stlread;
d_write_t stlwrite;
d_ioctl_t stlioctl;
d_stop_t stlstop;
d_ttycv_t stldevtotty;
#define stlreset nxreset
#define stlmmap nxmmap
#define stlstrategy nxstrategy
#else
#define stlopen nxopen
#define stlclose nxclose
#define stlread nxread
#define stlwrite nxwrite
#define stlioctl nxioctl
#define stlstop nxstop
#define stlreset nxreset
#define stlmmap nxmmap
#define stlstrategy nxstrategy
#define stldevtotty nxdevtotty
#endif
- and then inside the actual cdevsw structure definition, at the
last entry add (this is now line 1384 in the 2.1 conf.c):
{ stlopen, stlclose, stlread, stlwrite, /*72*/
stlioctl, stlstop, stlreset, stldevtotty,/*stallion*/
ttselect, stlmmap, stlstrategy },
- the line above used major number 72, but this may be different
on your system. Take note of what major number you are using.
- save the file and exit vi.
3. Add the driver source files to the kernel files list:
cd /usr/src/sys/i386/conf
vi files.i386
- add the following definition line into the list (it is stored
alphabetically, so insert it appropriately):
i386/isa/stallion.c optional stl device-driver
- save the file and exit vi.
4. Add board probe entries into the kernel configuration file:
cd /usr/src/sys/i386/conf
cp GENERIC MYKERNEL
- if you already have a kernel config that you use then you
could just use that (instead of MYKERNEL)
vi MYKERNEL
- if only using ECH-PCI boards then you don't need to enter a
configuration line, the kernel will automatically detect
the board at boot up, so skip to step 5.
- enter a line for each board that you want to use, eg:
device stl0 at isa? port 0x2a0 tty irq 10 vector stlintr
(I suggest you put them after the sio? entries)
(Don't enter lines for ECH-PCI boards)
- change the io address and irq in this line as required
- save the file and exit
5. Build a new kernel using this configuration.
cd /usr/src/sys/i386/conf
config MYKERNEL
cd ../../compile/MYKERNEL
make depend
make all
make install
And there you have it! It is a little bit of effort to get it in there...
So once you have a new kernel built, reboot to start it up. On startup the
Stallion board probes will report on whether the boards were found or not.
For each board found the driver will print out the type of board found,
and how many panels and ports it has.
If a board is not found by the driver but is actually in the system then the
most likely problem is that the IO address is wrong. The easiest thing to do
is change the DIP switches on the board to the desired address and reboot.
On EasyIO and EasyConnection 8/32 boards the IRQ is software programmable,
so if there is a conflict you may need to change the IRQ used for a board in
the MYKERNEL configuration file and rebuild the kernel.
Note that the secondary IO address of the EasyConnection 8/32 boards is hard
wired into the stallion.c driver code. It is currently set to IO address
0x280. If you need to use a different address then you will need to edit this
file and change the variable named stl_ioshared.
3. USING THE DRIVER
Once the driver is installed you will need to setup some device nodes to
access the serial ports. Use the supplied "mkdevnods" script to automatically
create all required device entries for your boards. To make device nodes for
more than 1 board then just supply the number of boards you are using as a
command line parameter to mkdevnods and it will create nodes for that number
of boards. By default it will create device nodes for 1 board only.
Note that if the driver is not installed at character major number 72 then
you will need to edit the mkdevnods script and modify the STL_SERIALMAJOR
variable to the major number you are using.
Device nodes created for the normal serial port devices are named /dev/ttyEX
where X is the port number. (The second boards ports will start from ttyE32,
the third boards from ttyE64, etc). It will also create a set of modem call
out devices named cueX where again X is the port number.
For the most part the Stallion driver tries to emulate the standard PC system
com ports and the standard sio serial driver. The idea is that you should
be able to use Stallion board ports and com ports inter-changeably without
modifying anything but the device name. Anything that doesn't work like that
should be considered a bug in this driver!
Since this driver tries to emulate the standard serial ports as much as
possible then most system utilities should work as they do for the standard
com ports. Most importantly "stty" works as expected and "comcontrol" can be
used just like for the serial ports.
This driver should work with anything that works on standard com serial ports.
Having said that, I have used it on at least the following types of "things"
under FreeBSD:
a) standard dumb terminals (using getty)
b) modems (using cu, etc)
c) ppp (through pppd, kernel ppp)
4. NOTES
Be aware that this driver is still very new, so there is sure to be some bugs
in it. Please email me any feedback on bugs, problems, or even good
experiences with this driver!
I will probably also add LKM support some time soon.
5. ACKNOWLEDGEMENTS
This driver is loosely based on the code of the FreeBSD sio serial driver.
A big thanks to Stallion Technologies for the use of their equipment.