xref: /minix/minix/servers/sched/utility.c (revision 9f988b79)
1 /* This file contains some utility routines for SCHED.
2  *
3  * The entry points are:
4  *   no_sys:		called for invalid system call numbers
5  *   sched_isokendpt:	check the validity of an endpoint
6  *   sched_isemtyendpt  check for validity and availability of endpoint slot
7  *   accept_message	check whether message is allowed
8  */
9 
10 #include "sched.h"
11 #include <machine/archtypes.h>
12 #include <sys/resource.h> /* for PRIO_MAX & PRIO_MIN */
13 #include "schedproc.h"
14 
15 /*===========================================================================*
16  *				no_sys					     *
17  *===========================================================================*/
18 int no_sys(int who_e, int call_nr)
19 {
20 /* A system call number not implemented by PM has been requested. */
21   printf("SCHED: in no_sys, call nr %d from %d\n", call_nr, who_e);
22   return(ENOSYS);
23 }
24 
25 
26 /*===========================================================================*
27  *				sched_isokendpt			 	     *
28  *===========================================================================*/
29 int sched_isokendpt(int endpoint, int *proc)
30 {
31 	*proc = _ENDPOINT_P(endpoint);
32 	if (*proc < 0)
33 		return (EBADEPT); /* Don't schedule tasks */
34 	if(*proc >= NR_PROCS)
35 		return (EINVAL);
36 	if(endpoint != schedproc[*proc].endpoint)
37 		return (EDEADEPT);
38 	if(!(schedproc[*proc].flags & IN_USE))
39 		return (EDEADEPT);
40 	return (OK);
41 }
42 
43 /*===========================================================================*
44  *				sched_isemtyendpt		 	     *
45  *===========================================================================*/
46 int sched_isemtyendpt(int endpoint, int *proc)
47 {
48 	*proc = _ENDPOINT_P(endpoint);
49 	if (*proc < 0)
50 		return (EBADEPT); /* Don't schedule tasks */
51 	if(*proc >= NR_PROCS)
52 		return (EINVAL);
53 	if(schedproc[*proc].flags & IN_USE)
54 		return (EDEADEPT);
55 	return (OK);
56 }
57 
58 /*===========================================================================*
59  *				accept_message				     *
60  *===========================================================================*/
61 int accept_message(message *m_ptr)
62 {
63 	/* accept all messages from PM and RS */
64 	switch (m_ptr->m_source) {
65 
66 		case PM_PROC_NR:
67 		case RS_PROC_NR:
68 			return 1;
69 
70 	}
71 
72 	/* no other messages are allowable */
73 	return 0;
74 }
75