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
687