Projet_SETI_RISC-V/riscv-gnu-toolchain/gcc/libphobos/libdruntime/core/sys/posix/sched.d
2023-03-06 14:48:14 +01:00

298 lines
5.7 KiB
D

/**
* D header file for POSIX.
*
* Copyright: Copyright Sean Kelly 2005 - 2009.
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
* Authors: Sean Kelly,
Alex Rønne Petersen
* Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
*/
/* Copyright Sean Kelly 2005 - 2009.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
module core.sys.posix.sched;
import core.sys.posix.config;
public import core.sys.posix.time;
public import core.sys.posix.sys.types;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Posix):
extern (C):
nothrow:
@nogc:
@system:
//
// Required
//
/*
struct sched_param
{
int sched_priority (THR)
int sched_ss_low_priority (SS|TSP)
struct timespec sched_ss_repl_period (SS|TSP)
struct timespec sched_ss_init_budget (SS|TSP)
int sched_ss_max_repl (SS|TSP)
}
SCHED_FIFO
SCHED_RR
SCHED_SPORADIC (SS|TSP)
SCHED_OTHER
int sched_getparam(pid_t, sched_param*);
int sched_getscheduler(pid_t);
int sched_setparam(pid_t, const scope sched_param*);
int sched_setscheduler(pid_t, int, const scope sched_param*);
*/
version (linux)
{
version (CRuntime_Musl)
{
struct sched_param
{
int sched_priority;
int __reserved1;
timespec[2] __reserved2;
int __reserved3;
}
}
else
{
struct sched_param
{
int sched_priority;
}
}
enum SCHED_OTHER = 0;
enum SCHED_FIFO = 1;
enum SCHED_RR = 2;
//SCHED_SPORADIC (SS|TSP)
enum SCHED_BATCH = 3;
enum SCHED_IDLE = 5;
enum SCHED_RESET_ON_FORK = 0x40000000;
}
else version (Darwin)
{
enum SCHED_OTHER = 1;
enum SCHED_FIFO = 4;
enum SCHED_RR = 2;
//SCHED_SPORADIC (SS|TSP)
struct sched_param
{
int sched_priority;
byte[__PTHREAD_MUTEX_SIZE__] __opaque;
}
}
else version (FreeBSD)
{
struct sched_param
{
int sched_priority;
}
enum SCHED_FIFO = 1;
enum SCHED_OTHER = 2;
enum SCHED_RR = 3;
}
else version (NetBSD)
{
struct sched_param
{
int sched_priority;
}
enum SCHED_FIFO = 1;
enum SCHED_OTHER = 0;
enum SCHED_RR = 2;
}
else version (OpenBSD)
{
struct sched_param
{
int sched_priority;
}
enum SCHED_FIFO = 1;
enum SCHED_OTHER = 2;
enum SCHED_RR = 3;
}
else version (DragonFlyBSD)
{
struct sched_param
{
int sched_priority;
}
enum SCHED_FIFO = 1;
enum SCHED_OTHER = 2;
enum SCHED_RR = 3;
}
else version (Solaris)
{
struct sched_param
{
int sched_priority;
int[8] sched_pad;
}
enum SCHED_OTHER = 0;
enum SCHED_FIFO = 1;
enum SCHED_RR = 2;
enum SCHED_SYS = 3;
enum SCHED_IA = 4;
enum SCHED_FSS = 5;
enum SCHED_FX = 6;
enum _SCHED_NEXT = 7;
}
else
{
static assert(false, "Unsupported platform");
}
int sched_getparam(pid_t, sched_param*);
int sched_getscheduler(pid_t);
int sched_setparam(pid_t, const scope sched_param*);
int sched_setscheduler(pid_t, int, const scope sched_param*);
//
// Thread (THR)
//
/*
int sched_yield();
*/
version (CRuntime_Glibc)
{
int sched_yield();
}
else version (Darwin)
{
int sched_yield();
}
else version (FreeBSD)
{
int sched_yield();
}
else version (NetBSD)
{
int sched_yield();
}
else version (OpenBSD)
{
int sched_yield();
}
else version (DragonFlyBSD)
{
int sched_yield();
}
else version (Solaris)
{
int sched_yield();
}
else version (CRuntime_Bionic)
{
int sched_yield();
}
else version (CRuntime_Musl)
{
int sched_yield();
}
else version (CRuntime_UClibc)
{
int sched_yield();
}
else
{
static assert(false, "Unsupported platform");
}
//
// Scheduling (TPS)
//
/*
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_rr_get_interval(pid_t, timespec*);
*/
version (CRuntime_Glibc)
{
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (Darwin)
{
int sched_get_priority_min(int);
int sched_get_priority_max(int);
//int sched_rr_get_interval(pid_t, timespec*); // FIXME: unavailable?
}
else version (FreeBSD)
{
int sched_get_priority_min(int);
int sched_get_priority_max(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (NetBSD)
{
int sched_get_priority_min(int);
int sched_get_priority_max(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (OpenBSD)
{
int sched_get_priority_min(int);
int sched_get_priority_max(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (DragonFlyBSD)
{
int sched_get_priority_min(int);
int sched_get_priority_max(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (Solaris)
{
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (CRuntime_Bionic)
{
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (CRuntime_Musl)
{
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else version (CRuntime_UClibc)
{
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_rr_get_interval(pid_t, timespec*);
}
else
{
static assert(false, "Unsupported platform");
}