hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 * Copyright (C) 2009 Philippe Gerum <rpm@xenomai.org>.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
#ifndef _COBALT_POSIX_SCHED_H
#define _COBALT_POSIX_SCHED_H
 
#include <linux/list.h>
#include <cobalt/kernel/sched.h>
#include <xenomai/posix/syscall.h>
 
struct cobalt_resources;
struct cobalt_process;
 
struct cobalt_sched_group {
#ifdef CONFIG_XENO_OPT_SCHED_QUOTA
   struct xnsched_quota_group quota;
#endif
   struct cobalt_resources *scope;
   int pshared;
   struct list_head next;
};
 
int __cobalt_sched_weightprio(int policy,
                 const struct sched_param_ex *param_ex);
 
int __cobalt_sched_setconfig_np(int cpu, int policy,
               void __user *u_config,
               size_t len,
               union sched_config *(*fetch_config)
               (int policy, const void __user *u_config,
                size_t *len),
               int (*ack_config)(int policy,
                         const union sched_config *config,
                         void __user *u_config));
 
ssize_t __cobalt_sched_getconfig_np(int cpu, int policy,
                   void __user *u_config,
                   size_t len,
                   union sched_config *(*fetch_config)
                   (int policy, const void __user *u_config,
                    size_t *len),
                   ssize_t (*put_config)(int policy,
                             void __user *u_config, size_t u_len,
                             const union sched_config *config,
                             size_t len));
int cobalt_sched_setscheduler_ex(pid_t pid,
                int policy,
                const struct sched_param_ex *param_ex,
                __u32 __user *u_winoff,
                int __user *u_promoted);
 
int cobalt_sched_getscheduler_ex(pid_t pid,
                int *policy_r,
                struct sched_param_ex *param_ex);
 
struct xnsched_class *
cobalt_sched_policy_param(union xnsched_policy_param *param,
             int u_policy, const struct sched_param_ex *param_ex,
             xnticks_t *tslice_r);
 
COBALT_SYSCALL_DECL(sched_yield, (void));
 
COBALT_SYSCALL_DECL(sched_weightprio,
           (int policy, const struct sched_param_ex __user *u_param));
 
COBALT_SYSCALL_DECL(sched_minprio, (int policy));
 
COBALT_SYSCALL_DECL(sched_maxprio, (int policy));
 
COBALT_SYSCALL_DECL(sched_setconfig_np,
           (int cpu,
            int policy,
            union sched_config __user *u_config,
            size_t len));
 
COBALT_SYSCALL_DECL(sched_getconfig_np,
           (int cpu, int policy,
            union sched_config __user *u_config,
            size_t len));
 
COBALT_SYSCALL_DECL(sched_setscheduler_ex,
           (pid_t pid,
            int policy,
            const struct sched_param_ex __user *u_param,
            __u32 __user *u_winoff,
            int __user *u_promoted));
 
COBALT_SYSCALL_DECL(sched_getscheduler_ex,
           (pid_t pid,
            int __user *u_policy,
            struct sched_param_ex __user *u_param));
 
void cobalt_sched_reclaim(struct cobalt_process *process);
 
#endif /* !_COBALT_POSIX_SCHED_H */