linux/include/linux/scc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* $Id: scc.h,v 1.29 1997/04/02 14:56:45 jreuter Exp jreuter $ */
   3#ifndef _SCC_H
   4#define _SCC_H
   5
   6#include <uapi/linux/scc.h>
   7
   8
   9enum {TX_OFF, TX_ON};   /* command for scc_key_trx() */
  10
  11/* Vector masks in RR2B */
  12
  13#define VECTOR_MASK     0x06
  14#define TXINT           0x00
  15#define EXINT           0x02
  16#define RXINT           0x04
  17#define SPINT           0x06
  18
  19#ifdef CONFIG_SCC_DELAY
  20#define Inb(port)       inb_p(port)
  21#define Outb(port, val) outb_p(val, port)
  22#else
  23#define Inb(port)       inb(port)
  24#define Outb(port, val) outb(val, port)
  25#endif
  26
  27/* SCC channel control structure for KISS */
  28
  29struct scc_kiss {
  30        unsigned char txdelay;          /* Transmit Delay 10 ms/cnt */
  31        unsigned char persist;          /* Persistence (0-255) as a % */
  32        unsigned char slottime;         /* Delay to wait on persistence hit */
  33        unsigned char tailtime;         /* Delay after last byte written */
  34        unsigned char fulldup;          /* Full Duplex mode 0=CSMA 1=DUP 2=ALWAYS KEYED */
  35        unsigned char waittime;         /* Waittime before any transmit attempt */
  36        unsigned int  maxkeyup;         /* Maximum time to transmit (seconds) */
  37        unsigned int  mintime;          /* Minimal offtime after MAXKEYUP timeout (seconds) */
  38        unsigned int  idletime;         /* Maximum idle time in ALWAYS KEYED mode (seconds) */
  39        unsigned int  maxdefer;         /* Timer for CSMA channel busy limit */
  40        unsigned char tx_inhibit;       /* Transmit is not allowed when set */  
  41        unsigned char group;            /* Group ID for AX.25 TX interlocking */
  42        unsigned char mode;             /* 'normal' or 'hwctrl' mode (unused) */
  43        unsigned char softdcd;          /* Use DPLL instead of DCD pin for carrier detect */
  44};
  45
  46
  47/* SCC channel structure */
  48
  49struct scc_channel {
  50        int init;                       /* channel exists? */
  51
  52        struct net_device *dev;         /* link to device control structure */
  53        struct net_device_stats dev_stat;/* device statistics */
  54
  55        char brand;                     /* manufacturer of the board */
  56        long clock;                     /* used clock */
  57
  58        io_port ctrl;                   /* I/O address of CONTROL register */
  59        io_port data;                   /* I/O address of DATA register */
  60        io_port special;                /* I/O address of special function port */
  61        int irq;                        /* Number of Interrupt */
  62
  63        char option;
  64        char enhanced;                  /* Enhanced SCC support */
  65
  66        unsigned char wreg[16];         /* Copy of last written value in WRx */
  67        unsigned char status;           /* Copy of R0 at last external interrupt */
  68        unsigned char dcd;              /* DCD status */
  69
  70        struct scc_kiss kiss;           /* control structure for KISS params */
  71        struct scc_stat stat;           /* statistical information */
  72        struct scc_modem modem;         /* modem information */
  73
  74        struct sk_buff_head tx_queue;   /* next tx buffer */
  75        struct sk_buff *rx_buff;        /* pointer to frame currently received */
  76        struct sk_buff *tx_buff;        /* pointer to frame currently transmitted */
  77
  78        /* Timer */
  79        struct timer_list tx_t;         /* tx timer for this channel */
  80        struct timer_list tx_wdog;      /* tx watchdogs */
  81        
  82        /* Channel lock */
  83        spinlock_t      lock;           /* Channel guard lock */
  84};
  85
  86#endif /* defined(_SCC_H) */
  87