[APU] Temp XMA context allocation region workaround
This commit is contained in:
parent
0faafd738a
commit
968c337d22
|
@ -105,8 +105,11 @@ X_STATUS XmaDecoder::Setup(kernel::KernelState* kernel_state) {
|
|||
reinterpret_cast<cpu::MMIOWriteCallback>(MMIOWriteRegisterThunk));
|
||||
|
||||
// Setup XMA context data.
|
||||
context_data_first_ptr_ = memory()->SystemHeapAlloc(
|
||||
sizeof(XMA_CONTEXT_DATA) * kContextCount, 256, kSystemHeapPhysical);
|
||||
// TODO(Triang3l): Find out what address is used on a real console and why it
|
||||
// doesn't work when allocated in 4 KB pages.
|
||||
context_data_first_ptr_ =
|
||||
memory()->SystemHeapAlloc(sizeof(XMA_CONTEXT_DATA) * kContextCount, 256,
|
||||
kSystemHeapPhysical | kSystemHeapLargePages);
|
||||
context_data_last_ptr_ =
|
||||
context_data_first_ptr_ + (sizeof(XMA_CONTEXT_DATA) * kContextCount - 1);
|
||||
register_file_[XE_XMA_REG_CONTEXT_ARRAY_ADDRESS].u32 =
|
||||
|
|
|
@ -507,7 +507,9 @@ uint32_t Memory::SystemHeapAlloc(uint32_t size, uint32_t alignment,
|
|||
uint32_t system_heap_flags) {
|
||||
// TODO(benvanik): lightweight pool.
|
||||
bool is_physical = !!(system_heap_flags & kSystemHeapPhysical);
|
||||
auto heap = LookupHeapByType(is_physical, 4096);
|
||||
auto heap = LookupHeapByType(
|
||||
is_physical,
|
||||
(system_heap_flags & kSystemHeapLargePages) ? (64 * 1024) : 4096);
|
||||
uint32_t address;
|
||||
if (!heap->Alloc(size, alignment,
|
||||
kMemoryAllocationReserve | kMemoryAllocationCommit,
|
||||
|
|
|
@ -31,6 +31,7 @@ class Memory;
|
|||
enum SystemHeapFlag : uint32_t {
|
||||
kSystemHeapVirtual = 1 << 0,
|
||||
kSystemHeapPhysical = 1 << 1,
|
||||
kSystemHeapLargePages = 1 << 2,
|
||||
|
||||
kSystemHeapDefault = kSystemHeapVirtual,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue