ns16550.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*
  2. * NS16550 Serial Port
  3. * originally from linux source (arch/ppc/boot/ns16550.h)
  4. * modified slightly to
  5. * have addresses as offsets from CFG_ISA_BASE
  6. * added a few more definitions
  7. * added prototypes for ns16550.c
  8. * reduced no of com ports to 2
  9. * modifications (c) Rob Taylor, Flying Pig Systems. 2000.
  10. */
  11. #if (CFG_NS16550_REG_SIZE == 1)
  12. struct NS16550 {
  13. unsigned char rbr; /* 0 */
  14. unsigned char ier; /* 1 */
  15. unsigned char fcr; /* 2 */
  16. unsigned char lcr; /* 3 */
  17. unsigned char mcr; /* 4 */
  18. unsigned char lsr; /* 5 */
  19. unsigned char msr; /* 6 */
  20. unsigned char scr; /* 7 */
  21. #if defined(CONFIG_OMAP730)
  22. unsigned char mdr1; /* 8 */
  23. unsigned char reg9; /* 9 */
  24. unsigned char regA; /* A */
  25. unsigned char regB; /* B */
  26. unsigned char regC; /* C */
  27. unsigned char regD; /* D */
  28. unsigned char regE; /* E */
  29. unsigned char regF; /* F */
  30. unsigned char reg10; /* 10 */
  31. unsigned char ssr; /* 11*/
  32. #endif
  33. } __attribute__ ((packed));
  34. #elif (CFG_NS16550_REG_SIZE == 2)
  35. struct NS16550 {
  36. unsigned short rbr; /* 0 */
  37. unsigned short ier; /* 1 */
  38. unsigned short fcr; /* 2 */
  39. unsigned short lcr; /* 3 */
  40. unsigned short mcr; /* 4 */
  41. unsigned short lsr; /* 5 */
  42. unsigned short msr; /* 6 */
  43. unsigned short scr; /* 7 */
  44. } __attribute__ ((packed));
  45. #elif (CFG_NS16550_REG_SIZE == 4)
  46. struct NS16550 {
  47. unsigned long rbr; /* 0 */
  48. unsigned long ier; /* 1 */
  49. unsigned long fcr; /* 2 */
  50. unsigned long lcr; /* 3 */
  51. unsigned long mcr; /* 4 */
  52. unsigned long lsr; /* 5 */
  53. unsigned long msr; /* 6 */
  54. unsigned long scr; /* 7 */
  55. } __attribute__ ((packed));
  56. #elif (CFG_NS16550_REG_SIZE == -4)
  57. struct NS16550 {
  58. unsigned char rbr; /* 0 */
  59. int pad1:24;
  60. unsigned char ier; /* 1 */
  61. int pad2:24;
  62. unsigned char fcr; /* 2 */
  63. int pad3:24;
  64. unsigned char lcr; /* 3 */
  65. int pad4:24;
  66. unsigned char mcr; /* 4 */
  67. int pad5:24;
  68. unsigned char lsr; /* 5 */
  69. int pad6:24;
  70. unsigned char msr; /* 6 */
  71. int pad7:24;
  72. unsigned char scr; /* 7 */
  73. int pad8:24;
  74. #if defined(CONFIG_OMAP1510) || defined(CONFIG_OMAP1610)
  75. unsigned char mdr1; /* mode select reset TL16C750*/
  76. #endif
  77. #ifdef CONFIG_OMAP1510
  78. int pad9:24;
  79. unsigned long pad[10];
  80. unsigned char osc_12m_sel;
  81. int pad10:24;
  82. #endif
  83. } __attribute__ ((packed));
  84. #else
  85. #error "Please define NS16550 registers size."
  86. #endif
  87. #define thr rbr
  88. #define iir fcr
  89. #define dll rbr
  90. #define dlm ier
  91. typedef volatile struct NS16550 *NS16550_t;
  92. #define FCR_FIFO_EN 0x01 /* Fifo enable */
  93. #define FCR_RXSR 0x02 /* Receiver soft reset */
  94. #define FCR_TXSR 0x04 /* Transmitter soft reset */
  95. #define MCR_DTR 0x01
  96. #define MCR_RTS 0x02
  97. #define MCR_DMA_EN 0x04
  98. #define MCR_TX_DFR 0x08
  99. #define LCR_WLS_MSK 0x03 /* character length slect mask */
  100. #define LCR_WLS_5 0x00 /* 5 bit character length */
  101. #define LCR_WLS_6 0x01 /* 6 bit character length */
  102. #define LCR_WLS_7 0x02 /* 7 bit character length */
  103. #define LCR_WLS_8 0x03 /* 8 bit character length */
  104. #define LCR_STB 0x04 /* Number of stop Bits, off = 1, on = 1.5 or 2) */
  105. #define LCR_PEN 0x08 /* Parity eneble */
  106. #define LCR_EPS 0x10 /* Even Parity Select */
  107. #define LCR_STKP 0x20 /* Stick Parity */
  108. #define LCR_SBRK 0x40 /* Set Break */
  109. #define LCR_BKSE 0x80 /* Bank select enable */
  110. #define LSR_DR 0x01 /* Data ready */
  111. #define LSR_OE 0x02 /* Overrun */
  112. #define LSR_PE 0x04 /* Parity error */
  113. #define LSR_FE 0x08 /* Framing error */
  114. #define LSR_BI 0x10 /* Break */
  115. #define LSR_THRE 0x20 /* Xmit holding register empty */
  116. #define LSR_TEMT 0x40 /* Xmitter empty */
  117. #define LSR_ERR 0x80 /* Error */
  118. #ifdef CONFIG_OMAP1510
  119. #define OSC_12M_SEL 0x01 /* selects 6.5 * current clk div */
  120. #endif
  121. /* useful defaults for LCR */
  122. #define LCR_8N1 0x03
  123. void NS16550_init (NS16550_t com_port, int baud_divisor);
  124. void NS16550_putc (NS16550_t com_port, char c);
  125. char NS16550_getc (NS16550_t com_port);
  126. int NS16550_tstc (NS16550_t com_port);
  127. void NS16550_reinit (NS16550_t com_port, int baud_divisor);