[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));
|
reinterpret_cast<cpu::MMIOWriteCallback>(MMIOWriteRegisterThunk));
|
||||||
|
|
||||||
// Setup XMA context data.
|
// Setup XMA context data.
|
||||||
context_data_first_ptr_ = memory()->SystemHeapAlloc(
|
// TODO(Triang3l): Find out what address is used on a real console and why it
|
||||||
sizeof(XMA_CONTEXT_DATA) * kContextCount, 256, kSystemHeapPhysical);
|
// 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_last_ptr_ =
|
||||||
context_data_first_ptr_ + (sizeof(XMA_CONTEXT_DATA) * kContextCount - 1);
|
context_data_first_ptr_ + (sizeof(XMA_CONTEXT_DATA) * kContextCount - 1);
|
||||||
register_file_[XE_XMA_REG_CONTEXT_ARRAY_ADDRESS].u32 =
|
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) {
|
uint32_t system_heap_flags) {
|
||||||
// TODO(benvanik): lightweight pool.
|
// TODO(benvanik): lightweight pool.
|
||||||
bool is_physical = !!(system_heap_flags & kSystemHeapPhysical);
|
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;
|
uint32_t address;
|
||||||
if (!heap->Alloc(size, alignment,
|
if (!heap->Alloc(size, alignment,
|
||||||
kMemoryAllocationReserve | kMemoryAllocationCommit,
|
kMemoryAllocationReserve | kMemoryAllocationCommit,
|
||||||
|
|
|
@ -31,6 +31,7 @@ class Memory;
|
||||||
enum SystemHeapFlag : uint32_t {
|
enum SystemHeapFlag : uint32_t {
|
||||||
kSystemHeapVirtual = 1 << 0,
|
kSystemHeapVirtual = 1 << 0,
|
||||||
kSystemHeapPhysical = 1 << 1,
|
kSystemHeapPhysical = 1 << 1,
|
||||||
|
kSystemHeapLargePages = 1 << 2,
|
||||||
|
|
||||||
kSystemHeapDefault = kSystemHeapVirtual,
|
kSystemHeapDefault = kSystemHeapVirtual,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue