/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_CONSDEV_H #define _SYS_CONSDEV_H #include #include #ifdef __cplusplus extern "C" { #endif #if defined(_KERNEL) || defined(_KMDB) /* * Paths to console devices */ #define CONSKBD_PATH "/pseudo/conskbd@0:conskbd" #define CONSMS_PATH "/pseudo/consms@0:mouse" #define WC_PATH "/pseudo/wc@0:wscons" #define IWSCN_PATH "/pseudo/iwscn@0:iwscn" #define CVC_PATH "/pseudo/cvc@0:cvc" /* * Console redirection. */ extern dev_t rconsdev; /* real (underlying) console */ extern struct vnode *rconsvp; /* pointer to vnode for that device */ /* * Virtual Serial Console redirection. */ extern struct vnode *vsconsvp; /* pointer to vnode for virtual console */ /* * Mouse, keyboard, and frame buffer configuration information. * * XXX: Assumes a single mouse/keyboard/frame buffer triple. */ extern dev_t mousedev; /* default mouse device */ extern dev_t kbddev; /* default (actual) keyboard device */ extern dev_t stdindev; /* default standard input device */ extern dev_t fbdev; /* default framebuffer device */ extern struct vnode *fbvp; /* pointer to vnode for that device */ extern dev_info_t *fbdip; /* pointer to dev_info for fbdev (optional) */ extern dev_t diagdev; /* default diag device (optional) */ extern int consmode; /* CONS_FW or CONS_KFB */ extern int cons_tem_disable; #define CONS_FW 0 #define CONS_KFB 1 /* * Workstation console redirection. * * The workstation console device is the multiplexor that hooks keyboard and * frame buffer together into a single tty-like device. Access to it is * through the redirecting driver, so that frame buffer output can be * redirected to other devices. wsconsvp names the redirecting access point, * and rwsconsvp names the workstation console itself. * * XXX: Assumes a single workstation console. */ extern struct vnode *wsconsvp; /* vnode for redirecting ws cons access */ extern struct vnode *rwsconsvp; /* vnode for underlying workstation console */ /* * Generic console ioctls. * * On systems without OBP, all potential console devices should implement these. * * On systems with OBP, all potential console devices should implement * the ABORTENABLE ioctls. All potential console devices that cannot share * their hardware with OBP should implement the POLLEDIO ioctls. */ #define _CONSIOC (('C'<<24)|('O'<<16)|('N'<<8)) /* * Get the structure of function pointers to be used for polled I/O * * struct cons_polledio *polledio; * struct strioctl str; * * str.ic_cmd = CONS_OPENPOLLEDIO; * str.ic_timout = INFTIM; * str.ic_len = sizeof (polledio); * str.ic_dp = (char *)&polledio; * ioctl(fd, I_STR, &str); */ #define CONSOPENPOLLEDIO (_CONSIOC|0) /* * Get the current state of abort enable * enable = ioctl(fd, CONSGETABORTENABLE, 0) */ #define CONSGETABORTENABLE (_CONSIOC|1) /* * Set the current state of abort enable * ioctl(fd, CONSSETABORTENABLE, boolean_t) */ #define CONSSETABORTENABLE (_CONSIOC|2) /* * Undo anything that was done with CONSOPENPOLLEDIO * ioctl(fd, CONSCLOSEPOLLEDIO, 0) */ #define CONSCLOSEPOLLEDIO (_CONSIOC|3) /* * Set the type simulated by hardwares * ioctl(fd, CONSSETKBDTYPE, kbdtype) * kbdtype: * KB_PC or KB_USB */ #define CONSSETKBDTYPE (_CONSIOC|4) #define CONSPOLLEDIO_V0 0 #define CONSPOLLEDIO_V1 1 typedef int kbtrans_key_t; enum keystate { KEY_PRESSED = 0, KEY_RELEASED = 1 }; /* * Opaque state structure for driver state. Each driver has its own * implementation (with different names!), and casts to/from this. * This allows better type-checking than "void *", helping to ensure * that the structure passed in is the structure used in the callback. */ typedef struct __cons_polledio_arg *cons_polledio_arg_t; /* * This is the structure that is used to handle polled I/O. It is filled * in by a lower driver, passed up, and eventually registered with the * debugger that needs to do polled I/O. */ typedef struct cons_polledio { /* * version of this structure */ unsigned cons_polledio_version; /* * Argument that is passed to the following routines. */ cons_polledio_arg_t cons_polledio_argument; /* * Pointer to the routine and its argument that handles putting * characters out to the polled device. */ void (*cons_polledio_putchar)(cons_polledio_arg_t, uchar_t); /* * Pointer to the routine and its argument that handles getting * characters from the polled device. This routine is blocking. */ int (*cons_polledio_getchar)(cons_polledio_arg_t); /* * Pointer to the routine and its argument that checks to see * if a character is pending input. This routine is non-blocking. */ boolean_t (*cons_polledio_ischar)(cons_polledio_arg_t); /* * Initialize the polled subsystem. This routine is called once * per mode change from non-polled to polled mode. */ void (*cons_polledio_enter)(cons_polledio_arg_t); /* * Restore the non-polled subsystem. This routine is called once * per mode change from non-polled to polled mode. */ void (*cons_polledio_exit)(cons_polledio_arg_t); /* Routine to set the LED's in polled mode */ void (*cons_polledio_setled)(cons_polledio_arg_t, int); /* Routine to indicate that a scande is available in polled mode */ boolean_t (*cons_polledio_keycheck)( cons_polledio_arg_t, kbtrans_key_t *, enum keystate *); } cons_polledio_t; extern cons_polledio_t *cons_polledio; /* * Workstation Console */ #define _WCIOC (('W'<<24)|('C'<<16)) #define WC_OPEN_FB (_WCIOC | 0) #define WC_CLOSE_FB (_WCIOC | 1) #endif /* _KERNEL || _KMDB */ #ifdef __cplusplus } #endif #endif /* _SYS_CONSDEV_H */