diff options
| author | Bruce Evans <bde@FreeBSD.org> | 2017-03-04 06:19:12 +0000 |
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 2017-03-04 06:19:12 +0000 |
| commit | 0a743c09574de0e3f98556f95a5c18e3fcdee05a (patch) | |
| tree | ac1f73e74765b93800dfa6d32150442b9e19af00 /sys | |
| parent | e245deadcb36a1173dfac9f219812894cd11ef6c (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/dev/syscons/scterm-teken.c | 2 | ||||
| -rw-r--r-- | sys/dev/syscons/syscons.c | 21 | ||||
| -rw-r--r-- | sys/dev/syscons/syscons.h | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/sys/dev/syscons/scterm-teken.c b/sys/dev/syscons/scterm-teken.c index 43f16faff9829..7d4f1c81066b4 100644 --- a/sys/dev/syscons/scterm-teken.c +++ b/sys/dev/syscons/scterm-teken.c @@ -176,7 +176,7 @@ scteken_puts(scr_stat *scp, u_char *buf, int len, int kernel) if (kernel) { /* Use special colors for kernel messages. */ backup = *teken_get_curattr(&ts->ts_teken); - scteken_revattr(SC_KERNEL_CONS_ATTR, &kattr); + scteken_revattr(sc_kattr(), &kattr); teken_set_curattr(&ts->ts_teken, &kattr); teken_input(&ts->ts_teken, buf, len); teken_set_curattr(&ts->ts_teken, &backup); diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 5bbfebc52f20e..15873627f07b1 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include <sys/lock.h> #include <sys/malloc.h> #include <sys/mutex.h> +#include <sys/pcpu.h> #include <sys/priv.h> #include <sys/proc.h> #include <sys/random.h> @@ -100,6 +101,8 @@ static default_attr user_default = { SC_NORM_REV_ATTR, }; +static u_char sc_kattrtab[MAXCPU]; + static int sc_console_unit = -1; static int sc_saver_keyb_only = 1; static scr_stat *sc_console; @@ -141,6 +144,8 @@ static int sc_no_suspend_vtswitch = 0; static int sc_susp_scr; static SYSCTL_NODE(_hw, OID_AUTO, syscons, CTLFLAG_RD, 0, "syscons"); +SYSCTL_OPAQUE(_hw_syscons, OID_AUTO, kattr, CTLFLAG_RW, + &sc_kattrtab, sizeof(sc_kattrtab), "CU", "kernel console attributes"); static SYSCTL_NODE(_hw_syscons, OID_AUTO, saver, CTLFLAG_RD, 0, "saver"); SYSCTL_INT(_hw_syscons_saver, OID_AUTO, keybonly, CTLFLAG_RW, &sc_saver_keyb_only, 0, "screen saver interrupted by input only"); @@ -2994,8 +2999,16 @@ scinit(int unit, int flags) int i; /* one time initialization */ - if (init_done == COLD) + if (init_done == COLD) { sc_get_bios_values(&bios_value); + for (i = 0; i < nitems(sc_kattrtab); i++) { +#if SC_KERNEL_CONS_ATTR == FG_WHITE + sc_kattrtab[i] = 8 + (i + FG_WHITE) % 8U; +#else + sc_kattrtab[i] = SC_KERNEL_CONS_ATTR; +#endif + } + } init_done = WARM; /* @@ -4008,6 +4021,12 @@ sc_bell(scr_stat *scp, int pitch, int duration) } } +int +sc_kattr(void) +{ + return (sc_kattrtab[PCPU_GET(cpuid) % nitems(sc_kattrtab)]); +} + static void blink_screen(void *arg) { diff --git a/sys/dev/syscons/syscons.h b/sys/dev/syscons/syscons.h index 24d386afc16bc..443792717ec03 100644 --- a/sys/dev/syscons/syscons.h +++ b/sys/dev/syscons/syscons.h @@ -581,6 +581,7 @@ void sc_paste(scr_stat *scp, const u_char *p, int count); void sc_respond(scr_stat *scp, const u_char *p, int count, int wakeup); void sc_bell(scr_stat *scp, int pitch, int duration); +int sc_kattr(void); /* schistory.c */ #ifndef SC_NO_HISTORY |
