home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / serialP.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.6 KB  |  143 lines

  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/termios.h>
  23. #include <linux/workqueue.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/circ_buf.h>
  26. #include <linux/wait.h>
  27.  
  28. struct serial_state {
  29.     int    magic;
  30.     int    baud_base;
  31.     unsigned long    port;
  32.     int    irq;
  33.     int    flags;
  34.     int    hub6;
  35.     int    type;
  36.     int    line;
  37.     int    revision;    /* Chip revision (950) */
  38.     int    xmit_fifo_size;
  39.     int    custom_divisor;
  40.     int    count;
  41.     u8    *iomem_base;
  42.     u16    iomem_reg_shift;
  43.     unsigned short    close_delay;
  44.     unsigned short    closing_wait; /* time to wait before closing */
  45.     struct async_icount    icount;    
  46.     int    io_type;
  47.     struct async_struct *info;
  48.     struct pci_dev    *dev;
  49. };
  50.  
  51. struct async_struct {
  52.     int            magic;
  53.     unsigned long        port;
  54.     int            hub6;
  55.     int            flags;
  56.     int            xmit_fifo_size;
  57.     struct serial_state    *state;
  58.     struct tty_struct     *tty;
  59.     int            read_status_mask;
  60.     int            ignore_status_mask;
  61.     int            timeout;
  62.     int            quot;
  63.     int            x_char;    /* xon/xoff character */
  64.     int            close_delay;
  65.     unsigned short        closing_wait;
  66.     unsigned short        closing_wait2; /* obsolete */
  67.     int            IER;     /* Interrupt Enable Register */
  68.     int            MCR;     /* Modem control register */
  69.     int            LCR;     /* Line control register */
  70.     int            ACR;     /* 16950 Additional Control Reg. */
  71.     unsigned long        event;
  72.     unsigned long        last_active;
  73.     int            line;
  74.     int            blocked_open; /* # of blocked opens */
  75.      struct circ_buf        xmit;
  76.      spinlock_t        xmit_lock;
  77.     u8            *iomem_base;
  78.     u16            iomem_reg_shift;
  79.     int            io_type;
  80.     struct work_struct            work;
  81.     struct tasklet_struct    tlet;
  82. #ifdef DECLARE_WAITQUEUE
  83.     wait_queue_head_t    open_wait;
  84.     wait_queue_head_t    close_wait;
  85.     wait_queue_head_t    delta_msr_wait;
  86. #else    
  87.     struct wait_queue    *open_wait;
  88.     struct wait_queue    *close_wait;
  89.     struct wait_queue    *delta_msr_wait;
  90. #endif    
  91.     struct async_struct    *next_port; /* For the linked list */
  92.     struct async_struct    *prev_port;
  93. };
  94.  
  95. #define CONFIGURED_SERIAL_PORT(info) ((info)->port || ((info)->iomem_base))
  96.  
  97. #define SERIAL_MAGIC 0x5301
  98. #define SSTATE_MAGIC 0x5302
  99.  
  100. /*
  101.  * Events are used to schedule things to happen at timer-interrupt
  102.  * time, instead of at rs interrupt time.
  103.  */
  104. #define RS_EVENT_WRITE_WAKEUP    0
  105.  
  106. /*
  107.  * Multiport serial configuration structure --- internal structure
  108.  */
  109. struct rs_multiport_struct {
  110.     int        port1;
  111.     unsigned char    mask1, match1;
  112.     int        port2;
  113.     unsigned char    mask2, match2;
  114.     int        port3;
  115.     unsigned char    mask3, match3;
  116.     int        port4;
  117.     unsigned char    mask4, match4;
  118.     int        port_monitor;
  119. };
  120.  
  121. #if defined(__alpha__) && !defined(CONFIG_PCI)
  122. /*
  123.  * Digital did something really horribly wrong with the OUT1 and OUT2
  124.  * lines on at least some ALPHA's.  The failure mode is that if either
  125.  * is cleared, the machine locks up with endless interrupts.
  126.  *
  127.  * This is still used by arch/mips/au1000/common/serial.c for some weird
  128.  * reason (mips != alpha!)
  129.  */
  130. #define ALPHA_KLUDGE_MCR  (UART_MCR_OUT2 | UART_MCR_OUT1)
  131. #elif defined(CONFIG_SBC8560)
  132. /*
  133.  * WindRiver did something similarly broken on their SBC8560 board. The
  134.  * UART tristates its IRQ output while OUT2 is clear, but they pulled
  135.  * the interrupt line _up_ instead of down, so if we register the IRQ
  136.  * while the UART is in that state, we die in an IRQ storm. */
  137. #define ALPHA_KLUDGE_MCR (UART_MCR_OUT2)
  138. #else
  139. #define ALPHA_KLUDGE_MCR 0
  140. #endif
  141.  
  142. #endif /* _LINUX_SERIAL_H */
  143.