From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from rn-mailsvcp-ppex-lapp15.apple.com (rn-mailsvcp-ppex-lapp15.apple.com [17.179.253.34]) by mx.groups.io with SMTP id smtpd.web12.120.1624467450463857029 for ; Wed, 23 Jun 2021 09:57:30 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@apple.com header.s=20180706 header.b=jqdpZEQY; spf=pass (domain: apple.com, ip: 17.179.253.34, mailfrom: afish@apple.com) Received: from pps.filterd (rn-mailsvcp-ppex-lapp15.rno.apple.com [127.0.0.1]) by rn-mailsvcp-ppex-lapp15.rno.apple.com (8.16.1.2/8.16.1.2) with SMTP id 15NGqQNf031768; Wed, 23 Jun 2021 09:57:30 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apple.com; h=from : message-id : content-type : mime-version : subject : date : in-reply-to : cc : to : references; s=20180706; bh=WWPaOvP4dcpDsZPGirW7aLYvEFUMRf2WbVXtf07Gkhk=; b=jqdpZEQYWZa72IX53JB9iW3mUOKGyQtIGOJbHfC5V3VCnLf15BN9csL3MVKpHAp5i9hw StQ5rzxocPCRR1akDYWzWe+eayL4dWwxowvQbmcSCh3NYOADTWzri8SMu4Z6Mr80ALpa w8eRSRsKpt/or+aEfHJjl5nF/dYYDHTAKSPHiH487aXWQhAk2m33BR3OJuSZ3v/SDJXb uG5Ql2gaZUBAxbTZiPaYpTjHAjORfy0eWRRkOEZn+L4n4v7Ns4C636rfo71M2Tp0NCw4 Pukjh0nAxeWHmnllYIjuDBXLW8I+J9T42p0DR64JHBWE+4T0lLrm3ojUicXUDCRkiovX 4Q== Received: from rn-mailsvcp-mta-lapp03.rno.apple.com (rn-mailsvcp-mta-lapp03.rno.apple.com [10.225.203.151]) by rn-mailsvcp-ppex-lapp15.rno.apple.com with ESMTP id 399e5cgt0v-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Wed, 23 Jun 2021 09:57:29 -0700 Received: from rn-mailsvcp-mmp-lapp02.rno.apple.com (rn-mailsvcp-mmp-lapp02.rno.apple.com [17.179.253.15]) by rn-mailsvcp-mta-lapp03.rno.apple.com (Oracle Communications Messaging Server 8.1.0.9.20210415 64bit (built Apr 15 2021)) with ESMTPS id <0QV500QLRZ3TIMJ0@rn-mailsvcp-mta-lapp03.rno.apple.com>; Wed, 23 Jun 2021 09:57:29 -0700 (PDT) Received: from process_milters-daemon.rn-mailsvcp-mmp-lapp02.rno.apple.com by rn-mailsvcp-mmp-lapp02.rno.apple.com (Oracle Communications Messaging Server 8.1.0.9.20210415 64bit (built Apr 15 2021)) id <0QV500B00YP3HS00@rn-mailsvcp-mmp-lapp02.rno.apple.com>; Wed, 23 Jun 2021 09:57:29 -0700 (PDT) X-Va-A: X-Va-T-CD: fe60454d8cca2d204232efa0cd93203e X-Va-E-CD: a3857b96301d98915c3968a15e78b24b X-Va-R-CD: fc498e96c1b8401f5b73c9928f64ef5b X-Va-CD: 0 X-Va-ID: 4e031a4d-f2c7-495c-a7a4-e5f1ab5474a3 X-V-A: X-V-T-CD: fe60454d8cca2d204232efa0cd93203e X-V-E-CD: a3857b96301d98915c3968a15e78b24b X-V-R-CD: fc498e96c1b8401f5b73c9928f64ef5b X-V-CD: 0 X-V-ID: 8d8c1406-540f-422f-98d3-d3b16ec05261 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-06-23_12:2021-06-23,2021-06-23 signatures=0 Received: from [17.11.4.125] (unknown [17.11.4.125]) by rn-mailsvcp-mmp-lapp02.rno.apple.com (Oracle Communications Messaging Server 8.1.0.9.20210415 64bit (built Apr 15 2021)) with ESMTPSA id <0QV50100AZ3RQX00@rn-mailsvcp-mmp-lapp02.rno.apple.com>; Wed, 23 Jun 2021 09:57:29 -0700 (PDT) From: "Andrew Fish" Message-id: <56E7A804-5FC0-4CB1-B59D-4A7612180879@apple.com> MIME-version: 1.0 (Mac OS X Mail 14.0 \(3654.20.0.2.1\)) Subject: Re: [edk2-devel] SIMPLE_TEXT_OUTPUT_PROTOCOL and Video Resolution Date: Wed, 23 Jun 2021 09:57:27 -0700 In-reply-to: <77881bee-4efb-df6a-8cef-9a24eee343d3@redhat.com> Cc: df7729@gmail.com To: edk2-devel-groups-io , Laszlo Ersek References: <1688FC67A39CB5DB.19105@groups.io> <77881bee-4efb-df6a-8cef-9a24eee343d3@redhat.com> X-Mailer: Apple Mail (2.3654.20.0.2.1) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-06-23_12:2021-06-23,2021-06-23 signatures=0 Content-type: multipart/alternative; boundary="Apple-Mail=_ACC33DA1-BBD5-4572-92A2-BCACA6660B6A" --Apple-Mail=_ACC33DA1-BBD5-4572-92A2-BCACA6660B6A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jun 23, 2021, at 3:24 AM, Laszlo Ersek wrote: >=20 > On 06/17/21 01:22, Andrew Fish via groups.io wrote: >>=20 >>=20 >>> On Jun 16, 2021, at 2:45 PM, David F. wrote: >>>=20 >>> Also, I found if there are 2 GOP handles and you change the mode of >>> one, the other one doesn't reflect the change (but still doesn't solve >>> anything with the original question), are you supposed to set the mode >>> on every handle to keep that part in sync? >>>=20 >>=20 >> A common implementation is to have the Conspliter [1] driver that produ= ces virtual handles that aggregate how many actual devices you have and man= ages policy.=20 >>=20 >> You should grab the protocols on the gST->ConsoleOutHandle as these are= the Spec defined active console devices.=20 >>=20 >>=20 >> In terms on Simple Text Output Protocol on Graphics this is the default= driver in edk2 [2]. These are the config knobs you can set from your DSC f= ile to control defaults.=20 >>=20 >> [Pcd] >> gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution ## SOMETIM= ES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution ## SOMETIM= ES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow ## SOMETIM= ES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn ## SOMETIM= ES_CONSUMES >> Note: If you have serial active that may mess with the Conspliter and f= orce it to pick a lower resolution since it has to find the best match betw= een the serial and graphics Simple Text In. So try the Graphics without the= serial terminal connect to see if it does different stuff.=20 >=20 > Regarding the serial terminal aspect, we discussed the following patch (= maybe: workaround?) for that, many years ago, off-list: >=20 Laszlo, This reminds me I have some hacks in our terminal driver too.=20 1) Add a mode that matches the Mode 2 of the GraphicsConsole driver.=20 a) This kind of assumes BDS connects the graphics 1st.=20 b) We could generalized this to match the higher modes of the ConSpliter= ?=20 2) I added a PCD to make the Mode 2 match the current size terminal.=20 a) The EFI Terminal driver sends { ESC, '[', '1', '8', 't', 0 } to the t= erminal emulator app and gets the current size as a response.=20 b) I mostly use this for OVMF with no Graphics console.=20 3) I think 1) and 2) may require a PCD to the ConSpliter to pick the max m= ode vs. a known mode. It might be possible to hijack the current PCD values= for this.=20 4) At one point I added some code with 1) that would auto resize the termi= nal window to match the graphics screen resolution. I think this was one of= the most unpopular things I=E2=80=99ve ever done at work. I guess I=E2=80= =99m a just open a bunch of windows and switch between them person, but so= me people optimize the windows layout and get really angry if you resize wi= ndows on them.=20 Thanks, Andrew Fish > diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/Mde= ModulePkg/Universal/Console/TerminalDxe/Terminal.c > index a98b690c8b95..ded5513c74a7 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c > @@ -115,9 +115,44 @@ TERMINAL_DEV mTerminalDevTemplate =3D { > }; >=20 > TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeData[] =3D { > - {80, 25}, > - {80, 50}, > - {100, 31}, > + { 80, 25 }, // from graphics resolution 640 x 480 > + { 80, 50 }, // from graphics resolution 640 x 960 > + { 100, 25 }, // from graphics resolution 800 x 480 > + { 100, 31 }, // from graphics resolution 800 x 600 > + { 104, 32 }, // from graphics resolution 832 x 624 > + { 120, 33 }, // from graphics resolution 960 x 640 > + { 128, 31 }, // from graphics resolution 1024 x 600 > + { 128, 40 }, // from graphics resolution 1024 x 768 > + { 144, 45 }, // from graphics resolution 1152 x 864 > + { 144, 45 }, // from graphics resolution 1152 x 870 > + { 160, 37 }, // from graphics resolution 1280 x 720 > + { 160, 40 }, // from graphics resolution 1280 x 760 > + { 160, 40 }, // from graphics resolution 1280 x 768 > + { 160, 42 }, // from graphics resolution 1280 x 800 > + { 160, 50 }, // from graphics resolution 1280 x 960 > + { 160, 53 }, // from graphics resolution 1280 x 1024 > + { 170, 40 }, // from graphics resolution 1360 x 768 > + { 170, 40 }, // from graphics resolution 1366 x 768 > + { 175, 55 }, // from graphics resolution 1400 x 1050 > + { 180, 47 }, // from graphics resolution 1440 x 900 > + { 200, 47 }, // from graphics resolution 1600 x 900 > + { 200, 63 }, // from graphics resolution 1600 x 1200 > + { 210, 55 }, // from graphics resolution 1680 x 1050 > + { 240, 56 }, // from graphics resolution 1920 x 1080 > + { 240, 63 }, // from graphics resolution 1920 x 1200 > + { 240, 75 }, // from graphics resolution 1920 x 1440 > + { 250, 105 }, // from graphics resolution 2000 x 2000 > + { 256, 80 }, // from graphics resolution 2048 x 1536 > + { 256, 107 }, // from graphics resolution 2048 x 2048 > + { 320, 75 }, // from graphics resolution 2560 x 1440 > + { 320, 84 }, // from graphics resolution 2560 x 1600 > + { 320, 107 }, // from graphics resolution 2560 x 2048 > + { 350, 110 }, // from graphics resolution 2800 x 2100 > + { 400, 126 }, // from graphics resolution 3200 x 2400 > + { 480, 113 }, // from graphics resolution 3840 x 2160 > + { 512, 113 }, // from graphics resolution 4096 x 2160 > + { 960, 227 }, // from graphics resolution 7680 x 4320 > + { 1024, 227 }, // from graphics resolution 8192 x 4320 > // > // New modes can be added here. > // >=20 > but the discussion didn't go anywhere over several months, so we've been= carrying this patch downstream-only ever since. >=20 > Thanks > Laszlo >=20 >>=20 >>=20 >> [1] https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universa= l/Console/ConSplitterDxe > >>=20 >> [2] https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universa= l/Console/GraphicsConsoleDxe > >>=20 >>=20 >> Thanks, >>=20 >> Andrew Fish >>=20 >>> On Tue, Jun 15, 2021 at 11:33 PM David F. via groups.io >>> > w= rote: >>>>=20 >>>> Hello, >>>>=20 >>>> I've found that most implementation of UEFI don't automatically chang= e >>>> the resolution when setting the mode with STOP (Simple Text Output >>>> Protocol) . You can use GOP to change it after the mode but that >>>> causes other problems. For example, using surface pro 7 in this case= , >>>> with 4K screen. The default text mode is 342x96 which puts it in >>>> 2736x1824 mode which you'd expect and the text is tiny. But now you >>>> set the mode to 0 which is 80x25 and it actually sets the mode to >>>> 2736x1824 if not already in that resolution and uses a 80x25 area in >>>> the center of the screen, still tiny text you can hardly read. If yo= u >>>> then say you want GOP in 640x480 mode (which is available as GOP mode >>>> 1 on this system, it will make the font larger but you can't see >>>> anything because it's still offset to the middle of the 2736x1824 are= a >>>> and you're only seeing the 640x480 upper left of that area on the >>>> screen. Likewise if you have it in 342x96 so it's fully in the uppe= r >>>> left corner of the screen and change the mode to say 800x600 >>>> (available as GOP mode 2 on this system) it will make the text >>>> readable but the text can go off the screen in both directions becaus= e >>>> it's still 342x96 when the 100x31 STOP mode would be the correct one >>>> (which happens to be mode 2 on this system). >>>>=20 >>>> Shouldn't setting the STOP mode handle adjusting the resolution since >>>> that's the main reason you want to change the mode so the size shown >>>> on the screen changes to something you can read. >>>>=20 >>>> Any tricks? I've tried a bunch of things, resetting the controller, >>>> using the Reset() protocol function, and other things but nothing >>>> works. As soon as you use STOP to set the mode, it is back to high >>>> resolution and using an area centered in the screen and changing the >>>> resolution after that leaves it in the area centered in the high res >>>> screen and not in the upper left area. >>>>=20 >>>> Thanks. >>>>=20 >>>=20 >>>=20 >>>=20 >>>=20 >>>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >=20 >=20 >=20 >=20 --Apple-Mail=_ACC33DA1-BBD5-4572-92A2-BCACA6660B6A Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Jun 23, 2= 021, at 3:24 AM, Laszlo Ersek <lersek@redhat.com> wrote:

