serialP.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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