~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/serialP.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Private header file for the (dumb) serial driver
  3  *
  4  * Copyright (C) 1997 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_SERIALP_H
 11 #define _LINUX_SERIALP_H
 12 
 13 /*
 14  * This is our internal structure for each serial port's state.
 15  * 
 16  * Many fields are paralleled by the structure used by the serial_struct
 17  * structure.
 18  *
 19  * For definitions of the flags field, see tty.h
 20  */
 21 
 22 #include <linux/config.h>
 23 #include <linux/termios.h>
 24 #include <linux/tqueue.h>
 25 #include <linux/circ_buf.h>
 26 #include <linux/wait.h>
 27 #if (LINUX_VERSION_CODE < 0x020300)
 28 /* Unfortunate, but Linux 2.2 needs async_icount defined here and
 29  * it got moved in 2.3 */
 30 #include <linux/serial.h>
 31 #endif
 32 
 33 struct serial_state {
 34         int     magic;
 35         int     baud_base;
 36         unsigned long   port;
 37         int     irq;
 38         int     flags;
 39         int     hub6;
 40         int     type;
 41         int     line;
 42         int     revision;       /* Chip revision (950) */
 43         int     xmit_fifo_size;
 44         int     custom_divisor;
 45         int     count;
 46         u8      *iomem_base;
 47         u16     iomem_reg_shift;
 48         unsigned short  close_delay;
 49         unsigned short  closing_wait; /* time to wait before closing */
 50         struct async_icount     icount; 
 51         struct termios          normal_termios;
 52         struct termios          callout_termios;
 53         int     io_type;
 54         struct async_struct *info;
 55 };
 56 
 57 struct async_struct {
 58         int                     magic;
 59         unsigned long           port;
 60         int                     hub6;
 61         int                     flags;
 62         int                     xmit_fifo_size;
 63         struct serial_state     *state;
 64         struct tty_struct       *tty;
 65         int                     read_status_mask;
 66         int                     ignore_status_mask;
 67         int                     timeout;
 68         int                     quot;
 69         int                     x_char; /* xon/xoff character */
 70         int                     close_delay;
 71         unsigned short          closing_wait;
 72         unsigned short          closing_wait2;
 73         int                     IER;    /* Interrupt Enable Register */
 74         int                     MCR;    /* Modem control register */
 75         int                     LCR;    /* Line control register */
 76         int                     ACR;     /* 16950 Additional Control Reg. */
 77         unsigned long           event;
 78         unsigned long           last_active;
 79         int                     line;
 80         int                     blocked_open; /* # of blocked opens */
 81         long                    session; /* Session of opening process */
 82         long                    pgrp; /* pgrp of opening process */
 83         struct circ_buf         xmit;
 84         spinlock_t              xmit_lock;
 85         u8                      *iomem_base;
 86         u16                     iomem_reg_shift;
 87         int                     io_type;
 88         struct tq_struct        tqueue;
 89 #ifdef DECLARE_WAITQUEUE
 90         wait_queue_head_t       open_wait;
 91         wait_queue_head_t       close_wait;
 92         wait_queue_head_t       delta_msr_wait;
 93 #else   
 94         struct wait_queue       *open_wait;
 95         struct wait_queue       *close_wait;
 96         struct wait_queue       *delta_msr_wait;
 97 #endif  
 98         struct async_struct     *next_port; /* For the linked list */
 99         struct async_struct     *prev_port;
100 };
101 
102 #define CONFIGURED_SERIAL_PORT(info) ((info)->port || ((info)->iomem_base))
103 
104 #define SERIAL_MAGIC 0x5301
105 #define SSTATE_MAGIC 0x5302
106 
107 /*
108  * Events are used to schedule things to happen at timer-interrupt
109  * time, instead of at rs interrupt time.
110  */
111 #define RS_EVENT_WRITE_WAKEUP   0
112 
113 /*
114  * Multiport serial configuration structure --- internal structure
115  */
116 struct rs_multiport_struct {
117         int             port1;
118         unsigned char   mask1, match1;
119         int             port2;
120         unsigned char   mask2, match2;
121         int             port3;
122         unsigned char   mask3, match3;
123         int             port4;
124         unsigned char   mask4, match4;
125         int             port_monitor;
126 };
127 
128 #if defined(__alpha__) && !defined(CONFIG_PCI)
129 /*
130  * Digital did something really horribly wrong with the OUT1 and OUT2
131  * lines on at least some ALPHA's.  The failure mode is that if either
132  * is cleared, the machine locks up with endless interrupts.
133  */
134 #define ALPHA_KLUDGE_MCR  (UART_MCR_OUT2 | UART_MCR_OUT1)
135 #else
136 #define ALPHA_KLUDGE_MCR 0
137 #endif
138 
139 /*
140  * Structures and definitions for PCI support
141  */
142 struct pci_dev;
143 struct pci_board {
144         unsigned short vendor;
145         unsigned short device;
146         unsigned short subvendor;
147         unsigned short subdevice;
148         int flags;
149         int num_ports;
150         int base_baud;
151         int uart_offset;
152         int reg_shift;
153         int (*init_fn)(struct pci_dev *dev, struct pci_board *board,
154                         int enable);
155         int first_uart_offset;
156 };
157 
158 struct pci_board_inst {
159         struct pci_board        board;
160         struct pci_dev          *dev;
161 };
162 
163 #ifndef PCI_ANY_ID
164 #define PCI_ANY_ID (~0)
165 #endif
166 
167 #define SPCI_FL_BASE_MASK       0x0007
168 #define SPCI_FL_BASE0   0x0000
169 #define SPCI_FL_BASE1   0x0001
170 #define SPCI_FL_BASE2   0x0002
171 #define SPCI_FL_BASE3   0x0003
172 #define SPCI_FL_BASE4   0x0004
173 #define SPCI_FL_GET_BASE(x)     (x & SPCI_FL_BASE_MASK)
174 
175 #define SPCI_FL_IRQ_MASK       (0x0007 << 4)
176 #define SPCI_FL_IRQBASE0       (0x0000 << 4)
177 #define SPCI_FL_IRQBASE1       (0x0001 << 4)
178 #define SPCI_FL_IRQBASE2       (0x0002 << 4)
179 #define SPCI_FL_IRQBASE3       (0x0003 << 4)
180 #define SPCI_FL_IRQBASE4       (0x0004 << 4)
181 #define SPCI_FL_GET_IRQBASE(x)        ((x & SPCI_FL_IRQ_MASK) >> 4)
182 
183 /* Use sucessive BARs (PCI base address registers), 
184    else use offset into some specified BAR */
185 #define SPCI_FL_BASE_TABLE      0x0100
186 
187 /* Use successive entries in the irq resource table */
188 #define SPCI_FL_IRQ_TABLE       0x0200
189 
190 /* Use the irq resource table instead of dev->irq */
191 #define SPCI_FL_IRQRESOURCE     0x0400
192 
193 /* Use the Base address register size to cap number of ports */
194 #define SPCI_FL_REGION_SZ_CAP   0x0800
195 
196 /* Do not use irq sharing for this device */
197 #define SPCI_FL_NO_SHIRQ        0x1000
198 
199 /* This is a PNP device */
200 #define SPCI_FL_ISPNP           0x2000
201 
202 #define SPCI_FL_PNPDEFAULT      (SPCI_FL_IRQRESOURCE|SPCI_FL_ISPNP)
203 
204 #endif /* _LINUX_SERIAL_H */
205 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.