Index: /trunk/include/VBox/VMMDev.h
===================================================================
--- /trunk/include/VBox/VMMDev.h	(revision 64191)
+++ /trunk/include/VBox/VMMDev.h	(revision 64192)
@@ -27,5 +27,4 @@
 #define ___VBox_VMMDev_h
 
-#include <VBox/VBoxVideo.h>             /* For VBVA definitions. */
 #include <VBox/cdefs.h>
 #include <VBox/param.h>                 /* for the PCI IDs. */
@@ -2057,5 +2056,37 @@
 }
 
+/** @name VBVA ring defines.
+ *
+ * The VBVA ring buffer is suitable for transferring large (< 2GB) amount of
+ * data. For example big bitmaps which do not fit to the buffer.
+ *
+ * Guest starts writing to the buffer by initializing a record entry in the
+ * aRecords queue. VBVA_F_RECORD_PARTIAL indicates that the record is being
+ * written. As data is written to the ring buffer, the guest increases off32End
+ * for the record.
+ *
+ * The host reads the aRecords on flushes and processes all completed records.
+ * When host encounters situation when only a partial record presents and
+ * cbRecord & ~VBVA_F_RECORD_PARTIAL >= VBVA_RING_BUFFER_SIZE -
+ * VBVA_RING_BUFFER_THRESHOLD, the host fetched all record data and updates
+ * off32Head. After that on each flush the host continues fetching the data
+ * until the record is completed.
+ *
+ */
+#define VMMDEV_VBVA_RING_BUFFER_SIZE        (_4M - _1K)
+#define VMMDEV_VBVA_RING_BUFFER_THRESHOLD   (4 * _1K)
+
+#define VMMDEV_VBVA_MAX_RECORDS (64)
 /** @} */
+
+/**
+ * VBVA record.
+ */
+typedef struct VMMDEVVBVARECORD
+{
+    /** The length of the record. Changed by guest. */
+    uint32_t cbRecord;
+} VMMDEVVBVARECORD;
+AssertCompileSize(VMMDEVVBVARECORD, 4);
 
 
@@ -2076,8 +2107,8 @@
 
     /** The ring buffer for data. */
-    uint8_t  au8RingBuffer[VBVA_RING_BUFFER_SIZE];
+    uint8_t  au8RingBuffer[VMMDEV_VBVA_RING_BUFFER_SIZE];
 
     /** The queue of record descriptions. */
-    VBVARECORD aRecords[VBVA_MAX_RECORDS];
+    VMMDEVVBVARECORD aRecords[VMMDEV_VBVA_MAX_RECORDS];
     uint32_t indexRecordFirst;
     uint32_t indexRecordFree;
Index: /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp	(revision 64191)
+++ /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp	(revision 64192)
@@ -66,5 +66,5 @@
     vmmdevInitRequest(&Req.header, VMMDevReq_VideoAccelEnable);
     Req.u32Enable = fEnable;
-    Req.cbRingBuffer = VBVA_RING_BUFFER_SIZE;
+    Req.cbRingBuffer = VMMDEV_VBVA_RING_BUFFER_SIZE;
     Req.fu32Status = 0;
     return vbglR3GRPerform(&Req.header);
Index: /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
===================================================================
--- /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp	(revision 64191)
+++ /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp	(revision 64192)
@@ -83,4 +83,5 @@
 /* Enable dev_vmm Log3 statements to get IRQ-related logging. */
 #define LOG_GROUP LOG_GROUP_DEV_VMM
+#include <VBox/VBoxVideo.h>  /* For VBVA definitions. */
 #include <VBox/VMMDev.h>
 #include <VBox/vmm/mm.h>
@@ -1795,8 +1796,8 @@
     }
 
-    if (pReq->cbRingBuffer != VBVA_RING_BUFFER_SIZE)
+    if (pReq->cbRingBuffer != VMMDEV_VBVA_RING_BUFFER_SIZE)
     {
         /* The guest driver seems compiled with different headers. */
-        LogRelMax(16,("VMMDevReq_VideoAccelEnable guest ring buffer size %#x, should be %#x!!\n", pReq->cbRingBuffer, VBVA_RING_BUFFER_SIZE));
+        LogRelMax(16,("VMMDevReq_VideoAccelEnable guest ring buffer size %#x, should be %#x!!\n", pReq->cbRingBuffer, VMMDEV_VBVA_RING_BUFFER_SIZE));
         return VERR_INVALID_PARAMETER;
     }
