# define SYS_SAFECOPYFROM (KERNEL_CALL + 31) /* sys_safecopyfrom() */
# define SYS_SAFECOPYTO (KERNEL_CALL + 32) /* sys_safecopyto() */
# define SYS_VSAFECOPY (KERNEL_CALL + 33) /* sys_vsafecopy() */
-# define SYS_PARAMCTL (KERNEL_CALL + 34) /* sys_paramctl() */
+# define SYS_SETGRANT (KERNEL_CALL + 34) /* sys_setgrant() */
#define NR_SYS_CALLS 35 /* number of system calls */
*/
#define SYS_PRIV_ADD_IRQ 4 /* Add IRQ */
-/* Subfunctions for SYS_PARAMCTL */
+/* Subfunctions for SYS_SETGRANT */
#define SYS_PARAM_SET_GRANT 1 /* Set address and size of grant table */
/* Field names for SYS_MEMSET, SYS_SEGCTL. */
#define CTL_ADDRESS m2_l1 /* address at traced process' space */
#define CTL_DATA m2_l2 /* data field for tracing */
-/* Field names for SYS_PARAMCTL */
-#define PCTL_REQ m2_i1 /* request code */
-#define PCTL_INT1 m2_i2 /* int param 1 */
-#define PCTL_INT2 m2_i3 /* int param 2 */
-#define PCTL_ADDR1 m2_p1 /* address param 1 */
+/* Field names for SYS_SETGRANT */
+#define SG_ADDR m2_p1 /* address */
+#define SG_SIZE m2_i2 /* no. of entries */
/* Field names for SYS_KILL, SYS_SIGCTL */
#define SIG_REQUEST m2_l2 /* PM signal control request */
_PROTOTYPE( int sys_trace, (int req, endpoint_t proc, long addr, long *data_p));
_PROTOTYPE( int sys_privctl, (endpoint_t proc, int req, int i, void *p));
-_PROTOTYPE( int sys_paramctl, (int req, int int1, void *addr1, int int2));
+_PROTOTYPE( int sys_setgrant, (cp_grant_t *grants, int ngrants));
_PROTOTYPE( int sys_nice, (endpoint_t proc, int priority));
_PROTOTYPE( int sys_int86, (struct reg86u *reg86p));
map(SYS_NICE, do_nice); /* set scheduling priority */
map(SYS_PRIVCTL, do_privctl); /* system privileges control */
map(SYS_TRACE, do_trace); /* request a trace operation */
- map(SYS_PARAMCTL, do_paramctl); /* get/set own parameters */
+ map(SYS_SETGRANT, do_setgrant); /* get/set own parameters */
/* Signal handling. */
map(SYS_KILL, do_kill); /* cause a process to be signaled */
_PROTOTYPE( int do_safecopy, (message *m_ptr) );
_PROTOTYPE( int do_vsafecopy, (message *m_ptr) );
_PROTOTYPE( int do_iopenable, (message *m_ptr) );
-_PROTOTYPE( int do_paramctl, (message *m_ptr) );
+_PROTOTYPE( int do_setgrant, (message *m_ptr) );
#endif /* SYSTEM_H */
$(SYSTEM)(do_vcopy.o) \
$(SYSTEM)(do_umap.o) \
$(SYSTEM)(do_memset.o) \
- $(SYSTEM)(do_paramctl.o) \
+ $(SYSTEM)(do_setgrant.o) \
$(SYSTEM)(do_privctl.o) \
$(SYSTEM)(do_segctl.o) \
$(SYSTEM)(do_safecopy.o) \
$(SYSTEM)(do_abort.o): do_abort.c
$(CC) do_abort.c
-$(SYSTEM)(do_paramctl.o): do_paramctl.c
- $(CC) do_paramctl.c
+$(SYSTEM)(do_setgrant.o): do_setgrant.c
+ $(CC) do_setgrant.c
$(SYSTEM)(do_privctl.o): do_privctl.c
$(CC) do_privctl.c
+++ /dev/null
-/* The kernel call implemented in this file:
- * m_type: SYS_PARAMCTL
- *
- * The parameters for this kernel call are:
- * PCTL_REQ request code (SYS_PARAM_*)
- * PCTL_INT[12] integer parameters
- * PCTL_ADDR1 address parameter
- */
-
-#include "../system.h"
-#include <minix/safecopies.h>
-
-/*===========================================================================*
- * do_paramctl *
- *===========================================================================*/
-PUBLIC int do_paramctl(m_ptr)
-message *m_ptr;
-{
- struct proc *rp;
- int r;
-
- /* Who wants to set a parameter? */
- rp = proc_addr(who_p);
-
- /* Which parameter is it? */
- switch(m_ptr->PCTL_REQ) {
-
- case SYS_PARAM_SET_GRANT:
- /* Copy grant table set in priv. struct. */
- if ((rp->p_rts_flags & NO_PRIV) || !(priv(rp))) {
- r = EPERM;
- } else {
- _K_SET_GRANT_TABLE(rp,
- (vir_bytes) m_ptr->PCTL_ADDR1,
- m_ptr->PCTL_INT1);
- r = OK;
- }
- break;
- default:
- r = EINVAL;
- break;
- }
-
- return r;
-}
--- /dev/null
+/* The kernel call implemented in this file:
+ * m_type: SYS_SETGRANT
+ *
+ * The parameters for this kernel call are:
+ * SG_ADDR address of grant table in own address space
+ * SG_SIZE number of entries
+ */
+
+#include "../system.h"
+#include <minix/safecopies.h>
+
+/*===========================================================================*
+ * do_setgrant *
+ *===========================================================================*/
+PUBLIC int do_setgrant(m_ptr)
+message *m_ptr;
+{
+ struct proc *rp;
+ int r;
+
+ /* Who wants to set a parameter? */
+ rp = proc_addr(who_p);
+
+ /* Copy grant table set in priv. struct. */
+ if ((rp->p_rts_flags & NO_PRIV) || !(priv(rp))) {
+ r = EPERM;
+ } else {
+ _K_SET_GRANT_TABLE(rp,
+ (vir_bytes) m_ptr->SG_ADDR,
+ m_ptr->SG_SIZE);
+ r = OK;
+ }
+
+ return r;
+}
sys_sigreturn.c \
sys_sigsend.c \
sys_privctl.c \
- sys_paramctl.c \
+ sys_setgrant.c \
sys_times.c \
sys_trace.c \
sys_umap.c \
}
/* Update kernel about the table. */
- if((s=sys_paramctl(SYS_PARAM_SET_GRANT, new_ngrants, new_grants, 0))) {
+ if((s=sys_setgrant(new_grants, new_ngrants))) {
return -1;
}
new_grants[g].cp_flags = 0;
/* Inform kernel about new size (and possibly new location). */
- if((sys_paramctl(SYS_PARAM_SET_GRANT, new_size, new_grants, 0))) {
+ if((sys_setgrant(new_grants, new_size))) {
free(new_grants);
return; /* Failed - don't grow then. */
}
--- /dev/null
+
+#include "syslib.h"
+
+#include <minix/safecopies.h>
+
+int sys_setgrant(cp_grant_t *grants, int ngrants)
+{
+ message m;
+
+ m.SG_ADDR = (char *) grants;
+ m.SG_SIZE = ngrants;
+
+ return _taskcall(SYSTASK, SYS_SETGRANT, &m);
+}