1#[allow(unused_imports)]
2use self::super::root;
3use self::detail::*;
4pub mod detail;
5
6pub type Tick = u64;
7pub type LightEventType = u64;
8
9#[repr(C)]
10pub struct SemaphoreType {
11 _multiWaitObjectList: MultiWaitObjectList,
12 _state: u8,
13 _count: i32,
14 _maxCount: i32,
15 _csSemaphore: InternalCriticalSection,
16 _cvNotZero: InternalConditionVariable,
17}
18
19#[repr(C)]
20pub struct EventType {
21 pub _x0: *mut root::nn::os::EventType,
22 pub _x8: *mut root::nn::os::EventType,
23 pub isSignaled: bool,
24 pub initiallySignaled: bool,
25 pub shouldAutoClear: bool,
26 pub isInit: bool,
27 pub signalCounter: u32,
28 pub signalCounter2: u32,
29 pub crit: root::nn::os::detail::InternalCriticalSection,
30 pub condvar: root::nn::os::detail::InternalConditionVariable,
31}
32
33pub type Event = root::nn::os::EventType;
34pub const EventClearMode_EventClearMode_ManualClear: root::nn::os::EventClearMode = 0;
35pub const EventClearMode_EventClearMode_AutoClear: root::nn::os::EventClearMode = 1;
36pub type EventClearMode = u32;
37
38pub struct MessageQueueType {
39 pub _x0: u64,
40 pub _x8: u64,
41 pub _x10: u64,
42 pub _x18: u64,
43 pub Buffer: *mut u8,
44 pub MaxCount: u32,
45 pub Count: u32,
46 pub Offset: u32,
47 pub Initialized: bool,
48 pub _x38: root::nn::os::detail::InternalCriticalSection,
49 pub _x3C: root::nn::os::detail::InternalConditionVariable,
50 pub _x40: root::nn::os::detail::InternalConditionVariable,
51}
52
53
54#[repr(C)]
55#[derive(Debug, Copy, Clone)]
56pub struct ConditionVariableType {
57 pub _address: u8,
58}
59#[repr(C)]
60#[derive(Debug, Copy, Clone)]
61pub struct SystemEvent {
62 pub _unused: [u8; 0x28],
63}
64#[repr(C)]
65#[derive(Debug, Copy, Clone)]
66pub struct SystemEventType {
67 pub _unused: [u8; 0x29],
68}
69impl SystemEventType {
70 pub fn new(clear_mode: SystemEventClearMode) -> Self {
71 let x = Self { _unused: [0; 0x29] };
72 unsafe { CreateSystemEvent(&x, clear_mode, false) };
73 x
74 }
75}
76#[repr(C)]
77#[derive(Debug, Copy, Clone)]
78pub enum SystemEventClearMode {
79 Manual = 0,
80 Auto = 1,
81}
82extern "C" {
83 #[link_name = "\u{1}_ZN2nn2os11SetHostArgcEi"]
84 pub fn SetHostArgc(arg1: root::s32);
85}
86extern "C" {
87 #[link_name = "\u{1}_ZN2nn2os11GetHostArgcEv"]
88 pub fn GetHostArgc() -> root::s32;
89}
90extern "C" {
91 #[link_name = "\u{1}_ZN2nn2os11SetHostArgvEPPc"]
92 pub fn SetHostArgv(arg1: *mut *mut u8);
93}
94extern "C" {
95 #[link_name = "\u{1}_ZN2nn2os11GetHostArgvEv"]
96 pub fn GetHostArgv() -> *mut *mut u8;
97}
98extern "C" {
99 #[link_name = "\u{1}_ZN2nn2os30InitializeVirtualAddressMemoryEv"]
100 pub fn InitializeVirtualAddressMemory();
101}
102extern "C" {
103 #[link_name = "\u{1}_ZN2nn2os21AllocateAddressRegionEPmm"]
104 pub fn AllocateAddressRegion(arg1: *mut u64, arg2: u64) -> root::Result;
105}
106extern "C" {
107 #[link_name = "\u{1}_ZN2nn2os14AllocateMemoryEPmm"]
108 pub fn AllocateMemory(arg1: *mut u64, arg2: u64) -> root::Result;
109}
110extern "C" {
111 #[link_name = "\u{1}_ZN2nn2os19AllocateMemoryPagesEmm"]
112 pub fn AllocateMemoryPages(arg1: u64, arg2: u64) -> root::Result;
113}
114extern "C" {
115 #[link_name = "\u{1}_ZN2nn2os19AllocateMemoryBlockEPmm"]
116 pub fn AllocateMemoryBlock(arg1: *mut u64, arg2: u64);
117}
118extern "C" {
119 #[link_name = "\u{1}_ZN2nn2os15FreeMemoryBlockEmm"]
120 pub fn FreeMemoryBlock(arg1: u64, arg2: u64);
121}
122extern "C" {
123 #[link_name = "\u{1}_ZN2nn2os17SetMemoryHeapSizeEm"]
124 pub fn SetMemoryHeapSize(arg1: u64);
125}
126extern "C" {
127 #[link_name = "\u{1}_ZN2nn2os17CreateSystemEventEPNS0_15SystemEventTypeENS0_14EventClearModeEb"]
128 pub fn CreateSystemEvent(
129 arg1: *const SystemEventType,
130 clear_mode: SystemEventClearMode,
131 skip_init: bool,
132 ) -> root::Result;
133}
134extern "C" {
135 #[link_name = "\u{1}_ZN2nn2os18TryWaitSystemEventEPNS0_15SystemEventTypeE"]
136 pub fn TryWaitSystemEvent(arg1: *const SystemEventType) -> bool;
137}
138#[repr(C)]
139pub struct MutexType {
140 pub impl_: root::nnosMutexType,
141}
142
143
144extern "C" {
145 #[link_name = "\u{1}_ZN2nn2os15InitializeMutexEPNS0_9MutexTypeEbi"]
146 pub fn InitializeMutex(
147 arg1: *mut root::nn::os::MutexType,
148 arg2: bool,
149 arg3: root::s32,
150 );
151}
152extern "C" {
153 #[link_name = "\u{1}_ZN2nn2os13FinalizeMutexEPNS0_9MutexTypeE"]
154 pub fn FinalizeMutex(arg1: *mut root::nn::os::MutexType);
155}
156extern "C" {
157 #[link_name = "\u{1}_ZN2nn2os9LockMutexEPNS0_9MutexTypeE"]
158 pub fn LockMutex(arg1: *mut root::nn::os::MutexType);
159}
160extern "C" {
161 #[link_name = "\u{1}_ZN2nn2os12TryLockMutexEPNS0_9MutexTypeE"]
162 pub fn TryLockMutex(arg1: *mut root::nn::os::MutexType) -> bool;
163}
164extern "C" {
165 #[link_name = "\u{1}_ZN2nn2os11UnlockMutexEPNS0_9MutexTypeE"]
166 pub fn UnlockMutex(arg1: *mut root::nn::os::MutexType);
167}
168extern "C" {
169 #[link_name = "\u{1}_ZN2nn2os28IsMutexLockedByCurrentThreadEPKNS0_9MutexTypeE"]
170 pub fn IsMutexLockedByCurrentThread(arg1: *const root::nn::os::MutexType) -> bool;
171}
172extern "C" {
173 #[link_name = "\u{1}_ZN2nn2os22InitializeMessageQueueEPNS0_16MessageQueueTypeEPmm"]
174 pub fn InitializeMessageQueue(
175 arg1: *mut root::nn::os::MessageQueueType,
176 buf: *mut u64,
177 queueCount: u64,
178 );
179}
180extern "C" {
181 #[link_name = "\u{1}_ZN2nn2os20FinalizeMessageQueueEPNS0_16MessageQueueTypeE"]
182 pub fn FinalizeMessageQueue(arg1: *mut root::nn::os::MessageQueueType);
183}
184extern "C" {
185 #[link_name = "\u{1}_ZN2nn2os19TrySendMessageQueueEPNS0_16MessageQueueTypeEm"]
186 pub fn TrySendMessageQueue(
187 arg1: *mut root::nn::os::MessageQueueType,
188 arg2: u64,
189 ) -> bool;
190}
191extern "C" {
192 #[link_name = "\u{1}_ZN2nn2os16SendMessageQueueEPNS0_16MessageQueueTypeEm"]
193 pub fn SendMessageQueue(arg1: *mut root::nn::os::MessageQueueType, arg2: u64);
194}
195extern "C" {
196 #[link_name = "\u{1}_ZN2nn2os21TimedSendMessageQueueEPNS0_16MessageQueueTypeEmNS_8TimeSpanE"]
197 pub fn TimedSendMessageQueue(
198 arg1: *mut root::nn::os::MessageQueueType,
199 arg2: u64,
200 arg3: root::nn::TimeSpan,
201 ) -> bool;
202}
203extern "C" {
204 #[link_name = "\u{1}_ZN2nn2os22TryReceiveMessageQueueEPmPNS0_16MessageQueueTypeE"]
205 pub fn TryReceiveMessageQueue(
206 out: *mut u64,
207 arg1: *mut root::nn::os::MessageQueueType,
208 ) -> bool;
209}
210extern "C" {
211 #[link_name = "\u{1}_ZN2nn2os19ReceiveMessageQueueEPmPNS0_16MessageQueueTypeE"]
212 pub fn ReceiveMessageQueue(
213 out: *mut u64,
214 arg1: *mut root::nn::os::MessageQueueType,
215 );
216}
217extern "C" {
218 #[link_name = "\u{1}_ZN2nn2os24TimedReceiveMessageQueueEPmPNS0_16MessageQueueTypeENS_8TimeSpanE"]
219 pub fn TimedReceiveMessageQueue(
220 out: *mut u64,
221 arg1: *mut root::nn::os::MessageQueueType,
222 arg2: root::nn::TimeSpan,
223 ) -> bool;
224}
225extern "C" {
226 #[link_name = "\u{1}_ZN2nn2os19TryPeekMessageQueueEPmPKNS0_16MessageQueueTypeE"]
227 pub fn TryPeekMessageQueue(
228 arg1: *mut u64,
229 arg2: *const root::nn::os::MessageQueueType,
230 ) -> bool;
231}
232extern "C" {
233 #[link_name = "\u{1}_ZN2nn2os16PeekMessageQueueEPmPKNS0_16MessageQueueTypeE"]
234 pub fn PeekMessageQueue(
235 arg1: *mut u64,
236 arg2: *const root::nn::os::MessageQueueType,
237 );
238}
239extern "C" {
240 #[link_name = "\u{1}_ZN2nn2os21TimedPeekMessageQueueEPmPKNS0_16MessageQueueTypeE"]
241 pub fn TimedPeekMessageQueue(
242 arg1: *mut u64,
243 arg2: *const root::nn::os::MessageQueueType,
244 ) -> bool;
245}
246extern "C" {
247 #[link_name = "\u{1}_ZN2nn2os18TryJamMessageQueueEPNS0_16MessageQueueTypeEm"]
248 pub fn TryJamMessageQueue(
249 arg1: *mut root::nn::os::MessageQueueType,
250 arg2: u64,
251 ) -> bool;
252}
253extern "C" {
254 #[link_name = "\u{1}_ZN2nn2os15JamMessageQueueEPNS0_16MessageQueueTypeEm"]
255 pub fn JamMessageQueue(arg1: *mut root::nn::os::MessageQueueType, arg2: u64);
256}
257extern "C" {
258 #[link_name = "\u{1}_ZN2nn2os20TimedJamMessageQueueEPNS0_16MessageQueueTypeEmNS_8TimeSpanE"]
259 pub fn TimedJamMessageQueue(
260 arg1: *mut root::nn::os::MessageQueueType,
261 arg2: u64,
262 arg3: root::nn::TimeSpan,
263 ) -> bool;
264}
265extern "C" {
266 #[link_name = "\u{1}_ZN2nn2os27InitializeConditionVariableEPNS0_21ConditionVariableTypeE"]
267 pub fn InitializeConditionVariable(arg1: *mut root::nn::os::ConditionVariableType);
268}
269extern "C" {
270 #[link_name = "\u{1}_ZN2nn2os25FinalizeConditionVariableEPNS0_21ConditionVariableTypeE"]
271 pub fn FinalizeConditionVariable(arg1: *mut root::nn::os::ConditionVariableType);
272}
273extern "C" {
274 #[link_name = "\u{1}_ZN2nn2os23SignalConditionVariableEPNS0_21ConditionVariableTypeE"]
275 pub fn SignalConditionVariable(arg1: *mut root::nn::os::ConditionVariableType);
276}
277extern "C" {
278 #[link_name = "\u{1}_ZN2nn2os26BroadcastConditionVariableEPNS0_21ConditionVariableTypeE"]
279 pub fn BroadcastConditionVariable(arg1: *mut root::nn::os::ConditionVariableType);
280}
281extern "C" {
282 #[link_name = "\u{1}_ZN2nn2os21WaitConditionVariableEPNS0_21ConditionVariableTypeE"]
283 pub fn WaitConditionVariable(arg1: *mut root::nn::os::ConditionVariableType);
284}
285extern "C" {
286 #[link_name = "\u{1}_ZN2nn2os26TimedWaitConditionVariableEPNS0_21ConditionVariableTypeEPNS0_9MutexTypeENS_8TimeSpanE"]
287 pub fn TimedWaitConditionVariable(
288 arg1: *mut root::nn::os::ConditionVariableType,
289 arg2: *mut root::nn::os::MutexType,
290 arg3: root::nn::TimeSpan,
291 ) -> u8;
292}
293
294#[repr(C)]
297pub struct ThreadType {
298 inner: [u8; 0x1c0],
299}
300
301impl ThreadType {
302 pub fn new() -> Self {
303 Self {
304 inner: [0u8;0x1c0],
305 }
306 }
307}
308
309impl Default for ThreadType {
310 fn default() -> Self {
311 Self::new()
312 }
313}
314
315extern "C" {
316 #[link_name = "\u{1}_ZN2nn2os12CreateThreadEPNS0_10ThreadTypeEPFvPvES3_S3_mi"]
317 pub fn CreateThread(
318 thread: *mut ThreadType,
319 function: extern "C" fn(arg: *mut libc::c_void),
320 argument: *mut u8,
321 stack: *mut u8,
322 stack_size: usize,
323 priority: i32,
324 ) -> root::Result;
325}
326extern "C" {
327 #[link_name = "\u{1}_ZN2nn2os12CreateThreadEPNS0_10ThreadTypeEPFvPvES3_S3_mii"]
328 pub fn CreateThread1(
329 thread: *mut ThreadType,
330 function: extern "C" fn(arg: *mut libc::c_void),
331 argument: *mut u8,
332 stack: *mut u8,
333 stack_size: usize,
334 priority: i32,
335 ideal_core_id: i32,
336 ) -> root::Result;
337}
338extern "C" {
339 #[link_name = "\u{1}_ZN2nn2os13DestroyThreadEPNS0_10ThreadTypeE"]
340 pub fn DestroyThread(thread: *mut ThreadType);
341}
342extern "C" {
343 #[link_name = "\u{1}_ZN2nn2os11StartThreadEPNS0_10ThreadTypeE"]
344 pub fn StartThread(thread: *mut ThreadType);
345}
346extern "C" {
347 #[link_name = "\u{1}_ZN2nn2os13SetThreadNameEPNS0_10ThreadTypeEPKc"]
348 pub fn SetThreadName(
349 thread: *mut ThreadType,
350 thread_name: *const u8,
351 );
352}
353extern "C" {
354 #[link_name = "\u{1}_ZN2nn2os20SetThreadNamePointerEPNS0_10ThreadTypeEPKc"]
355 pub fn SetThreadNamePointer(
356 thread: *mut ThreadType,
357 thread_name: *const u8,
358 );
359}
360extern "C" {
361 #[link_name = "\u{1}_ZN2nn2os20GetThreadNamePointerEPKNS0_10ThreadTypeE"]
362 pub fn GetThreadNamePointer(
363 thread: *const ThreadType,
364 ) -> *mut u8;
365}
366extern "C" {
367 #[link_name = "\u{1}_ZN2nn2os16GetCurrentThreadEv"]
368 pub fn GetCurrentThread() -> *mut ThreadType;
369}
370extern "C" {
371 #[link_name = "\u{1}_ZN2nn2os20ChangeThreadPriorityEPNS0_10ThreadTypeEi"]
372 pub fn ChangeThreadPriority(
373 thread: *mut ThreadType,
374 priority: i32,
375 ) -> i32;
376}
377extern "C" {
378 #[link_name = "\u{1}_ZN2nn2os17GetThreadPriorityEPKNS0_10ThreadTypeE"]
379 pub fn GetThreadPriority(thread: *const ThreadType) -> i32;
380}
381extern "C" {
382 #[link_name = "\u{1}_ZN2nn2os11YieldThreadEv"]
383 pub fn YieldThread();
384}
385extern "C" {
386 #[link_name = "\u{1}_ZN2nn2os13SuspendThreadEPNS0_10ThreadTypeE"]
387 pub fn SuspendThread(thread: *mut ThreadType);
388}
389extern "C" {
390 #[link_name = "\u{1}_ZN2nn2os12ResumeThreadEPNS0_10ThreadTypeE"]
391 pub fn ResumeThread(thread: *mut ThreadType);
392}
393extern "C" {
394 #[link_name = "\u{1}_ZN2nn2os11SleepThreadENS_8TimeSpanE"]
395 pub fn SleepThread(time: root::nn::TimeSpan);
396}
397extern "C" {
398 #[link_name = "\u{1}_ZN2nn2os10WaitThreadEPNS0_10ThreadTypeE"]
399 pub fn WaitThread(thread: *mut ThreadType);
400}
401
402extern "C" {
405 #[link_name = "\u{1}_ZN2nn2os15InitializeEventEPNS0_9EventTypeEbNS0_14EventClearModeE"]
406 pub fn InitializeEvent(
407 arg1: *mut root::nn::os::EventType,
408 initiallySignaled: bool,
409 clearMode: root::nn::os::EventClearMode,
410 );
411}
412extern "C" {
413 #[link_name = "\u{1}_ZN2nn2os13FinalizeEventEPNS0_9EventTypeE"]
414 pub fn FinalizeEvent(arg1: *mut root::nn::os::EventType);
415}
416extern "C" {
417 #[link_name = "\u{1}_ZN2nn2os11SignalEventEPNS0_9EventTypeE"]
418 pub fn SignalEvent(arg1: *mut root::nn::os::EventType);
419}
420extern "C" {
421 #[link_name = "\u{1}_ZN2nn2os9WaitEventEPNS0_9EventTypeE"]
422 pub fn WaitEvent(arg1: *mut root::nn::os::EventType);
423}
424extern "C" {
425 #[link_name = "\u{1}_ZN2nn2os12TryWaitEventEPNS0_9EventTypeE"]
426 pub fn TryWaitEvent(arg1: *mut root::nn::os::EventType) -> bool;
427}
428extern "C" {
429 #[link_name = "\u{1}_ZN2nn2os14TimedWaitEventEPNS0_9EventTypeENS_8TimeSpanE"]
430 pub fn TimedWaitEvent(
431 arg1: *mut root::nn::os::EventType,
432 arg2: root::nn::TimeSpan,
433 ) -> bool;
434}
435extern "C" {
436 #[link_name = "\u{1}_ZN2nn2os10ClearEventEPNS0_9EventTypeE"]
437 pub fn ClearEvent(arg1: *mut root::nn::os::EventType);
438}
439
440extern "C" {
441 #[link_name = "\u{1}_ZN2nn2os16AcquireSemaphoreEPNS0_13SemaphoreTypeE"]
442 pub fn AcquireSemaphore(
443 arg1: *mut root::nn::os::SemaphoreType,
444 );
445}
446extern "C" {
447 #[link_name = "\u{1}_ZN2nn2os16ReleaseSemaphoreEPNS0_13SemaphoreTypeE"]
448 pub fn ReleaseSemaphore(
449 arg1: *mut root::nn::os::SemaphoreType,
450 );
451}
452extern "C" {
453 #[link_name = "\u{1}_ZN2nn2os17FinalizeSemaphoreEPNS0_13SemaphoreTypeE"]
454 pub fn FinalizeSemaphore(arg1: *mut root::nn::os::SemaphoreType);
455}
456extern "C" {
457 #[link_name = "\u{1}_ZN2nn2os19InitializeSemaphoreEPNS0_13SemaphoreTypeEii"]
458 pub fn InitializeSemaphore(arg1: *mut root::nn::os::SemaphoreType, initial_count: i32, max_count: i32);
459}
460
461#[repr(C)]
462pub struct CpuRegister {
463 #[doc = "< 64-bit AArch64 register view."]
464 pub x: root::__BindgenUnionField<u64>,
465 #[doc = "< 32-bit AArch64 register view."]
466 pub w: root::__BindgenUnionField<u32>,
467 #[doc = "< AArch32 register view."]
468 pub r: root::__BindgenUnionField<u32>,
469 pub bindgen_union_field: u64,
470}
471
472#[doc = " Armv8 NEON register."]
473#[repr(C)]
474#[derive(Clone, Copy, Debug)]
475pub struct FpuRegister(u128);
476
477impl FpuRegister {
478 pub fn q(self) -> u128 {
479 self.0
480 }
481
482 pub fn d(self) -> f64 {
483 unsafe {
484 *(&self.0 as *const u128 as *const f64)
485 }
486 }
487
488 pub fn s(self) -> f32 {
489 unsafe {
490 *(&self.0 as *const u128 as *const f32)
491 }
492 }
493
494 pub fn set_q(&mut self, q: u128) {
495 self.0 = q;
496 }
497
498 pub fn set_d(&mut self, d: f64) {
499 self.set_d_index(0, d);
500 }
501
502 pub fn set_d_index(&mut self, index: usize, d: f64) {
503 self.set_q(0);
504 unsafe {
505 core::slice::from_raw_parts_mut(self as *mut Self as *mut f64, 2)[index] = d;
506 }
507 }
508
509 pub fn set_s(&mut self, s: f32) {
510 self.set_s_index(0, s);
511
512 }
513
514 pub fn set_s_index(&mut self, index: usize, s: f32) {
515 self.set_q(0);
516 unsafe {
517 core::slice::from_raw_parts_mut(self as *mut Self as *mut f32, 4)[index] = s;
518 }
519 }
520}
521
522#[repr(C)]
523#[repr(align(16))]
524pub struct UserExceptionInfo {
525 #[doc = "< See \\ref ThreadExceptionDesc."]
526 pub ErrorDescription: u32,
527 pub pad: [u32; 3usize],
528 #[doc = "< GPRs 0..28. Note: also contains AArch32 registers."]
529 pub CpuRegisters: [root::nn::os::CpuRegister; 29usize],
530 #[doc = "< Frame pointer."]
531 pub FP: root::nn::os::CpuRegister,
532 #[doc = "< Link register."]
533 pub LR: root::nn::os::CpuRegister,
534 #[doc = "< Stack pointer."]
535 pub SP: root::nn::os::CpuRegister,
536 #[doc = "< Program counter (elr_el1)."]
537 pub PC: root::nn::os::CpuRegister,
538 pub padding: u64,
539 #[doc = "< 32 general-purpose NEON registers."]
540 pub FpuRegisters: [root::nn::os::FpuRegister; 32usize],
541 #[doc = "< pstate & 0xFF0FFE20"]
542 pub PState: u32,
543 pub AFSR0: u32,
544 pub AFSR1: u32,
545 pub ESR: u32,
546 #[doc = "< Fault Address Register."]
547 pub FAR: root::nn::os::CpuRegister,
548}
549
550extern "C" {
551 #[link_name = "\u{1}_ZN2nn2os23SetUserExceptionHandlerEPFvPNS0_17UserExceptionInfoEEPvmS2_"]
552 #[allow(improper_ctypes)]
553 pub fn SetUserExceptionHandler(
554 arg1: ::core::option::Option<
555 unsafe extern "C" fn(arg1: *mut root::nn::os::UserExceptionInfo),
556 >,
557 arg2: *mut u8,
558 arg3: root::ulong,
559 arg4: *mut root::nn::os::UserExceptionInfo,
560 );
561}
562extern "C" {
563 #[link_name = "\u{1}_ZN2nn2os19GenerateRandomBytesEPvm"]
564 pub fn GenerateRandomBytes(arg1: *mut u8, arg2: u64);
565}
566extern "C" {
567 #[link_name = "\u{1}_ZN2nn2os13GetSystemTickEv"]
568 pub fn GetSystemTick() -> root::nn::os::Tick;
569}
570extern "C" {
571 #[link_name = "\u{1}_ZN2nn2os26GetThreadAvailableCoreMaskEv"]
572 pub fn GetThreadAvailableCoreMask() -> u64;
573}
574
575
576pub type FiberFunction = extern "C" fn(*const u8) -> *const FiberType;
577
578#[repr(C)]
579pub struct FiberType {
580 pub status: u8,
581 pub is_aligned: bool,
582 pub function: FiberFunction,
583 pub args: *mut libc::c_void,
584 pub unk1: *mut libc::c_void,
585 pub stack: *mut libc::c_void,
586 pub stack_size: usize,
587 pub context: [u8; 208],
588}
589
590extern "C" {
591 #[link_name = "\u{1}_ZN2nn2os15InitializeFiberEPNS0_9FiberTypeEPFS2_PvES3_S3_mi"]
592 pub fn InitializeFiber(fiber: *mut FiberType, fiber_function: FiberFunction, arguments: *mut libc::c_void, stack: *mut libc::c_void, stack_size: usize, flag: i32);
593
594 #[link_name = "_ZN2nn2os13SwitchToFiberEPNS0_9FiberTypeE"]
595 pub fn SwitchToFiber(fiber: *mut FiberType);
596
597 #[link_name = "_ZN2nn2os15GetCurrentFiberEv"]
598 pub fn GetCurrentFiber() -> *mut FiberType;
599
600 #[link_name = "_ZN2nn2os13FinalizeFiberEPNS0_9FiberTypeE"]
601 pub fn FinalizeFiber(fiber: *mut FiberType);
602}