GSP: Fix appending of interrupts to the shared memory buffer
The code was previously appending the interrupt to after the end of the buffer, instead of at the end.pull/1/head
parent
9e084826b8
commit
7630b31672
|
|
@ -210,12 +210,12 @@ void SignalInterrupt(InterruptId interrupt_id) {
|
|||
}
|
||||
for (int thread_id = 0; thread_id < 0x4; ++thread_id) {
|
||||
InterruptRelayQueue* interrupt_relay_queue = GetInterruptRelayQueue(thread_id);
|
||||
interrupt_relay_queue->number_interrupts = interrupt_relay_queue->number_interrupts + 1;
|
||||
|
||||
u8 next = interrupt_relay_queue->index;
|
||||
next += interrupt_relay_queue->number_interrupts;
|
||||
next = next % 0x34; // 0x34 is the number of interrupt slots
|
||||
|
||||
interrupt_relay_queue->number_interrupts += 1;
|
||||
|
||||
interrupt_relay_queue->slot[next] = interrupt_id;
|
||||
interrupt_relay_queue->error_code = 0x0; // No error
|
||||
|
||||
|
|
|
|||
|
|
@ -45,21 +45,16 @@ enum class CommandId : u32 {
|
|||
|
||||
/// GSP thread interrupt relay queue
|
||||
struct InterruptRelayQueue {
|
||||
union {
|
||||
u32 hex;
|
||||
// Index of last interrupt in the queue
|
||||
u8 index;
|
||||
// Number of interrupts remaining to be processed by the userland code
|
||||
u8 number_interrupts;
|
||||
// Error code - zero on success, otherwise an error has occurred
|
||||
u8 error_code;
|
||||
u8 padding1;
|
||||
|
||||
// Index of last interrupt in the queue
|
||||
BitField<0,8,u32> index;
|
||||
|
||||
// Number of interrupts remaining to be processed by the userland code
|
||||
BitField<8,8,u32> number_interrupts;
|
||||
|
||||
// Error code - zero on success, otherwise an error has occurred
|
||||
BitField<16,8,u32> error_code;
|
||||
};
|
||||
|
||||
u32 unk0;
|
||||
u32 unk1;
|
||||
u32 missed_PDC0;
|
||||
u32 missed_PDC1;
|
||||
|
||||
InterruptId slot[0x34]; ///< Interrupt ID slots
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue