nnsdk/nn/
os.rs

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// THREADS
295
296#[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
402// Events
403
404extern "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}