root/include/linux/n_r3964.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* r3964 linediscipline for linux
   2  *
   3  * -----------------------------------------------------------
   4  * Copyright by
   5  * Philips Automation Projects
   6  * Kassel (Germany)
   7  * -----------------------------------------------------------
   8  * This software may be used and distributed according to the terms of
   9  * the GNU General Public License, incorporated herein by reference.
  10  *
  11  * Author:
  12  * L. Haag
  13  *
  14  * $Log: r3964.h,v $
  15  * Revision 1.4  2005/12/21 19:54:24  Kurt Huwig <kurt huwig de>
  16  * Fixed HZ usage on 2.6 kernels
  17  * Removed unnecessary include
  18  *
  19  * Revision 1.3  2001/03/18 13:02:24  dwmw2
  20  * Fix timer usage, use spinlocks properly.
  21  *
  22  * Revision 1.2  2001/03/18 12:53:15  dwmw2
  23  * Merge changes in 2.4.2
  24  *
  25  * Revision 1.1.1.1  1998/10/13 16:43:14  dwmw2
  26  * This'll screw the version control
  27  *
  28  * Revision 1.6  1998/09/30 00:40:38  dwmw2
  29  * Updated to use kernel's N_R3964 if available
  30  *
  31  * Revision 1.4  1998/04/02 20:29:44  lhaag
  32  * select, blocking, ...
  33  *
  34  * Revision 1.3  1998/02/12 18:58:43  root
  35  * fixed some memory leaks
  36  * calculation of checksum characters
  37  *
  38  * Revision 1.2  1998/02/07 13:03:17  root
  39  * ioctl read_telegram
  40  *
  41  * Revision 1.1  1998/02/06 19:19:43  root
  42  * Initial revision
  43  *
  44  *
  45  */
  46 #ifndef __LINUX_N_R3964_H__
  47 #define __LINUX_N_R3964_H__
  48 
  49 
  50 #include <linux/param.h>
  51 #include <uapi/linux/n_r3964.h>
  52 
  53 /*
  54  * Common ascii handshake characters:
  55  */
  56 
  57 #define STX 0x02
  58 #define ETX 0x03
  59 #define DLE 0x10
  60 #define NAK 0x15
  61 
  62 /*
  63  * Timeouts (from milliseconds to jiffies)
  64  */
  65 
  66 #define R3964_TO_QVZ ((550)*HZ/1000)
  67 #define R3964_TO_ZVZ ((220)*HZ/1000)
  68 #define R3964_TO_NO_BUF ((400)*HZ/1000)
  69 #define R3964_NO_TX_ROOM ((100)*HZ/1000)
  70 #define R3964_TO_RX_PANIC ((4000)*HZ/1000)
  71 #define R3964_MAX_RETRIES 5
  72 
  73 
  74 enum { R3964_IDLE, 
  75            R3964_TX_REQUEST, R3964_TRANSMITTING, 
  76            R3964_WAIT_ZVZ_BEFORE_TX_RETRY, R3964_WAIT_FOR_TX_ACK,
  77            R3964_WAIT_FOR_RX_BUF,
  78            R3964_RECEIVING, R3964_WAIT_FOR_BCC, R3964_WAIT_FOR_RX_REPEAT
  79            };
  80 
  81 /*
  82  * All open file-handles are 'clients' and are stored in a linked list:
  83  */
  84 
  85 struct r3964_message;
  86 
  87 struct r3964_client_info {
  88         spinlock_t     lock;
  89         struct pid    *pid;
  90         unsigned int   sig_flags;
  91 
  92         struct r3964_client_info *next;
  93 
  94         struct r3964_message *first_msg;
  95         struct r3964_message *last_msg;
  96         struct r3964_block_header *next_block_to_read;
  97         int            msg_count;
  98 };
  99 
 100 
 101 
 102 struct r3964_block_header;
 103 
 104 /* internal version of client_message: */
 105 struct r3964_message {
 106           int     msg_id;
 107           int     arg;
 108           int     error_code;
 109           struct r3964_block_header *block;
 110           struct r3964_message *next;
 111 };
 112 
 113 /*
 114  * Header of received block in rx_buf/tx_buf:
 115  */
 116 
 117 struct r3964_block_header 
 118 {
 119         unsigned int length;             /* length in chars without header */
 120         unsigned char *data;             /* usually data is located 
 121                                         immediately behind this struct */
 122         unsigned int locks;              /* only used in rx_buffer */
 123           
 124     struct r3964_block_header *next;
 125         struct r3964_client_info *owner;  /* =NULL in rx_buffer */
 126 };
 127 
 128 /*
 129  * If rx_buf hasn't enough space to store R3964_MTU chars,
 130  * we will reject all incoming STX-requests by sending NAK.
 131  */
 132 
 133 #define RX_BUF_SIZE    4000
 134 #define TX_BUF_SIZE    4000
 135 #define R3964_MAX_BLOCKS_IN_RX_QUEUE 100
 136 
 137 #define R3964_PARITY 0x0001
 138 #define R3964_FRAME  0x0002
 139 #define R3964_OVERRUN 0x0004
 140 #define R3964_UNKNOWN 0x0008
 141 #define R3964_BREAK   0x0010
 142 #define R3964_CHECKSUM 0x0020
 143 #define R3964_ERROR  0x003f
 144 #define R3964_BCC   0x4000
 145 #define R3964_DEBUG 0x8000
 146 
 147 
 148 struct r3964_info {
 149         spinlock_t     lock;
 150         struct tty_struct *tty;
 151         unsigned char priority;
 152         unsigned char *rx_buf;            /* ring buffer */
 153         unsigned char *tx_buf;
 154 
 155         struct r3964_block_header *rx_first;
 156         struct r3964_block_header *rx_last;
 157         struct r3964_block_header *tx_first;
 158         struct r3964_block_header *tx_last;
 159         unsigned int tx_position;
 160         unsigned int rx_position;
 161         unsigned char last_rx;
 162         unsigned char bcc;
 163         unsigned int  blocks_in_rx_queue;
 164 
 165         struct mutex read_lock;         /* serialize r3964_read */
 166 
 167         struct r3964_client_info *firstClient;
 168         unsigned int state;
 169         unsigned int flags;
 170 
 171         struct timer_list tmr;
 172         int nRetry;
 173 };
 174 
 175 #endif

/* [<][>][^][v][top][bottom][index][help] */