VirtualBox

Ignore:
Timestamp:
Feb 12, 2010 2:21:27 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
57623
Message:

EFI,Main: managing graphic modes via VBoxInternal2 extradata variables.

Location:
trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/DevEFI.h

    r26203 r26464  
    5959    EFI_INFO_INDEX_CPU_FREQUENCY,
    6060    EFI_INFO_INDEX_TSC_FREQUENCY,
     61    EFI_INFO_INDEX_GOP_MODE,
     62    EFI_INFO_INDEX_UGA_HORISONTAL_RESOLUTION,
     63    EFI_INFO_INDEX_UGA_VERTICAL_RESOLUTION,
    6164    EFI_INFO_INDEX_END
    6265} EfiInfoIndex;
  • trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxConsoleDxe/VBoxConsole.c

    r26441 r26464  
    2121
    2222#include "VBoxConsole.h"
     23#include "VBoxPkg.h"
     24#include "DevEFI.h"
     25#include "iprt/asm.h"
    2326
    2427/* @todo understand the reasons why TextOutputProtocol.SetMode isn't enough to switch mode. */
     
    3033static EFI_GRAPHICS_OUTPUT_PROTOCOL    *Gop;
    3134static EFI_UGA_DRAW_PROTOCOL           *Uga;
     35
     36/*
     37 *   @todo move this function to the library.
     38 */
     39static UINT32
     40GetVmVariable(UINT32 Variable, CHAR8* Buffer, UINT32 Size )
     41{
     42    UINT32 VarLen, i;
     43
     44
     45    ASMOutU32(EFI_INFO_PORT, Variable);
     46    VarLen = ASMInU32(EFI_INFO_PORT);
     47
     48    for (i=0; i < VarLen && i < Size; i++)
     49    {
     50        Buffer[i] = ASMInU8(EFI_INFO_PORT);
     51    }
     52
     53    return VarLen;
     54}
    3255
    3356static VOID
     
    4366    DEBUG((DEBUG_INFO, "%a:%d - SwitchMode\n", __FILE__,  __LINE__));
    4467    if (Gop)
    45         r = Gop->SetMode(Gop, 2);
    46     if (Uga)
    47         r = Uga->SetMode(Uga, 1024, 768, 32, 60);
     68    {
     69        UINT32 mode = 2;
     70        GetVmVariable(EFI_INFO_INDEX_GOP_MODE, (CHAR8 *)&mode, sizeof(UINT32));
     71        r = Gop->SetMode(Gop, mode);
     72    }
     73    else if (Uga)
     74    {
     75        UINT32 H = 1027;
     76        UINT32 V = 768;
     77        GetVmVariable(EFI_INFO_INDEX_UGA_HORISONTAL_RESOLUTION, (CHAR8 *)&H, sizeof(UINT32));
     78        GetVmVariable(EFI_INFO_INDEX_UGA_VERTICAL_RESOLUTION, (CHAR8 *)&V, sizeof(UINT32));
     79        r = Uga->SetMode(Uga, H, V, 32, 60);
     80    }
    4881    if(EFI_ERROR(r))
    4982    {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette