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 --- |