Files
ac-decomp/include/irqmgr.h
T
2023-04-29 08:04:22 -04:00

68 lines
1.4 KiB
C

#ifndef IRQMGR_H
#define IRQMGR_H
#include "types.h"
#include "dolphin/os/OSTime.h"
#include "dolphin/os/OSTimer.h"
#include "dolphin/os/OSMessage.h"
#ifdef __cplusplus
extern "C" {
#endif
#define IRQ_RESET_NORMAL 0
#define IRQ_RESET_PRENMI 1
#define IRQ_RESET_DELAY 2
#define IRQMGR_MESSAGES_MAX 8
typedef struct {
s16 type;
s8 data[30];
} irqmgr_mesg_t;
typedef struct irqmgr_client_s {
struct irqmgr_client_s* next;
OSMessageQueue* msgQueue;
} irqmgr_client_t;
typedef struct {
irqmgr_mesg_t msgRetrace;
irqmgr_mesg_t msgPreNMI;
irqmgr_mesg_t msgDelayPreNMI;
OSMessageQueue _msgQueue;
OSMessage _msgBuf[IRQMGR_MESSAGES_MAX];
union {
OSThread thread;
struct {
u8 unused[sizeof(OSThread) - 2 * sizeof(void*)];
irqmgr_client_t* clients;
u8 prenmi;
};
};
OSTime prenmi_time;
OSTimer timer;
OSTime retraceTime;
} irqmgr_t;
extern void irqmgr_AddClient(irqmgr_client_t* client, OSMessageQueue* msgqueue);
/* @unused extern void irqmgr_RemoveClient(irqmgr_client_t* client) */
extern void CreateIRQManager(void* stack, size_t stack_size, int priority, u8 retracecount);
/* probably declared in os_vi.h */
extern void osViSetEvent(OSMessageQueue* mesgq, OSMessage msg, u32 retcount);
extern volatile int ResetStatus;
extern volatile OSTime ResetTime;
extern volatile OSTime RetraceTime;
extern volatile int RetraceCount;
extern irqmgr_t irqmgr_class;
#ifdef __cplusplus
};
#endif
#endif