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