xref: /freebsd-12.1/sys/dev/uart/uart_cpu.h (revision 27d5dc18)
1*27d5dc18SMarcel Moolenaar /*
2*27d5dc18SMarcel Moolenaar  * Copyright (c) 2003 Marcel Moolenaar
3*27d5dc18SMarcel Moolenaar  * All rights reserved.
4*27d5dc18SMarcel Moolenaar  *
5*27d5dc18SMarcel Moolenaar  * Redistribution and use in source and binary forms, with or without
6*27d5dc18SMarcel Moolenaar  * modification, are permitted provided that the following conditions
7*27d5dc18SMarcel Moolenaar  * are met:
8*27d5dc18SMarcel Moolenaar  *
9*27d5dc18SMarcel Moolenaar  * 1. Redistributions of source code must retain the above copyright
10*27d5dc18SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer.
11*27d5dc18SMarcel Moolenaar  * 2. Redistributions in binary form must reproduce the above copyright
12*27d5dc18SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer in the
13*27d5dc18SMarcel Moolenaar  *    documentation and/or other materials provided with the distribution.
14*27d5dc18SMarcel Moolenaar  *
15*27d5dc18SMarcel Moolenaar  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16*27d5dc18SMarcel Moolenaar  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17*27d5dc18SMarcel Moolenaar  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18*27d5dc18SMarcel Moolenaar  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19*27d5dc18SMarcel Moolenaar  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20*27d5dc18SMarcel Moolenaar  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21*27d5dc18SMarcel Moolenaar  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22*27d5dc18SMarcel Moolenaar  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23*27d5dc18SMarcel Moolenaar  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24*27d5dc18SMarcel Moolenaar  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*27d5dc18SMarcel Moolenaar  *
26*27d5dc18SMarcel Moolenaar  * $FreeBSD$
27*27d5dc18SMarcel Moolenaar  */
28*27d5dc18SMarcel Moolenaar 
29*27d5dc18SMarcel Moolenaar #ifndef _DEV_UART_CPU_H_
30*27d5dc18SMarcel Moolenaar #define _DEV_UART_CPU_H_
31*27d5dc18SMarcel Moolenaar 
32*27d5dc18SMarcel Moolenaar /*
33*27d5dc18SMarcel Moolenaar  * Low-level operations for use by console and/or debug port support.
34*27d5dc18SMarcel Moolenaar  */
35*27d5dc18SMarcel Moolenaar struct uart_ops {
36*27d5dc18SMarcel Moolenaar 	int (*probe)(struct uart_bas *);
37*27d5dc18SMarcel Moolenaar 	void (*init)(struct uart_bas *, int, int, int, int);
38*27d5dc18SMarcel Moolenaar 	void (*term)(struct uart_bas *);
39*27d5dc18SMarcel Moolenaar 	void (*putc)(struct uart_bas *, int);
40*27d5dc18SMarcel Moolenaar 	int (*poll)(struct uart_bas *);
41*27d5dc18SMarcel Moolenaar 	int (*getc)(struct uart_bas *);
42*27d5dc18SMarcel Moolenaar };
43*27d5dc18SMarcel Moolenaar 
44*27d5dc18SMarcel Moolenaar extern struct uart_ops uart_ns8250_ops;
45*27d5dc18SMarcel Moolenaar extern struct uart_ops uart_sab82532_ops;
46*27d5dc18SMarcel Moolenaar extern struct uart_ops uart_z8530_ops;
47*27d5dc18SMarcel Moolenaar 
48*27d5dc18SMarcel Moolenaar /*
49*27d5dc18SMarcel Moolenaar  * Console and debug port device info.
50*27d5dc18SMarcel Moolenaar  */
51*27d5dc18SMarcel Moolenaar struct uart_softc;
52*27d5dc18SMarcel Moolenaar struct uart_devinfo {
53*27d5dc18SMarcel Moolenaar 	SLIST_ENTRY(uart_devinfo) next;
54*27d5dc18SMarcel Moolenaar 	struct uart_ops ops;
55*27d5dc18SMarcel Moolenaar 	struct uart_bas bas;
56*27d5dc18SMarcel Moolenaar 	int	baudrate;
57*27d5dc18SMarcel Moolenaar 	int	databits;
58*27d5dc18SMarcel Moolenaar 	int	stopbits;
59*27d5dc18SMarcel Moolenaar 	int	parity;
60*27d5dc18SMarcel Moolenaar 	int	type;
61*27d5dc18SMarcel Moolenaar #define	UART_DEV_CONSOLE	0
62*27d5dc18SMarcel Moolenaar #define	UART_DEV_DBGPORT	1
63*27d5dc18SMarcel Moolenaar #define	UART_DEV_KEYBOARD	2
64*27d5dc18SMarcel Moolenaar 	int	(*attach)(struct uart_softc*);
65*27d5dc18SMarcel Moolenaar 	int	(*detach)(struct uart_softc*);
66*27d5dc18SMarcel Moolenaar 	void	*cookie;		/* Type dependent use. */
67*27d5dc18SMarcel Moolenaar };
68*27d5dc18SMarcel Moolenaar 
69*27d5dc18SMarcel Moolenaar int uart_cpu_getdev(int devtype, struct uart_devinfo *di);
70*27d5dc18SMarcel Moolenaar int uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2);
71*27d5dc18SMarcel Moolenaar 
72*27d5dc18SMarcel Moolenaar void uart_add_sysdev(struct uart_devinfo*);
73*27d5dc18SMarcel Moolenaar 
74*27d5dc18SMarcel Moolenaar /*
75*27d5dc18SMarcel Moolenaar  * Operations for low-level access to the UART. Primarily for use
76*27d5dc18SMarcel Moolenaar  * by console and debug port logic.
77*27d5dc18SMarcel Moolenaar  */
78*27d5dc18SMarcel Moolenaar static __inline int
79*27d5dc18SMarcel Moolenaar uart_probe(struct uart_devinfo *di)
80*27d5dc18SMarcel Moolenaar {
81*27d5dc18SMarcel Moolenaar 	return (di->ops.probe(&di->bas));
82*27d5dc18SMarcel Moolenaar }
83*27d5dc18SMarcel Moolenaar 
84*27d5dc18SMarcel Moolenaar static __inline void
85*27d5dc18SMarcel Moolenaar uart_init(struct uart_devinfo *di)
86*27d5dc18SMarcel Moolenaar {
87*27d5dc18SMarcel Moolenaar 	di->ops.init(&di->bas, di->baudrate, di->databits, di->stopbits,
88*27d5dc18SMarcel Moolenaar 	    di->parity);
89*27d5dc18SMarcel Moolenaar }
90*27d5dc18SMarcel Moolenaar 
91*27d5dc18SMarcel Moolenaar static __inline void
92*27d5dc18SMarcel Moolenaar uart_term(struct uart_devinfo *di)
93*27d5dc18SMarcel Moolenaar {
94*27d5dc18SMarcel Moolenaar 	di->ops.term(&di->bas);
95*27d5dc18SMarcel Moolenaar }
96*27d5dc18SMarcel Moolenaar 
97*27d5dc18SMarcel Moolenaar static __inline void
98*27d5dc18SMarcel Moolenaar uart_putc(struct uart_devinfo *di, int c)
99*27d5dc18SMarcel Moolenaar {
100*27d5dc18SMarcel Moolenaar 	di->ops.putc(&di->bas, c);
101*27d5dc18SMarcel Moolenaar }
102*27d5dc18SMarcel Moolenaar 
103*27d5dc18SMarcel Moolenaar static __inline int
104*27d5dc18SMarcel Moolenaar uart_poll(struct uart_devinfo *di)
105*27d5dc18SMarcel Moolenaar {
106*27d5dc18SMarcel Moolenaar 	return (di->ops.poll(&di->bas));
107*27d5dc18SMarcel Moolenaar }
108*27d5dc18SMarcel Moolenaar 
109*27d5dc18SMarcel Moolenaar static __inline int
110*27d5dc18SMarcel Moolenaar uart_getc(struct uart_devinfo *di)
111*27d5dc18SMarcel Moolenaar {
112*27d5dc18SMarcel Moolenaar 	return (di->ops.getc(&di->bas));
113*27d5dc18SMarcel Moolenaar }
114*27d5dc18SMarcel Moolenaar 
115*27d5dc18SMarcel Moolenaar #endif /* _DEV_UART_CPU_H_ */
116