1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* $Id: scc.h,v 1.29 1997/04/02 14:56:45 jreuter Exp jreuter $ */ 31da177e4SLinus Torvalds #ifndef _SCC_H 41da177e4SLinus Torvalds #define _SCC_H 51da177e4SLinus Torvalds 6607ca46eSDavid Howells #include <uapi/linux/scc.h> 71da177e4SLinus Torvalds 81da177e4SLinus Torvalds 91da177e4SLinus Torvalds enum {TX_OFF, TX_ON}; /* command for scc_key_trx() */ 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds /* Vector masks in RR2B */ 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds #define VECTOR_MASK 0x06 141da177e4SLinus Torvalds #define TXINT 0x00 151da177e4SLinus Torvalds #define EXINT 0x02 161da177e4SLinus Torvalds #define RXINT 0x04 171da177e4SLinus Torvalds #define SPINT 0x06 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds #ifdef CONFIG_SCC_DELAY 201da177e4SLinus Torvalds #define Inb(port) inb_p(port) 211da177e4SLinus Torvalds #define Outb(port, val) outb_p(val, port) 221da177e4SLinus Torvalds #else 231da177e4SLinus Torvalds #define Inb(port) inb(port) 241da177e4SLinus Torvalds #define Outb(port, val) outb(val, port) 251da177e4SLinus Torvalds #endif 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds /* SCC channel control structure for KISS */ 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds struct scc_kiss { 301da177e4SLinus Torvalds unsigned char txdelay; /* Transmit Delay 10 ms/cnt */ 311da177e4SLinus Torvalds unsigned char persist; /* Persistence (0-255) as a % */ 321da177e4SLinus Torvalds unsigned char slottime; /* Delay to wait on persistence hit */ 331da177e4SLinus Torvalds unsigned char tailtime; /* Delay after last byte written */ 341da177e4SLinus Torvalds unsigned char fulldup; /* Full Duplex mode 0=CSMA 1=DUP 2=ALWAYS KEYED */ 351da177e4SLinus Torvalds unsigned char waittime; /* Waittime before any transmit attempt */ 361da177e4SLinus Torvalds unsigned int maxkeyup; /* Maximum time to transmit (seconds) */ 371da177e4SLinus Torvalds unsigned int mintime; /* Minimal offtime after MAXKEYUP timeout (seconds) */ 381da177e4SLinus Torvalds unsigned int idletime; /* Maximum idle time in ALWAYS KEYED mode (seconds) */ 391da177e4SLinus Torvalds unsigned int maxdefer; /* Timer for CSMA channel busy limit */ 401da177e4SLinus Torvalds unsigned char tx_inhibit; /* Transmit is not allowed when set */ 411da177e4SLinus Torvalds unsigned char group; /* Group ID for AX.25 TX interlocking */ 421da177e4SLinus Torvalds unsigned char mode; /* 'normal' or 'hwctrl' mode (unused) */ 431da177e4SLinus Torvalds unsigned char softdcd; /* Use DPLL instead of DCD pin for carrier detect */ 441da177e4SLinus Torvalds }; 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds /* SCC channel structure */ 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds struct scc_channel { 501da177e4SLinus Torvalds int init; /* channel exists? */ 511da177e4SLinus Torvalds 521da177e4SLinus Torvalds struct net_device *dev; /* link to device control structure */ 531da177e4SLinus Torvalds struct net_device_stats dev_stat;/* device statistics */ 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds char brand; /* manufacturer of the board */ 561da177e4SLinus Torvalds long clock; /* used clock */ 571da177e4SLinus Torvalds 581da177e4SLinus Torvalds io_port ctrl; /* I/O address of CONTROL register */ 591da177e4SLinus Torvalds io_port data; /* I/O address of DATA register */ 601da177e4SLinus Torvalds io_port special; /* I/O address of special function port */ 611da177e4SLinus Torvalds int irq; /* Number of Interrupt */ 621da177e4SLinus Torvalds 631da177e4SLinus Torvalds char option; 641da177e4SLinus Torvalds char enhanced; /* Enhanced SCC support */ 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds unsigned char wreg[16]; /* Copy of last written value in WRx */ 671da177e4SLinus Torvalds unsigned char status; /* Copy of R0 at last external interrupt */ 681da177e4SLinus Torvalds unsigned char dcd; /* DCD status */ 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds struct scc_kiss kiss; /* control structure for KISS params */ 711da177e4SLinus Torvalds struct scc_stat stat; /* statistical information */ 721da177e4SLinus Torvalds struct scc_modem modem; /* modem information */ 731da177e4SLinus Torvalds 741da177e4SLinus Torvalds struct sk_buff_head tx_queue; /* next tx buffer */ 751da177e4SLinus Torvalds struct sk_buff *rx_buff; /* pointer to frame currently received */ 761da177e4SLinus Torvalds struct sk_buff *tx_buff; /* pointer to frame currently transmitted */ 771da177e4SLinus Torvalds 781da177e4SLinus Torvalds /* Timer */ 791da177e4SLinus Torvalds struct timer_list tx_t; /* tx timer for this channel */ 801da177e4SLinus Torvalds struct timer_list tx_wdog; /* tx watchdogs */ 811da177e4SLinus Torvalds 821da177e4SLinus Torvalds /* Channel lock */ 831da177e4SLinus Torvalds spinlock_t lock; /* Channel guard lock */ 841da177e4SLinus Torvalds }; 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds #endif /* defined(_SCC_H) */ 87