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 34extern "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 */ 52extern dev_t rconsdev; /* real (underlying) console */ 53extern struct vnode *rconsvp; /* pointer to vnode for that device */ 54 55/* 56 * Virtual Serial Console redirection. 57 */ 58extern 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 */ 65extern dev_t mousedev; /* default mouse device */ 66extern dev_t kbddev; /* default (actual) keyboard device */ 67extern dev_t stdindev; /* default standard input device */ 68extern dev_t fbdev; /* default framebuffer device */ 69extern struct vnode *fbvp; /* pointer to vnode for that device */ 70extern dev_info_t *fbdip; /* pointer to dev_info for fbdev (optional) */ 71 72extern int consmode; /* CONS_FW or CONS_KFB */ 73extern int cons_tem_disable; 74#define CONS_FW 0 75#define CONS_KFB 1 76 77/* 78 * Workstation console redirection. 79 * 80 * The workstation console device is the multiplexor that hooks keyboard and 81 * frame buffer together into a single tty-like device. Access to it is 82 * through the redirecting driver, so that frame buffer output can be 83 * redirected to other devices. wsconsvp names the redirecting access point, 84 * and rwsconsvp names the workstation console itself. 85 * 86 * XXX: Assumes a single workstation console. 87 */ 88extern struct vnode *wsconsvp; /* vnode for redirecting ws cons access */ 89extern struct vnode *rwsconsvp; /* vnode for underlying workstation console */ 90 91/* 92 * Generic console ioctls. 93 * 94 * On systems without OBP, all potential console devices should implement these. 95 * 96 * On systems with OBP, all potential console devices should implement 97 * the ABORTENABLE ioctls. All potential console devices that cannot share 98 * their hardware with OBP should implement the POLLEDIO ioctls. 99 */ 100#define _CONSIOC (('C'<<24)|('O'<<16)|('N'<<8)) 101 102/* 103 * Get the structure of function pointers to be used for polled I/O 104 * 105 * struct cons_polledio *polledio; 106 * struct strioctl str; 107 * 108 * str.ic_cmd = CONS_OPENPOLLEDIO; 109 * str.ic_timout = INFTIM; 110 * str.ic_len = sizeof (polledio); 111 * str.ic_dp = (char *)&polledio; 112 * ioctl(fd, I_STR, &str); 113 */ 114#define CONSOPENPOLLEDIO (_CONSIOC|0) 115 116/* 117 * Get the current state of abort enable 118 * enable = ioctl(fd, CONSGETABORTENABLE, 0) 119 */ 120#define CONSGETABORTENABLE (_CONSIOC|1) 121 122/* 123 * Set the current state of abort enable 124 * ioctl(fd, CONSSETABORTENABLE, boolean_t) 125 */ 126#define CONSSETABORTENABLE (_CONSIOC|2) 127 128/* 129 * Undo anything that was done with CONSOPENPOLLEDIO 130 * ioctl(fd, CONSCLOSEPOLLEDIO, 0) 131 */ 132#define CONSCLOSEPOLLEDIO (_CONSIOC|3) 133 134/* 135 * Set the type simulated by hardwares 136 * ioctl(fd, CONSSETKBDTYPE, kbdtype) 137 * kbdtype: 138 * KB_PC or KB_USB 139 */ 140#define CONSSETKBDTYPE (_CONSIOC|4) 141 142#define CONSPOLLEDIO_V0 0 143#define CONSPOLLEDIO_V1 1 144 145typedef int kbtrans_key_t; 146 147enum keystate { KEY_PRESSED = 0, KEY_RELEASED = 1 }; 148 149 150/* 151 * Opaque state structure for driver state. Each driver has its own 152 * implementation (with different names!), and casts to/from this. 153 * This allows better type-checking than "void *", helping to ensure 154 * that the structure passed in is the structure used in the callback. 155 */ 156typedef struct __cons_polledio_arg *cons_polledio_arg_t; 157 158/* 159 * This is the structure that is used to handle polled I/O. It is filled 160 * in by a lower driver, passed up, and eventually registered with the 161 * debugger that needs to do polled I/O. 162 */ 163typedef struct cons_polledio { 164 165 /* 166 * version of this structure 167 */ 168 unsigned cons_polledio_version; 169 170 /* 171 * Argument that is passed to the following routines. 172 */ 173 cons_polledio_arg_t cons_polledio_argument; 174 175 /* 176 * Pointer to the routine and its argument that handles putting 177 * characters out to the polled device. 178 */ 179 void (*cons_polledio_putchar)(cons_polledio_arg_t, 180 uchar_t); 181 182 /* 183 * Pointer to the routine and its argument that handles getting 184 * characters from the polled device. This routine is blocking. 185 */ 186 int (*cons_polledio_getchar)(cons_polledio_arg_t); 187 188 /* 189 * Pointer to the routine and its argument that checks to see 190 * if a character is pending input. This routine is non-blocking. 191 */ 192 boolean_t (*cons_polledio_ischar)(cons_polledio_arg_t); 193 194 /* 195 * Initialize the polled subsystem. This routine is called once 196 * per mode change from non-polled to polled mode. 197 */ 198 void (*cons_polledio_enter)(cons_polledio_arg_t); 199 200 /* 201 * Restore the non-polled subsystem. This routine is called once 202 * per mode change from non-polled to polled mode. 203 */ 204 void (*cons_polledio_exit)(cons_polledio_arg_t); 205 206 207 /* Routine to set the LED's in polled mode */ 208 void (*cons_polledio_setled)(cons_polledio_arg_t, int); 209 210 /* Routine to indicate that a scande is available in polled mode */ 211 boolean_t (*cons_polledio_keycheck)( 212 cons_polledio_arg_t, 213 kbtrans_key_t *, enum keystate *); 214} cons_polledio_t; 215 216extern cons_polledio_t *cons_polledio; 217 218/* 219 * Workstation Console 220 */ 221#define _WCIOC (('W'<<24)|('C'<<16)) 222#define WC_OPEN_FB (_WCIOC | 0) 223#define WC_CLOSE_FB (_WCIOC | 1) 224 225#endif /* _KERNEL || _KMDB */ 226 227#ifdef __cplusplus 228} 229#endif 230 231#endif /* _SYS_CONSDEV_H */ 232