VirtualBox

Changeset 82078 in vbox for trunk


Ignore:
Timestamp:
Nov 21, 2019 12:26:38 PM (5 years ago)
Author:
vboxsync
Message:

DevVGA: Map part of the VRAM (512KB) into ring-0 for direct access there. bugref:9218

Location:
trunk/src/VBox/Devices/Graphics
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA.cpp

    r82076 r82078  
    5858
    5959/** Check buffer if an VRAM offset is within the right range or not. */
    60 #if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0)
     60#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) || (defined(IN_RING0) && defined(VGA_WITH_PARTIAL_RING0_MAPPING))
    6161# define VERIFY_VRAM_WRITE_OFF_RETURN(pThis, off) \
    6262    do { \
     
    7979
    8080/** Check buffer if an VRAM offset is within the right range or not. */
    81 #if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0)
     81#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) || (defined(IN_RING0) && defined(VGA_WITH_PARTIAL_RING0_MAPPING))
    8282# define VERIFY_VRAM_READ_OFF_RETURN(pThis, off, rcVar) \
    8383    do { \
     
    12191219    return VINF_SUCCESS;
    12201220}
    1221 #endif
     1221
     1222#endif /* CONFIG_BOCHS_VBE */
    12221223
    12231224/* called for accesses between 0xa0000 and 0xc0000 */
     
    66346635        Log(("!!WARNING!!: pThis->dev.uDevFn=%d (ignore if testcase or not started by Main)\n", pPciDev->uDevFn));
    66356636
    6636 #ifdef VBOX_WITH_VMSVGA
     6637# ifdef VBOX_WITH_VMSVGA
    66376638    pThis->hIoPortVmSvga    = NIL_IOMIOPORTHANDLE;
    66386639    pThis->hMmio2VmSvgaFifo = NIL_PGMMMIO2HANDLE;
     
    66536654        pPciDev->pfnRegionLoadChangeHookR3 = vgaR3PciRegionLoadChangeHook;
    66546655    }
    6655 #endif /* VBOX_WITH_VMSVGA */
     6656# endif /* VBOX_WITH_VMSVGA */
    66566657
    66576658    /*
     
    66636664    AssertLogRelRCReturn(rc, PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
    66646665                                                 N_("Failed to allocate %u bytes of VRAM"), pThis->vram_size));
    6665     pThis->vram_ptrR0 = (RTR0PTR)pThis->vram_ptrR3; /** @todo @bugref{1865} Map parts into R0 or just use PGM access (Mac only). */
     6666# ifndef VGA_WITH_PARTIAL_RING0_MAPPING
     6667    pThis->vram_ptrR0 = (RTR0PTR)pThis->vram_ptrR3;
     6668# endif
    66666669
    66676670    /*
     
    66786681     * Register I/O ports.
    66796682     */
    6680 #define REG_PORT(a_uPort, a_cPorts, a_pfnWrite, a_pfnRead, a_szDesc, a_phIoPort) do { \
     6683# define REG_PORT(a_uPort, a_cPorts, a_pfnWrite, a_pfnRead, a_szDesc, a_phIoPort) do { \
    66816684            rc = PDMDevHlpIoPortCreateFlagsAndMap(pDevIns, a_uPort, a_cPorts, IOM_IOPORT_F_ABS, \
    66826685                                                  a_pfnWrite, a_pfnRead, "VGA - " a_szDesc, NULL /*paExtDescs*/, a_phIoPort); \
     
    66976700    REG_PORT(0x3da,  1, vgaIoPortCgaFcrWrite,   vgaIoPortCgaStRead,     "CGA Feature / status",     &pThis->hIoPortCgaFcrSt);
    66986701
    6699 #ifdef CONFIG_BOCHS_VBE
     6702# ifdef CONFIG_BOCHS_VBE
    67006703    REG_PORT(0x1ce,  1, vgaIoPortWriteVbeIndex, vgaIoPortReadVbeIndex,  "VBE Index",                &pThis->hIoPortVbeIndex);
    67016704    REG_PORT(0x1cf,  1, vgaIoPortWriteVbeData,  vgaIoPortReadVbeData,   "VBE Data",                 &pThis->hIoPortVbeData);
    6702 #endif /* CONFIG_BOCHS_VBE */
    6703 
    6704 #ifdef VBOX_WITH_HGSMI
     6705# endif /* CONFIG_BOCHS_VBE */
     6706
     6707# ifdef VBOX_WITH_HGSMI
    67056708    /* Use reserved VGA IO ports for HGSMI. */
    67066709    REG_PORT(VGA_PORT_HGSMI_HOST,  4, vgaR3IOPortHgsmiWrite, vgaR3IOPortHgmsiRead, "HGSMI host (3b0-3b3)",  &pThis->hIoPortHgsmiHost);
    67076710    REG_PORT(VGA_PORT_HGSMI_GUEST, 4, vgaR3IOPortHgsmiWrite, vgaR3IOPortHgmsiRead, "HGSMI guest (3d0-3d3)", &pThis->hIoPortHgsmiGuest);
    6708 #endif /* VBOX_WITH_HGSMI */
    6709 
    6710 #undef REG_PORT
     6711# endif /* VBOX_WITH_HGSMI */
     6712
     6713# undef REG_PORT
    67116714
    67126715    /* vga mmio */
     
    73887391     * Map the start of the VRAM into this context.
    73897392     */
    7390 # if defined(VBOX_WITH_2X_4GB_ADDR_SPACE)
     7393# if defined(VBOX_WITH_2X_4GB_ADDR_SPACE) || (defined(IN_RING0) && defined(VGA_WITH_PARTIAL_RING0_MAPPING))
    73917394    rc = PDMDevHlpMmio2SetUpContext(pDevIns, pThis->hMmio2VRam, 0 /* off */, VGA_MAPPING_SIZE, (void **)&pThis->CTX_SUFF(vram_ptr));
    73927395    AssertLogRelMsgRCReturn(rc, ("PDMDevHlpMmio2SetUpContext(,VRAM,0,%#x,) -> %Rrc\n", VGA_MAPPING_SIZE, rc), rc);
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r82076 r82078  
    7474#endif
    7575
    76 /** The size of the VGA GC mapping.
     76/** The size of the VGA ring-0 and raw-mode mapping.
     77 *
    7778 * This is supposed to be all the VGA memory accessible to the guest.
    7879 * The initial value was 256KB but NTAllInOne.iso appears to access more
     
    8283 */
    8384#define VGA_MAPPING_SIZE    _512K
    84 
     85/** Enables partially mapping the VRAM into ring-0 rather than using the ring-3.
     86 * The VGA_MAPPING_SIZE define sets the number of bytes that will be mapped. */
     87#define VGA_WITH_PARTIAL_RING0_MAPPING
    8588
    8689#define MSR_COLOR_EMULATION 0x01
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