wut  1.0.0-beta9
Wii U Toolchain
taskqueue.h
Go to the documentation of this file.
1 #pragma once
2 #include <wut.h>
3 #include "time.h"
4 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 typedef struct MPTask MPTask;
16 typedef struct MPTaskInfo MPTaskInfo;
17 typedef struct MPTaskQueue MPTaskQueue;
19 
20 typedef uint32_t (*MPTaskFunc)(uint32_t, uint32_t);
21 
22 typedef enum MPTaskState
23 {
28 } MPTaskState;
29 
30 typedef enum MPTaskQueueState
31 {
38 
39 #pragma pack(push, 1)
40 struct MPTaskInfo
41 {
43  uint32_t result;
44  uint32_t coreID;
46 };
47 #pragma pack(pop)
48 WUT_CHECK_OFFSET(MPTaskInfo, 0x00, state);
49 WUT_CHECK_OFFSET(MPTaskInfo, 0x04, result);
50 WUT_CHECK_OFFSET(MPTaskInfo, 0x08, coreID);
51 WUT_CHECK_OFFSET(MPTaskInfo, 0x0C, duration);
52 WUT_CHECK_SIZE(MPTaskInfo, 0x14);
53 
54 #pragma pack(push, 1)
55 struct MPTask
56 {
57  MPTask *self;
61  uint32_t userArg1;
62  uint32_t userArg2;
63  uint32_t result;
64  uint32_t coreID;
66  void *userData;
67 };
68 #pragma pack(pop)
69 WUT_CHECK_OFFSET(MPTask, 0x00, self);
70 WUT_CHECK_OFFSET(MPTask, 0x04, queue);
71 WUT_CHECK_OFFSET(MPTask, 0x08, state);
72 WUT_CHECK_OFFSET(MPTask, 0x0C, func);
73 WUT_CHECK_OFFSET(MPTask, 0x10, userArg1);
74 WUT_CHECK_OFFSET(MPTask, 0x14, userArg2);
75 WUT_CHECK_OFFSET(MPTask, 0x18, result);
76 WUT_CHECK_OFFSET(MPTask, 0x1C, coreID);
77 WUT_CHECK_OFFSET(MPTask, 0x20, duration);
78 WUT_CHECK_OFFSET(MPTask, 0x28, userData);
79 WUT_CHECK_SIZE(MPTask, 0x2C);
80 
82 {
84  uint32_t tasks;
85  uint32_t tasksReady;
86  uint32_t tasksRunning;
87  uint32_t tasksFinished;
88 };
89 WUT_CHECK_OFFSET(MPTaskQueueInfo, 0x00, state);
90 WUT_CHECK_OFFSET(MPTaskQueueInfo, 0x04, tasks);
91 WUT_CHECK_OFFSET(MPTaskQueueInfo, 0x08, tasksReady);
92 WUT_CHECK_OFFSET(MPTaskQueueInfo, 0x0C, tasksRunning);
93 WUT_CHECK_OFFSET(MPTaskQueueInfo, 0x10, tasksFinished);
94 WUT_CHECK_SIZE(MPTaskQueueInfo, 0x14);
95 
97 {
98  MPTaskQueue *self;
100  uint32_t tasks;
101  uint32_t tasksReady;
102  uint32_t tasksRunning;
103  WUT_UNKNOWN_BYTES(4);
104  uint32_t tasksFinished;
105  WUT_UNKNOWN_BYTES(8);
106  uint32_t queueIndex;
107  WUT_UNKNOWN_BYTES(8);
108  uint32_t queueSize;
109  WUT_UNKNOWN_BYTES(4);
111  uint32_t queueMaxSize;
113 };
114 WUT_CHECK_OFFSET(MPTaskQueue, 0x00, self);
115 WUT_CHECK_OFFSET(MPTaskQueue, 0x04, state);
116 WUT_CHECK_OFFSET(MPTaskQueue, 0x08, tasks);
117 WUT_CHECK_OFFSET(MPTaskQueue, 0x0C, tasksReady);
118 WUT_CHECK_OFFSET(MPTaskQueue, 0x10, tasksRunning);
119 WUT_CHECK_OFFSET(MPTaskQueue, 0x18, tasksFinished);
120 WUT_CHECK_OFFSET(MPTaskQueue, 0x24, queueIndex);
121 WUT_CHECK_OFFSET(MPTaskQueue, 0x30, queueSize);
122 WUT_CHECK_OFFSET(MPTaskQueue, 0x38, queue);
123 WUT_CHECK_OFFSET(MPTaskQueue, 0x3C, queueMaxSize);
124 WUT_CHECK_OFFSET(MPTaskQueue, 0x40, lock);
125 WUT_CHECK_SIZE(MPTaskQueue, 0x50);
126 
127 void
128 MPInitTaskQ(MPTaskQueue *queue,
129  MPTask **queueBuffer,
130  uint32_t queueBufferLen);
131 
132 BOOL
133 MPTermTaskQ(MPTaskQueue *queue);
134 
135 BOOL
137  MPTaskQueueInfo *info);
138 
139 BOOL
140 MPStartTaskQ(MPTaskQueue *queue);
141 
142 BOOL
143 MPStopTaskQ(MPTaskQueue *queue);
144 
145 BOOL
146 MPResetTaskQ(MPTaskQueue *queue);
147 
148 BOOL
149 MPEnqueTask(MPTaskQueue *queue,
150  MPTask *task);
151 
152 MPTask *
153 MPDequeTask(MPTaskQueue *queue);
154 
155 uint32_t
157  MPTask **queueBuffer,
158  uint32_t queueBufferLen);
159 
160 BOOL
161 MPWaitTaskQ(MPTaskQueue *queue,
162  MPTaskQueueState mask);
163 
164 BOOL
166  MPTaskQueueState wmask,
167  OSTime timeout);
168 
169 BOOL
171  uint32_t unk);
172 
173 void
174 MPInitTask(MPTask *task,
175  MPTaskFunc func,
176  uint32_t userArg1,
177  uint32_t userArg2);
178 
179 BOOL
180 MPTermTask(MPTask* task);
181 
182 BOOL
183 MPGetTaskInfo(MPTask *task,
184  MPTaskInfo *info);
185 
186 void *
188 
189 void
191  void *userData);
192 
193 BOOL
195  uint32_t count);
196 
197 BOOL
198 MPRunTask(MPTask *task);
199 
200 #ifdef __cplusplus
201 }
202 #endif
203 
MP_TASK_QUEUE_STATE_INITIALISED
@ MP_TASK_QUEUE_STATE_INITIALISED
Definition: taskqueue.h:32
OSTime
int64_t OSTime
Definition: time.h:18
MPTaskQueue::queueIndex
uint32_t queueIndex
Definition: taskqueue.h:106
OSSpinLock
struct OSSpinLock OSSpinLock
Definition: spinlock.h:15
MPGetTaskQInfo
BOOL MPGetTaskQInfo(MPTaskQueue *queue, MPTaskQueueInfo *info)
MPEnqueTask
BOOL MPEnqueTask(MPTaskQueue *queue, MPTask *task)
MPTaskQueueInfo::tasksFinished
uint32_t tasksFinished
Definition: taskqueue.h:87
MPTaskQueue
Definition: taskqueue.h:96
MPTaskQueueInfo::state
MPTaskQueueState state
Definition: taskqueue.h:83
MPTaskQueueInfo::tasksRunning
uint32_t tasksRunning
Definition: taskqueue.h:86
MP_TASK_STATE_FINISHED
@ MP_TASK_STATE_FINISHED
Definition: taskqueue.h:27
MPStartTaskQ
BOOL MPStartTaskQ(MPTaskQueue *queue)
MPTaskQueue::queueSize
uint32_t queueSize
Definition: taskqueue.h:108
MP_TASK_QUEUE_STATE_READY
@ MP_TASK_QUEUE_STATE_READY
Definition: taskqueue.h:33
MPTaskState
MPTaskState
Definition: taskqueue.h:22
MPTaskQueueState
MPTaskQueueState
Definition: taskqueue.h:30
MPTaskInfo::coreID
uint32_t coreID
Definition: taskqueue.h:44
MP_TASK_STATE_READY
@ MP_TASK_STATE_READY
Definition: taskqueue.h:25
MP_TASK_QUEUE_STATE_FINISHED
@ MP_TASK_QUEUE_STATE_FINISHED
Definition: taskqueue.h:36
MPPrintTaskQStats
BOOL MPPrintTaskQStats(MPTaskQueue *queue, uint32_t unk)
MPTask::userArg2
uint32_t userArg2
Definition: taskqueue.h:62
MPTermTask
BOOL MPTermTask(MPTask *task)
MPWaitTaskQ
BOOL MPWaitTaskQ(MPTaskQueue *queue, MPTaskQueueState mask)
MPTaskInfo::state
MPTaskState state
Definition: taskqueue.h:42
MPGetTaskInfo
BOOL MPGetTaskInfo(MPTask *task, MPTaskInfo *info)
wut.h
MPTask::func
MPTaskFunc func
Definition: taskqueue.h:60
MPTaskQueueInfo
Definition: taskqueue.h:81
MPRunTask
BOOL MPRunTask(MPTask *task)
MPTask
Definition: taskqueue.h:55
time.h
MPTaskInfo::result
uint32_t result
Definition: taskqueue.h:43
MPTaskInfo::duration
OSTime duration
Definition: taskqueue.h:45
MPResetTaskQ
BOOL MPResetTaskQ(MPTaskQueue *queue)
MPTaskQueue::queue
MPTask ** queue
Definition: taskqueue.h:110
MPTask::userData
void * userData
Definition: taskqueue.h:66
MPSetTaskUserData
void MPSetTaskUserData(MPTask *task, void *userData)
MPTaskQueue::queueMaxSize
uint32_t queueMaxSize
Definition: taskqueue.h:111
MPTaskQueueInfo::tasks
uint32_t tasks
Definition: taskqueue.h:84
MP_TASK_STATE_INITIALISED
@ MP_TASK_STATE_INITIALISED
Definition: taskqueue.h:24
MPTask::queue
MPTaskQueue * queue
Definition: taskqueue.h:58
MPRunTasksFromTaskQ
BOOL MPRunTasksFromTaskQ(MPTaskQueue *queue, uint32_t count)
MPStopTaskQ
BOOL MPStopTaskQ(MPTaskQueue *queue)
MPTaskQueueInfo::tasksReady
uint32_t tasksReady
Definition: taskqueue.h:85
MPInitTask
void MPInitTask(MPTask *task, MPTaskFunc func, uint32_t userArg1, uint32_t userArg2)
MPTask::userArg1
uint32_t userArg1
Definition: taskqueue.h:61
MP_TASK_QUEUE_STATE_STOPPING
@ MP_TASK_QUEUE_STATE_STOPPING
Definition: taskqueue.h:34
MPTaskFunc
uint32_t(* MPTaskFunc)(uint32_t, uint32_t)
Definition: taskqueue.h:20
MPWaitTaskQWithTimeout
BOOL MPWaitTaskQWithTimeout(MPTaskQueue *queue, MPTaskQueueState wmask, OSTime timeout)
MPDequeTasks
uint32_t MPDequeTasks(MPTaskQueue *queue, MPTask **queueBuffer, uint32_t queueBufferLen)
MPDequeTask
MPTask * MPDequeTask(MPTaskQueue *queue)
MPTermTaskQ
BOOL MPTermTaskQ(MPTaskQueue *queue)
MP_TASK_QUEUE_STATE_STOPPED
@ MP_TASK_QUEUE_STATE_STOPPED
Definition: taskqueue.h:35
MPTaskInfo
Definition: taskqueue.h:40
MPInitTaskQ
void MPInitTaskQ(MPTaskQueue *queue, MPTask **queueBuffer, uint32_t queueBufferLen)
BOOL
int32_t BOOL
Definition: wut_types.h:4
MPGetTaskUserData
void * MPGetTaskUserData(MPTask *task)
MPTaskQueue::lock
OSSpinLock lock
Definition: taskqueue.h:112
MP_TASK_STATE_RUNNING
@ MP_TASK_STATE_RUNNING
Definition: taskqueue.h:26