On 06/1= 7/21 01:22, Andrew Fish via groups.io = wrote:


O= n Jun 16, 2021, at 2:45 PM, David F. <df7729@gmail.com> wrote:

A= lso, I found if there are 2 GOP handles and you change the mode of
one, the other one doesn't reflect the change (but still doesn't sol= ve
anything with the original question), are you supposed to = set the mode
on every handle to keep that part in sync?


A common implementation= is to have the Conspliter [1] driver that produces virtual handles that ag= gregate how many actual devices you have and manages policy. 

You shoul= d grab the protocols on the gST->ConsoleOutHandle as these are the Spec = defined active console devices. =


In terms on Simple Text= Output Protocol on Graphics this is the default driver in edk2 [2]. These = are the config knobs you can set from your DSC file to control defaults. 

[Pcd]
 gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizon= talResolution ## SOMETIMES_CONSUMES
 gEfiMdeModulePkgTok= enSpaceGuid.PcdVideoVerticalResolution   ## SOMETIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow   &= nbsp;           &nbs= p; ## SOMETIMES_CONSUMES
 gEfiMdeModulePkgTokenSpac= eGuid.PcdConOutColumn          = ;    ## SOMETIMES_CONSUMES
Note: If you h= ave serial active that may mess with the Conspliter and force it to pick a = lower resolution since it has to find the best match between the serial and= graphics Simple Text In. So try the Graphics without the serial terminal c= onnect to see if it does different stuff. 

