1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
|
user.doc
Digi International driver package for the PC/Xe, PC/Xi, PC/Xr, PC/Xem as well
the EISA and PCI variants of these boards where applicable.
Copyright (C) 1996 Digi International. Written by Ronnie Sanford digilnux@dgii.com
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (At your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not write to the Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA.
This document describes the software used with the Digi/Linux driver package.
The four user programs listed below are described in this document:
1. digiConfig -> Application that configures the Digi driver.
2. digiDload -> Application which initializes the Digi hardware.
3. buildPCI -> Application which provides the user a method of
building device nodes for PCI devices.
4. ditty -> Application which provides the user a method of
configuring terminal options on Digi hardware.
--------------------------------------------------------------------------
1. Configuring driver/kernel for Digi products
--------------------------------------------------------------------------
The Digi driver must be configured each time Digi hardware is added
or removed. There are two supported methods of doing this. The
first method configures the driver dynamically at boot time but requires
the user to utilize the lilo loader. This method is the preffered method
as it does not require the rebuilding of the kernel. In order to use lilo
to configure Digi boards at boot time an appropriate append command should
be added to /etc/lilo.conf below the appropriate label decleration.
See footer 4. The append commands format is a string of comma separated
identifiers or integers used to configure supported boards. These six
values in order are:
Enable/Disable this card or Override,
Type of card: PC/Xe (AccelePort) (0), PC/Xeve (1), PC/Xem or PC/Xr (2),
EISA/Xem (3), PC/Xe (64K) (4), PC/Xi (5).
Enable/Disable alternate pin arrangement,
Number of ports on this card,
I/O Port where card is configured (in HEX if using string identifiers),
Base of memory window (in HEX if using string identifiers)
A sample append command is given below which if used would configure and
enable a PC/Xe with 8 ports, at i/o address 200, memory address 0xd0000
with alt pin turned off. The lilo.conf file should look like this:
image = /vmlinuz
root = /dev/hda2
label = vmlinuz
append="digiepca=E,PC/Xe,D,8,200,D0000"
likewise the below will perform the same function:
image = /vmlinuz
root = /dev/hda2
label = vmlinuz
append="digiepca=1,0,0,8,512,851968"
Note:
PCI boards are auto-detected and configured (Hence their codes are
not given here). Do not attempt to configure PCI boards with the lilo
append command.
If configuration data has been specified by using digiConfig (Described
below), and you wish to override this configuration using lilo without
specifying a specific card (Example if there are PCI cards in the system)
the following override command will accomplish this:
-> append="digiepca=2"
If lilo is not enabled, the second method of configuring Digi hardware
will have to be used. digiConfig is an application that can be used
to inform the system of any additions, deletions, or modifications
involving Digi hardware. To use this method the operator executes
digiConfig anytime an EISA or ISA card is added that he wishes to use.
This routine is also used to remove cards from the system, and to modify
parameters of those cards already present in the system. Upon being
executed digiConfig modifies files accessed by the Digi driver. To make
these changes permanent; the operating system must be recompiled. After
the operating system has been recompiled and booted, the changes made with
digiConfig will be introduced to the user. This program MUST be executed
every time Digi EISA/ISA hardware configuration changes. Note, it is not
necessary to execute digiConfig in order to configure the Digi PCI cards.
These cards are self-identifying and will be recognized by the driver.
They cannot be displayed using digiConfig nor will digiConfig build the
device nodes their device nodes. See footer 1.
To execute digiConfig; simply type: digiConfig
The application will query you for the type, memory address, port
address, number of ports, alt pin disposition and status of each board
that exist on the system. Note, currently this driver only supports
PC/Xe, PC/Xeve, PC/Xi, PC/Xr, and PC/Xem as well as their EISA and PCI
implementations if applicable. All supported cards (Other than PCI) that
are present should be registered via digiConfig. See footer 2.
After all cards have been configured select exit. The system will then
inform you if any changes have been made, and ask you if it is okay to
make these changes permanent. If the data entered is correct, select okay.
Selecting cancel will prevent the changes from becoming active. digiConfig
can then be re-executed to configure the system again.
--------------------------------------------------------------------------
2. Initializing Digi hardware with digiDload
--------------------------------------------------------------------------
digiDload is the application executed after the Digi driver has been
loaded. It is responsible for initializing the hardware and leaving
it in a state such that the Digi board may be operated by the user.
The application may be placed anywhere on the path, but its related
support files must be located in /etc/digi. The related files are:
sxfep.bin
sxbios.bin
xxfep.bin
xxbios.bin
The format for this command is "digiDload [v]". If given the "v"
option turns on verbosity. If not given the application runs in quite
mode. To execute the program simply type:
digiDload
Upon completion digiDload will generate the below message:
"digiDload complete: Card initialized"
At this point the card is configured and ready for normal usage. See
technotes.doc for information on how how ports are determined and
assigned.
--------------------------------------------------------------------------
3. Build PCI device nodes with buildPCI
--------------------------------------------------------------------------
buildPCI is an application useful for building the necessary device nodes
for Digi PCI cards. It is reccomended that this tool be used because the
current digiConfig application does not provide this function for PCI cards
(Though it does build device nodes for non-PCI cards). To use this program
execute the following:first install the driver, and execute digiDload (See above). After digiDload
has sucessfully loaded, execute the following:
buildPCI <arg1> <arg2>
Where arg1 is the number of ports connected to Digi cards that are not PCI
(As shown by the digiConfig utility), and arg2 is the number of ports
connected to Digi cards that are PCI.
Note, buildPCI only has to be ran once to build the necessary device
nodes. Though this program may be executed at anytime, we reccomend
delaying execution until the first time you install the package and after
digiDload has been executed.
--------------------------------------------------------------------------
4. Setting Terminal Options with ditty
--------------------------------------------------------------------------
ditty is a utility program that sets and displays the terminal options
for Digi intelligent serial products. See man ditty for detailed information.
Footnotes:
1. The 1.2.x kernel does not provide a method of mapping the high
addresses (Normally higher than RAM) associated with PCI. For this
reason, this driver disables PCI support while running under the 1.2.x
kernels.
2. PCI cards should not and cannot be registered with digiConfig. After
the driver has been loaded buildPCI may be executed to construct the
necessary device nodes. This step is not necessary for system not
having Digi PCI cards.
3. This is because we forsee a time when buildPCI may auto-detect the
available Digi PCI cards and this would only work if the program is
executed after digiDload.
4. A complete example is given in install.doc.
-------------CHANGES--------------------
All changes should be recorded here. All changes should be explained in
verbose detail.
-----------------------------------------------------------------------
Programmer : Ronnie Sanford
Date : June 1, 1996
Description (Verbose) : Initial release of driver package.
Files affected : all
Release version : 1.0.0f (BETA)
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Programmer : Ronnie Sanford
Date : August 7, 1996
Description (Verbose) : Made several modifications to provide PCI and EISA
support:
1. We now allocate the termios structures based on
the maximum number of channels that COULD be
available to the system. We no longer use the
number of channels declared in epcaconfig.h
(NBDEVS) as the total channel number. This is
because this value does not represent channels
available to potential PCI cards. This new
larger value is also passed back to the os in
the num field of tty_driver.
2. Added code to copy the previous board structure
(Now called static_boards) into a new local
copy of the boards structure. This has been
done so that PCI cards may be added to this
board array and later referenced (And even
queried.).
3. Added code to pc_init that checks for supported
PCI cards. If found this code initializes a new
entry into the drivers local board structure
with the PCI cards address, and type, etc.. It
also bumps the card count (num_cards).
4. Modified code in post_fep_init so that when this
routine is executed the number of ports supported
by a particular PCI card will be determined and
loaded into the board structure. It would be
much better if this code was placed in pc_init
(Because we could then report to the os the true
number of ports available; not just the max), but
since the card has to be booted to determine the
number of ports it supports, we are forced to do it
after DIGI_INIT has called post_fep_init. In the
future we may attempt to read the num ports
attached directly (address 0x1ac).
5. Added board types to epca.h in support of various
PCI boards (Some of which do not exist yet).
Added procedures for these boards throughout the
code. Note, windowing is not necessary for PCI
boards.
6. Added code supporting the EISA/XEM. This included
modifying epca.h with the new board type and
adding this type into the driver. The EISA/XEM
is basically identical to the PC/XEM, other than
it's base address does not have to be (And cannot
be configured directly).
7. Modified digiConfig to prompt for EISA/XEM cards.
Files affected : epca.c, epca.h, digi1.h, digiConfig
Release version : 1.0.0g (BETA)
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Programmer : Ronnie Sanford
Date : August 21, 1996
Description (Verbose) : Made the following modifications:
1. A problem affecting hard flow control was found
in the termios2digi_h routine. Specifically,
when the user activated hard flow control using
the CRTSCTS specification, the values used to
program hard flow control on the board were
incorrect. The solution was to change a line
that read "res |= ((ch->m_dtr) | (ch->m_rts));"
to "res |= ((ch->m_cts) | (ch->m_rts));" This
line only applies if cflag & CRTSCTS. Special
thanks to Matt Robinson (matt@mania.com.au) who
found and fixed this problem.
2. In previous betas the cud device was set to CLOCAL
on driver boot up. Likewise the ttyD device was
set to ~CLOCAL. This has been fixed in this driver.
Now ttyD is CLOCAL and cud is ~CLOCAL. The fix
for this can be found in pc_init.
3. In ditty.c many changes were made to eliminate bugs
and warning messages. Two ioctl calls were eliminated
as well a problem involving using the returned baud
index to determine the drivers baud rate. Newer
Linux kernels support higher baud rates by using
0x1000 bit. When the returned value (ored with
0x1000) was used to reference our fbaud table a
serious memory problem occured. This has been fixed.
4. Added a request_region call to post_fep_init. This
should cause the i/o ports being used to be
registered with proc.
5. Modified digiConfig to set all cud and ttyD devices
to read/write all permission.
6. Developed a new apps called buildPCI that provides
an easy way to build device nodes for PCI cards.
7. Modified user.doc and technotes.doc document the
use of buildPCI.
Files affected : epca.c, ditty.c, digiConfig, user.doc, technotes.doc
Release version : 1.0.0 (Official release)
-----------------------------------------------------------------------
Programmer : Ronnie Sanford
Date : August 21, 1996
Description (Verbose) : Made the following modifications:
1. Removed code from pc_close which closes the
drivers line discipline and restores its original
line discipline. This is currently unecessary,
though future fast cook enhancements may require
this.
2. Removed code in block_til_ready that set the
asyncflags to either ASYNC_CALLOUT_ACTIVE, or
ASYNC_NORMAL_ACTIVE. This code was redundant
as it already existed in block_til_ready.
3. Added code in block_til_ready to cause a return
prior to schedule being called if the device
was a CALLOUT device. CALLOUT devices never
block on CD. (This was a serious bug that
prevented the CALLOUT devices (ttyD) from
functioning properly in some instances.
Make a change in the MODEMCHG_IND case of doevent
such that it does not require ASYNC_CALLOUT_ACTIVE
or ASYNC_NORMAL_ACTIVE to be set in order to
unblock an open (Using wait_interruptible).
Thanks to Mike McLagan (mike.mclagan@linux.org)
for diagnosing and fixing this problem.
4. Made changes to the disposition of CLOCAL on
both SERIAL NORMAL and CALLOUT devices. Both
device types now have CLOCAL active at default.
This may be changed with a stty command.
5. Made changes to digiConfig such that it checks
major.h (If valid) for the correct major
numbers to use.
Files affected : epca.c, digiConfig
Release version : 1.0.1a
-----------------------------------------------------------------------
Programmer : Ronnie Sanford
Date : September 17, 1996
Description (Verbose) : Made the following modifications:
1. Modified pc_open such that it no longer checks
the cflag value returned by termios2digi_c for
CLOCAL. Digi hardware does not use this value
and thus termios2digi_c rightly screens this
value out. This driver checks for CLOCAL using
the drivers cflag value as known by the Linux OS.
(The value passed into termios2digi_c)
2. Modified termios2digi_c to screen out the
CBAUDEX in CBAUD. This error caused parity to
automaticaly be enabled on at higher baud rates.
3. Added the "disable_bh()" call to the shutdown
subroutine. Hopefully this will allow the driver
to correctly clean up after itself when used as a
module.
4. Added support for the PC/XI and 64K PC/XE cards.
This involved primarily modifying digiDload to
initialize and boot the new cards; however
driver modifications were also required to
provide the proper windowing for the newly
supported cards. (Code was also added to
determine the memory segment of the XI card as
that card may have more than 64K. Currently
digiDload assumes a 64K XI card.)
5. Added subroutine called epca_setup that can be
called during LILO boot up. This provides the
user an easy way to change cards; without
running digiConfig and without recompiling the
kernel. Added code in pc_init and pc_open to
support the epca_setup routine. pc_init checks
the liloconfig flag (Which is set by epca_setup)
to determine if the driver is using the LILO
arguments. If not pc_init loads the board data
found in epcaconfig.h; if so it DOESN'T load
epcaconfig data depending on epca_setup to handle
board configuration. pc_open has been modified
such that it checks to insure that no errors
occured during the LILO boot process. If a
user attempts to boot the driver (via. LILO)
with incorrect data, the open will fail.
6. Modified the windowing routines pcxe_rxwinon
and pcxe_txwinon routines. A bug existed such
that those routines checked to see if the rxwin
and txwin flags were reset. If so they assumed
the board was an XI or 64K XE. Furthermore since
these flags were never initialized in our driver
sometimes they were 0 and therefore caused a
memory fault (Or at least a window overrun). This
code has been removed since the pcxe shares
nothing in common with the 64K XI and XE.
7. Added code in pc_init to set the memory_seg for
the various boards. This code was necessary to
correct a bug in the PCXE, PCXEVE code where
receive and transmit pointers were being calculated
from an uninitialized variable (memory_seg).
8. Modified digiConfig to allow 64K PC/XI and 64K
PC/XE cards to be configured.
9. Made changes to support the new 2.1.x development
kernel. In particular this required changing all
references to vremap to ioremap.
10. Modified digiConfig such that it now generates
node names corresponding to their internal
as opposed to the label on the port itself. Nodes
(ttyD?? and cud??) now start at 0. Example:
ttyD0 and cud0 represent port 1 on any supported
Digi product. A similar change has been made
in buildPCI.c.
12. At the early portion of post_fep_init if a PCI
card is detected a warning message could be given
incorrectly if 64 ports were attached to a PCI
card. The below line :
epcaassert(bd->numports > 64,"PCI returned a invalid number of ports");
was changed to :
epcaassert(bd->numports <= 64,"PCI returned a invalid number of ports");
Remember that epcaassert checks for NOT true.
Special thanks to Daniel Taylor for fixing this.
13. Modified the epcaparam routine. In version 100
and 101a there was a line that looked like the
below:
if (ch->omodem != mval)
The problem with this line was that the first time
through omodem was not initialized. Secondly, since
many TIOC commands did not alter mval (They use
a different variable) changes made by these commands
could be lost. This line was changed to:
mval ^= ch->modemfake & (mval ^ ch->modem);
if (ch->omodem ^ mval)
14. Modified digiConfig in such a way that it checks
the version number of the kernel and if it finds
a 2.x.x kernel or higher it reads the necessary
major numbers for cud and ttyD devices from major.h.
This was also done in prior versions but these
versions required a #define which identified the
kernel as a version which did not have major numbers
assigned to Digi systems. This #define is no
longer required allowing the same source tree for
multiple kernel releases.
15. Used macros to replace kernel specific calls such
as put_fs_long, get_fs_long, put_user, and get_user
the kernel version is now detected and the macro
is defined as to correspond with the kernel it
is being compiled into. Again this was done to
allow one source tree for multiple kernel releases.
16. Added support for the new 2.1.x development kernels
to digiInstall.
Files affected : epca.c, digiConfig
Release version : 1.1.0
-----------------------------------------------------------------------
Programmer : Daniel Taylor
Date : April 25, 1997
Description (Verbose) : Updated driver:
1. Fixed DCD bug. (&tq_scheduler)
2. Removed BH handler code, as it was only handling
hangups, and not being called for that.
3. Namespace cleanup (DIGI_TIMER2 => DIGI_TIMER)
4. Updated to 2.1.36, removed #ifdefs for earlier
kernel revisions.
Files affected : epca.c
Release version : 1.1.1 (BETA)
-----------------------------------------------------------------------
|