OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_49/] [or1ksim/] [peripheral/] [16450.h] - Blame information for rev 1778

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 31 lampret
/* 16450.h -- Definition of types and structures for 8250/16450 serial UART
2
   Copyright (C) 2000 Damjan Lampret, lampret@opencores.org
3
 
4
This file is part of OpenRISC 1000 Architectural Simulator.
5
 
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
10
 
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
GNU General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
 
20
/* Prototypes */
21
void uart_reset();
22 1308 phoenix
void uart_status();
23 31 lampret
 
24 341 markom
/* Definitions */
25 355 markom
#define UART_ADDR_SPACE   (8)         /* UART memory address space size in bytes */
26 341 markom
#define UART_MAX_FIFO_LEN (16)        /* rx FIFO for uart 16550 */
27 355 markom
#define MAX_SKEW          (1)         /* max. clock skew in subclocks */
28 409 markom
#define UART_VAPI_BUF_LEN 128         /* Size of VAPI command buffer - VAPI should not send more
29
                                         that this amout of char before requesting something back */
30
#define UART_CLOCK_DIVIDER 16         /* Uart clock divider */
31 713 markom
#define UART_FGETC_SLOWDOWN     100   /* fgetc slowdown factor */
32 341 markom
 
33 31 lampret
/* Registers */
34
 
35
struct dev_16450 {
36 355 markom
  struct {
37 411 markom
    unsigned txbuf[UART_MAX_FIFO_LEN];
38
    unsigned rxbuf[UART_MAX_FIFO_LEN];
39 355 markom
    unsigned char dll;
40
    unsigned char dlh;
41
    unsigned char ier;
42
    unsigned char iir;
43 409 markom
    unsigned char fcr;
44 355 markom
    unsigned char lcr;
45
    unsigned char mcr;
46
    unsigned char lsr;
47
    unsigned char msr;
48
    unsigned char scr;
49
  } regs;   /* Visible registers */
50
  struct {
51
    unsigned long txser;    /* Character just sending */
52
    unsigned long rxser;    /* Character just receiving */
53
    unsigned char loopback;
54
  } iregs;  /* Internal registers */
55
  struct {
56
    int txbuf_head;
57
    int txbuf_tail;
58
    int rxbuf_head;
59
    int rxbuf_tail;
60
    unsigned int txser_full;
61
    unsigned int rxser_full;
62
    unsigned int txbuf_full;
63
    unsigned int rxbuf_full;
64 409 markom
    unsigned thre_int;
65
    unsigned break_set;
66 355 markom
    unsigned long txser_clks;
67
    unsigned long rxser_clks;
68 409 markom
    unsigned timeout_count;
69 355 markom
  } istat;  /* Internal status */
70 341 markom
 
71 355 markom
  /* Clocks per char */
72
  unsigned long char_clks;
73 341 markom
 
74 355 markom
  /* VAPI internal registers */
75
  struct {
76
    unsigned long char_clks;
77
    int dll, dlh;
78
    int lcr;
79
    int skew;
80 385 markom
    int next_break;
81
    int next_break_cnt;
82
    int cur_break;
83
    int cur_break_cnt;
84 409 markom
    int break_sent;
85 355 markom
  } vapi;
86
 
87
  /* Required by VAPI - circular buffer */
88 409 markom
 unsigned long vapi_buf[UART_VAPI_BUF_LEN];  /* Buffer to store incoming characters to,
89 355 markom
                                          since we cannot handle them so fast - we
90
                                          are serial */
91 341 markom
  int vapi_buf_head_ptr;               /* Where we write to */
92
  int vapi_buf_tail_ptr;               /* Where we read from */
93
 
94
  /* Length of FIFO, 16 for 16550, 1 for 16450 */
95
  int fifo_len;
96 713 markom
 
97
  /* fgetc slowdown */
98
  int slowdown;
99 1367 nogj
 
100
  struct channel *channel;
101
 
102
  /* Configuration */
103
  int jitter;
104
  oraddr_t baseaddr;
105
  int irq;
106
  unsigned long vapi_id;
107
  int uart16550;
108
  char *channel_str;
109 31 lampret
};
110
 
111
/*
112
 * Addresses of visible registers
113
 *
114
 */
115 355 markom
#define UART_RXBUF  0 /* R: Rx buffer, DLAB=0 */
116
#define UART_TXBUF  0 /* W: Tx buffer, DLAB=0 */
117
#define UART_DLL  0 /* R/W: Divisor Latch Low, DLAB=1 */
118
#define UART_DLH  1 /* R/W: Divisor Latch High, DLAB=1 */
119
#define UART_IER  1 /* R/W: Interrupt Enable Register */
120
#define UART_IIR  2 /* R: Interrupt ID Register */
121 409 markom
#define UART_FCR  2 /* W: FIFO Control Register */
122 355 markom
#define UART_LCR  3 /* R/W: Line Control Register */
123
#define UART_MCR  4 /* W: Modem Control Register */
124
#define UART_LSR  5 /* R: Line Status Register */
125
#define UART_MSR  6 /* R: Modem Status Register */
126
#define UART_SCR  7 /* R/W: Scratch Register */
127 31 lampret
 
128
/*
129
 * R/W masks for valid bits in 8250/16450 (mask out 16550 and later bits)
130
 *
131
 */
