1 /*
2  * PROJECT:     ReactOS Xbox miniport video driver
3  * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE:     Simple framebuffer driver for NVIDIA NV2A XGPU
5  * COPYRIGHT:   Copyright 2004 Ge van Geldorp
6  *              Copyright 2004 Filip Navara
7  *              Copyright 2019 Stanislav Motylkov (x86corez@gmail.com)
8  */
9 
10 #pragma once
11 
12 /* INCLUDES *******************************************************************/
13 
14 #include "ntdef.h"
15 #define PAGE_SIZE 4096
16 #include "dderror.h"
17 #include "devioctl.h"
18 #include "miniport.h"
19 #include "video.h"
20 
21 /* FIXME: NDK not compatible with miniport drivers */
22 #define SystemBasicInformation 0
23 typedef struct _SYSTEM_BASIC_INFORMATION
24 {
25     ULONG Reserved;
26     ULONG TimerResolution;
27     ULONG PageSize;
28     ULONG NumberOfPhysicalPages;
29     ULONG LowestPhysicalPageNumber;
30     ULONG HighestPhysicalPageNumber;
31     ULONG AllocationGranularity;
32     ULONG MinimumUserModeAddress;
33     ULONG MaximumUserModeAddress;
34     KAFFINITY ActiveProcessorsAffinityMask;
35     CCHAR NumberOfProcessors;
36 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
37 
38 LONG
39 __stdcall
40 ZwQuerySystemInformation(
41     IN ULONG SystemInformationClass,
42     OUT PVOID SystemInformation,
43     IN ULONG Length,
44     OUT PULONG ResultLength
45 );
46 
47 #define I2C_IO_BASE 0xC000
48 #define NV2A_CONTROL_FRAMEBUFFER_ADDRESS_OFFSET 0x600800
49 
50 typedef struct
51 {
52     PHYSICAL_ADDRESS PhysControlStart;
53     ULONG ControlLength;
54     PVOID VirtControlStart;
55     PHYSICAL_ADDRESS PhysFrameBufferStart;
56 } XBOXVMP_DEVICE_EXTENSION, *PXBOXVMP_DEVICE_EXTENSION;
57 
58 VP_STATUS
59 NTAPI
60 XboxVmpFindAdapter(
61     IN PVOID HwDeviceExtension,
62     IN PVOID HwContext,
63     IN PWSTR ArgumentString,
64     IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo,
65     OUT PUCHAR Again);
66 
67 BOOLEAN
68 NTAPI
69 XboxVmpInitialize(
70     PVOID HwDeviceExtension);
71 
72 BOOLEAN
73 NTAPI
74 XboxVmpStartIO(
75     PVOID HwDeviceExtension,
76     PVIDEO_REQUEST_PACKET RequestPacket);
77 
78 BOOLEAN
79 NTAPI
80 XboxVmpResetHw(
81     PVOID DeviceExtension,
82     ULONG Columns,
83     ULONG Rows);
84 
85 VP_STATUS
86 NTAPI
87 XboxVmpGetPowerState(
88     PVOID HwDeviceExtension,
89     ULONG HwId,
90     PVIDEO_POWER_MANAGEMENT VideoPowerControl);
91 
92 VP_STATUS
93 NTAPI
94 XboxVmpSetPowerState(
95     PVOID HwDeviceExtension,
96     ULONG HwId,
97     PVIDEO_POWER_MANAGEMENT VideoPowerControl);
98 
99 BOOLEAN
100 FASTCALL
101 XboxVmpSetCurrentMode(
102     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
103     PVIDEO_MODE RequestedMode,
104     PSTATUS_BLOCK StatusBlock);
105 
106 BOOLEAN
107 FASTCALL
108 XboxVmpResetDevice(
109     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
110     PSTATUS_BLOCK StatusBlock);
111 
112 BOOLEAN
113 FASTCALL
114 XboxVmpMapVideoMemory(
115     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
116     PVIDEO_MEMORY RequestedAddress,
117     PVIDEO_MEMORY_INFORMATION MapInformation,
118     PSTATUS_BLOCK StatusBlock);
119 
120 BOOLEAN
121 FASTCALL
122 XboxVmpUnmapVideoMemory(
123     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
124     PVIDEO_MEMORY VideoMemory,
125     PSTATUS_BLOCK StatusBlock);
126 
127 BOOLEAN
128 FASTCALL
129 XboxVmpQueryNumAvailModes(
130     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
131     PVIDEO_NUM_MODES Modes,
132     PSTATUS_BLOCK StatusBlock);
133 
134 BOOLEAN
135 FASTCALL
136 XboxVmpQueryAvailModes(
137     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
138     PVIDEO_MODE_INFORMATION ReturnedModes,
139     PSTATUS_BLOCK StatusBlock);
140 
141 BOOLEAN
142 FASTCALL
143 XboxVmpQueryCurrentMode(
144     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
145     PVIDEO_MODE_INFORMATION VideoModeInfo,
146     PSTATUS_BLOCK StatusBlock);
147 
148 BOOLEAN
149 FASTCALL
150 XboxVmpSetColorRegisters(
151     PXBOXVMP_DEVICE_EXTENSION DeviceExtension,
152     PVIDEO_CLUT ColorLookUpTable,
153     PSTATUS_BLOCK StatusBlock);
154 
155 /* EOF */
156