Fix GSP::GPU::RegisterInterruptRelayQueue and add ResetType defs

This commit is contained in:
wheremyfoodat 2022-09-18 19:08:16 +03:00
parent a91035abf4
commit a5384095df
5 changed files with 55 additions and 7 deletions

View file

@ -49,7 +49,7 @@ class Kernel {
return handleCounter++;
}
Handle makeEvent(u32 resetType);
Handle makeEvent(ResetType resetType);
Handle makeProcess();
Handle makePort(const char* name);
Handle makeSession(Handle port);
@ -61,7 +61,9 @@ class Kernel {
s32 getCurrentResourceValue(const KernelObject* limit, u32 resourceName);
u32 getMaxForResource(const KernelObject* limit, u32 resourceName);
u32 getTLSPointer();
std::string getProcessName(u32 pid);
const char* resetTypeToString(u32 type);
// SVC implementations
void createAddressArbiter();

View file

@ -38,6 +38,13 @@ enum ResourceTypes {
CPU_TIME = 9
};
// Reset types (for use with events and timers)
enum ResetType {
RESET_ONESHOT = 0, // When the primitive is signaled, it will wake up exactly one thread and will clear itself automatically.
RESET_STICKY = 1, // When the primitive is signaled, it will wake up all threads and it won't clear itself automatically.
RESET_PULSE = 2, // Only meaningful for timers: same as ONESHOT but it will periodically signal the timer instead of just once.
};
struct ResourceLimits {
Handle handle;
@ -49,6 +56,10 @@ struct ProcessData {
ResourceLimits limits;
};
struct EventData {
ResetType resetType = RESET_ONESHOT;
};
enum class PortType {
Generic,
ServiceManager // For the service manager port "srv:"

View file

@ -14,6 +14,7 @@ class GPUService {
// Service commands
void acquireRight(u32 messagePointer);
void registerInterruptRelayQueue(u32 messagePointer);
public:
GPUService(Memory& mem, u32& currentPID) : mem(mem), currentPID(currentPID) {}