132 355 markom
#define UART_VALID_LCR  0xff
133 409 markom
#define UART_VALID_LSR  0xff
134
#define UART_VALID_IIR  0x0f
135
#define UART_VALID_FCR  0xc0
136 355 markom
#define UART_VALID_IER  0x0f
137
#define UART_VALID_MCR  0x1f
138
#define UART_VALID_MSR  0xff
139 31 lampret
 
140
/*
141
 * Bit definitions for the Line Control Register
142
 *
143
 */
144 355 markom
#define UART_LCR_DLAB 0x80  /* Divisor latch access bit */
145
#define UART_LCR_SBC  0x40  /* Set break control */
146
#define UART_LCR_SPAR 0x20  /* Stick parity (?) */
147
#define UART_LCR_EPAR 0x10  /* Even parity select */
148
#define UART_LCR_PARITY 0x08  /* Parity Enable */
149
#define UART_LCR_STOP 0x04  /* Stop bits: 0=1 stop bit, 1= 2 stop bits */
150
#define UART_LCR_WLEN5  0x00  /* Wordlength: 5 bits */
151
#define UART_LCR_WLEN6  0x01  /* Wordlength: 6 bits */
152
#define UART_LCR_WLEN7  0x02  /* Wordlength: 7 bits */
153
#define UART_LCR_WLEN8  0x03  /* Wordlength: 8 bits */
154 344 markom
#define UART_LCR_RESET  0x03
155 31 lampret
/*
156
 * Bit definitions for the Line Status Register
157
 */
158 409 markom
#define UART_LSR_RXERR  0x80  /* Error in rx fifo */
159 355 markom
#define UART_LSR_TXSERE 0x40  /* Transmitter serial register empty */
160
#define UART_LSR_TXBUFE 0x20  /* Transmitter buffer register empty */
161
#define UART_LSR_BREAK  0x10  /* Break interrupt indicator */
162
#define UART_LSR_FRAME  0x08  /* Frame error indicator */
163
#define UART_LSR_PARITY 0x04  /* Parity error indicator */
164
#define UART_LSR_OVRRUN 0x02  /* Overrun error indicator */
165
#define UART_LSR_RDRDY  0x01  /* Receiver data ready */
166 31 lampret
 
167
/*
168
 * Bit definitions for the Interrupt Identification Register
169
 */
170 355 markom
#define UART_IIR_NO_INT 0x01  /* No interrupts pending */
171
#define UART_IIR_ID 0x06  /* Mask for the interrupt ID */
172 31 lampret
 
173 355 markom
#define UART_IIR_MSI  0x00  /* Modem status interrupt (Low priority) */
174
#define UART_IIR_THRI 0x02  /* Transmitter holding register empty */
175
#define UART_IIR_RDI  0x04  /* Receiver data interrupt */
176
#define UART_IIR_RLSI 0x06  /* Receiver line status interrupt (High p.) */
177 409 markom
#define UART_IIR_CTI  0x0c  /* Character timeout */
178 31 lampret
 
179
/*
180 409 markom
 * Bit Definitions for the FIFO Control Register
181
 */
182
#define UART_FCR_FIE  0x01  /* FIFO enable */
183
#define UART_FCR_RRXFI 0x02 /* Reset rx FIFO */
184 411 markom
#define UART_FCR_RTXFI 0x04 /* Reset tx FIFO */
185 409 markom
#define UART_FIFO_TRIGGER(x) /* Trigger values for indexes 0..3 */\
186 423 markom
  ((x) == 0 ? 1\
187
  :(x) == 1 ? 4\
188
  :(x) == 2 ? 8\
189
  :(x) == 3 ? 14 : 0)
190 409 markom
 
191
/*
192 31 lampret
 * Bit definitions for the Interrupt Enable Register
193
 */
194 355 markom
#define UART_IER_MSI  0x08  /* Enable Modem status interrupt */
195
#define UART_IER_RLSI 0x04  /* Enable receiver line status interrupt */
196
#define UART_IER_THRI 0x02  /* Enable Transmitter holding register int. */
197
#define UART_IER_RDI  0x01  /* Enable receiver data interrupt */
198 31 lampret
 
199
/*
200
 * Bit definitions for the Modem Control Register
201
 */
202 355 markom
#define UART_MCR_LOOP 0x10  /* Enable loopback mode */
203
#define UART_MCR_AUX2 0x08  /* Auxilary 2  */
204
#define UART_MCR_AUX1 0x04  /* Auxilary 1 */
205
#define UART_MCR_RTS  0x02  /* Force RTS */
206
#define UART_MCR_DTR  0x01  /* Force DTR */
207 31 lampret
 
208
/*
209
 * Bit definitions for the Modem Status Register
210
 */
211 355 markom
#define UART_MSR_DCD  0x80  /* Data Carrier Detect */
212 385 markom
#define UART_MSR_RI   0x40  /* Ring Indicator */
213 355 markom
#define UART_MSR_DSR  0x20  /* Data Set Ready */
214
#define UART_MSR_CTS  0x10  /* Clear to Send */
215
#define UART_MSR_DDCD 0x08  /* Delta DCD */
216
#define UART_MSR_TERI 0x04  /* Trailing edge ring indicator */
217
#define UART_MSR_DDSR 0x02  /* Delta DSR */
218
#define UART_MSR_DCTS 0x01  /* Delta CTS */
219 31 lampret
 
220 385 markom
/*
221
 * Various definitions
222
 */
223 423 markom
#define UART_BREAK_COUNT  (1) /* # of chars to count when performing break */
224 409 markom
#define UART_CHAR_TIMEOUT (4) /* # of chars to count when performing timeout int. */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.