https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f87a695b3540197b8abf6383be87817213a5f2bb

commit f87a695b3540197b8abf6383be87817213a5f2bb
Author:     Stanislav Motylkov <x86co...@gmail.com>
AuthorDate: Sat May 2 23:18:34 2020 +0300
Commit:     Stanislav Motylkov <x86co...@gmail.com>
CommitDate: Sat May 2 23:24:36 2020 +0300

    [XBOXVMP] Work with Xbox GPU registers properly
    
    Bug was noticed with GCC 8.4
---
 win32ss/drivers/miniport/xboxvmp/xboxvmp.c | 14 +++++++-------
 win32ss/drivers/miniport/xboxvmp/xboxvmp.h |  3 ++-
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/win32ss/drivers/miniport/xboxvmp/xboxvmp.c 
b/win32ss/drivers/miniport/xboxvmp/xboxvmp.c
index cf4ddf6de39..a463a5cec3d 100644
--- a/win32ss/drivers/miniport/xboxvmp/xboxvmp.c
+++ b/win32ss/drivers/miniport/xboxvmp/xboxvmp.c
@@ -4,7 +4,7 @@
  * PURPOSE:     Simple framebuffer driver for NVIDIA NV2A XGPU
  * COPYRIGHT:   Copyright 2004 Gé van Geldorp
  *              Copyright 2004 Filip Navara
- *              Copyright 2019 Stanislav Motylkov (x86co...@gmail.com)
+ *              Copyright 2019-2020 Stanislav Motylkov (x86co...@gmail.com)
  *
  * TODO:
  * - Check input parameters everywhere.
@@ -393,7 +393,7 @@ XboxVmpMapVideoMemory(
     StatusBlock->Information = sizeof(VIDEO_MEMORY_INFORMATION);
 
     /* Reuse framebuffer that was set up by firmware */
-    FrameBuffer.QuadPart = 
*((PULONG)((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CONTROL_FRAMEBUFFER_ADDRESS_OFFSET));
+    FrameBuffer.QuadPart = 
READ_REGISTER_ULONG((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CONTROL_FRAMEBUFFER_ADDRESS_OFFSET);
     /* Framebuffer address offset value is coming from the GPU within
      * memory mapped I/O address space, so we're comparing only low
      * 28 bits of the address within actual RAM address space */
@@ -423,7 +423,7 @@ XboxVmpMapVideoMemory(
     MapInformation->FrameBufferLength = MapInformation->VideoRamLength;
 
     /* Tell the nVidia controller about the framebuffer */
-    *((PULONG)((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CONTROL_FRAMEBUFFER_ADDRESS_OFFSET)) = FrameBuffer.u.LowPart;
+    WRITE_REGISTER_ULONG((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CONTROL_FRAMEBUFFER_ADDRESS_OFFSET, FrameBuffer.u.LowPart);
 
     INFO_(IHVVIDEO, "Mapped 0x%x bytes of phys mem at 0x%lx to virt addr 
0x%p\n",
         MapInformation->VideoRamLength, FrameBuffer.u.LowPart, 
MapInformation->VideoRamBase);
@@ -495,8 +495,8 @@ NvGetCrtc(
     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
     UCHAR Index)
 {
-    *((PUCHAR)((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CRTC_REGISTER_INDEX)) = Index;
-    return *((PUCHAR)((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CRTC_REGISTER_VALUE));
+    WRITE_REGISTER_UCHAR((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CRTC_REGISTER_INDEX, Index);
+    return READ_REGISTER_UCHAR((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_CRTC_REGISTER_VALUE);
 }
 
 UCHAR
@@ -539,8 +539,8 @@ XboxVmpQueryCurrentMode(
     VideoMode->Length = sizeof(VIDEO_MODE_INFORMATION);
     VideoMode->ModeIndex = 0;
 
-    VideoMode->VisScreenWidth = 
*((PULONG)((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_RAMDAC_FP_HVALID_END)) + 1;
-    VideoMode->VisScreenHeight = 
*((PULONG)((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_RAMDAC_FP_VVALID_END)) + 1;
+    VideoMode->VisScreenWidth = 
READ_REGISTER_ULONG((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_RAMDAC_FP_HVALID_END) + 1;
+    VideoMode->VisScreenHeight = 
READ_REGISTER_ULONG((ULONG_PTR)DeviceExtension->VirtControlStart + 
NV2A_RAMDAC_FP_VVALID_END) + 1;
 
     if (VideoMode->VisScreenWidth <= 1 || VideoMode->VisScreenHeight <= 1)
     {
diff --git a/win32ss/drivers/miniport/xboxvmp/xboxvmp.h 
b/win32ss/drivers/miniport/xboxvmp/xboxvmp.h
index 6365c5c1092..6a27df5366b 100644
--- a/win32ss/drivers/miniport/xboxvmp/xboxvmp.h
+++ b/win32ss/drivers/miniport/xboxvmp/xboxvmp.h
@@ -4,7 +4,7 @@
  * PURPOSE:     Simple framebuffer driver for NVIDIA NV2A XGPU
  * COPYRIGHT:   Copyright 2004 Ge van Geldorp
  *              Copyright 2004 Filip Navara
- *              Copyright 2019 Stanislav Motylkov (x86co...@gmail.com)
+ *              Copyright 2019-2020 Stanislav Motylkov (x86co...@gmail.com)
  */
 
 #pragma once
@@ -20,6 +20,7 @@
 #include "dderror.h"
 #include "devioctl.h"
 #include "miniport.h"
+#include "ioaccess.h"
 #include "video.h"
 
 #define NV2A_VIDEO_MEMORY_SIZE    (4 * 1024 * 1024)

Reply via email to