Regarding the serial terminal aspect, we discussed the foll= owing patch (maybe: workaround?) for that, many years ago, off-list:=


Laszlo,

This reminds me I have some hacks in our terminal dri= ver too. 
1) Add a mode that matches the Mode 2 of the Graph= icsConsole driver. 
  a) This kind of assumes BDS conne= cts the graphics 1st. 
  b) We could generalized this t= o match the higher modes of the ConSpliter? 
2) I added a PC= D to make the Mode 2 match the current size terminal. 
 = ; a) The EFI Terminal driver sends { ESC, '[', '1', '8', 't', 0 } to the te= rminal emulator app and gets the current size as a response. 
  b) I mostly use this for OVMF with no Graphics console. 
3) I think 1) and 2) may require a PCD to the ConSpliter to pick the = max mode vs. a known mode. It might be possible to hijack the current PCD v= alues for this. 
4) At one point I added some code with 1) t= hat would auto resize the terminal window to match the graphics screen reso= lution. I think this was one of the most unpopular things I=E2=80=99ve ever= done at work. I guess I=E2=80=99m a just open a bunch of windows and switc= h between them person, but some people optimize the windows layout and get = really angry if you resize windows on them. 

=
Thanks,

Andrew Fish
dif= f --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModule= Pkg/Universal/Console/TerminalDxe/Terminal.c
index a98b690c8b95..ded5513c74a7 100644
--- a/MdeModulePkg/Universal/Console= /TerminalDxe/Terminal.c
+++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
@@ -115,9 +115,44 @@ TERMINAL_DEV &nb= sp;mTerminalDevTemplate =3D {
= };

TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeDa= ta[] =3D {
-  {80,=  25},
-  {80= ,  50},
-  {1= 00, 31},
+  { &nbs= p; 80,  25 }, // from graphics resolution  640 x  480
+  {   80= ,  50 }, // from graphics resolution  640 x  960
+  {  100,  25 }, /= / from graphics resolution  800 x  480
+  {  100,  31 }, // from graphics= resolution  800 x  600
+  {  104,  32 }, // from graphics resolution =  832 x  624
+=  {  120,  33 }, // from graphics resolution  960 x &nb= sp;640
+  {  = 128,  31 }, // from graphics resolution 1024 x  600
+  {  128,  40 }, // = from graphics resolution 1024 x  768
+  {  144,  45 }, // from graphics resolu= tion 1152 x  864
+=  {  144,  45 }, // from graphics resolution 1152 x  87= 0
+  {  160, =  37 }, // from graphics resolution 1280 x  720
+  {  160,  40 }, // from = graphics resolution 1280 x  760
+  {  160,  40 }, // from graphics resolution = 1280 x  768
+ &= nbsp;{  160,  42 }, // from graphics resolution 1280 x  800<= /span>
+  {  160, &n= bsp;50 }, // from graphics resolution 1280 x  960
+  {  160,  53 }, // from gr= aphics resolution 1280 x 1024
= +  {  170,  40 }, // from graphics resolution 1360 x =  768
+  { &nb= sp;170,  40 }, // from graphics resolution 1366 x  768
+  {  175,  55 }, = // from graphics resolution 1400 x 1050
+  {  180,  47 }, // from graphics resoluti= on 1440 x  900
+ &= nbsp;{  200,  47 }, // from graphics resolution 1600 x  900<= /span>
+  {  200, &n= bsp;63 }, // from graphics resolution 1600 x 1200
+  {  210,  55 }, // from graphic= s resolution 1680 x 1050
+  {  240,  56 }, // from graphics resolution 1920 x 1080<= /span>
+  {  240, &n= bsp;63 }, // from graphics resolution 1920 x 1200
+  {  240,  75 }, // from graphic= s resolution 1920 x 1440
+  {  250, 105 }, // from graphics resolution 2000 x 2000
+  {  256,  8= 0 }, // from graphics resolution 2048 x 1536
+  {  256, 107 }, // from graphics resoluti= on 2048 x 2048
+  = {  320,  75 }, // from graphics resolution 2560 x 1440
+  {  320,  84 }, = // from graphics resolution 2560 x 1600
+  {  320, 107 }, // from graphics resolution 25= 60 x 2048
+  { &nb= sp;350, 110 }, // from graphics resolution 2800 x 2100
+  {  400, 126 }, // from graphic= s resolution 3200 x 2400
+  {  480, 113 }, // from graphics resolution 3840 x 2160
+  {  512, 113 }, = // from graphics resolution 4096 x 2160
+  {  960, 227 }, // from graphics resolution 76= 80 x 4320
+  { 102= 4, 227 }, // from graphics resolution 8192 x 4320
  //
  // New modes can be added here.
  //

but= the discussion didn't go anywhere over several months, so we've been carry= ing this patch downstream-only ever since.

ThanksLaszlo



[1] https://github.com/= tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe <https://github.com/tianocore/edk2/tree/master/MdeModul= ePkg/Universal/Console/ConSplitterDxe>

= [2] https://github.com/tianocore/edk2/tree/master/MdeMod= ulePkg/Universal/Console/GraphicsConsoleDxe <http= s://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/Gr= aphicsConsoleDxe>


Thanks= ,

Andrew Fish

On Tue, Jun 15, 2021 at 11:33 PM David F.= via groups.io
<df7729=3Dgmail.com@groups.io> w= rote:

Hel= lo,

I've found that most implementation of UEF= I don't automatically change
the resolution when setting the = mode with STOP (Simple Text Output
Protocol) .  You can = use GOP to change it after the mode but that
causes other pro= blems.  For example, using surface pro 7 in this case,
w= ith 4K screen.  The default text mode is 342x96 which puts it in
2736x1824 mode which you'd expect and the text is tiny.  But = now you
set the mode to 0 which is 80x25 and it actually sets= the mode to
2736x1824 if not already in that resolution and = uses a 80x25 area in
the center of the screen, still tiny tex= t you can hardly read.  If you
then say you want GOP in = 640x480 mode (which is available as GOP mode
1 on this system= , it will make the font larger but you can't see
anything bec= ause it's still offset to the middle of the 2736x1824 area
an= d you're only seeing the 640x480 upper left of that area on the
screen.   Likewise if you have it in 342x96 so it's fully in t= he upper
left corner of the screen and change the mode to say= 800x600
(available as GOP mode 2 on this system) it will mak= e the text
readable but the text can go off the screen in bot= h directions because
it's still 342x96 when the 100x31 STOP m= ode would be the correct one
(which happens to be mode 2 on t= his system).

Shouldn't setting the STOP mode h= andle adjusting the resolution since
that's the main reason y= ou want to change the mode so the size shown
on the screen ch= anges to something you can read.

Any tricks? I= 've tried a bunch of things, resetting the controller,
using = the Reset() protocol function, and other things but nothing
w= orks.  As soon as you use STOP to set the mode, it is back to high
resolution and using an area centered in the screen and changing= the
resolution after that leaves it in the area centered in = the high res
screen and not in the upper left area.

Thanks.
















<= /body> --Apple-Mail=_ACC33DA1-BBD5-4572-92A2-BCACA6660B6A--