diff --git a/share/man/man4/syscons.4 b/share/man/man4/syscons.4 index 6b9f6873626d..49b4c84aabf1 100644 --- a/share/man/man4/syscons.4 +++ b/share/man/man4/syscons.4 @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 21, 2016 +.Dd June 2, 2018 .Dt SYSCONS 4 .Os .Sh NAME @@ -53,6 +53,7 @@ .Cd "options SC_NORM_ATTR=_attribute_" .Cd "options SC_NORM_REV_ATTR=_attribute_" .Cd "options SC_KERNEL_CONS_ATTR=_attribute_" +.Cd "options SC_KERNEL_CONS_ATTRS=_attributes_" .Cd "options SC_KERNEL_CONS_REV_ATTR=_attribute_" .Cd "options SC_DFLT_FONT" .Cd "makeoptions SC_DFLT_FONT=_font_name_" @@ -341,6 +342,7 @@ above. .It Dv SC_NORM_ATTR=_attribute_ .It Dv SC_NORM_REV_ATTR=_attribute_ .It Dv SC_KERNEL_CONS_ATTR=_attribute_ +.It Dv SC_KERNEL_CONS_ATTRS=_attributes_ .It Dv SC_KERNEL_CONS_REV_ATTR=_attribute_ These options will set the default colors. Available colors are defined in @@ -348,6 +350,11 @@ Available colors are defined in See .Sx EXAMPLES below. +.Dv SC_KERNEL_CONS_ATTRS +is a character string giving a sequence of attributes in binary format. +The sequence will be repeated up to the number of CPUs. +Beware that the string must not be null, +since the kernel divides by its length. .It Dv SC_DFLT_FONT This option will specify the default font. Available fonts are: iso, iso2, koi8-r, koi8-u, cp437, cp850, cp865, @@ -539,6 +546,23 @@ The reversed message will be black on red background. .Dl "options SC_KERNEL_CONS_ATTR=(FG_LIGHTRED|BG_BLACK)" .Dl "options SC_KERNEL_CONS_REV_ATTR=(FG_BLACK|BG_RED)" .Pp +Provided +.Dv SC_KERNEL_CONS_ATTR +is not set, or is set to its default of bright white on black, +the following line will set 4 red-ish colors +for printing kernel messages in colors depending on the CPU. +.Pp +.Dl options SC_KERNEL_CONS_ATTRS=\e"\ex0c\ex04\ex40\ex0e\e" +.Pp +The default scheme is probably better for up to 8 CPUs. +Use a long string to get unique colors for more than 8 CPUs. +.Pp +To turn off all per-CPU coloring of kernel messages, +set SC_KERNEL_CONS_ATTR to a non-default value, +or use the default in a pattern of length 1. +.Pp +.Dl options SC_KERNEL_CONS_ATTRS=\e"\ex0f\e" +.Pp The following example adds the font files .Pa cp850-8x16.fnt , .Pa cp850-8x14.font diff --git a/sys/conf/NOTES b/sys/conf/NOTES index d2e42b959756..06b05437f4bf 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -1474,6 +1474,7 @@ options SC_PIXEL_MODE # add support for the raster text mode options SC_NORM_ATTR=(FG_GREEN|BG_BLACK) options SC_NORM_REV_ATTR=(FG_YELLOW|BG_GREEN) options SC_KERNEL_CONS_ATTR=(FG_RED|BG_BLACK) +options SC_KERNEL_CONS_ATTRS=\"\x0c\x0d\x0e\x0f\x02\x09\x0a\x0b\" options SC_KERNEL_CONS_REV_ATTR=(FG_BLACK|BG_RED) # The following options will let you change the default behavior of diff --git a/sys/conf/options b/sys/conf/options index 02c77224d367..dcfdf495e6cc 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -774,6 +774,7 @@ SC_DISABLE_KDBKEY opt_syscons.h SC_DISABLE_REBOOT opt_syscons.h SC_HISTORY_SIZE opt_syscons.h SC_KERNEL_CONS_ATTR opt_syscons.h +SC_KERNEL_CONS_ATTRS opt_syscons.h SC_KERNEL_CONS_REV_ATTR opt_syscons.h SC_MOUSE_CHAR opt_syscons.h SC_NO_CUTPASTE opt_syscons.h diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index 92ed069b63c7..dd2ecc4627ac 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -3153,6 +3153,17 @@ scinit(int unit, int flags) static u_char font_16[256*16]; #endif +#ifdef SC_KERNEL_CONS_ATTRS + static const u_char dflt_kattrtab[] = SC_KERNEL_CONS_ATTRS; +#elif SC_KERNEL_CONS_ATTR == FG_WHITE + static const u_char dflt_kattrtab[] = { + FG_WHITE, FG_YELLOW, FG_LIGHTMAGENTA, FG_LIGHTRED, + FG_LIGHTCYAN, FG_LIGHTGREEN, FG_LIGHTBLUE, FG_GREEN, + 0, + }; +#else + static const u_char dflt_kattrtab[] = { FG_WHITE, 0, }; +#endif sc_softc_t *sc; scr_stat *scp; video_adapter_t *adp; @@ -3163,13 +3174,8 @@ scinit(int unit, int flags) /* one time initialization */ 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 - } + for (i = 0; i < nitems(sc_kattrtab); i++) + sc_kattrtab[i] = dflt_kattrtab[i % (nitems(dflt_kattrtab) - 1)]; } init_done = WARM;