Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1.. SPDX-License-Identifier: GPL-2.0
2.. include:: <isonum.txt>
3
4=========================================================
5SCC.C - Linux driver for Z8530 based HDLC cards for AX.25
6=========================================================
7
8
9This is a subset of the documentation. To use this driver you MUST have the
10full package from:
11
12Internet:
13
14 1. ftp://ftp.ccac.rwth-aachen.de/pub/jr/z8530drv-utils_3.0-3.tar.gz
15
16 2. ftp://ftp.pspt.fi/pub/ham/linux/ax25/z8530drv-utils_3.0-3.tar.gz
17
18Please note that the information in this document may be hopelessly outdated.
19A new version of the documentation, along with links to other important
20Linux Kernel AX.25 documentation and programs, is available on
21http://yaina.de/jreuter
22
23Copyright |copy| 1993,2000 by Joerg Reuter DL1BKE <jreuter@yaina.de>
24
25portions Copyright |copy| 1993 Guido ten Dolle PE1NNZ
26
27for the complete copyright notice see >> Copying.Z8530DRV <<
28
291. Initialization of the driver
30===============================
31
32To use the driver, 3 steps must be performed:
33
34 1. if compiled as module: loading the module
35 2. Setup of hardware, MODEM and KISS parameters with sccinit
36 3. Attach each channel to the Linux kernel AX.25 with "ifconfig"
37
38Unlike the versions below 2.4 this driver is a real network device
39driver. If you want to run xNOS instead of our fine kernel AX.25
40use a 2.x version (available from above sites) or read the
41AX.25-HOWTO on how to emulate a KISS TNC on network device drivers.
42
43
441.1 Loading the module
45======================
46
47(If you're going to compile the driver as a part of the kernel image,
48 skip this chapter and continue with 1.2)
49
50Before you can use a module, you'll have to load it with::
51
52 insmod scc.o
53
54please read 'man insmod' that comes with module-init-tools.
55
56You should include the insmod in one of the /etc/rc.d/rc.* files,
57and don't forget to insert a call of sccinit after that. It
58will read your /etc/z8530drv.conf.
59
601.2. /etc/z8530drv.conf
61=======================
62
63To setup all parameters you must run /sbin/sccinit from one
64of your rc.*-files. This has to be done BEFORE you can
65"ifconfig" an interface. Sccinit reads the file /etc/z8530drv.conf
66and sets the hardware, MODEM and KISS parameters. A sample file is
67delivered with this package. Change it to your needs.
68
69The file itself consists of two main sections.
70
711.2.1 configuration of hardware parameters
72==========================================
73
74The hardware setup section defines the following parameters for each
75Z8530::
76
77 chip 1
78 data_a 0x300 # data port A
79 ctrl_a 0x304 # control port A
80 data_b 0x301 # data port B
81 ctrl_b 0x305 # control port B
82 irq 5 # IRQ No. 5
83 pclock 4915200 # clock
84 board BAYCOM # hardware type
85 escc no # enhanced SCC chip? (8580/85180/85280)
86 vector 0 # latch for interrupt vector
87 special no # address of special function register
88 option 0 # option to set via sfr
89
90
91chip
92 - this is just a delimiter to make sccinit a bit simpler to
93 program. A parameter has no effect.
94
95data_a
96 - the address of the data port A of this Z8530 (needed)
97ctrl_a
98 - the address of the control port A (needed)
99data_b
100 - the address of the data port B (needed)
101ctrl_b
102 - the address of the control port B (needed)
103
104irq
105 - the used IRQ for this chip. Different chips can use different
106 IRQs or the same. If they share an interrupt, it needs to be
107 specified within one chip-definition only.
108
109pclock - the clock at the PCLK pin of the Z8530 (option, 4915200 is
110 default), measured in Hertz
111
112board
113 - the "type" of the board:
114
115 ======================= ========
116 SCC type value
117 ======================= ========
118 PA0HZP SCC card PA0HZP
119 EAGLE card EAGLE
120 PC100 card PC100
121 PRIMUS-PC (DG9BL) card PRIMUS
122 BayCom (U)SCC card BAYCOM
123 ======================= ========
124
125escc
126 - if you want support for ESCC chips (8580, 85180, 85280), set
127 this to "yes" (option, defaults to "no")
128
129vector
130 - address of the vector latch (aka "intack port") for PA0HZP
131 cards. There can be only one vector latch for all chips!
132 (option, defaults to 0)
133
134special
135 - address of the special function register on several cards.
136 (option, defaults to 0)
137
138option - The value you write into that register (option, default is 0)
139
140You can specify up to four chips (8 channels). If this is not enough,
141just change::
142
143 #define MAXSCC 4
144
145to a higher value.
146
147Example for the BAYCOM USCC:
148----------------------------
149
150::
151
152 chip 1
153 data_a 0x300 # data port A
154 ctrl_a 0x304 # control port A
155 data_b 0x301 # data port B
156 ctrl_b 0x305 # control port B
157 irq 5 # IRQ No. 5 (#)
158 board BAYCOM # hardware type (*)
159 #
160 # SCC chip 2
161 #
162 chip 2
163 data_a 0x302
164 ctrl_a 0x306
165 data_b 0x303
166 ctrl_b 0x307
167 board BAYCOM
168
169An example for a PA0HZP card:
170-----------------------------
171
172::
173
174 chip 1
175 data_a 0x153
176 data_b 0x151
177 ctrl_a 0x152
178 ctrl_b 0x150
179 irq 9
180 pclock 4915200
181 board PA0HZP
182 vector 0x168
183 escc no
184 #
185 #
186 #
187 chip 2
188 data_a 0x157
189 data_b 0x155
190 ctrl_a 0x156
191 ctrl_b 0x154
192 irq 9
193 pclock 4915200
194 board PA0HZP
195 vector 0x168
196 escc no
197
198A DRSI would should probably work with this:
199--------------------------------------------
200(actually: two DRSI cards...)
201
202::
203
204 chip 1
205 data_a 0x303
206 data_b 0x301
207 ctrl_a 0x302
208 ctrl_b 0x300
209 irq 7
210 pclock 4915200
211 board DRSI
212 escc no
213 #
214 #
215 #
216 chip 2
217 data_a 0x313
218 data_b 0x311
219 ctrl_a 0x312
220 ctrl_b 0x310
221 irq 7
222 pclock 4915200
223 board DRSI
224 escc no
225
226Note that you cannot use the on-board baudrate generator off DRSI
227cards. Use "mode dpll" for clock source (see below).
228
229This is based on information provided by Mike Bilow (and verified
230by Paul Helay)
231
232The utility "gencfg"
233--------------------
234
235If you only know the parameters for the PE1CHL driver for DOS,
236run gencfg. It will generate the correct port addresses (I hope).
237Its parameters are exactly the same as the ones you use with
238the "attach scc" command in net, except that the string "init" must
239not appear. Example::
240
241 gencfg 2 0x150 4 2 0 1 0x168 9 4915200
242
243will print a skeleton z8530drv.conf for the OptoSCC to stdout.
244
245::
246
247 gencfg 2 0x300 2 4 5 -4 0 7 4915200 0x10
248
249does the same for the BAYCOM USCC card. In my opinion it is much easier
250to edit scc_config.h...
251
252
2531.2.2 channel configuration
254===========================
255
256The channel definition is divided into three sub sections for each
257channel:
258
259An example for scc0::
260
261 # DEVICE
262
263 device scc0 # the device for the following params
264
265 # MODEM / BUFFERS
266
267 speed 1200 # the default baudrate
268 clock dpll # clock source:
269 # dpll = normal half duplex operation
270 # external = MODEM provides own Rx/Tx clock
271 # divider = use full duplex divider if
272 # installed (1)
273 mode nrzi # HDLC encoding mode
274 # nrzi = 1k2 MODEM, G3RUH 9k6 MODEM
275 # nrz = DF9IC 9k6 MODEM
276 #
277 bufsize 384 # size of buffers. Note that this must include
278 # the AX.25 header, not only the data field!
279 # (optional, defaults to 384)
280
281 # KISS (Layer 1)
282
283 txdelay 36 # (see chapter 1.4)
284 persist 64
285 slot 8
286 tail 8
287 fulldup 0
288 wait 12
289 min 3
290 maxkey 7
291 idle 3
292 maxdef 120
293 group 0
294 txoff off
295 softdcd on
296 slip off
297
298The order WITHIN these sections is unimportant. The order OF these
299sections IS important. The MODEM parameters are set with the first
300recognized KISS parameter...
301
302Please note that you can initialize the board only once after boot
303(or insmod). You can change all parameters but "mode" and "clock"
304later with the Sccparam program or through KISS. Just to avoid
305security holes...
306
307(1) this divider is usually mounted on the SCC-PBC (PA0HZP) or not
308 present at all (BayCom). It feeds back the output of the DPLL
309 (digital pll) as transmit clock. Using this mode without a divider
310 installed will normally result in keying the transceiver until
311 maxkey expires --- of course without sending anything (useful).
312
3132. Attachment of a channel by your AX.25 software
314=================================================
315
3162.1 Kernel AX.25
317================
318
319To set up an AX.25 device you can simply type::
320
321 ifconfig scc0 44.128.1.1 hw ax25 dl0tha-7
322
323This will create a network interface with the IP number 44.128.20.107
324and the callsign "dl0tha". If you do not have any IP number (yet) you
325can use any of the 44.128.0.0 network. Note that you do not need
326axattach. The purpose of axattach (like slattach) is to create a KISS
327network device linked to a TTY. Please read the documentation of the
328ax25-utils and the AX.25-HOWTO to learn how to set the parameters of
329the kernel AX.25.
330
3312.2 NOS, NET and TFKISS
332=======================
333
334Since the TTY driver (aka KISS TNC emulation) is gone you need
335to emulate the old behaviour. The cost of using these programs is
336that you probably need to compile the kernel AX.25, regardless of whether
337you actually use it or not. First setup your /etc/ax25/axports,
338for example::
339
340 9k6 dl0tha-9 9600 255 4 9600 baud port (scc3)
341 axlink dl0tha-15 38400 255 4 Link to NOS
342
343Now "ifconfig" the scc device::
344
345 ifconfig scc3 44.128.1.1 hw ax25 dl0tha-9
346
347You can now axattach a pseudo-TTY::
348
349 axattach /dev/ptys0 axlink
350
351and start your NOS and attach /dev/ptys0 there. The problem is that
352NOS is reachable only via digipeating through the kernel AX.25
353(disastrous on a DAMA controlled channel). To solve this problem,
354configure "rxecho" to echo the incoming frames from "9k6" to "axlink"
355and outgoing frames from "axlink" to "9k6" and start::
356
357 rxecho
358
359Or simply use "kissbridge" coming with z8530drv-utils::
360
361 ifconfig scc3 hw ax25 dl0tha-9
362 kissbridge scc3 /dev/ptys0
363
364
3653. Adjustment and Display of parameters
366=======================================
367
3683.1 Displaying SCC Parameters:
369==============================
370
371Once a SCC channel has been attached, the parameter settings and
372some statistic information can be shown using the param program::
373
374 dl1bke-u:~$ sccstat scc0
375
376 Parameters:
377
378 speed : 1200 baud
379 txdelay : 36
380 persist : 255
381 slottime : 0
382 txtail : 8
383 fulldup : 1
384 waittime : 12
385 mintime : 3 sec
386 maxkeyup : 7 sec
387 idletime : 3 sec
388 maxdefer : 120 sec
389 group : 0x00
390 txoff : off
391 softdcd : on
392 SLIP : off
393
394 Status:
395
396 HDLC Z8530 Interrupts Buffers
397 -----------------------------------------------------------------------
398 Sent : 273 RxOver : 0 RxInts : 125074 Size : 384
399 Received : 1095 TxUnder: 0 TxInts : 4684 NoSpace : 0
400 RxErrors : 1591 ExInts : 11776
401 TxErrors : 0 SpInts : 1503
402 Tx State : idle
403
404
405The status info shown is:
406
407============== ==============================================================
408Sent number of frames transmitted
409Received number of frames received
410RxErrors number of receive errors (CRC, ABORT)
411TxErrors number of discarded Tx frames (due to various reasons)
412Tx State status of the Tx interrupt handler: idle/busy/active/tail (2)
413RxOver number of receiver overruns
414TxUnder number of transmitter underruns
415RxInts number of receiver interrupts
416TxInts number of transmitter interrupts
417EpInts number of receiver special condition interrupts
418SpInts number of external/status interrupts
419Size maximum size of an AX.25 frame (*with* AX.25 headers!)
420NoSpace number of times a buffer could not get allocated
421============== ==============================================================
422
423An overrun is abnormal. If lots of these occur, the product of
424baudrate and number of interfaces is too high for the processing
425power of your computer. NoSpace errors are unlikely to be caused by the
426driver or the kernel AX.25.
427
428
4293.2 Setting Parameters
430======================
431
432
433The setting of parameters of the emulated KISS TNC is done in the
434same way in the SCC driver. You can change parameters by using
435the kissparms program from the ax25-utils package or use the program
436"sccparam"::
437
438 sccparam <device> <paramname> <decimal-|hexadecimal value>
439
440You can change the following parameters:
441
442=========== =====
443param value
444=========== =====
445speed 1200
446txdelay 36
447persist 255
448slottime 0
449txtail 8
450fulldup 1
451waittime 12
452mintime 3
453maxkeyup 7
454idletime 3
455maxdefer 120
456group 0x00
457txoff off
458softdcd on
459SLIP off
460=========== =====
461
462
463The parameters have the following meaning:
464
465speed:
466 The baudrate on this channel in bits/sec
467
468 Example: sccparam /dev/scc3 speed 9600
469
470txdelay:
471 The delay (in units of 10 ms) after keying of the
472 transmitter, until the first byte is sent. This is usually
473 called "TXDELAY" in a TNC. When 0 is specified, the driver
474 will just wait until the CTS signal is asserted. This
475 assumes the presence of a timer or other circuitry in the
476 MODEM and/or transmitter, that asserts CTS when the
477 transmitter is ready for data.
478 A normal value of this parameter is 30-36.
479
480 Example: sccparam /dev/scc0 txd 20
481
482persist:
483 This is the probability that the transmitter will be keyed
484 when the channel is found to be free. It is a value from 0
485 to 255, and the probability is (value+1)/256. The value
486 should be somewhere near 50-60, and should be lowered when
487 the channel is used more heavily.
488
489 Example: sccparam /dev/scc2 persist 20
490
491slottime:
492 This is the time between samples of the channel. It is
493 expressed in units of 10 ms. About 200-300 ms (value 20-30)
494 seems to be a good value.
495
496 Example: sccparam /dev/scc0 slot 20
497
498tail:
499 The time the transmitter will remain keyed after the last
500 byte of a packet has been transferred to the SCC. This is
501 necessary because the CRC and a flag still have to leave the
502 SCC before the transmitter is keyed down. The value depends
503 on the baudrate selected. A few character times should be
504 sufficient, e.g. 40ms at 1200 baud. (value 4)
505 The value of this parameter is in 10 ms units.
506
507 Example: sccparam /dev/scc2 4
508
509full:
510 The full-duplex mode switch. This can be one of the following
511 values:
512
513 0: The interface will operate in CSMA mode (the normal
514 half-duplex packet radio operation)
515 1: Fullduplex mode, i.e. the transmitter will be keyed at
516 any time, without checking the received carrier. It
517 will be unkeyed when there are no packets to be sent.
518 2: Like 1, but the transmitter will remain keyed, also
519 when there are no packets to be sent. Flags will be
520 sent in that case, until a timeout (parameter 10)
521 occurs.
522
523 Example: sccparam /dev/scc0 fulldup off
524
525wait:
526 The initial waittime before any transmit attempt, after the
527 frame has been queue for transmit. This is the length of
528 the first slot in CSMA mode. In full duplex modes it is
529 set to 0 for maximum performance.
530 The value of this parameter is in 10 ms units.
531
532 Example: sccparam /dev/scc1 wait 4
533
534maxkey:
535 The maximal time the transmitter will be keyed to send
536 packets, in seconds. This can be useful on busy CSMA
537 channels, to avoid "getting a bad reputation" when you are
538 generating a lot of traffic. After the specified time has
539 elapsed, no new frame will be started. Instead, the trans-
540 mitter will be switched off for a specified time (parameter
541 min), and then the selected algorithm for keyup will be
542 started again.
543 The value 0 as well as "off" will disable this feature,
544 and allow infinite transmission time.
545
546 Example: sccparam /dev/scc0 maxk 20
547
548min:
549 This is the time the transmitter will be switched off when
550 the maximum transmission time is exceeded.
551
552 Example: sccparam /dev/scc3 min 10
553
554idle:
555 This parameter specifies the maximum idle time in full duplex
556 2 mode, in seconds. When no frames have been sent for this
557 time, the transmitter will be keyed down. A value of 0 is
558 has same result as the fullduplex mode 1. This parameter
559 can be disabled.
560
561 Example: sccparam /dev/scc2 idle off # transmit forever
562
563maxdefer
564 This is the maximum time (in seconds) to wait for a free channel
565 to send. When this timer expires the transmitter will be keyed
566 IMMEDIATELY. If you love to get trouble with other users you
567 should set this to a very low value ;-)
568
569 Example: sccparam /dev/scc0 maxdefer 240 # 2 minutes
570
571
572txoff:
573 When this parameter has the value 0, the transmission of packets
574 is enable. Otherwise it is disabled.
575
576 Example: sccparam /dev/scc2 txoff on
577
578group:
579 It is possible to build special radio equipment to use more than
580 one frequency on the same band, e.g. using several receivers and
581 only one transmitter that can be switched between frequencies.
582 Also, you can connect several radios that are active on the same
583 band. In these cases, it is not possible, or not a good idea, to
584 transmit on more than one frequency. The SCC driver provides a
585 method to lock transmitters on different interfaces, using the
586 "param <interface> group <x>" command. This will only work when
587 you are using CSMA mode (parameter full = 0).
588
589 The number <x> must be 0 if you want no group restrictions, and
590 can be computed as follows to create restricted groups:
591 <x> is the sum of some OCTAL numbers:
592
593
594 === =======================================================
595 200 This transmitter will only be keyed when all other
596 transmitters in the group are off.
597 100 This transmitter will only be keyed when the carrier
598 detect of all other interfaces in the group is off.
599 0xx A byte that can be used to define different groups.
600 Interfaces are in the same group, when the logical AND
601 between their xx values is nonzero.
602 === =======================================================
603
604 Examples:
605
606 When 2 interfaces use group 201, their transmitters will never be
607 keyed at the same time.
608
609 When 2 interfaces use group 101, the transmitters will only key
610 when both channels are clear at the same time. When group 301,
611 the transmitters will not be keyed at the same time.
612
613 Don't forget to convert the octal numbers into decimal before
614 you set the parameter.
615
616 Example: (to be written)
617
618softdcd:
619 use a software dcd instead of the real one... Useful for a very
620 slow squelch.
621
622 Example: sccparam /dev/scc0 soft on
623
624
6254. Problems
626===========
627
628If you have tx-problems with your BayCom USCC card please check
629the manufacturer of the 8530. SGS chips have a slightly
630different timing. Try Zilog... A solution is to write to register 8
631instead to the data port, but this won't work with the ESCC chips.
632*SIGH!*
633
634A very common problem is that the PTT locks until the maxkeyup timer
635expires, although interrupts and clock source are correct. In most
636cases compiling the driver with CONFIG_SCC_DELAY (set with
637make config) solves the problems. For more hints read the (pseudo) FAQ
638and the documentation coming with z8530drv-utils.
639
640I got reports that the driver has problems on some 386-based systems.
641(i.e. Amstrad) Those systems have a bogus AT bus timing which will
642lead to delayed answers on interrupts. You can recognize these
643problems by looking at the output of Sccstat for the suspected
644port. If it shows under- and overruns you own such a system.
645
646Delayed processing of received data: This depends on
647
648- the kernel version
649
650- kernel profiling compiled or not
651
652- a high interrupt load
653
654- a high load of the machine --- running X, Xmorph, XV and Povray,
655 while compiling the kernel... hmm ... even with 32 MB RAM ... ;-)
656 Or running a named for the whole .ampr.org domain on an 8 MB
657 box...
658
659- using information from rxecho or kissbridge.
660
661Kernel panics: please read /linux/README and find out if it
662really occurred within the scc driver.
663
664If you cannot solve a problem, send me
665
666- a description of the problem,
667- information on your hardware (computer system, scc board, modem)
668- your kernel version
669- the output of cat /proc/net/z8530
670
6714. Thor RLC100
672==============
673
674Mysteriously this board seems not to work with the driver. Anyone
675got it up-and-running?
676
677
678Many thanks to Linus Torvalds and Alan Cox for including the driver
679in the Linux standard distribution and their support.
680
681::
682
683 Joerg Reuter ampr-net: dl1bke@db0pra.ampr.org
684 AX-25 : DL1BKE @ DB0ABH.#BAY.DEU.EU
685 Internet: jreuter@yaina.de
686 WWW : http://yaina.de/jreuter