xref: /reactos/sdk/include/ddk/ntagp.h (revision 845faec4)
1 /*
2  * ntagp.h
3  *
4  * NT AGP bus driver interface
5  *
6  * This file is part of the w32api package.
7  *
8  * Contributors:
9  *   Created by Gregor Anich <blight@blight.eu.org>
10  *
11  * THIS SOFTWARE IS NOT COPYRIGHTED
12  *
13  * This source code is offered for use in the public domain. You may
14  * use, modify or distribute it freely.
15  *
16  * This code is distributed in the hope that it will be useful but
17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18  * DISCLAIMED. This includes but is not limited to warranties of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  */
22 
23 #pragma once
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 DEFINE_GUID(GUID_AGP_BUS_INTERFACE_STANDARD, 0x2ef74803, 0xd8d3, 0x11d1, 0x9c, 0xaa, 0x00, 0xc0, 0xf0, 0x16, 0x56, 0x36);
30 
31 #define AGP_BUS_INTERFACE_V1                     1
32 #define AGP_BUS_INTERFACE_V2                     2
33 #define AGP_BUS_INTERFACE_V3                     3
34 #define AGP_BUS_INTERFACE_V4                     4
35 #define AGP_BUS_INTERFACE_V5                     5
36 
37 /* Indicates wether the GART supports mapping of physical memory for the CPU */
38 #define AGP_CAPABILITIES_MAP_PHYSICAL            0x00000001
39 #define AGP_CAPABILITIES_CACHE_COHERENT          0x00000002
40 #define AGP_CAPABILITIES_REQUIRES_GPU_FLUSH      0x00000004
41 
42 #define AGP_SET_RATE_DISABLE_SBA                 0x00010000
43 #define AGP_SET_RATE_DISABLE_FW                  0x00020000
44 
45 #define AGP_GUARD_PAGE_CHECK_FIRST_ULONG         0x00000001
46 #define AGP_GUARD_PAGE_CHECK_USE_SAME_OFFSET     0x00000002
47 #define AGP_GUARD_PAGE_CHECK_DO_NOT_BUGCHECK     0x00000004
48 
49 #define AGP_BUS_INTERFACE_V1_SIZE (FIELD_OFFSET(AGP_BUS_INTERFACE_STANDARD,SetRate))
50 #define AGP_BUS_INTERFACE_V2_SIZE (FIELD_OFFSET(AGP_BUS_INTERFACE_STANDARD, AgpSize))
51 #define AGP_BUS_INTERFACE_V3_SIZE (FIELD_OFFSET(AGP_BUS_INTERFACE_STANDARD, FlushChipsetCaches))
52 #define AGP_BUS_INTERFACE_V4_SIZE (FIELD_OFFSET(AGP_BUS_INTERFACE_STANDARD, MapMemoryEx))
53 
54 typedef NTSTATUS
55 (NTAPI *PAGP_BUS_SET_RATE)(
56   IN PVOID AgpContext,
57   IN ULONG AgpRate);
58 
59 typedef NTSTATUS
60 (NTAPI *PAGP_BUS_RESERVE_MEMORY)(
61   IN PVOID AgpContext,
62   IN ULONG NumberOfPages,
63   IN MEMORY_CACHING_TYPE MemoryType,
64   OUT PVOID *MapHandle,
65   OUT PHYSICAL_ADDRESS *PhysicalAddress OPTIONAL);
66 
67 typedef NTSTATUS
68 (NTAPI *PAGP_BUS_RELEASE_MEMORY)(
69   IN PVOID AgpContext,
70   IN PVOID MapHandle);
71 
72 typedef NTSTATUS
73 (NTAPI *PAGP_BUS_COMMIT_MEMORY)(
74   IN PVOID AgpContext,
75   IN PVOID MapHandle,
76   IN ULONG NumberOfPages,
77   IN ULONG OffsetInPages,
78   IN OUT PMDL Mdl OPTIONAL,
79   OUT PHYSICAL_ADDRESS *MemoryBase);
80 
81 typedef NTSTATUS
82 (NTAPI *PAGP_BUS_FREE_MEMORY)(
83   IN PVOID AgpContext,
84   IN PVOID MapHandle,
85   IN ULONG NumberOfPages,
86   IN ULONG OffsetInPages);
87 
88 typedef NTSTATUS
89 (NTAPI *PAGP_GET_MAPPED_PAGES)(
90   IN PVOID AgpContext,
91   IN PVOID MapHandle,
92   IN ULONG NumberOfPages,
93   IN ULONG OffsetInPages,
94   OUT PMDL Mdl);
95 
96 typedef NTSTATUS
97 (NTAPI *PAGP_MAP_MEMORY)(
98   IN PVOID AgpContext,
99   IN PVOID MapHandle,
100   IN ULONG NumberOfPages,
101   IN ULONG OffsetInPages,
102   IN PMDL Mdl,
103   OUT PHYSICAL_ADDRESS *MemoryBase);
104 
105 typedef NTSTATUS
106 (NTAPI *PAGP_UNMAP_MEMORY)(
107   IN PVOID AgpContext,
108   IN PVOID MapHandle,
109   IN ULONG NumberOfPages,
110   IN ULONG OffsetInPages,
111   IN PMDL Mdl);
112 
113 typedef NTSTATUS
114 (NTAPI *PAGP_FLUSH_CHIPSET_CACHES)(
115   IN PVOID AgpContext);
116 
117 typedef NTSTATUS
118 (NTAPI *PAGP_CHECK_INTEGRITY)(
119   IN PVOID AgpContext);
120 
121 typedef NTSTATUS
122 (NTAPI *PAGP_MAP_MEMORY_EX)(
123   IN PVOID AgpContext,
124   IN PVOID MapHandle,
125   IN ULONG NumberOfPages,
126   IN ULONG OffsetInPages,
127   IN PMDL Mdl,
128   IN MEMORY_CACHING_TYPE *CacheTypeOverride OPTIONAL,
129   OUT PHYSICAL_ADDRESS *MemoryBase);
130 
131 typedef NTSTATUS
132 (NTAPI *PAGP_UNMAP_MEMORY_EX)(
133   IN PVOID AgpContext,
134   IN PVOID MapHandle,
135   IN ULONG NumberOfPages,
136   IN ULONG OffsetInPages,
137   IN PMDL Mdl);
138 
139 typedef NTSTATUS
140 (NTAPI *PAGP_FLUSH_GART_TLB)(
141   IN PVOID AgpContext);
142 
143 typedef NTSTATUS
144 (NTAPI *PAGP_CHECK_GUARD_PAGE)(
145   IN PVOID AgpContext,
146   IN ULONG Flags,
147   IN ULONG ULongsToCheck);
148 
149 typedef struct _AGP_INFO_COMMON {
150   PCI_AGP_CAPABILITY MasterCap;
151   PCI_AGP_CAPABILITY TargetCap;
152   USHORT DeviceId;
153   USHORT VendorId;
154   USHORT SubVendorId;
155   USHORT SubSystemId;
156   UCHAR HwRevisionId;
157   ULONG VerifierFlags;
158   BOOLEAN GuardPageCorruption;
159 } AGP_INFO_COMMON, *PAGP_INFO_COMMON;
160 
161 typedef struct _AGP_INFO_DRIVER {
162   ULONG AGPReg1;
163   ULONG AGPReg2;
164   PHYSICAL_ADDRESS ApertureStart;
165   PHYSICAL_ADDRESS GartTranslationTable;
166   ULONG ApertureLength;
167 } AGP_INFO_DRIVER, *PAGP_INFO_DRIVER;
168 
169 typedef struct _AGP_INFO {
170   AGP_INFO_COMMON CommonInfo;
171   AGP_INFO_DRIVER DriverInfo;
172 } AGP_INFO, *PAGP_INFO;
173 
174 typedef VOID
175 (NTAPI *PAGP_GET_INFO)(
176   IN PVOID AgpContext,
177   OUT PAGP_INFO AgpInfo);
178 
179 typedef struct _AGP_BUS_INTERFACE_STANDARD {
180   USHORT Size;
181   USHORT Version;
182   PVOID AgpContext;
183   PINTERFACE_REFERENCE InterfaceReference;
184   PINTERFACE_DEREFERENCE InterfaceDereference;
185   ULONG Capabilities;
186   PAGP_BUS_RESERVE_MEMORY ReserveMemory;
187   PAGP_BUS_RELEASE_MEMORY ReleaseMemory;
188   PAGP_BUS_COMMIT_MEMORY CommitMemory;
189   PAGP_BUS_FREE_MEMORY FreeMemory;
190   PAGP_GET_MAPPED_PAGES GetMappedPages;
191   PAGP_BUS_SET_RATE SetRate;
192   SIZE_T AgpSize;
193   PHYSICAL_ADDRESS AgpBase;
194   PHYSICAL_ADDRESS MaxPhysicalAddress;
195   PAGP_MAP_MEMORY MapMemory;
196   PAGP_UNMAP_MEMORY UnMapMemory;
197   PAGP_FLUSH_CHIPSET_CACHES FlushChipsetCaches;
198   PAGP_CHECK_INTEGRITY CheckIntegrity;
199   PAGP_MAP_MEMORY_EX  MapMemoryEx;
200   PAGP_UNMAP_MEMORY_EX UnMapMemoryEx;
201   PAGP_FLUSH_GART_TLB FlushGartTLB;
202   PAGP_CHECK_GUARD_PAGE CheckGuardPage;
203   PAGP_GET_INFO GetAgpInfo;
204 } AGP_BUS_INTERFACE_STANDARD, *PAGP_BUS_INTERFACE_STANDARD;
205 
206 #ifdef __cplusplus
207 }
208 #endif
209