Deleted Added
full compact
syscons.c (208411) syscons.c (213770)
1/*-
2 * Copyright (c) 1992-1998 S�ren Schmidt
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The DragonFly Project
6 * by Sascha Wildner <saw@online.de>
7 *
8 * Redistribution and use in source and binary forms, with or without

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

25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1992-1998 S�ren Schmidt
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The DragonFly Project
6 * by Sascha Wildner <saw@online.de>
7 *
8 * Redistribution and use in source and binary forms, with or without

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

25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include <sys/cdefs.h>
33__FBSDID("$FreeBSD: head/sys/dev/syscons/syscons.c 208411 2010-05-22 07:35:17Z jkim $");
33__FBSDID("$FreeBSD: head/sys/dev/syscons/syscons.c 213770 2010-10-13 11:37:12Z rpaulo $");
34
35#include "opt_compat.h"
36#include "opt_syscons.h"
37#include "opt_splash.h"
38#include "opt_ddb.h"
39
40#include <sys/param.h>
41#include <sys/systm.h>

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

470 /* initialize cursor */
471 if (!ISGRAPHSC(scp))
472 update_cursor_image(scp);
473
474 /* get screen update going */
475 scrn_timer(sc);
476
477 /* set up the keyboard */
34
35#include "opt_compat.h"
36#include "opt_syscons.h"
37#include "opt_splash.h"
38#include "opt_ddb.h"
39
40#include <sys/param.h>
41#include <sys/systm.h>

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

