if (index >= 0) {
if (KBD_IS_BUSY(keyboard[index])) {
crit_exit();
+ lwkt_reltoken(&tty_token);
return -1;
}
keyboard[index]->kb_token = id;
for (i = 0; i < NUM_ACCENTCHARS; ++i) {
if (acc->map[i][0] == 0) /* end of table */
break;
- if (acc->map[i][0] == ch)
+ if (acc->map[i][0] == ch) {
+ lwkt_reltoken(&tty_token);
return acc->map[i][1];
+ }
}
lwkt_reltoken(&tty_token);
/* this char cannot be accented... */
break;
}
crit_exit();
+ lwkt_reltoken(&tty_token);
return error;
case VT_OPENQRY: /* return free virtual console */
return error;
case KDSETRAD: /* set keyboard repeat & delay rates (old) */
- if (*(int *)data & ~0x7f)
+ if (*(int *)data & ~0x7f) {
+ lwkt_reltoken(&tty_token);
return EINVAL;
+ }
error = kbd_ioctl(sc->kbd, cmd, data);
if (error == ENOIOCTL)
error = ENODEV;
} video_switch_t;
#define save_palette(adp, pal) \
- lwkt_gettoken(&tty_token); \
- (*vidsw[(adp)->va_index]->save_palette)((adp), (pal)); \
- lwkt_reltoken(&tty_token)
+ do { \
+ lwkt_gettoken(&tty_token); \
+ (*vidsw[(adp)->va_index]->save_palette)((adp), (pal)); \
+ lwkt_reltoken(&tty_token); \
+ } while (0)
+
#define load_palette(adp, pal) \
- lwkt_gettoken(&tty_token); \
- (*vidsw[(adp)->va_index]->load_palette)((adp), (pal)); \
- lwkt_reltoken(&tty_token)
+ do { \
+ lwkt_gettoken(&tty_token); \
+ (*vidsw[(adp)->va_index]->load_palette)((adp), (pal)); \
+ lwkt_reltoken(&tty_token); \
+ } while (0)
+
#define get_mode_info(adp, mode, buf) \
(*vidsw[(adp)->va_index]->get_info)((adp), (mode), (buf))
+
#define set_video_mode(adp, mode) \
(*vidsw[(adp)->va_index]->set_mode)((adp), (mode))
+
#if 0 /* XXX conflicts with syscons' set_border() */
#define set_border(adp, border) \
- lwkt_gettoken(&tty_token); \
- (*vidsw[(adp)->va_index]->set_border)((adp), (border)); \
- lwkt_reltoken(&tty_token)
+ do { \
+ lwkt_gettoken(&tty_token); \
+ (*vidsw[(adp)->va_index]->set_border)((adp), (border)); \
+ lwkt_reltoken(&tty_token); \
+ } while (0)
#endif
+
#define set_origin(adp, o) \
- lwkt_gettoken(&tty_token); \
- (*vidsw[(adp)->va_index]->set_win_org)(adp, o); \
- lwkt_reltoken(&tty_token)
+ do { \
+ lwkt_gettoken(&tty_token); \
+ (*vidsw[(adp)->va_index]->set_win_org)(adp, o); \
+ lwkt_reltoken(&tty_token); \
+ } while (0)
/* XXX - add more macros */