mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-24 01:00:09 +00:00
Add WriteHWRegRepeat
This commit is contained in:
parent
50a0c4f14f
commit
ac27ce2141
@ -167,6 +167,29 @@ static void WriteHWRegsWithMask(Service::Interface* self) {
|
||||
WriteHWRegsWithMask(reg_addr, size, src_data, mask_data);
|
||||
}
|
||||
|
||||
static void WriteHWRegRepeat(Service::Interface* self) {
|
||||
u32* cmd_buff = Kernel::GetCommandBuffer();
|
||||
u32 reg_addr = cmd_buff[1];
|
||||
u32 size = cmd_buff[2];
|
||||
|
||||
// TODO: Return proper error codes
|
||||
if (reg_addr + size >= 0x420000) {
|
||||
LOG_ERROR(Service_GSP, "Write address out of range! (address=0x%08x, size=0x%08x)", reg_addr, size);
|
||||
return;
|
||||
}
|
||||
|
||||
//Taking size to mean amount of times the reg is hammered.
|
||||
/*// size should be word-aligned
|
||||
if ((size % 4) != 0) {
|
||||
LOG_ERROR(Service_GSP, "Invalid size 0x%08x", size);
|
||||
return;
|
||||
}*/
|
||||
|
||||
u32 data = cmd_buff[4];
|
||||
|
||||
for(int i = 0;i<size;i++) GPU::Write<u32>(reg_addr,data);
|
||||
}
|
||||
|
||||
/// Read a GSP GPU hardware register
|
||||
static void ReadHWRegs(Service::Interface* self) {
|
||||
u32* cmd_buff = Kernel::GetCommandBuffer();
|
||||
@ -452,7 +475,7 @@ static void TriggerCmdReqQueue(Service::Interface* self) {
|
||||
const Interface::FunctionInfo FunctionTable[] = {
|
||||
{0x00010082, WriteHWRegs, "WriteHWRegs"},
|
||||
{0x00020084, WriteHWRegsWithMask, "WriteHWRegsWithMask"},
|
||||
{0x00030082, nullptr, "WriteHWRegRepeat"},
|
||||
{0x00030082, WriteHWRegRepeat, "WriteHWRegRepeat"},
|
||||
{0x00040080, ReadHWRegs, "ReadHWRegs"},
|
||||
{0x00050200, SetBufferSwap, "SetBufferSwap"},
|
||||
{0x00060082, nullptr, "SetCommandList"},
|
||||
|
Loading…
Reference in New Issue
Block a user