summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnon Gilboa <agilboa@redhat.com>2013-06-03 09:40:56 +0300
committerArnon Gilboa <agilboa@redhat.com>2013-06-03 09:40:56 +0300
commitd2e4044d476c0609fd89f344160a05b4969e2f13 (patch)
tree9dd8d6d4f96a6c40f15385caebe1fd71491eaca2
parent4ed84ea99bc88339751041f9ed7d6c8a7e71b01f (diff)
init mspace
-rw-r--r--C++/Sample/SampleDisplay.vcxproj4
-rw-r--r--C++/Sample/SampleDisplay.vcxproj.Filters47
-rw-r--r--C++/bdd.cxx16
-rw-r--r--C++/bdd.hxx17
-rw-r--r--C++/mspace.c2
-rw-r--r--C++/mspace.h3
6 files changed, 86 insertions, 3 deletions
diff --git a/C++/Sample/SampleDisplay.vcxproj b/C++/Sample/SampleDisplay.vcxproj
index d1d2ca8..d6d5079 100644
--- a/C++/Sample/SampleDisplay.vcxproj
+++ b/C++/Sample/SampleDisplay.vcxproj
@@ -101,6 +101,7 @@
<ClCompile Include="..\BltFuncs.cxx" />
<ClCompile Include="..\BltHw.cxx" />
<ClCompile Include="..\memory.cxx" />
+ <ClCompile Include="..\mspace.c" />
<ResourceCompile Include="..\sampledisplay.rc" />
</ItemGroup>
<ItemGroup>
@@ -114,6 +115,9 @@
</ItemGroup>
<ItemGroup>
<ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
+ <ClInclude Include="..\bdd.hxx" />
+ <ClInclude Include="..\bdd_errorlog.hxx" />
+ <ClInclude Include="..\mspace.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project> \ No newline at end of file
diff --git a/C++/Sample/SampleDisplay.vcxproj.Filters b/C++/Sample/SampleDisplay.vcxproj.Filters
index 0fd4d5c..199cfb9 100644
--- a/C++/Sample/SampleDisplay.vcxproj.Filters
+++ b/C++/Sample/SampleDisplay.vcxproj.Filters
@@ -18,4 +18,51 @@
<UniqueIdentifier>{A8015DF0-98D6-422C-A5D9-BAB52F04B5E7}</UniqueIdentifier>
</Filter>
</ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\BDD.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\BDD_DDI.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\BDD_DMM.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\BDD_Util.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\BltFuncs.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\BltHw.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\memory.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\mspace.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\sampledisplay.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Include="*.inf">
+ <Filter>Driver Files</Filter>
+ </Inf>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\mspace.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\bdd.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\bdd_errorlog.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/C++/bdd.cxx b/C++/bdd.cxx
index 665dc48..851bb04 100644
--- a/C++/bdd.cxx
+++ b/C++/bdd.cxx
@@ -118,6 +118,13 @@ VOID BASIC_DISPLAY_DRIVER::QxlMemRegionInitHighBits(QxlMemRegionInfo *mem_region
mem_region->high_bits = high_bits;
}
+VOID BASIC_DISPLAY_DRIVER::InitMspace(UINT32 mspace_type, UINT8 *start, size_t capacity)
+{
+ m_mspaces[mspace_type]._mspace = create_mspace_with_base(start, capacity, 0, this);
+ m_mspaces[mspace_type].mspace_start = start;
+ m_mspaces[mspace_type].mspace_end = start + capacity;
+}
+
NTSTATUS BASIC_DISPLAY_DRIVER::QxlInitRam()
{
QXLRam *ram_header;
@@ -163,8 +170,10 @@ NTSTATUS BASIC_DISPLAY_DRIVER::QxlInitRam()
m_rom->surface0_area_size + m_rom->num_pages * PAGE_SIZE;
QxlMemRegionInitHighBits(&m_mem_regions[QXL_RAM_RANGE_INDEX], m_rom->slots_start);
+ InitMspace(MSPACE_TYPE_DEVRAM,
+ (UINT8 *)m_mem_regions[QXL_RAM_RANGE_INDEX].mapped_start + m_rom->surface0_area_size,
+ m_rom->num_pages * PAGE_SIZE);
-
return STATUS_SUCCESS;
error:
m_DxgkInterface.DxgkCbUnmapMemory(m_DxgkInterface.DeviceHandle,
@@ -192,7 +201,10 @@ NTSTATUS BASIC_DISPLAY_DRIVER::QxlInitVram()
}
QxlMemRegionInitHighBits(&m_mem_regions[QXL_VRAM_RANGE_INDEX], m_rom->slots_start + 1);
- return STATUS_SUCCESS;
+ InitMspace(MSPACE_TYPE_VRAM, (UINT8 *)m_mem_regions[QXL_VRAM_RANGE_INDEX].mapped_start,
+ m_mem_regions[QXL_VRAM_RANGE_INDEX].size);
+
+ return STATUS_SUCCESS;
}
// TODO: not sure if it should even be mapped. What address to use in WRITE_PORT_<x>? the physical low part, or the mapped one?
diff --git a/C++/bdd.hxx b/C++/bdd.hxx
index 87eaf2f..511a89e 100644
--- a/C++/bdd.hxx
+++ b/C++/bdd.hxx
@@ -50,6 +50,7 @@ extern "C"
#include <dispmprt.h>
#include "spice/qxl_dev.h"
+ #include "mspace.h"
};
#include "BDD_ErrorLog.hxx"
@@ -181,6 +182,19 @@ typedef struct QxlMemRegionInfo {
UINT64 high_bits;
} QxlMemRegionInfo;
+typedef struct MspaceInfo {
+ mspace _mspace;
+ UINT8 *mspace_start;
+ UINT8 *mspace_end;
+} MspaceInfo;
+
+enum {
+ MSPACE_TYPE_DEVRAM,
+ MSPACE_TYPE_VRAM,
+
+ NUM_MSPACES,
+};
+
class BASIC_DISPLAY_DRIVER
{
private:
@@ -223,6 +237,8 @@ private:
UCHAR m_pci_revision;
QXLPHYSICAL m_va_slot_mask;
+ MspaceInfo m_mspaces[NUM_MSPACES];
+
public:
BASIC_DISPLAY_DRIVER(_In_ DEVICE_OBJECT* pPhysicalDeviceObject);
~BASIC_DISPLAY_DRIVER();
@@ -424,6 +440,7 @@ private:
VOID QxlVgaWritePortUint16(UINT16 port, UINT16 val);
VOID QxlWritePortUchar(UINT qxl_port, UCHAR val);
+ VOID InitMspace(UINT32 mspace_type, UINT8 *start, size_t capacity);
};
//
diff --git a/C++/mspace.c b/C++/mspace.c
index d0ba123..109e522 100644
--- a/C++/mspace.c
+++ b/C++/mspace.c
@@ -21,6 +21,8 @@
#include "mspace.h"
#pragma warning( disable : 4146 ) /* no "unsigned" warnings */
+#pragma warning( disable : 4100 )
+#pragma warning( disable : 4127 )
#define MALLOC_ALIGNMENT ((size_t)8U)
#define USE_LOCKS 0
diff --git a/C++/mspace.h b/C++/mspace.h
index 96b0593..59e9f64 100644
--- a/C++/mspace.h
+++ b/C++/mspace.h
@@ -1,7 +1,8 @@
#ifndef _H_MSPACE
#define _H_MSPACE
-#define NO_MALLINFO 0
+//another option is to move here struct mallinfo definition from mspace.c
+#define NO_MALLINFO 1
#ifdef __cplusplus
extern "C" {