1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #ifndef _SYS_CONSDEV_H
28 #define _SYS_CONSDEV_H
29
30 #include <sys/isa_defs.h>
31 #include <sys/dditypes.h>
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37
38 #if defined(_KERNEL) || defined(_KMDB)
39
40 /*
41 * Paths to console devices
42 */
43 #define CONSKBD_PATH "/pseudo/conskbd@0:conskbd"
44 #define CONSMS_PATH "/pseudo/consms@0:mouse"
45 #define WC_PATH "/pseudo/wc@0:wscons"
46 #define IWSCN_PATH "/pseudo/iwscn@0:iwscn"
47 #define CVC_PATH "/pseudo/cvc@0:cvc"
48
49 /*
50 * Console redirection.
51 */
52 extern dev_t rconsdev; /* real (underlying) console */
53 extern struct vnode *rconsvp; /* pointer to vnode for that device */
54
55 /*
56 * Virtual Serial Console redirection.
57 */
58 extern struct vnode *vsconsvp; /* pointer to vnode for virtual console */
59
60 /*
61 * Mouse, keyboard, and frame buffer configuration information.
62 *
63 * XXX: Assumes a single mouse/keyboard/frame buffer triple.
64 */
65 extern dev_t mousedev; /* default mouse device */
66 extern dev_t kbddev; /* default (actual) keyboard device */
67 extern dev_t stdindev; /* default standard input device */
68 extern dev_t fbdev; /* default framebuffer device */
69 extern struct vnode *fbvp; /* pointer to vnode for that device */
70 extern dev_info_t *fbdip; /* pointer to dev_info for fbdev (optional) */
71 extern dev_t diagdev; /* default diag device (optional) */
72
73 extern int consmode; /* CONS_FW or CONS_KFB */
74 extern int cons_tem_disable;
75 #define CONS_FW 0
76 #define CONS_KFB 1
77
78 /*
79 * Workstation console redirection.
80 *
81 * The workstation console device is the multiplexor that hooks keyboard and
82 * frame buffer together into a single tty-like device. Access to it is
83 * through the redirecting driver, so that frame buffer output can be
84 * redirected to other devices. wsconsvp names the redirecting access point,
85 * and rwsconsvp names the workstation console itself.
86 *
87 * XXX: Assumes a single workstation console.
88 */
89 extern struct vnode *wsconsvp; /* vnode for redirecting ws cons access */
90 extern struct vnode *rwsconsvp; /* vnode for underlying workstation console */
91
92 /*
93 * Generic console ioctls.
94 *
95 * On systems without OBP, all potential console devices should implement these.
96 *
97 * On systems with OBP, all potential console devices should implement
98 * the ABORTENABLE ioctls. All potential console devices that cannot share
99 * their hardware with OBP should implement the POLLEDIO ioctls.
100 */
101 #define _CONSIOC (('C'<<24)|('O'<<16)|('N'<<8))
102
103 /*
104 * Get the structure of function pointers to be used for polled I/O
105 *
106 * struct cons_polledio *polledio;
107 * struct strioctl str;
108 *
109 * str.ic_cmd = CONS_OPENPOLLEDIO;
110 * str.ic_timout = INFTIM;
111 * str.ic_len = sizeof (polledio);
112 * str.ic_dp = (char *)&polledio;
113 * ioctl(fd, I_STR, &str);
114 */
115 #define CONSOPENPOLLEDIO (_CONSIOC|0)
116
117 /*
118 * Get the current state of abort enable
119 * enable = ioctl(fd, CONSGETABORTENABLE, 0)
120 */
121 #define CONSGETABORTENABLE (_CONSIOC|1)
122
123 /*
124 * Set the current state of abort enable
125 * ioctl(fd, CONSSETABORTENABLE, boolean_t)
126 */
127 #define CONSSETABORTENABLE (_CONSIOC|2)
128
129 /*
130 * Undo anything that was done with CONSOPENPOLLEDIO
131 * ioctl(fd, CONSCLOSEPOLLEDIO, 0)
132 */
133 #define CONSCLOSEPOLLEDIO (_CONSIOC|3)
134
135 /*
136 * Set the type simulated by hardwares
137 * ioctl(fd, CONSSETKBDTYPE, kbdtype)
138 * kbdtype:
139 * KB_PC or KB_USB
140 */
141 #define CONSSETKBDTYPE (_CONSIOC|4)
142
143 #define CONSPOLLEDIO_V0 0
144 #define CONSPOLLEDIO_V1 1
145
146 typedef int kbtrans_key_t;
147
148 enum keystate { KEY_PRESSED = 0, KEY_RELEASED = 1 };
149
150
151 /*
152 * Opaque state structure for driver state. Each driver has its own
153 * implementation (with different names!), and casts to/from this.
154 * This allows better type-checking than "void *", helping to ensure
155 * that the structure passed in is the structure used in the callback.
156 */
157 typedef struct __cons_polledio_arg *cons_polledio_arg_t;
158
159 /*
160 * This is the structure that is used to handle polled I/O. It is filled
161 * in by a lower driver, passed up, and eventually registered with the
162 * debugger that needs to do polled I/O.
163 */
164 typedef struct cons_polledio {
165
166 /*
167 * version of this structure
168 */
169 unsigned cons_polledio_version;
170
171 /*
172 * Argument that is passed to the following routines.
173 */
174 cons_polledio_arg_t cons_polledio_argument;
175
176 /*
177 * Pointer to the routine and its argument that handles putting
178 * characters out to the polled device.
179 */
180 void (*cons_polledio_putchar)(cons_polledio_arg_t,
181 uchar_t);
182
183 /*
184 * Pointer to the routine and its argument that handles getting
185 * characters from the polled device. This routine is blocking.
186 */
187 int (*cons_polledio_getchar)(cons_polledio_arg_t);
188
189 /*
190 * Pointer to the routine and its argument that checks to see
191 * if a character is pending input. This routine is non-blocking.
192 */
193 boolean_t (*cons_polledio_ischar)(cons_polledio_arg_t);
194
195 /*
196 * Initialize the polled subsystem. This routine is called once
197 * per mode change from non-polled to polled mode.
198 */
199 void (*cons_polledio_enter)(cons_polledio_arg_t);
200
201 /*
202 * Restore the non-polled subsystem. This routine is called once
203 * per mode change from non-polled to polled mode.
204 */
205 void (*cons_polledio_exit)(cons_polledio_arg_t);
206
207
208 /* Routine to set the LED's in polled mode */
209 void (*cons_polledio_setled)(cons_polledio_arg_t, int);
210
211 /* Routine to indicate that a scande is available in polled mode */
212 boolean_t (*cons_polledio_keycheck)(
213 cons_polledio_arg_t,
214 kbtrans_key_t *, enum keystate *);
215 } cons_polledio_t;
216
217 extern cons_polledio_t *cons_polledio;
218
219 /*
220 * Workstation Console
221 */
222 #define _WCIOC (('W'<<24)|('C'<<16))
223 #define WC_OPEN_FB (_WCIOC | 0)
224 #define WC_CLOSE_FB (_WCIOC | 1)
225
226 #endif /* _KERNEL || _KMDB */
227
228 #ifdef __cplusplus
229 }
230 #endif
231
232 #endif /* _SYS_CONSDEV_H */