VirtualBox

Changeset 34426 in vbox for trunk/src/VBox/Devices/PC/BIOS


Ignore:
Timestamp:
Nov 26, 2010 8:34:43 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
68197
Message:

BIOS: report MCFG region via E820, if present

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/BIOS/rombios.c

    r33656 r34426  
    46454645}
    46464646
     4647Bit32u readBiosVar(varNum)
     4648    Bit16u varNum;
     4649{
     4650    int iPort = 0x402;
     4651    Bit32u result = 0;
     4652
     4653    outw(iPort, varNum);
     4654    result = (inb(iPort) << 24) | (inb(iPort) <<  16) |
     4655             (inb(iPort) << 8) | (inb(iPort) << 0);
     4656    BX_INFO("var %d is %x\n", varNum, result);
     4657    return result;
     4658}
     4659
    46474660  void
    46484661int15_function32(regs, ES, DS, FLAGS)
     
    46544667  Bit16u  CX,DX;
    46554668  Bit8u   extra_highbits_memory_size=0;
     4669  Bit32u  mcfgStart, mcfgSize;
    46564670
    46574671BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax);
     
    47464760                extra_highbits_memory_size = inb_cmos(0x5d);
    47474761#endif /* !VBOX */
     4762
     4763                mcfgStart = readBiosVar(1);
     4764                mcfgSize  = readBiosVar(2);
    47484765
    47494766                switch(regs.u.r16.bx)
     
    48124829                        set_e820_range(ES, regs.u.r16.di,
    48134830                                       0xfffc0000L, 0x00000000L, 0, 0, 2);
    4814                         /* Temporary disabled MCFG code */
    4815 #if 0
    4816                         regs.u.r32.ebx = 6;
     4831                        if (mcfgStart > 0)
     4832                            regs.u.r32.ebx = 6;
     4833                        else
     4834                        {
     4835                            if (extra_highbits_memory_size || extra_lowbits_memory_size)
     4836                                regs.u.r32.ebx = 7;
     4837                            else
     4838                                regs.u.r32.ebx = 0;
     4839                        }
    48174840                        break;
    48184841                     case 6:
    4819                         /* PCI MMIO config space */
     4842                        /* PCI MMIO config space (MCFG) */
    48204843                        set_e820_range(ES, regs.u.r16.di,
    4821                                        0xd0000000L, 0xe0000000L, 0, 0, 2);
     4844                                       mcfgStart, mcfgSize, 0, 0, 2);
     4845
    48224846                        if (extra_highbits_memory_size || extra_lowbits_memory_size)
    48234847                            regs.u.r32.ebx = 7;
     
    48264850                        break;
    48274851                    case 7:
    4828 #else
    4829                         if (extra_highbits_memory_size || extra_lowbits_memory_size)
    4830                             regs.u.r32.ebx = 6;
    4831                         else
    4832                             regs.u.r32.ebx = 0;
    4833                         break;
    4834                     case 6:
    4835 #endif
    48364852#ifdef VBOX /* Don't succeeded if no memory above 4 GB.  */
    48374853                        /* Mapping of memory above 4 GB if present.
Note: See TracChangeset for help on using the changeset viewer.

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