1 |
1275 |
phoenix |
The Linux Digiboard Driver
|
2 |
|
|
--------------------------
|
3 |
|
|
|
4 |
|
|
The Digiboard Driver for Linux supports the following boards:
|
5 |
|
|
|
6 |
|
|
DigiBoard PC/Xi, PC/Xe, PC/Xeve(which is the newer, smaller Xe with
|
7 |
|
|
a 8K window which is also known as PC/Xe(8K) and has no memory/irq
|
8 |
|
|
switches) You can use up to 4 cards with this driver and it should work
|
9 |
|
|
on other architectures than intel also.
|
10 |
|
|
|
11 |
|
|
A version of this driver has been taken by Digiboard to make a driver
|
12 |
|
|
software package which supports also PC/Xem cards and newer PCI cards
|
13 |
|
|
but it doesn't support the old PC/Xi cards and it isn't yet ported to
|
14 |
|
|
linux-2.1.x and may not be usable on other architectures than intel now.
|
15 |
|
|
It is available from ftp.digi.com/ftp.digiboard.com. You can write me if
|
16 |
|
|
you need an patch for this driver.
|
17 |
|
|
|
18 |
|
|
Bernhard Kaindl (bkaindl@netway.at) 6. April 1997.
|
19 |
|
|
|
20 |
|
|
Configuring the Driver
|
21 |
|
|
----------------------
|
22 |
|
|
|
23 |
|
|
The driver can be built direct into the kernel or as a module.
|
24 |
|
|
The pcxx driver can be configured using the command line feature while
|
25 |
|
|
loading the kernel with LILO or LOADLIN or, if built as a module,
|
26 |
|
|
with arguments to insmod and modprobe or with parameters in
|
27 |
|
|
/etc/modules.conf for modprobe and kerneld.
|
28 |
|
|
|
29 |
|
|
After configuring the driver you need to create the device special files
|
30 |
|
|
as described in "Device file creation:" below and set the appropriate
|
31 |
|
|
permissions for your application.
|
32 |
|
|
|
33 |
|
|
As Module
|
34 |
|
|
---------
|
35 |
|
|
|
36 |
|
|
modprobe pcxx io= \
|
37 |
|
|
membase= \
|
38 |
|
|
memsize= \
|
39 |
|
|
numports= \
|
40 |
|
|
altpin= \
|
41 |
|
|
verbose=
|
42 |
|
|
|
43 |
|
|
or, if several cards are installed
|
44 |
|
|
|
45 |
|
|
modprobe pcxx io=,,... \
|
46 |
|
|
membase=,,... \
|
47 |
|
|
memsize=,,... \
|
48 |
|
|
numports=,,... \
|
49 |
|
|
altpin=,,... \
|
50 |
|
|
verbose=
|
51 |
|
|
|
52 |
|
|
where is the io address of the Nth card and is the
|
53 |
|
|
memory base address of the Nth card, etc.
|
54 |
|
|
|
55 |
|
|
The parameters can be specified in any order. For example, the numports
|
56 |
|
|
parameter can precede the membase parameter, or vice versa. If several
|
57 |
|
|
cards are installed the ordering within the comma separated parameter
|
58 |
|
|
lists must be consistent, of course.
|
59 |
|
|
|
60 |
|
|
io - I/O port address of that card.
|
61 |
|
|
membase - Memory start address of that card.
|
62 |
|
|
memsize - Memory size of that card, in kilobytes. If given, this value
|
63 |
|
|
is compared against the card to verify configuration and
|
64 |
|
|
hinder the driver from using a misconfigured card. If the parameter
|
65 |
|
|
does not match the board it is disabled with a memory size error.
|
66 |
|
|
numports - Number of ports on this card. This is the number of devices to
|
67 |
|
|
assign to this card or reserve if disabled.
|
68 |
|
|
altpin - 1: swap DCD and DSR for 8-pin RJ-45 with modems.
|
69 |
|
|
0: don't swap DCD and DSR.
|
70 |
|
|
other values count as 1.
|
71 |
|
|
verbose - 1: give nice verbose output during initialisation of the driver,
|
72 |
|
|
possibly helpful during board configuration.
|
73 |
|
|
0: normal terse output.
|
74 |
|
|
|
75 |
|
|
Only the parameters which differ from the defaults need to be specified.
|
76 |
|
|
If the io= parameter is not given, the default config is used. This is
|
77 |
|
|
|
78 |
|
|
io=0x200 membase=0xD0000 numports=16 altpin=0
|
79 |
|
|
|
80 |
|
|
Only applicable parameters need be specified. For example to configure
|
81 |
|
|
2 boards, first one at 0x200 with 8 ports, rest defaults, second one at
|
82 |
|
|
0x120, memory at 0xD80000, altpin enabled, rest defaults, you can do this
|
83 |
|
|
by using these parameters:
|
84 |
|
|
|
85 |
|
|
modprobe pcxx io=0x200,0x120 numports=8,8 membase=,0xD80000 altpin=,1
|
86 |
|
|
|
87 |
|
|
To disable a temporary unusable board without changing the mapping of the
|
88 |
|
|
devices following that board, you can empty the io-value for that board:
|
89 |
|
|
|
90 |
|
|
modprobe pcxx io=,0x120 numports=8,8 membase=,0xD80000 altpin=,1
|
91 |
|
|
|
92 |
|
|
The remaining board still uses ttyD8-ttyD15 and cud8-cud15.
|
93 |
|
|
|
94 |
|
|
Example line for /etc/modules.conf for use with kerneld and as default
|
95 |
|
|
parameters for modprobe:
|
96 |
|
|
|
97 |
|
|
options pcxx io=0x200 numports=8
|
98 |
|
|
|
99 |
|
|
For kerneld to work you will likely need to add these two lines to your
|
100 |
|
|
/etc/modules.conf:
|
101 |
|
|
|
102 |
|
|
alias char-major-22 pcxx
|
103 |
|
|
alias char-major-23 pcxx
|
104 |
|
|
|
105 |
|
|
|
106 |
|
|
Boot-time configuration when linked into the kernel
|
107 |
|
|
---------------------------------------------------
|
108 |
|
|
|
109 |
|
|
Per board to be configured, pass a digi= command-line parameter to the
|
110 |
|
|
kernel using lilo or loadlin. It consists of a string of comma separated
|
111 |
|
|
identifiers or integers. The 6 values in order are:
|
112 |
|
|
|
113 |
|
|
Card status: Enable - use that board
|
114 |
|
|
Disable - don't actually use that board.
|
115 |
|
|
|
116 |
|
|
Card type: PC/Xi - the old ones with 64/128/256/512K RAM.
|
117 |
|
|
PC/Xe - PC/Xe(old ones with 64k mem range).
|
118 |
|
|
PC/Xeve - PC/Xe(new ones with 8k mem range).
|
119 |
|
|
|
120 |
|
|
Note: This is for documentation only, the type is detected from the board.
|
121 |
|
|
|
122 |
|
|
Altpin setting: Enable - swap DCD and DSR for 8-pin RJ-45 with modems.
|
123 |
|
|
Disable - don't swap DCD and DSR.
|
124 |
|
|
|
125 |
|
|
Number of ports: 1 ... 16 - Number of ports on this card. This is the
|
126 |
|
|
number of devices to assign to this card.
|
127 |
|
|
|
128 |
|
|
I/O port address: eg. 200 - I/O Port address where the card is configured.
|
129 |
|
|
|
130 |
|
|
Memory base addr: eg. 80000 - Memory address where the board's memory starts.
|
131 |
|
|
|
132 |
|
|
This is an example for a line which you can insert into you lilo.conf:
|
133 |
|
|
|
134 |
|
|
append="digi=Enable,PC/Xi,Disable,4,120,D0000"
|
135 |
|
|
|
136 |
|
|
there is an alternate form, in which you must use decimal values only:
|
137 |
|
|
|
138 |
|
|
append="digi=1,0,0,16,512,851968"
|
139 |
|
|
|
140 |
|
|
If you don't give a digi= command line, the compiled-in defaults of
|
141 |
|
|
board 1: io=0x200, membase=0xd0000, altpin=off and numports=16 are used.
|
142 |
|
|
|
143 |
|
|
If you have the resources (io&mem) free for use, configure your board to
|
144 |
|
|
these settings and you should be set up fine even if yours has not got 16
|
145 |
|
|
ports.
|
146 |
|
|
|
147 |
|
|
|
148 |
|
|
Sources of Information
|
149 |
|
|
----------------------
|
150 |
|
|
|
151 |
|
|
Please contact digi directly digilnux@dgii.com. Forward any information of
|
152 |
|
|
general interest to me so that I can include it on the webpage.
|
153 |
|
|
|
154 |
|
|
Web page: http://lameter.com/digi
|
155 |
|
|
|
156 |
|
|
Christoph Lameter (christoph@lameter.com) Aug 14, 2000.
|
157 |
|
|
|
158 |
|
|
Device file creation
|
159 |
|
|
--------------------
|
160 |
|
|
|
161 |
|
|
Currently the Linux MAKEDEV command does not support generating the Digiboard
|
162 |
|
|
Devices.
|
163 |
|
|
|
164 |
|
|
The /dev/cud devices behave like the /dev/cua devices
|
165 |
|
|
and the ttyD devices are like the /dev/ttyS devices.
|
166 |
|
|
|
167 |
|
|
Use the following script to generate the devices:
|
168 |
|
|
|
169 |
|
|
------------------ mkdigidev begin
|
170 |
|
|
#!/bin/sh
|
171 |
|
|
#
|
172 |
|
|
# Script to create Digiboard Devices
|
173 |
|
|
# Christoph Lameter, April 16, 1996
|
174 |
|
|
#
|
175 |
|
|
# Usage:
|
176 |
|
|
# mkdigidev []
|
177 |
|
|
#
|
178 |
|
|
|
179 |
|
|
DIGI_MAJOR=23
|
180 |
|
|
DIGICU_MAJOR=22
|
181 |
|
|
|
182 |
|
|
BOARDS=$1
|
183 |
|
|
|
184 |
|
|
if [ "$BOARDS" = "" ]; then
|
185 |
|
|
BOARDS=1
|
186 |
|
|
fi
|
187 |
|
|
|
188 |
|
|
boardnum=0
|
189 |
|
|
while [ $boardnum -lt $BOARDS ];
|
190 |
|
|
do
|
191 |
|
|
for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15;
|
192 |
|
|
do
|
193 |
|
|
name=`expr $boardnum \* 16 + $c`
|
194 |
|
|
mknod /dev/cud$name c $DIGICU_MAJOR $name
|
195 |
|
|
mknod /dev/ttyD$name c $DIGI_MAJOR $name
|
196 |
|
|
done
|
197 |
|
|
boardnum=`expr $boardnum + 1`
|
198 |
|
|
done
|
199 |
|
|
------------------ mkdigidev end
|
200 |
|
|
|
201 |
|
|
or apply the following patch to /dev/MAKEDEV and do a
|
202 |
|
|
sh /dev/MAKEDEV digi
|
203 |
|
|
|
204 |
|
|
----- MAKEDEV Patch
|
205 |
|
|
--- /dev/MAKEDEV Sun Aug 13 15:48:23 1995
|
206 |
|
|
+++ MAKEDEV Tue Apr 16 17:53:27 1996
|
207 |
|
|
@@ -120,7 +120,7 @@
|
208 |
|
|
while [ $# -ne 0 ]
|
209 |
|
|
do
|
210 |
|
|
case "$1" in
|
211 |
|
|
- mem|tty|ttyp|cua|cub) ;;
|
212 |
|
|
+ mem|tty|ttyp|cua|cub|cud) ;;
|
213 |
|
|
hd) echo hda hdb hdc hdd ;;
|
214 |
|
|
xd) echo xda xdb ;;
|
215 |
|
|
fd) echo fd0 fd1 ;;
|
216 |
|
|
@@ -140,6 +140,7 @@
|
217 |
|
|
dcf) echo dcf ;;
|
218 |
|
|
pcmcia) ;; # taken care of by its own driver
|
219 |
|
|
ttyC) echo cyclades ;;
|
220 |
|
|
+ ttyD) echo digi ;;
|
221 |
|
|
*) echo "$0: don't know what \"$1\" is" >&2 ;;
|
222 |
|
|
esac
|
223 |
|
|
shift
|
224 |
|
|
@@ -208,6 +209,15 @@
|
225 |
|
|
do
|
226 |
|
|
makedev ttyC$i c $major1 `expr 32 + $i` $tty
|
227 |
|
|
makedev cub$i c $major2 `expr 32 + $i` $dialout
|
228 |
|
|
+ done
|
229 |
|
|
+ ;;
|
230 |
|
|
+ digi)
|
231 |
|
|
+ major1=`Major ttyD` || continue
|
232 |
|
|
+ major2=`Major cud` || continue
|
233 |
|
|
+ for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
234 |
|
|
+ do
|
235 |
|
|
+ makedev ttyD$i c $major1 `expr 32 + $i` $tty
|
236 |
|
|
+ makedev cud$i c $major2 `expr 32 + $i` $dialout
|
237 |
|
|
done
|
238 |
|
|
;;
|
239 |
|
|
par[0-2])
|
240 |
|
|
----- End Makedev patch
|
241 |
|
|
|
242 |
|
|
-----------------------------------------------------------------------------
|
243 |
|
|
|
244 |
|
|
Changes v1.5.5:
|
245 |
|
|
|
246 |
|
|
The ability to use the kernel's command line to pass in the configuration for
|
247 |
|
|
boards. Using LILO's APPEND command, a string of comma separated identifiers
|
248 |
|
|
or integers can be used. The 6 values in order are:
|
249 |
|
|
|
250 |
|
|
Enable/Disable this card,
|
251 |
|
|
Type of card: PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3)
|
252 |
|
|
Enable/Disable alternate pin arrangement,
|
253 |
|
|
Number of ports on this card,
|
254 |
|
|
I/O Port where card is configured (in HEX if using string identifiers),
|
255 |
|
|
Base of memory window (in HEX if using string identifiers),
|
256 |
|
|
|
257 |
|
|
Samples:
|
258 |
|
|
append="digi=E,PC/Xi,D,16,200,D0000"
|
259 |
|
|
append="digi=1,0,0,16,512,(whatever D0000 is in base 10 :)
|
260 |
|
|
|
261 |
|
|
Drivers' minor device numbers are conserved. This means that instead of
|
262 |
|
|
each board getting a block of 16 minors pre-assigned, it gets however
|
263 |
|
|
many it should, with the next card following directly behind it. A
|
264 |
|
|
system with 4 2-port PC/Xi boards will use minor numbers 0-7.
|
265 |
|
|
This conserves some memory, and removes a few hard coded constants.
|
266 |
|
|
|
267 |
|
|
NOTE!! NOTE!! NOTE!!
|
268 |
|
|
The definition of PC/Xem as a valid board type is the BEGINNING of support
|
269 |
|
|
for this device. The driver does not currently recognise the board, nor
|
270 |
|
|
does it want to initialize it. At least not the EISA version.
|
271 |
|
|
|
272 |
|
|
Mike McLagan 5, April 1996.
|