summaryrefslogtreecommitdiff
path: root/include/ultra64/message.h
blob: 9b02d4f9cd375712dab2b979ad8b1960818cc41d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef ULTRA64_MESSAGE_H
#define ULTRA64_MESSAGE_H

#define OS_MESG_NOBLOCK         0
#define OS_MESG_BLOCK           1

#ifndef BBPLAYER
#define OS_NUM_EVENTS           15
#else
#define OS_NUM_EVENTS           31
#endif

#define OS_EVENT_SW1            0     /* CPU SW1 interrupt */
#define OS_EVENT_SW2            1     /* CPU SW2 interrupt */
#define OS_EVENT_CART           2     /* Cartridge interrupt: used by rmon */
#define OS_EVENT_COUNTER        3     /* Counter int: used by VI/Timer Mgr */
#define OS_EVENT_SP             4     /* SP task done interrupt */
#define OS_EVENT_SI             5     /* SI (controller) interrupt */
#define OS_EVENT_AI             6     /* AI interrupt */
#define OS_EVENT_VI             7     /* VI interrupt: used by VI/Timer Mgr */
#define OS_EVENT_PI             8     /* PI interrupt: used by PI Manager */
#define OS_EVENT_DP             9     /* DP full sync interrupt */
#define OS_EVENT_CPU_BREAK      10    /* CPU breakpoint: used by rmon */
#define OS_EVENT_SP_BREAK       11    /* SP breakpoint:  used by rmon */
#define OS_EVENT_FAULT          12    /* CPU fault event: used by rmon */
#define OS_EVENT_THREADSTATUS   13    /* CPU thread status: used by rmon */
#define OS_EVENT_PRENMI         14    /* Pre NMI interrupt */
#ifdef BBPLAYER
#define OS_EVENT_FLASH          23    /* NAND flash operation complete */
#define OS_EVENT_AES            24    /* AES decryption complete */
#define OS_EVENT_IDE            25    /* IDE transfer complete */
#define OS_EVENT_PI_ERR         26    /* PI Error? */
#define OS_EVENT_USB0           27    /* USB Controller 0 */
#define OS_EVENT_USB1           28    /* USB Controller 1 */
#define OS_EVENT_UNK_29         29    /* ? */
#define OS_EVENT_MD             30    /* Memory card removed */
#endif

#ifdef _LANGUAGE_C

#include "thread.h"

typedef void* OSMesg;
typedef u32 OSEvent;

typedef struct OSMesgQueue {
    /* 0x00 */ OSThread* mtqueue;
    /* 0x04 */ OSThread* fullqueue;
    /* 0x08 */ s32 validCount;
    /* 0x0C */ s32 first;
    /* 0x10 */ s32 msgCount;
    /* 0x14 */ OSMesg* msg;
} OSMesgQueue; // size = 0x18

/* Get count of valid messages in queue */
#define MQ_GET_COUNT(mq)    ((mq)->validCount)

/* Determine if message queue is empty or full */
#define MQ_IS_EMPTY(mq)     (MQ_GET_COUNT(mq) == 0)
#define MQ_IS_FULL(mq)      (MQ_GET_COUNT(mq) >= (mq)->msgCount)

#else

/* OSMesgQueue struct member offsets */

#define MQ_MTQUEUE      0x00
#define MQ_FULLQUEUE    0x04
#define MQ_VALIDCOUNT   0x08
#define MQ_FIRST        0x0C
#define MQ_MSGCOUNT     0x10
#define MQ_MSG          0x14

#endif

#endif