wut  v1.5.0
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 
16 typedef uint16_t OSContextState;
17 
21 };
22 
23 typedef struct OSContext OSContext;
24 
25 #define OS_CONTEXT_TAG 0x4F53436F6E747874ull
26 
27 struct WUT_ALIGNAS(8) OSContext
28 {
30  uint64_t tag;
31 
32  uint32_t gpr[32];
33  uint32_t cr;
34  uint32_t lr;
35  uint32_t ctr;
36  uint32_t xer;
37  uint32_t srr0;
38  uint32_t srr1;
39  uint32_t dsisr;
40  uint32_t dar;
41  WUT_UNKNOWN_BYTES(0xC);
42  uint32_t fpscr;
43  double fpr[32];
44  uint16_t spinLockCount;
46  uint32_t gqr[8];
48  uint32_t upir;
49  double psf[32];
50  uint64_t coretime[3];
51  uint64_t starttime;
52  uint32_t error;
53  WUT_UNKNOWN_BYTES(4);
54  uint32_t pmc1;
55  uint32_t pmc2;
56  uint32_t pmc3;
57  uint32_t pmc4;
58  uint32_t mmcr0;
59  uint32_t mmcr1;
60 };
61 WUT_CHECK_OFFSET(OSContext, 0x00, tag);
62 WUT_CHECK_OFFSET(OSContext, 0x08, gpr);
63 WUT_CHECK_OFFSET(OSContext, 0x88, cr);
64 WUT_CHECK_OFFSET(OSContext, 0x8c, lr);
65 WUT_CHECK_OFFSET(OSContext, 0x90, ctr);
66 WUT_CHECK_OFFSET(OSContext, 0x94, xer);
67 WUT_CHECK_OFFSET(OSContext, 0x98, srr0);
68 WUT_CHECK_OFFSET(OSContext, 0x9c, srr1);
69 WUT_CHECK_OFFSET(OSContext, 0xa0, dsisr);
70 WUT_CHECK_OFFSET(OSContext, 0xa4, dar);
71 WUT_CHECK_OFFSET(OSContext, 0xb4, fpscr);
72 WUT_CHECK_OFFSET(OSContext, 0xb8, fpr);
73 WUT_CHECK_OFFSET(OSContext, 0x1b8, spinLockCount);
74 WUT_CHECK_OFFSET(OSContext, 0x1ba, state);
75 WUT_CHECK_OFFSET(OSContext, 0x1bc, gqr);
76 WUT_CHECK_OFFSET(OSContext, 0x1dc, upir);
77 WUT_CHECK_OFFSET(OSContext, 0x1e0, psf);
78 WUT_CHECK_OFFSET(OSContext, 0x2e0, coretime);
79 WUT_CHECK_OFFSET(OSContext, 0x2f8, starttime);
80 WUT_CHECK_OFFSET(OSContext, 0x300, error);
81 WUT_CHECK_OFFSET(OSContext, 0x308, pmc1);
82 WUT_CHECK_OFFSET(OSContext, 0x30c, pmc2);
83 WUT_CHECK_OFFSET(OSContext, 0x310, pmc3);
84 WUT_CHECK_OFFSET(OSContext, 0x314, pmc4);
85 WUT_CHECK_OFFSET(OSContext, 0x318, mmcr0);
86 WUT_CHECK_OFFSET(OSContext, 0x31c, mmcr1);
87 WUT_CHECK_SIZE(OSContext, 0x320);
88 
89 void
91  void *entry,
92  void *stack);
93 
94 void
96 
97 void
99 
100 uint32_t
102 
103 void
105 
106 void
108 
109 OSContext *
111 
112 void
114 
115 void *
116 OSSwitchStack(void *stack);
117 
118 void
120 
121 void
123 
124 #ifdef __cplusplus
125 }
126 #endif
127 
uint32_t upir
Current core index.
Definition: context.h:48
uint32_t dar
Definition: context.h:40
uint32_t pmc4
Definition: context.h:57
uint32_t fpscr
Definition: context.h:41
uint64_t tag
Should always be set to the value OS_CONTEXT_TAG.
Definition: context.h:30
uint32_t pmc1
Definition: context.h:53
uint32_t srr0
Definition: context.h:37
uint32_t lr
Definition: context.h:34
OSContextState state
Definition: context.h:45
uint32_t cr
Definition: context.h:33
uint32_t srr1
Definition: context.h:38
uint32_t error
Definition: context.h:52
uint32_t mmcr1
Definition: context.h:59
uint32_t xer
Definition: context.h:36
uint32_t ctr
Definition: context.h:35
uint16_t spinLockCount
Definition: context.h:44
uint32_t pmc3
Definition: context.h:56
uint32_t pmc2
Definition: context.h:55
uint32_t dsisr
Definition: context.h:39
uint64_t starttime
Definition: context.h:51
uint32_t mmcr0
Definition: context.h:58
void OSSetCurrentContext(OSContext *context)
OSContext * OSGetCurrentContext()
uint16_t OSContextState
A bitfield of enum OS_CONTEXT_STATE.
Definition: context.h:16
void __OSSetCurrentUserContext(OSContext *context)
void * OSSwitchStack(void *stack)
void OSLoadContext(OSContext *context)
void OSSaveFPUContext(OSContext *context)
void __OSSetAndLoadContext(OSContext *context)
uint32_t OSSaveContext(OSContext *context)
OS_CONTEXT_STATE
Definition: context.h:18
void OSDumpContext(OSContext *context)
void OSInitContext(OSContext *context, void *entry, void *stack)
void OSLoadFPUContext(OSContext *context)
@ OS_CONTEXT_STATE_OSCALLBACK
Definition: context.h:19
@ OS_CONTEXT_STATE_USERMODE_SAVED
Definition: context.h:20