> On Jun 23, 2021, at 3:24 AM, Laszlo Ersek <ler...@redhat.com> wrote: > > On 06/17/21 01:22, Andrew Fish via groups.io <http://groups.io/> wrote: >> >> >>> On Jun 16, 2021, at 2:45 PM, David F. <df7...@gmail.com> wrote: >>> >>> 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? >>> >> >> A common implementation is to have the Conspliter [1] driver that produces >> virtual handles that aggregate how many actual devices you have and manages >> policy. >> >> You should 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.PcdVideoHorizontalResolution ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn ## >> SOMETIMES_CONSUMES >> Note: If you have 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 connect to see if it does different stuff. > > Regarding the serial terminal aspect, we discussed the following patch > (maybe: workaround?) for that, many years ago, off-list: >
Laszlo, This reminds me I have some hacks in our terminal driver too. 1) Add a mode that matches the Mode 2 of the GraphicsConsole driver. a) This kind of assumes BDS connects the graphics 1st. b) We could generalized this to match the higher modes of the ConSpliter? 2) I added a PCD to make the Mode 2 match the current size terminal. a) The EFI Terminal driver sends { ESC, '[', '1', '8', 't', 0 } to the terminal 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 values for this. 4) At one point I added some code with 1) that would auto resize the terminal window to match the graphics screen resolution. I think this was one of the most unpopular things I’ve ever done at work. I guess I’m a just open a bunch of windows and switch between them person, but some people optimize the windows layout and get really angry if you resize windows on them. Thanks, Andrew Fish > diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c > b/MdeModulePkg/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 = { > }; > > TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeData[] = { > - {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. > // > > but the discussion didn't go anywhere over several months, so we've been > carrying this patch downstream-only ever since. > > Thanks > Laszlo > >> >> >> [1] >> https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe >> >> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe> >> >> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe >> >> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe>> >> >> [2] >> https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/GraphicsConsoleDxe >> >> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/GraphicsConsoleDxe> >> >> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/GraphicsConsoleDxe >> >> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/GraphicsConsoleDxe>> >> >> >> Thanks, >> >> Andrew Fish >> >>> On Tue, Jun 15, 2021 at 11:33 PM David F. via groups.io <http://groups.io/> >>> <df7729=gmail....@groups.io <mailto:df7729=gmail....@groups.io>> wrote: >>>> >>>> Hello, >>>> >>>> I've found that most implementation of UEFI 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 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 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 because it's still offset to the middle of the 2736x1824 area >>>> 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 upper >>>> 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 because >>>> it's still 342x96 when the 100x31 STOP mode would be the correct one >>>> (which happens to be mode 2 on this system). >>>> >>>> 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. >>>> >>>> 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. >>>> >>>> Thanks. >>>> >>> >>> >>> >>> >>> >> >> >> >> >> >> >> > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#77001): https://edk2.groups.io/g/devel/message/77001 Mute This Topic: https://groups.io/mt/83575008/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-