#define SYS_STATE_CLEAR_IPC_REFS 1 /* clear IPC references */
/* Subfunctions for SYS_SCHEDCTL */
-#define SCHEDCTL_FLAGS m9_l1 /* flags for setting the scheduler */
# define SCHEDCTL_FLAG_KERNEL 1 /* mark kernel scheduler and remove
* RTS_NO_QUANTUM; otherwise caller is
* marked scheduler
*/
-#define SCHEDCTL_ENDPOINT m9_l2 /* endpt of process to be scheduled */
-#define SCHEDCTL_QUANTUM m9_l3 /* current scheduling quantum */
-#define SCHEDCTL_PRIORITY m9_s4 /* current scheduling priority */
-#define SCHEDCTL_CPU m9_l5 /* where to place this process */
/* Field names for SYS_PADCONF */
#define PADCONF_PADCONF m2_i1 /* pad to configure */
} mess_pm_lexec_exec_new;
_ASSERT_MSG_SIZE(mess_pm_lexec_exec_new);
+typedef struct {
+ uint32_t flags;
+ endpoint_t endpoint;
+ int priority;
+ int quantum;
+ int cpu;
+
+ uint8_t padding[36];
+} mess_lsys_krn_schedctl;
+_ASSERT_MSG_SIZE(mess_lsys_krn_schedctl);
+
typedef struct {
endpoint_t endpt;
mess_lexec_pm_exec_new m_lexec_pm_exec_new;
+ mess_lsys_krn_schedctl m_lsys_krn_schedctl;
+
mess_lsys_pm_getepinfo m_lsys_pm_getepinfo;
mess_lsys_pm_getprocnr m_lsys_pm_getprocnr;
mess_lsys_pm_srv_fork m_lsys_pm_srv_fork;
int do_schedctl(struct proc * caller, message * m_ptr)
{
struct proc *p;
- unsigned flags;
+ uint32_t flags;
int priority, quantum, cpu;
int proc_nr;
int r;
/* check parameter validity */
- flags = (unsigned) m_ptr->SCHEDCTL_FLAGS;
+ flags = m_ptr->m_lsys_krn_schedctl.flags;
if (flags & ~SCHEDCTL_FLAG_KERNEL) {
printf("do_schedctl: flags 0x%x invalid, caller=%d\n",
flags, caller - proc);
return EINVAL;
}
- if (!isokendpt(m_ptr->SCHEDCTL_ENDPOINT, &proc_nr))
+ if (!isokendpt(m_ptr->m_lsys_krn_schedctl.endpoint, &proc_nr))
return EINVAL;
p = proc_addr(proc_nr);
/* the kernel becomes the scheduler and starts
* scheduling the process.
*/
- priority = (int) m_ptr->SCHEDCTL_PRIORITY;
- quantum = (int) m_ptr->SCHEDCTL_QUANTUM;
- cpu = (int) m_ptr->SCHEDCTL_CPU;
+ priority = m_ptr->m_lsys_krn_schedctl.priority;
+ quantum = m_ptr->m_lsys_krn_schedctl.quantum;
+ cpu = m_ptr->m_lsys_krn_schedctl.cpu;
/* Try to schedule the process. */
if((r = sched_proc(p, priority, quantum, cpu) != OK))
#include "syslib.h"
-int sys_schedctl(unsigned flags,
- endpoint_t proc_ep,
- int priority,
- int quantum,
- int cpu)
+int sys_schedctl(uint32_t flags, endpoint_t proc_ep, int priority, int quantum,
+ int cpu)
{
message m;
- m.SCHEDCTL_FLAGS = (int) flags;
- m.SCHEDCTL_ENDPOINT = proc_ep;
- m.SCHEDCTL_PRIORITY = priority;
- m.SCHEDCTL_QUANTUM = quantum;
- m.SCHEDCTL_CPU = cpu;
+ m.m_lsys_krn_schedctl.flags = flags;
+ m.m_lsys_krn_schedctl.endpoint = proc_ep;
+ m.m_lsys_krn_schedctl.priority = priority;
+ m.m_lsys_krn_schedctl.quantum = quantum;
+ m.m_lsys_krn_schedctl.cpu = cpu;
+
return(_kernel_call(SYS_SCHEDCTL, &m));
}