On Dec 7, 2012, at 12:33 PM, Garrett Cooper wrote:

> On Fri, Dec 7, 2012 at 12:07 PM, Devin Teske <devin.te...@fisglobal.com> 
> wrote:
> 
> ...
> 
>> I'll look into boot_multicons.
>> 
>> However, w/respect to "boot -D", I believe that would be after the menu, so 
>> is past the point at which we need the functionality (in drawing frames from 
>> frames.4th).
>> 
>> Also, you replied to an earlier e-mail in the thread, do note that there's 
>> an updated patch that centralizes the logic to "boot_serial?" function which 
>> returns boolean based on multiple conditions (currently takes $console and 
>> $boot_serial into consideration -- should be trivial to add a check for 
>> boot_multicons).
> 
> You're correct; boot -D is for after boot and this only affects loader(8):
> 
>                     -D    boot with the dual console configuration.  In the
>                           single configuration, the console will be either
>                           the internal display or the serial port, depending
>                           on the state of the -h option below.  In the dual
>                           console configuration, both the internal display
>                           and the serial port will become the console at the
>                           same time, regardless of the state of the -h
>                           option.
> 
> Rereading loader(8)'s entry on multicons, it might be a non-issue as
> well, given that it's only saying "kernel":
> 
>     boot_multicons
>               Enables multiple console support in the kernel early on boot.
>               In a running system, console configuration can be manipulated
>               by the conscontrol(8) utility.
> 
> A grep of sys/boot suggests it's an alias for -D:
> 
> $ grep -r multicons .
> ./userboot/userboot/bootinfo.c:    {"boot_multicons",   RB_MULTIPLE},
> ./sparc64/loader/metadata.c:    {"boot_multicons",      RB_MULTIPLE},
> ./forth/loader.conf:#boot_multicons=""  # -D: Use multiple consoles
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> ./powerpc/ofw/metadata.c:    {"boot_multicons", RB_MULTIPLE},
> ./powerpc/ps3/metadata.c:    {"boot_multicons", RB_MULTIPLE},
> ./i386/libi386/comconsole.c:        getenv("boot_multicons") != NULL) {
> ./i386/libi386/bootinfo.c:    {"boot_multicons",        RB_MULTIPLE},
> ./i386/efi/bootinfo.c:  { "boot_multicons",     RB_MULTIPLE},
> ./pc98/libpc98/comconsole.c:        getenv("boot_multicons") != NULL) {
> ./common/loader.8:.It Va boot_multicons
> ./common/help.common:# Tset Sboot_multicons DUse multiple consoles
> ./common/help.common:   set boot_multicons
> ./ia64/common/bootinfo.c:       { "boot_multicons",     RB_MULTIPLE},
> ./uboot/common/metadata.c:      {"boot_multicons",      RB_MULTIPLE},
> 
> However, sys/boot/i386/libi386/comconsole.c is doing some matching
> based on the environment variable, so I'd need to look into the call
> flow further to better understand what's being achieved.
> 

Can you review the following patch for inclusion to HEAD?

I do believe this new patch gets us where we need to be…

_____________
The information contained in this message is proprietary and/or confidential. 
If you are not the intended recipient, please: (i) delete the message and all 
copies; (ii) do not disclose, distribute or use the message in any manner; and 
(iii) notify the sender immediately. In addition, please be aware that any 
message addressed to our domain is subject to archiving and review by persons 
other than the intended recipient. Thank you.
Index: support.4th
===================================================================
--- support.4th (revision 242835)
+++ support.4th (working copy)
@@ -201,6 +201,46 @@ create last_module_option sizeof module.next allot
 
 : getenv?  getenv -1 = if false else drop true then ;
 
+\ determine if a word appears in a string, case-insensitive
+: contains? ( addr1 len1 addr2 len2 -- 0 | -1 )
+       2 pick 0= if 2drop 2drop true exit then
+       dup 0= if 2drop 2drop false exit then
+       begin
+               begin
+                       swap dup c@ dup 32 = over 9 = or
+                       over 10 = or over 13 = or swap drop
+               while 1+ swap 1- repeat
+               swap 2 pick 1- over <
+       while
+               2over 2over drop over compare-insensitive 0= if
+                       2 pick over = if 2drop 2drop true exit then
+                       2 pick tuck - -rot + swap over c@ dup 32 =
+                       over 9 = or over 10 = or over 13 = or
+                       swap drop if 2drop 2drop true exit then
+               then begin
+                       swap dup c@
+                       dup 32 = over 9 = or over 10 = or over 13 = or
+                       swap drop if false else true then 2 pick 0> and
+               while 1+ swap 1- repeat
+               swap
+       repeat
+       2drop 2drop false
+;
+
+: boot_serial? ( -- 0 | -1 )
+       s" console" getenv dup -1 <> if
+               s" comconsole" 2swap contains?
+       else drop false then
+       s" boot_serial" getenv dup -1 <> if
+               swap drop 0>
+       else drop false then
+       or \ console contains comconsole ( or ) boot_serial
+       s" boot_multicons" getenv dup -1 <> if
+               swap drop 0>
+       else drop false then
+       or \ previous boolean ( or ) boot_multicons
+;
+
 \ Private definitions
 
 vocabulary support-functions
Index: frames.4th
===================================================================
--- frames.4th  (revision 242835)
+++ frames.4th  (working copy)
@@ -12,6 +12,11 @@ variable rt_el
 variable rb_el
 variable fill
 
+\ ASCII frames (used when serial console is detected)
+ 45 constant ascii_dash
+124 constant ascii_pipe
+ 43 constant ascii_plus
+
 s" arch-pc98" environment? [if]
        \ Single frames
        149 constant sh_el
@@ -63,7 +68,17 @@ s" arch-pc98" environment? [if]
        loop
 ;
 
+: f_ascii ( -- )       ( -- )  \ set frames to ascii
+       ascii_dash h_el !
+       ascii_pipe v_el !
+       ascii_plus lt_el !
+       ascii_plus lb_el !
+       ascii_plus rt_el !
+       ascii_plus rb_el !
+;
+
 : f_single     ( -- )  \ set frames to single
+       boot_serial? if f_ascii exit then
        sh_el h_el !
        sv_el v_el !
        slt_el lt_el !
@@ -73,6 +88,7 @@ s" arch-pc98" environment? [if]
 ;
 
 : f_double     ( -- )  \ set frames to double
+       boot_serial? if f_ascii exit then
        dh_el h_el !
        dv_el v_el !
        dlt_el lt_el !

NOTE: I'm taking into consideration within the new "boot_serial?" function that 
/boot/defaults/loader.conf says this about boot_serial and boot_multicons…

# The following boot_ variables are enabled by setting them to any value.
# Their presence in the kernel environment (see kenv(1)) has the same
# effect as setting the given boot flag (see boot(8)).

-- 
Devin
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to