470 /* initialize cursor */
471 if (!ISGRAPHSC(scp))
472 update_cursor_image(scp);
473
474 /* get screen update going */
475 scrn_timer(sc);
476
477 /* set up the keyboard */
478 kbdd_ioctl(sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
478 (void)kbdd_ioctl(sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
479 update_kbd_state(scp, scp->status, LOCK_MASK);
480
481 printf("%s%d: %s <%d virtual consoles, flags=0x%x>\n",
482 SC_DRIVER_NAME, unit, adapter_name(sc->adp), sc->vtys, sc->config);
483 if (bootverbose) {
484 printf("%s%d:", SC_DRIVER_NAME, unit);
485 if (sc->adapter >= 0)
486 printf(" fb%d", sc->adapter);

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

579 return ENXIO;
580
581 if (!tty_opened(tp)) {
582 /* Use the current setting of the <-- key as default VERASE. */
583 /* If the Delete key is preferable, an stty is necessary */
584#ifndef __sparc64__
585 if (sc->kbd != NULL) {
586 key.keynum = KEYCODE_BS;
479 update_kbd_state(scp, scp->status, LOCK_MASK);
480
481 printf("%s%d: %s <%d virtual consoles, flags=0x%x>\n",
482 SC_DRIVER_NAME, unit, adapter_name(sc->adp), sc->vtys, sc->config);
483 if (bootverbose) {
484 printf("%s%d:", SC_DRIVER_NAME, unit);
485 if (sc->adapter >= 0)
486 printf(" fb%d", sc->adapter);

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

579 return ENXIO;
580
581 if (!tty_opened(tp)) {
582 /* Use the current setting of the <-- key as default VERASE. */
583 /* If the Delete key is preferable, an stty is necessary */
584#ifndef __sparc64__
585 if (sc->kbd != NULL) {
586 key.keynum = KEYCODE_BS;
587 kbdd_ioctl(sc->kbd, GIO_KEYMAPENT, (caddr_t)&key);
587 (void)kbdd_ioctl(sc->kbd, GIO_KEYMAPENT, (caddr_t)&key);
588 tp->t_termios.c_cc[VERASE] = key.key.map[0];
589 }
590#endif
591 }
592
593 scp = sc_get_stat(tp);
594 if (scp == NULL) {
595 scp = SC_STAT(tp) = alloc_scp(sc, SC_VTY(tp));

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

638 }
639#else
640 scp->pid = 0;
641 scp->proc = NULL;
642 scp->smode.mode = VT_AUTO;
643#endif
644 scp->kbd_mode = K_XLATE;
645 if (scp == scp->sc->cur_scp)
588 tp->t_termios.c_cc[VERASE] = key.key.map[0];
589 }
590#endif
591 }
592
593 scp = sc_get_stat(tp);
594 if (scp == NULL) {
595 scp = SC_STAT(tp) = alloc_scp(sc, SC_VTY(tp));

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

638 }
639#else
640 scp->pid = 0;
641 scp->proc = NULL;
642 scp->smode.mode = VT_AUTO;
643#endif
644 scp->kbd_mode = K_XLATE;
645 if (scp == scp->sc->cur_scp)
646 kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
646 (void)kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
647 DPRINTF(5, ("done.\n"));
648 }
649}
650
651#if 0 /* XXX mpsafetty: fix screensaver. What about outwakeup? */
652static int
653scread(struct cdev *dev, struct uio *uio, int flag)
654{

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

1217#endif
1218 case KDSKBMODE: /* set keyboard mode */
1219 switch (*(int *)data) {
1220 case K_XLATE: /* switch to XLT ascii mode */
1221 case K_RAW: /* switch to RAW scancode mode */
1222 case K_CODE: /* switch to CODE mode */
1223 scp->kbd_mode = *(int *)data;
1224 if (scp == sc->cur_scp)
647 DPRINTF(5, ("done.\n"));
648 }
649}
650
651#if 0 /* XXX mpsafetty: fix screensaver. What about outwakeup? */
652static int
653scread(struct cdev *dev, struct uio *uio, int flag)
654{

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

1217#endif
1218 case KDSKBMODE: /* set keyboard mode */
1219 switch (*(int *)data) {
1220 case K_XLATE: /* switch to XLT ascii mode */
1221 case K_RAW: /* switch to RAW scancode mode */
1222 case K_CODE: /* switch to CODE mode */
1223 scp->kbd_mode = *(int *)data;
1224 if (scp == sc->cur_scp)
1225 kbdd_ioctl(sc->kbd, KDSKBMODE, data);
1225 (void)kbdd_ioctl(sc->kbd, KDSKBMODE, data);
1226 return 0;
1227 default:
1228 return EINVAL;
1229 }
1230 /* NOT REACHED */
1231
1232 case KDGKBMODE: /* get keyboard mode */
1233 *(int *)data = scp->kbd_mode;

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

1331 /* i == newkbd->kb_index */
1332 if (i >= 0) {
1333 if (sc->kbd != NULL) {
1334 save_kbd_state(sc->cur_scp);
1335 kbd_release(sc->kbd, (void *)&sc->keyboard);
1336 }
1337 sc->kbd = kbd_get_keyboard(i); /* sc->kbd == newkbd */
1338 sc->keyboard = i;
1226 return 0;
1227 default:
1228 return EINVAL;
1229 }
1230 /* NOT REACHED */
1231
1232 case KDGKBMODE: /* get keyboard mode */
1233 *(int *)data = scp->kbd_mode;

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

1331 /* i == newkbd->kb_index */
1332 if (i >= 0) {
1333 if (sc->kbd != NULL) {
1334 save_kbd_state(sc->cur_scp);
1335 kbd_release(sc->kbd, (void *)&sc->keyboard);
1336 }
1337 sc->kbd = kbd_get_keyboard(i); /* sc->kbd == newkbd */
1338 sc->keyboard = i;
1339 kbdd_ioctl(sc->kbd, KDSKBMODE,
1339 (void)kbdd_ioctl(sc->kbd, KDSKBMODE,
1340 (caddr_t)&sc->cur_scp->kbd_mode);
1341 update_kbd_state(sc->cur_scp, sc->cur_scp->status,
1342 LOCK_MASK);
1343 } else {
1344 error = EPERM; /* XXX */
1345 }
1346 }
1347 splx(s);

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

1644 * Make sure the keyboard is accessible even when the kbd device
1645 * driver is disabled.
1646 */
1647 kbdd_enable(scp->sc->kbd);
1648
1649 /* we shall always use the keyboard in the XLATE mode here */
1650 cur_mode = scp->kbd_mode;
1651 scp->kbd_mode = K_XLATE;
1340 (caddr_t)&sc->cur_scp->kbd_mode);
1341 update_kbd_state(sc->cur_scp, sc->cur_scp->status,
1342 LOCK_MASK);
1343 } else {
1344 error = EPERM; /* XXX */
1345 }
1346 }
1347 splx(s);

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

