/* This file contains some utility routines for SCHED. * * The entry points are: * no_sys: called for invalid system call numbers * sched_isokendpt: check the validity of an endpoint * sched_isemtyendpt check for validity and availability of endpoint slot * accept_message check whether message is allowed */ #include "sched.h" #include #include /* for PRIO_MAX & PRIO_MIN */ #include "kernel/proc.h" /* for queue constants */ #include "schedproc.h" /*===========================================================================* * no_sys * *===========================================================================*/ PUBLIC int no_sys(int who_e, int call_nr) { /* A system call number not implemented by PM has been requested. */ printf("SCHED: in no_sys, call nr %d from %d\n", call_nr, who_e); return(ENOSYS); } /*===========================================================================* * sched_isokendpt * *===========================================================================*/ PUBLIC int sched_isokendpt(int endpoint, int *proc) { *proc = _ENDPOINT_P(endpoint); if (*proc < 0) return (EBADEPT); /* Don't schedule tasks */ if(*proc >= NR_PROCS) return (EINVAL); if(endpoint != schedproc[*proc].endpoint) return (EDEADEPT); if(!(schedproc[*proc].flags & IN_USE)) return (EDEADEPT); return (OK); } /*===========================================================================* * sched_isemtyendpt * *===========================================================================*/ PUBLIC int sched_isemtyendpt(int endpoint, int *proc) { *proc = _ENDPOINT_P(endpoint); if (*proc < 0) return (EBADEPT); /* Don't schedule tasks */ if(*proc >= NR_PROCS) return (EINVAL); if(schedproc[*proc].flags & IN_USE) return (EDEADEPT); return (OK); } /*===========================================================================* * accept_message * *===========================================================================*/ PUBLIC int accept_message(message *m_ptr) { /* accept all messages from PM and RS */ switch (m_ptr->m_source) { case PM_PROC_NR: case RS_PROC_NR: return 1; } /* no other messages are allowable */ return 0; }