wut  1.0.0-alpha
Wii U Toolchain
context.h
Go to the documentation of this file.
1 #pragma once
2 #include <wut.h>
3 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 typedef struct OSContext OSContext;
16 
17 #define OS_CONTEXT_TAG 0x4F53436F6E747874ull
18 
19 struct OSContext
20 {
22  uint64_t tag;
23 
24  uint32_t gpr[32];
25  uint32_t cr;
26  uint32_t lr;
27  uint32_t ctr;
28  uint32_t xer;
29  uint32_t srr0;
30  uint32_t srr1;
31  WUT_UNKNOWN_BYTES(0x14);
32  uint32_t fpscr;
33  double fpr[32];
34  uint16_t spinLockCount;
35  uint16_t state;
36  uint32_t gqr[8];
37  WUT_UNKNOWN_BYTES(4);
38  double psf[32];
39  uint64_t coretime[3];
40  uint64_t starttime;
41  uint32_t error;
42  WUT_UNKNOWN_BYTES(4);
43  uint32_t pmc1;
44  uint32_t pmc2;
45  uint32_t pmc3;
46  uint32_t pmc4;
47  uint32_t mmcr0;
48  uint32_t mmcr1;
49 };
50 WUT_CHECK_OFFSET(OSContext, 0x00, tag);
51 WUT_CHECK_OFFSET(OSContext, 0x08, gpr);
52 WUT_CHECK_OFFSET(OSContext, 0x88, cr);
53 WUT_CHECK_OFFSET(OSContext, 0x8c, lr);
54 WUT_CHECK_OFFSET(OSContext, 0x90, ctr);
55 WUT_CHECK_OFFSET(OSContext, 0x94, xer);
56 WUT_CHECK_OFFSET(OSContext, 0x98, srr0);
57 WUT_CHECK_OFFSET(OSContext, 0x9c, srr1);
58 WUT_CHECK_OFFSET(OSContext, 0xb4, fpscr);
59 WUT_CHECK_OFFSET(OSContext, 0xb8, fpr);
60 WUT_CHECK_OFFSET(OSContext, 0x1b8, spinLockCount);
61 WUT_CHECK_OFFSET(OSContext, 0x1ba, state);
62 WUT_CHECK_OFFSET(OSContext, 0x1bc, gqr);
63 WUT_CHECK_OFFSET(OSContext, 0x1e0, psf);
64 WUT_CHECK_OFFSET(OSContext, 0x2e0, coretime);
65 WUT_CHECK_OFFSET(OSContext, 0x2f8, starttime);
66 WUT_CHECK_OFFSET(OSContext, 0x300, error);
67 WUT_CHECK_OFFSET(OSContext, 0x308, pmc1);
68 WUT_CHECK_OFFSET(OSContext, 0x30c, pmc2);
69 WUT_CHECK_OFFSET(OSContext, 0x310, pmc3);
70 WUT_CHECK_OFFSET(OSContext, 0x314, pmc4);
71 WUT_CHECK_OFFSET(OSContext, 0x318, mmcr0);
72 WUT_CHECK_OFFSET(OSContext, 0x31c, mmcr1);
73 WUT_CHECK_SIZE(OSContext, 0x320);
74 
75 void
76 OSInitContext(OSContext *context,
77  void *entry,
78  void *stack);
79 
80 void
81 OSDumpContext(OSContext *context);
82 
83 void
84 OSLoadContext(OSContext *context);
85 
86 uint32_t
87 OSSaveContext(OSContext *context);
88 
89 void
90 OSLoadFPUContext(OSContext *context);
91 
92 void
93 OSSaveFPUContext(OSContext *context);
94 
95 OSContext *
97 
98 void
100 
101 void *
102 OSSwitchStack(void *stack);
103 
104 #ifdef __cplusplus
105 }
106 #endif
107 
uint32_t mmcr0
Definition: context.h:47
uint32_t pmc4
Definition: context.h:46
uint64_t tag
Should always be set to the value OS_CONTEXT_TAG.
Definition: context.h:22
uint32_t mmcr1
Definition: context.h:48
void OSDumpContext(OSContext *context)
uint16_t state
Definition: context.h:35
uint32_t gqr[8]
Definition: context.h:36
uint32_t pmc1
Definition: context.h:43
void OSInitContext(OSContext *context, void *entry, void *stack)
uint32_t cr
Definition: context.h:25
double psf[32]
Definition: context.h:38
uint32_t pmc3
Definition: context.h:45
double fpr[32]
Definition: context.h:33
uint32_t srr1
Definition: context.h:30
void OSLoadFPUContext(OSContext *context)
uint32_t fpscr
Definition: context.h:32
uint32_t error
Definition: context.h:41
void OSSetCurrentContext(OSContext *context)
uint32_t xer
Definition: context.h:28
void OSSaveFPUContext(OSContext *context)
uint64_t coretime[3]
Definition: context.h:39
void OSLoadContext(OSContext *context)
uint64_t starttime
Definition: context.h:40
uint32_t pmc2
Definition: context.h:44
void * OSSwitchStack(void *stack)
OSContext * OSGetCurrentContext()
uint32_t ctr
Definition: context.h:27
uint32_t OSSaveContext(OSContext *context)
uint32_t srr0
Definition: context.h:29
uint32_t gpr[32]
Definition: context.h:24
uint16_t spinLockCount
Definition: context.h:34
uint32_t lr
Definition: context.h:26