1644 * Make sure the keyboard is accessible even when the kbd device
1645 * driver is disabled.
1646 */
1647 kbdd_enable(scp->sc->kbd);
1648
1649 /* we shall always use the keyboard in the XLATE mode here */
1650 cur_mode = scp->kbd_mode;
1651 scp->kbd_mode = K_XLATE;
1652 kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
1652 (void)kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
1653
1654 kbdd_poll(scp->sc->kbd, TRUE);
1655 c = scgetc(scp->sc, SCGETC_CN | SCGETC_NONBLOCK);
1656 kbdd_poll(scp->sc->kbd, FALSE);
1657
1658 scp->kbd_mode = cur_mode;
1653
1654 kbdd_poll(scp->sc->kbd, TRUE);
1655 c = scgetc(scp->sc, SCGETC_CN | SCGETC_NONBLOCK);
1656 kbdd_poll(scp->sc->kbd, FALSE);
1657
1658 scp->kbd_mode = cur_mode;
1659 kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
1659 (void)kbdd_ioctl(scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
1660 kbdd_disable(scp->sc->kbd);
1661 splx(s);
1662
1663 switch (KEYFLAGS(c)) {
1664 case 0: /* normal char */
1665 return KEYCHAR(c);
1666 case FKEY: /* function key */
1667 p = (*scp->tsw->te_fkeystr)(scp, c);

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

1751
1752#ifndef PC98
1753 if ((sc->kbd == NULL) && (sc->config & SC_AUTODETECT_KBD)) {
1754 /* try to allocate a keyboard automatically */
1755 if (++kbd_interval >= 25) {
1756 sc->keyboard = sc_allocate_keyboard(sc, -1);
1757 if (sc->keyboard >= 0) {
1758 sc->kbd = kbd_get_keyboard(sc->keyboard);
1660 kbdd_disable(scp->sc->kbd);
1661 splx(s);
1662
1663 switch (KEYFLAGS(c)) {
1664 case 0: /* normal char */
1665 return KEYCHAR(c);
1666 case FKEY: /* function key */
1667 p = (*scp->tsw->te_fkeystr)(scp, c);

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

1751
1752#ifndef PC98
1753 if ((sc->kbd == NULL) && (sc->config & SC_AUTODETECT_KBD)) {
1754 /* try to allocate a keyboard automatically */
1755 if (++kbd_interval >= 25) {
1756 sc->keyboard = sc_allocate_keyboard(sc, -1);
1757 if (sc->keyboard >= 0) {
1758 sc->kbd = kbd_get_keyboard(sc->keyboard);
1759 kbdd_ioctl(sc->kbd, KDSKBMODE,
1759 (void)kbdd_ioctl(sc->kbd, KDSKBMODE,
1760 (caddr_t)&sc->cur_scp->kbd_mode);
1761 update_kbd_state(sc->cur_scp, sc->cur_scp->status,
1762 LOCK_MASK);
1763 }
1764 kbd_interval = 0;
1765 }
1766 }
1767#endif /* PC98 */

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

2546#endif
2547 vidd_load_palette(sc->adp, sc->palette);
2548 }
2549#endif
2550 sc_set_border(scp, scp->border);
2551
2552 /* set up the keyboard for the new screen */
2553 if (sc->old_scp->kbd_mode != scp->kbd_mode)
1760 (caddr_t)&sc->cur_scp->kbd_mode);
1761 update_kbd_state(sc->cur_scp, sc->cur_scp->status,
1762 LOCK_MASK);
1763 }
1764 kbd_interval = 0;
1765 }
1766 }
1767#endif /* PC98 */

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

2546#endif
2547 vidd_load_palette(sc->adp, sc->palette);
2548 }
2549#endif
2550 sc_set_border(scp, scp->border);
2551
2552 /* set up the keyboard for the new screen */
2553 if (sc->old_scp->kbd_mode != scp->kbd_mode)
2554 kbdd_ioctl(sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
2554 (void)kbdd_ioctl(sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode);
2555 update_kbd_state(scp, scp->status, LOCK_MASK);
2556
2557 mark_all(scp);
2558}
2559
2560void
2561sc_puts(scr_stat *scp, u_char *buf, int len, int kernel)
2562{

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

3329 /* key pressed */
3330 if (c & SPCLKEY) {
3331 c &= ~SPCLKEY;
3332 switch (KEYCHAR(c)) {
3333 /* LOCKING KEYS */
3334 case NLK: case CLK: case ALK:
3335 break;
3336 case SLK:
2555 update_kbd_state(scp, scp->status, LOCK_MASK);
2556
2557 mark_all(scp);
2558}
2559
2560void
2561sc_puts(scr_stat *scp, u_char *buf, int len, int kernel)
2562{

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

3329 /* key pressed */
3330 if (c & SPCLKEY) {
3331 c &= ~SPCLKEY;
3332 switch (KEYCHAR(c)) {
3333 /* LOCKING KEYS */
3334 case NLK: case CLK: case ALK:
3335 break;
3336 case SLK:
3337 kbdd_ioctl(sc->kbd, KDGKBSTATE, (caddr_t)&f);
3337 (void)kbdd_ioctl(sc->kbd, KDGKBSTATE, (caddr_t)&f);
3338 if (f & SLKED) {
3339 scp->status |= SLKED;
3340 } else {
3341 if (scp->status & SLKED) {
3342 scp->status &= ~SLKED;
3343#ifndef SC_NO_HISTORY
3344 if (scp->status & BUFFER_SAVED) {
3345 if (!sc_hist_restore(scp))

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

3759
3760 if (idx == idx0 || KBD_IS_BUSY(k))
3761 continue;
3762
3763 bzero(&ki, sizeof(ki));
3764 strcpy(ki.kb_name, k->kb_name);
3765 ki.kb_unit = k->kb_unit;
3766
3338 if (f & SLKED) {
3339 scp->status |= SLKED;
3340 } else {
3341 if (scp->status & SLKED) {
3342 scp->status &= ~SLKED;
3343#ifndef SC_NO_HISTORY
3344 if (scp->status & BUFFER_SAVED) {
3345 if (!sc_hist_restore(scp))

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

3759
3760 if (idx == idx0 || KBD_IS_BUSY(k))
3761 continue;
3762
3763 bzero(&ki, sizeof(ki));
3764 strcpy(ki.kb_name, k->kb_name);
3765 ki.kb_unit = k->kb_unit;
3766
3767 kbdd_ioctl(k0, KBADDKBD, (caddr_t) &ki);
3767 (void)kbdd_ioctl(k0, KBADDKBD, (caddr_t) &ki);
3768 }
3769 } else
3770 idx0 = kbd_allocate("*", unit, (void *)&sc->keyboard, sckbdevent, sc);
3771
3772 return (idx0);
3773}
3768 }
3769 } else
3770 idx0 = kbd_allocate("*", unit, (void *)&sc->keyboard, sckbdevent, sc);
3771
3772 return (idx0);
3773}