diff options
author | Arnon Gilboa <agilboa@redhat.com> | 2013-06-03 09:40:56 +0300 |
---|---|---|
committer | Arnon Gilboa <agilboa@redhat.com> | 2013-06-03 09:40:56 +0300 |
commit | d2e4044d476c0609fd89f344160a05b4969e2f13 (patch) | |
tree | 9dd8d6d4f96a6c40f15385caebe1fd71491eaca2 | |
parent | 4ed84ea99bc88339751041f9ed7d6c8a7e71b01f (diff) |
init mspace
-rw-r--r-- | C++/Sample/SampleDisplay.vcxproj | 4 | ||||
-rw-r--r-- | C++/Sample/SampleDisplay.vcxproj.Filters | 47 | ||||
-rw-r--r-- | C++/bdd.cxx | 16 | ||||
-rw-r--r-- | C++/bdd.hxx | 17 | ||||
-rw-r--r-- | C++/mspace.c | 2 | ||||
-rw-r--r-- | C++/mspace.h | 3 |
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" { |