Deleted Added
full compact
vkbd.c (156057) vkbd.c (162711)
1/*
2 * vkbd.c
3 */
4
5/*-
6 * Copyright (c) 2004 Maksim Yevmenkin <m_evmenkin@yahoo.com>
7 * All rights reserved.
8 *

--- 14 unchanged lines hidden (view full) ---

23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $Id: vkbd.c,v 1.20 2004/11/15 23:53:30 max Exp $
1/*
2 * vkbd.c
3 */
4
5/*-
6 * Copyright (c) 2004 Maksim Yevmenkin <m_evmenkin@yahoo.com>
7 * All rights reserved.
8 *

--- 14 unchanged lines hidden (view full) ---

23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $Id: vkbd.c,v 1.20 2004/11/15 23:53:30 max Exp $
31 * $FreeBSD: head/sys/dev/vkbd/vkbd.c 156057 2006-02-27 06:17:48Z emax $
31 * $FreeBSD: head/sys/dev/vkbd/vkbd.c 162711 2006-09-27 19:57:02Z ru $
32 */
33
32 */
33
34#include "opt_compat.h"
34#include "opt_kbd.h"
35
36#include <sys/param.h>
37#include <sys/conf.h>
38#include <sys/fcntl.h>
39#include <sys/kbio.h>
40#include <sys/kernel.h>
41#include <sys/limits.h>

--- 1045 unchanged lines hidden (view full) ---

