mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
82 lines
2.4 KiB
C
82 lines
2.4 KiB
C
/**
|
|
* @file thread.h
|
|
* @brief Multi-threading support
|
|
* @author plutoo
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
#include "../types.h"
|
|
#include "../arm/thread_context.h"
|
|
|
|
/// Thread information structure.
|
|
typedef struct {
|
|
Handle handle; ///< Thread handle.
|
|
void* stack_mem; ///< Pointer to stack memory.
|
|
void* stack_mirror; ///< Pointer to stack memory mirror.
|
|
size_t stack_sz; ///< Stack size.
|
|
} Thread;
|
|
|
|
/**
|
|
* @brief Creates a thread.
|
|
* @param t Thread information structure which will be filled in.
|
|
* @param entry Entrypoint of the thread.
|
|
* @param arg Argument to pass to the entrypoint.
|
|
* @param stack_sz Stack size (rounded up to page alignment).
|
|
* @param prio Thread priority (0x00~0x3F); 0x2C is the usual priority of the main thread, 0x3B is a special priority on cores 0..2 that enables preemptive multithreading (0x3F on core 3).
|
|
* @param cpuid ID of the core on which to create the thread (0~3); or -2 to use the default core for the current process.
|
|
* @return Result code.
|
|
*/
|
|
Result threadCreate(
|
|
Thread* t, ThreadFunc entry, void* arg, size_t stack_sz, int prio,
|
|
int cpuid);
|
|
|
|
/**
|
|
* @brief Starts the execution of a thread.
|
|
* @param t Thread information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result threadStart(Thread* t);
|
|
|
|
/**
|
|
* @brief Waits for a thread to finish executing.
|
|
* @param t Thread information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result threadWaitForExit(Thread* t);
|
|
|
|
/**
|
|
* @brief Frees up resources associated with a thread.
|
|
* @param t Thread information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result threadClose(Thread* t);
|
|
|
|
/**
|
|
* @brief Pauses the execution of a thread.
|
|
* @param t Thread information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result threadPause(Thread* t);
|
|
|
|
/**
|
|
* @brief Resumes the execution of a thread, after having been paused.
|
|
* @param t Thread information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result threadResume(Thread* t);
|
|
|
|
/**
|
|
* @brief Dumps the registers of a thread paused by @ref threadPause (register groups: all).
|
|
* @param[out] ctx Output thread context (register dump).
|
|
* @param t Thread information structure.
|
|
* @return Result code.
|
|
* @warning Official kernel will not dump x0..x18 if the thread is currently executing a system call, and prior to 6.0.0 doesn't dump TPIDR_EL0.
|
|
*/
|
|
Result threadDumpContext(ThreadContext* ctx, Thread* t);
|
|
|
|
/**
|
|
* @brief Gets the raw handle to the current thread.
|
|
* @return The current thread's handle.
|
|
*/
|
|
Handle threadGetCurHandle(void);
|