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 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _KBTRANS_STREAMS_H 27 #define _KBTRANS_STREAMS_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #include <sys/stream.h> 36 37 #define KBTRANS_POLLED_BUF_SIZE 30 38 39 /* definitions for various state machines */ 40 #define KBTRANS_STREAMS_OPEN 0x00000001 /* keyboard is open for business */ 41 42 #define NO_HARD_RESET 0 /* resets only state struct */ 43 #define HARD_RESET 1 /* resets keyboard and state structure */ 44 45 /* 46 * structure to keep track of currently pressed keys when in 47 * TR_UNTRANS_EVENT mode 48 */ 49 typedef struct key_event { 50 uchar_t key_station; /* Physical key station associated with event */ 51 Firm_event event; /* Event that sent out on down */ 52 } Key_event; 53 54 55 /* state structure for kbtrans_streams */ 56 struct kbtrans { 57 struct kbtrans_lower kbtrans_lower; /* actual translation state */ 58 59 /* Read and write queues */ 60 queue_t *kbtrans_streams_readq; 61 queue_t *kbtrans_streams_writeq; 62 63 /* Pending "ioctl" awaiting buffer */ 64 mblk_t *kbtrans_streams_iocpending; 65 66 /* Number of times the keyboard overflowed input */ 67 int kbtrans_overflow_cnt; 68 69 /* random flags */ 70 int kbtrans_streams_flags; 71 72 /* id from qbufcall on allocb failure */ 73 bufcall_id_t kbtrans_streams_bufcallid; 74 75 timeout_id_t kbtrans_streams_rptid; /* timeout id for repeat */ 76 77 int kbtrans_streams_iocerror; /* error return from "ioctl" */ 78 int kbtrans_streams_translate_mode; /* Translate keycodes? */ 79 int kbtrans_streams_translatable; /* Keyboard is translatable? */ 80 81 /* Vuid_id_addrs for various events */ 82 struct { 83 short ascii; 84 short top; 85 short vkey; 86 } kbtrans_streams_vuid_addr; 87 88 /* 89 * Table of key stations currently down that have 90 * have firm events that need to be matched with up transitions 91 * when translation mode is TR_*EVENT 92 */ 93 struct key_event *kbtrans_streams_downs; 94 95 /* Number of down entries */ 96 int kbtrans_streams_num_downs_entries; /* entries in downs */ 97 98 /* Bytes allocated for downs */ 99 uint_t kbtrans_streams_downs_bytes; 100 101 /* Abort state */ 102 enum { 103 ABORT_NORMAL, 104 ABORT_ABORT1_RECEIVED, 105 NEW_ABORT_ABORT1_RECEIVED /* for new abort key */ 106 } kbtrans_streams_abort_state; 107 108 /* Indicated whether or not abort may be honored */ 109 boolean_t kbtrans_streams_abortable; 110 111 /* 112 * During an abort sequence, says which key started the sequence. 113 * This is used to support both L1+A and F1+A. 114 */ 115 kbtrans_key_t kbtrans_streams_abort1_key; 116 117 /* It is used to support new abort sequence Shift+Pause */ 118 kbtrans_key_t kbtrans_streams_new_abort1_key; 119 120 /* Functions to be called based on the translation type */ 121 struct keyboard_callback *kbtrans_streams_callback; 122 123 /* Private structure for the keyboard specific module/driver */ 124 struct kbtrans_hardware *kbtrans_streams_hw; 125 126 /* Callbacks into the keyboard specific module/driver */ 127 struct kbtrans_callbacks *kbtrans_streams_hw_callbacks; 128 129 /* Keyboard type */ 130 int kbtrans_streams_id; 131 132 /* Buffers to hold characters during the polled mode */ 133 char *kbtrans_polled_pending_chars; 134 char kbtrans_polled_buf[KBTRANS_POLLED_BUF_SIZE+1]; 135 }; 136 137 #ifdef __cplusplus 138 } 139 #endif 140 141 #endif /* _KBTRANS_STREAMS_H */ 142