root/include/linux/serial.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * include/linux/serial.h
   3  *
   4  * Copyright (C) 1992 by Theodore Ts'o.
   5  * 
   6  * Redistribution of this file is permitted under the terms of the GNU 
   7  * Public License (GPL)
   8  */
   9 
  10 #ifndef _LINUX_SERIAL_H
  11 #define _LINUX_SERIAL_H
  12 
  13 struct serial_struct {
  14         int     type;
  15         int     line;
  16         int     port;
  17         int     irq;
  18         int     flags;
  19         int     xmit_fifo_size;
  20         int     custom_divisor;
  21         int     baud_base;
  22         unsigned short  close_delay;
  23         char    reserved_char[2];
  24         int     hub6;
  25         unsigned short  closing_wait; /* time to wait before closing */
  26         unsigned short  closing_wait2; /* no longer used... */
  27         int     reserved[4];
  28 };
  29 
  30 /*
  31  * For the close wait times, 0 means wait forever for serial port to
  32  * flush its output.  65535 means don't wait at all.
  33  */
  34 #define ASYNC_CLOSING_WAIT_INF  0
  35 #define ASYNC_CLOSING_WAIT_NONE 65535
  36 
  37 /*
  38  * These are the supported serial types.
  39  */
  40 #define PORT_UNKNOWN    0
  41 #define PORT_8250       1
  42 #define PORT_16450      2
  43 #define PORT_16550      3
  44 #define PORT_16550A     4
  45 #define PORT_CIRRUS     5
  46 #define PORT_16650      6
  47 #define PORT_MAX        6
  48 
  49 /*
  50  * Definitions for async_struct (and serial_struct) flags field
  51  */
  52 #define ASYNC_HUP_NOTIFY 0x0001 /* Notify getty on hangups and closes 
  53                                    on the callout port */
  54 #define ASYNC_FOURPORT  0x0002  /* Set OU1, OUT2 per AST Fourport settings */
  55 #define ASYNC_SAK       0x0004  /* Secure Attention Key (Orange book) */
  56 #define ASYNC_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */
  57 
  58 #define ASYNC_SPD_MASK  0x0030
  59 #define ASYNC_SPD_HI    0x0010  /* Use 56000 instead of 38400 bps */
  60 
  61 #define ASYNC_SPD_VHI   0x0020  /* Use 115200 instead of 38400 bps */
  62 #define ASYNC_SPD_CUST  0x0030  /* Use user-specified divisor */
  63 
  64 #define ASYNC_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */
  65 #define ASYNC_AUTO_IRQ  0x0080 /* Do automatic IRQ during autoconfiguration */
  66 #define ASYNC_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */
  67 #define ASYNC_PGRP_LOCKOUT    0x0200 /* Lock out cua opens based on pgrp */
  68 #define ASYNC_CALLOUT_NOHUP   0x0400 /* Don't do hangups for cua device */
  69 
  70 #define ASYNC_FLAGS     0x0FFF  /* Possible legal async flags */
  71 #define ASYNC_USR_MASK 0x0430   /* Legal flags that non-privileged
  72                                  * users can set or reset */
  73 
  74 /* Internal flags used only by kernel/chr_drv/serial.c */
  75 #define ASYNC_INITIALIZED       0x80000000 /* Serial port was initialized */
  76 #define ASYNC_CALLOUT_ACTIVE    0x40000000 /* Call out device is active */
  77 #define ASYNC_NORMAL_ACTIVE     0x20000000 /* Normal device is active */
  78 #define ASYNC_BOOT_AUTOCONF     0x10000000 /* Autoconfigure port on bootup */
  79 #define ASYNC_CLOSING           0x08000000 /* Serial port is closing */
  80 #define ASYNC_CTS_FLOW          0x04000000 /* Do CTS flow control */
  81 #define ASYNC_CHECK_CD          0x02000000 /* i.e., CLOCAL */
  82 
  83 /*
  84  * Multiport serial configuration structure --- external structure
  85  */
  86 struct serial_multiport_struct {
  87         int             irq;
  88         int             port1;
  89         unsigned char   mask1, match1;
  90         int             port2;
  91         unsigned char   mask2, match2;
  92         int             port3;
  93         unsigned char   mask3, match3;
  94         int             port4;
  95         unsigned char   mask4, match4;
  96         int             port_monitor;
  97         int     reserved[32];
  98 };
  99 
 100 /*
 101  * Serial input interrupt line counters -- external structure
 102  * Four lines can interrupt: CTS, DSR, RI, DCD
 103  */
 104 struct serial_icounter_struct {
 105         int cts, dsr, rng, dcd;
 106         int reserved[16];
 107 };
 108 
 109 
 110 #ifdef __KERNEL__
 111 /*
 112  * This is our internal structure for each serial port's state.
 113  * 
 114  * Many fields are paralleled by the structure used by the serial_struct
 115  * structure.
 116  *
 117  * For definitions of the flags field, see tty.h
 118  */
 119 
 120 #include <linux/termios.h>
 121 #include <linux/tqueue.h>
 122 
 123 /*
 124  * Counters of the input lines (CTS, DSR, RI, CD) interrupts
 125  */
 126 struct async_icount {
 127         __u32   cts, dsr, rng, dcd;     
 128 };
 129 
 130 struct async_struct {
 131         int                     magic;
 132         int                     baud_base;
 133         int                     port;
 134         int                     irq;
 135         int                     flags;          /* defined in tty.h */
 136         int                     hub6;           /* HUB6 plus one */
 137         int                     type;           /* UART type */
 138         struct tty_struct       *tty;
 139         int                     read_status_mask;
 140         int                     ignore_status_mask;
 141         int                     timeout;
 142         int                     xmit_fifo_size;
 143         int                     custom_divisor;
 144         int                     x_char; /* xon/xoff character */
 145         int                     close_delay;
 146         unsigned short          closing_wait;
 147         unsigned short          closing_wait2;
 148         int                     IER;    /* Interrupt Enable Register */
 149         int                     MCR;    /* Modem control register */
 150         int                     MCR_noint; /* MCR with interrupts off */
 151         unsigned long           event;
 152         unsigned long           last_active;
 153         int                     line;
 154         int                     count;      /* # of fd on device */
 155         int                     blocked_open; /* # of blocked opens */
 156         long                    session; /* Session of opening process */
 157         long                    pgrp; /* pgrp of opening process */
 158         unsigned char           *xmit_buf;
 159         int                     xmit_head;
 160         int                     xmit_tail;
 161         int                     xmit_cnt;
 162         struct tq_struct        tqueue;
 163         struct tq_struct        tqueue_hangup;
 164         struct termios          normal_termios;
 165         struct termios          callout_termios;
 166         struct wait_queue       *open_wait;
 167         struct wait_queue       *close_wait;
 168         struct wait_queue       *delta_msr_wait;
 169         struct async_icount     icount; /* kernel counters for the 4 input interrupts */
 170         struct async_struct     *next_port; /* For the linked list */
 171         struct async_struct     *prev_port;
 172 };
 173 
 174 #define SERIAL_MAGIC 0x5301
 175 
 176 /*
 177  * The size of the serial xmit buffer is 1 page, or 4096 bytes
 178  */
 179 #define SERIAL_XMIT_SIZE 4096
 180 
 181 /*
 182  * Events are used to schedule things to happen at timer-interrupt
 183  * time, instead of at rs interrupt time.
 184  */
 185 #define RS_EVENT_WRITE_WAKEUP   0
 186 
 187 /*
 188  * Multiport serial configuration structure --- internal structure
 189  */
 190 struct rs_multiport_struct {
 191         int             port1;
 192         unsigned char   mask1, match1;
 193         int             port2;
 194         unsigned char   mask2, match2;
 195         int             port3;
 196         unsigned char   mask3, match3;
 197         int             port4;
 198         unsigned char   mask4, match4;
 199         int             port_monitor;
 200 };
 201 
 202 /* Export to allow PCMCIA to use this - Dave Hinds */
 203 extern int register_serial(struct serial_struct *req);
 204 extern void unregister_serial(int line);
 205 #endif /* __KERNEL__ */
 206 #endif /* _LINUX_SERIAL_H */

/* [previous][next][first][last][top][bottom][index][help] */