1087}
1088
1089/* Some useful control functions (stolen from atkbd.c) */
1090static int
1091vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
1092{
1093 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data;
1094 int i;
35#include "opt_kbd.h"
36
37#include <sys/param.h>
38#include <sys/conf.h>
39#include <sys/fcntl.h>
40#include <sys/kbio.h>
41#include <sys/kernel.h>
42#include <sys/limits.h>

--- 1045 unchanged lines hidden (view full) ---

1088}
1089
1090/* Some useful control functions (stolen from atkbd.c) */
1091static int
1092vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
1093{
1094 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data;
1095 int i;
1096#ifdef COMPAT_FREEBSD6
1097 int ival;
1098#endif
1095
1096 VKBD_LOCK(state);
1097
1098 switch (cmd) {
1099 case KDGKBMODE: /* get keyboard mode */
1100 *(int *)arg = state->ks_mode;
1101 break;
1102
1099
1100 VKBD_LOCK(state);
1101
1102 switch (cmd) {
1103 case KDGKBMODE: /* get keyboard mode */
1104 *(int *)arg = state->ks_mode;
1105 break;
1106
1107#ifdef COMPAT_FREEBSD6
1108 case _IO('K', 7):
1109 ival = IOCPARM_IVAL(arg);
1110 arg = (caddr_t)&ival;
1111 /* FALLTHROUGH */
1112#endif
1103 case KDSKBMODE: /* set keyboard mode */
1104 switch (*(int *)arg) {
1105 case K_XLATE:
1106 if (state->ks_mode != K_XLATE) {
1107 /* make lock key state and LED state match */
1108 state->ks_state &= ~LOCK_MASK;
1109 state->ks_state |= KBD_LED_VAL(kbd);
1110 vkbd_status_changed(state);

--- 14 unchanged lines hidden (view full) ---

1125 return (EINVAL);
1126 }
1127 break;
1128
1129 case KDGETLED: /* get keyboard LED */
1130 *(int *)arg = KBD_LED_VAL(kbd);
1131 break;
1132
1113 case KDSKBMODE: /* set keyboard mode */
1114 switch (*(int *)arg) {
1115 case K_XLATE:
1116 if (state->ks_mode != K_XLATE) {
1117 /* make lock key state and LED state match */
1118 state->ks_state &= ~LOCK_MASK;
1119 state->ks_state |= KBD_LED_VAL(kbd);
1120 vkbd_status_changed(state);

--- 14 unchanged lines hidden (view full) ---

1135 return (EINVAL);
1136 }
1137 break;
1138
1139 case KDGETLED: /* get keyboard LED */
1140 *(int *)arg = KBD_LED_VAL(kbd);
1141 break;
1142
1143#ifdef COMPAT_FREEBSD6
1144 case _IO('K', 66):
1145 ival = IOCPARM_IVAL(arg);
1146 arg = (caddr_t)&ival;
1147 /* FALLTHROUGH */
1148#endif
1133 case KDSETLED: /* set keyboard LED */
1134 /* NOTE: lock key state in ks_state won't be changed */
1135 if (*(int *)arg & ~LOCK_MASK) {
1136 VKBD_UNLOCK(state);
1137 return (EINVAL);
1138 }
1139
1140 i = *(int *)arg;

--- 9 unchanged lines hidden (view full) ---

1150 KBD_LED_VAL(kbd) = *(int *)arg;
1151 vkbd_status_changed(state);
1152 break;
1153
1154 case KDGKBSTATE: /* get lock key state */
1155 *(int *)arg = state->ks_state & LOCK_MASK;
1156 break;
1157
1149 case KDSETLED: /* set keyboard LED */
1150 /* NOTE: lock key state in ks_state won't be changed */
1151 if (*(int *)arg & ~LOCK_MASK) {
1152 VKBD_UNLOCK(state);
1153 return (EINVAL);
1154 }
1155
1156 i = *(int *)arg;

--- 9 unchanged lines hidden (view full) ---

1166 KBD_LED_VAL(kbd) = *(int *)arg;
1167 vkbd_status_changed(state);
1168 break;
1169
1170 case KDGKBSTATE: /* get lock key state */
1171 *(int *)arg = state->ks_state & LOCK_MASK;
1172 break;
1173
1174#ifdef COMPAT_FREEBSD6
1175 case _IO('K', 20):
1176 ival = IOCPARM_IVAL(arg);
1177 arg = (caddr_t)&ival;
1178 /* FALLTHROUGH */
1179#endif
1158 case KDSKBSTATE: /* set lock key state */
1159 if (*(int *)arg & ~LOCK_MASK) {
1160 VKBD_UNLOCK(state);
1161 return (EINVAL);
1162 }
1163 state->ks_state &= ~LOCK_MASK;
1164 state->ks_state |= *(int *)arg;
1165 vkbd_status_changed(state);
1166 VKBD_UNLOCK(state);
1167 /* set LEDs and quit */
1168 return (vkbd_ioctl(kbd, KDSETLED, arg));
1169
1170 case KDSETREPEAT: /* set keyboard repeat rate (new interface) */
1171 i = typematic(((int *)arg)[0], ((int *)arg)[1]);
1172 kbd->kb_delay1 = typematic_delay(i);
1173 kbd->kb_delay2 = typematic_rate(i);
1174 vkbd_status_changed(state);
1175 break;
1176
1180 case KDSKBSTATE: /* set lock key state */
1181 if (*(int *)arg & ~LOCK_MASK) {
1182 VKBD_UNLOCK(state);
1183 return (EINVAL);
1184 }
1185 state->ks_state &= ~LOCK_MASK;
1186 state->ks_state |= *(int *)arg;
1187 vkbd_status_changed(state);
1188 VKBD_UNLOCK(state);
1189 /* set LEDs and quit */
1190 return (vkbd_ioctl(kbd, KDSETLED, arg));
1191
1192 case KDSETREPEAT: /* set keyboard repeat rate (new interface) */
1193 i = typematic(((int *)arg)[0], ((int *)arg)[1]);
1194 kbd->kb_delay1 = typematic_delay(i);
1195 kbd->kb_delay2 = typematic_rate(i);
1196 vkbd_status_changed(state);
1197 break;
1198
1199#ifdef COMPAT_FREEBSD6
1200 case _IO('K', 67):
1201 ival = IOCPARM_IVAL(arg);
1202 arg = (caddr_t)&ival;
1203 /* FALLTHROUGH */
1204#endif
1177 case KDSETRAD: /* set keyboard repeat rate (old interface) */
1178 kbd->kb_delay1 = typematic_delay(*(int *)arg);
1179 kbd->kb_delay2 = typematic_rate(*(int *)arg);
1180 vkbd_status_changed(state);
1181 break;
1182
1183 case PIO_KEYMAP: /* set keyboard translation table */
1184 case PIO_KEYMAPENT: /* set keyboard translation table entry */

--- 172 unchanged lines hidden ---
1205 case KDSETRAD: /* set keyboard repeat rate (old interface) */
1206 kbd->kb_delay1 = typematic_delay(*(int *)arg);
1207 kbd->kb_delay2 = typematic_rate(*(int *)arg);
1208 vkbd_status_changed(state);
1209 break;
1210
1211 case PIO_KEYMAP: /* set keyboard translation table */
1212 case PIO_KEYMAPENT: /* set keyboard translation table entry */

--- 172 unchanged lines hidden ---