@@ -87,7 +87,7 @@ void AubDump<Traits>::addMemoryWrite(typename Traits::Stream &stream, uint64_t a
8787
8888// Reserve memory in the GGTT.
8989template <typename Traits>
90- uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace, uint64_t physStart) {
90+ uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace, uint64_t physStart, AubGTTData data ) {
9191 auto startPage = addr & g_pageMask;
9292 auto endPage = (addr + size - 1 ) & g_pageMask;
9393 auto numPages = (uint32_t )(((endPage - startPage) / 4096 ) + 1 );
@@ -105,7 +105,7 @@ uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32
105105 uint64_t physAddress = physStart;
106106 while (startPage <= endPage) {
107107 MiGttEntry entry;
108- setGttEntry (entry, physAddress);
108+ setGttEntry (entry, physAddress, data );
109109
110110 stream.writeGTT (gttTableOffset, entry.uiData );
111111 gttTableOffset += sizeof (entry);
@@ -118,30 +118,39 @@ uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32
118118}
119119
120120template <typename Traits>
121- uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, uint32_t addr, size_t size, uint64_t physStart) {
122- return AubDump<Traits>::reserveAddress (stream, addr, size, AddressSpaceValues::TraceGttEntry, physStart);
121+ uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, uint32_t addr, size_t size, uint64_t physStart, AubGTTData data ) {
122+ return AubDump<Traits>::reserveAddress (stream, addr, size, AddressSpaceValues::TraceGttEntry, physStart, data );
123123}
124124
125125template <typename Traits>
126- uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, const void *memory, size_t size, uint64_t physStart) {
126+ uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, const void *memory, size_t size, uint64_t physStart, AubGTTData data ) {
127127 auto gfxAddress = BaseHelper::ptrToGGTT (memory);
128- return AubDump<Traits>::reserveAddress (stream, gfxAddress, size, AddressSpaceValues::TraceGttEntry, physStart);
128+ return AubDump<Traits>::reserveAddress (stream, gfxAddress, size, AddressSpaceValues::TraceGttEntry, physStart, data );
129129}
130130
131131template <typename Traits>
132- void AubDump<Traits>::reserveAddressGGTTAndWriteMmeory(typename Traits::Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset) {
132+ void AubDump<Traits>::reserveAddressGGTTAndWriteMmeory(typename Traits::Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset, uint64_t additionalBits ) {
133133 auto vmAddr = (gfxAddress + offset) & ~(MemoryConstants::pageSize - 1 );
134134 auto pAddr = physAddress & ~(MemoryConstants::pageSize - 1 );
135135
136- AubDump<Traits>::reserveAddressPPGTT (stream, vmAddr, MemoryConstants::pageSize, pAddr);
136+ AubDump<Traits>::reserveAddressPPGTT (stream, vmAddr, MemoryConstants::pageSize, pAddr, additionalBits );
137137
138138 AubDump<Traits>::addMemoryWrite (stream, physAddress,
139139 reinterpret_cast <void *>(reinterpret_cast <uintptr_t >(memory) + offset),
140140 size, AubMemDump::AddressSpaceValues::TraceNonlocal);
141141}
142142
143143template <typename Traits>
144- uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress) {
144+ void AubDump<Traits>::setGttEntry(IAPageTableEntry &entry, uint64_t address, AubGTTData data) {
145+ entry.uiData = 0 ;
146+ entry.pageConfig .PhysicalAddress = address / 4096 ;
147+ entry.pageConfig .Present = data.present ;
148+ entry.pageConfig .Writable = data.writable ;
149+ entry.pageConfig .UserSupervisor = data.userSupervisor ;
150+ }
151+
152+ template <typename Traits>
153+ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress, uint64_t additionalBits) {
145154 auto startAddress = gfxAddress;
146155 auto endAddress = gfxAddress + blockSize - 1 ;
147156
@@ -163,7 +172,7 @@ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stre
163172 auto currPDE = startPDE;
164173 auto physPage = BaseClass::getPTEAddress (startPTE) & g_pageMask;
165174 while (currPDE <= endPDE) {
166- auto pde = physPage | 7 ;
175+ auto pde = physPage | additionalBits ;
167176
168177 stream.writePTE (start_address, pde);
169178 start_address += sizeof (pde);
@@ -183,7 +192,7 @@ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stre
183192 auto currPTE = startPTE;
184193 auto physPage = physAddress & g_pageMask;
185194 while (currPTE <= endPTE) {
186- auto pte = physPage | 7 ;
195+ auto pte = physPage | additionalBits ;
187196
188197 stream.writePTE (start_address, pte);
189198 start_address += sizeof (pte);
@@ -197,7 +206,7 @@ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stre
197206}
198207
199208template <typename Traits>
200- uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress) {
209+ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress, uint64_t additionalBits ) {
201210 auto startAddress = gfxAddress;
202211 auto endAddress = gfxAddress + blockSize - 1 ;
203212
@@ -227,7 +236,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
227236 auto currPML4 = startPML4;
228237 auto physPage = BaseClass::getPDPAddress (startPDP) & g_pageMask;
229238 while (currPML4 <= endPML4) {
230- auto pml4 = physPage | 7 ;
239+ auto pml4 = physPage | additionalBits ;
231240
232241 stream.writePTE (start_address, pml4);
233242 start_address += sizeof (pml4);
@@ -247,7 +256,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
247256 auto currPDP = startPDP;
248257 auto physPage = BaseClass::getPDEAddress (startPDE) & g_pageMask;
249258 while (currPDP <= endPDP) {
250- auto pdp = physPage | 7 ;
259+ auto pdp = physPage | additionalBits ;
251260
252261 stream.writePTE (start_address, pdp);
253262 start_address += sizeof (pdp);
@@ -267,7 +276,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
267276 auto currPDE = startPDE;
268277 auto physPage = BaseClass::getPTEAddress (startPTE) & g_pageMask;
269278 while (currPDE <= endPDE) {
270- auto pde = physPage | 7 ;
279+ auto pde = physPage | additionalBits ;
271280
272281 stream.writePTE (start_address, pde);
273282 start_address += sizeof (pde);
@@ -287,7 +296,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
287296 auto currPTE = startPTE;
288297 auto physPage = physAddress & g_pageMask;
289298 while (currPTE <= endPTE) {
290- auto pte = physPage | 7 ;
299+ auto pte = physPage | additionalBits ;
291300
292301 stream.writePTE (start_address, pte);
293302 start_address += sizeof (pte);
@@ -337,4 +346,4 @@ void AubPageTableHelper64<Traits>::createContext(typename Traits::Stream &stream
337346 stream.createContext (cmd);
338347}
339348
340- }
349+ } // namespace AubMemDump
0 commit comments