make vfs & filesystems use failable copying
[minix3.git] / include / minix / com.h
blob6377c68457df2f38c746797e351a1ca6049ddfbc
1 /* This file defines constants for use in message communication (mostly)
2 * between system processes.
4 * A number of protocol message request and response types are defined. For
5 * debugging purposes, each protocol is assigned its own unique number range.
6 * The following such message type ranges have been allocated:
8 * 0x00 - 0xFF Process Manager (PM) requests (see callnr.h)
9 * 0x100 - 0x1FF Virtual File System (VFS) requests (see callnr.h)
10 * 0x200 - 0x2FF Data link layer requests and responses
11 * 0x300 - 0x3FF Bus controller requests and responses
12 * 0x400 - 0x4FF Character device requests and responses
13 * 0x500 - 0x5FF Block device requests and responses
14 * 0x600 - 0x6FF Kernel calls
15 * 0x700 - 0x7FF Reincarnation Server (RS) requests
16 * 0x800 - 0x8FF Data Store (DS) requests
17 * 0x900 - 0x9FF Requests from PM to VFS, and responses
18 * 0xA00 - 0xAFF Requests from VFS to file systems (see vfsif.h)
19 * 0xB00 - 0xBFF Transaction IDs from VFS to file systems (see vfsif.h)
20 * 0xC00 - 0xCFF Virtual Memory (VM) requests
21 * 0xD00 - 0xDFF IPC server requests
22 * 0xE00 - 0xEFF Common system messages (e.g. system signals)
23 * 0xF00 - 0xFFF Scheduling messages
24 * 0x1000 - 0x10FF Notify messages
25 * 0x1100 - 0x11FF USB
26 * 0x1200 - 0x12FF Devman
27 * 0x1300 - 0x13FF TTY requests
28 * 0x1400 - 0x14FF Real Time Clock requests and responses
29 * 0x1500 - 0x15FF Input server messages
30 * 0x1600 - 0x16FF VirtualBox (VBOX) requests (see vboxif.h)
32 * Zero and negative values are widely used for OK and error responses.
35 #ifndef _MINIX_COM_H
36 #define _MINIX_COM_H
38 /*===========================================================================*
39 * Process numbers of processes in the system image *
40 *===========================================================================*/
42 /* Kernel tasks. These all run in the same address space. */
43 #define ASYNCM ((endpoint_t) -5) /* notifies about finished async sends */
44 #define IDLE ((endpoint_t) -4) /* runs when no one else can run */
45 #define CLOCK ((endpoint_t) -3) /* alarms and other clock functions */
46 #define SYSTEM ((endpoint_t) -2) /* request system functionality */
47 #define KERNEL ((endpoint_t) -1) /* pseudo-process for IPC and scheduling */
48 #define HARDWARE KERNEL /* for hardware interrupt handlers */
50 /* Number of tasks. Note that NR_PROCS is defined in <minix/config.h>. */
51 #define MAX_NR_TASKS 1023
52 #define NR_TASKS 5
54 /* User-space processes, that is, device drivers, servers, and INIT. */
55 #define PM_PROC_NR ((endpoint_t) 0) /* process manager */
56 #define VFS_PROC_NR ((endpoint_t) 1) /* file system */
57 #define RS_PROC_NR ((endpoint_t) 2) /* reincarnation server */
58 #define MEM_PROC_NR ((endpoint_t) 3) /* memory driver (RAM disk, null, etc.) */
59 #define SCHED_PROC_NR ((endpoint_t) 4) /* scheduler */
60 #define TTY_PROC_NR ((endpoint_t) 5) /* terminal (TTY) driver */
61 #define DS_PROC_NR ((endpoint_t) 6) /* data store server */
62 #define MFS_PROC_NR ((endpoint_t) 7) /* minix root filesystem */
63 #define VM_PROC_NR ((endpoint_t) 8) /* memory server */
64 #define PFS_PROC_NR ((endpoint_t) 9) /* pipe filesystem */
65 #define LAST_SPECIAL_PROC_NR 10 /* An untyped version for
66 computation in macros.*/
67 #define INIT_PROC_NR ((endpoint_t) LAST_SPECIAL_PROC_NR) /* init
68 -- goes multiuser */
69 #define NR_BOOT_MODULES (INIT_PROC_NR+1)
71 /* Root system process and root user process. */
72 #define ROOT_SYS_PROC_NR RS_PROC_NR
73 #define ROOT_USR_PROC_NR INIT_PROC_NR
75 /*===========================================================================*
76 * Kernel notification types *
77 *===========================================================================*/
79 /* Kernel notification types. In principle, these can be sent to any process,
80 * so make sure that these types do not interfere with other message types.
81 * Notifications are prioritized because of the way they are unhold() and
82 * blocking notifications are delivered. The lowest numbers go first. The
83 * offset are used for the per-process notification bit maps.
85 #define NOTIFY_MESSAGE 0x1000
86 /* FIXME the old is_notify(a) should be replaced by is_ipc_notify(status). */
87 #define is_ipc_notify(ipc_status) (IPC_STATUS_CALL(ipc_status) == NOTIFY)
88 #define is_notify(a) ((unsigned) ((a) - NOTIFY_MESSAGE) < 0x100)
89 #define is_ipc_asynch(ipc_status) \
90 (is_ipc_notify(ipc_status) || IPC_STATUS_CALL(ipc_status) == SENDA)
92 /*===========================================================================*
93 * Messages for BUS controller drivers *
94 *===========================================================================*/
95 #define BUSC_RQ_BASE 0x300 /* base for request types */
96 #define BUSC_RS_BASE 0x380 /* base for response types */
98 #define BUSC_PCI_INIT (BUSC_RQ_BASE + 0) /* First message to
99 * PCI driver
101 #define BUSC_PCI_FIRST_DEV (BUSC_RQ_BASE + 1) /* Get index (and
102 * vid/did) of the
103 * first PCI device
105 #define BUSC_PCI_NEXT_DEV (BUSC_RQ_BASE + 2) /* Get index (and
106 * vid/did) of the
107 * next PCI device
109 #define BUSC_PCI_FIND_DEV (BUSC_RQ_BASE + 3) /* Get index of a
110 * PCI device based on
111 * bus/dev/function
113 #define BUSC_PCI_IDS (BUSC_RQ_BASE + 4) /* Get vid/did from an
114 * index
116 #define BUSC_PCI_RESERVE (BUSC_RQ_BASE + 7) /* Reserve a PCI dev */
117 #define BUSC_PCI_ATTR_R8 (BUSC_RQ_BASE + 8) /* Read 8-bit
118 * attribute value
120 #define BUSC_PCI_ATTR_R16 (BUSC_RQ_BASE + 9) /* Read 16-bit
121 * attribute value
123 #define BUSC_PCI_ATTR_R32 (BUSC_RQ_BASE + 10) /* Read 32-bit
124 * attribute value
126 #define BUSC_PCI_ATTR_W8 (BUSC_RQ_BASE + 11) /* Write 8-bit
127 * attribute value
129 #define BUSC_PCI_ATTR_W16 (BUSC_RQ_BASE + 12) /* Write 16-bit
130 * attribute value
132 #define BUSC_PCI_ATTR_W32 (BUSC_RQ_BASE + 13) /* Write 32-bit
133 * attribute value
135 #define BUSC_PCI_RESCAN (BUSC_RQ_BASE + 14) /* Rescan bus */
136 #define BUSC_PCI_DEV_NAME_S (BUSC_RQ_BASE + 15) /* Get the name of a
137 * PCI device
138 * (safecopy)
140 #define BUSC_PCI_SLOT_NAME_S (BUSC_RQ_BASE + 16) /* Get the name of a
141 * PCI slot (safecopy)
143 #define BUSC_PCI_SET_ACL (BUSC_RQ_BASE + 17) /* Set the ACL for a
144 * driver (safecopy)
146 #define BUSC_PCI_DEL_ACL (BUSC_RQ_BASE + 18) /* Delete the ACL of a
147 * driver
149 #define BUSC_PCI_GET_BAR (BUSC_RQ_BASE + 19) /* Get Base Address
150 * Register properties
152 #define BUSC_PGB_DEVIND m2_i1 /* device index */
153 #define BUSC_PGB_PORT m2_i2 /* port (BAR offset) */
154 #define BUSC_PGB_BASE m2_l1 /* BAR base address */
155 #define BUSC_PGB_SIZE m2_l2 /* BAR size */
156 #define BUSC_PGB_IOFLAG m2_i1 /* I/O space? */
157 #define IOMMU_MAP (BUSC_RQ_BASE + 32) /* Ask IOMMU to map
158 * a segment of memory
161 #define BUSC_I2C_RESERVE (BUSC_RQ_BASE + 64) /* reserve i2c device */
162 #define BUSC_I2C_ADDR m2_i1 /* slave address */
163 #define BUSC_I2C_EXEC (BUSC_RQ_BASE + 65) /* perform i2c action */
164 #define BUSC_I2C_GRANT m2_i1 /* grant for request */
166 /*===========================================================================*
167 * Messages for networking layer *
168 *===========================================================================*/
170 /* Base type for data link layer requests and responses. */
171 #define DL_RQ_BASE 0x200
172 #define DL_RS_BASE 0x280
174 #define IS_DL_RQ(type) (((type) & ~0x7f) == DL_RQ_BASE)
175 #define IS_DL_RS(type) (((type) & ~0x7f) == DL_RS_BASE)
177 /* Message types for data link layer requests. */
178 #define DL_CONF (DL_RQ_BASE + 0)
179 #define DL_GETSTAT_S (DL_RQ_BASE + 1)
180 #define DL_WRITEV_S (DL_RQ_BASE + 2)
181 #define DL_READV_S (DL_RQ_BASE + 3)
183 /* Message type for data link layer replies. */
184 #define DL_CONF_REPLY (DL_RS_BASE + 0)
185 #define DL_STAT_REPLY (DL_RS_BASE + 1)
186 #define DL_TASK_REPLY (DL_RS_BASE + 2)
188 /* Field names for data link layer messages. */
189 #define DL_COUNT m2_i3
190 #define DL_MODE m2_l1
191 #define DL_FLAGS m2_l1
192 #define DL_GRANT m2_l2
193 #define DL_STAT m3_i1
194 #define DL_HWADDR m3_ca1
196 /* Bits in 'DL_FLAGS' field of DL replies. */
197 # define DL_NOFLAGS 0x00
198 # define DL_PACK_SEND 0x01
199 # define DL_PACK_RECV 0x02
201 /* Bits in 'DL_MODE' field of DL requests. */
202 # define DL_NOMODE 0x0
203 # define DL_PROMISC_REQ 0x1
204 # define DL_MULTI_REQ 0x2
205 # define DL_BROAD_REQ 0x4
207 /*===========================================================================*
208 * SYSTASK request types and field names *
209 *===========================================================================*/
211 /* System library calls are dispatched via a call vector, so be careful when
212 * modifying the system call numbers. The numbers here determine which call
213 * is made from the call vector.
215 #define KERNEL_CALL 0x600 /* base for kernel calls to SYSTEM */
217 # define SYS_FORK (KERNEL_CALL + 0) /* sys_fork() */
218 # define SYS_EXEC (KERNEL_CALL + 1) /* sys_exec() */
219 # define SYS_CLEAR (KERNEL_CALL + 2) /* sys_clear() */
220 # define SYS_SCHEDULE (KERNEL_CALL + 3) /* sys_schedule() */
221 # define SYS_PRIVCTL (KERNEL_CALL + 4) /* sys_privctl() */
222 # define SYS_TRACE (KERNEL_CALL + 5) /* sys_trace() */
223 # define SYS_KILL (KERNEL_CALL + 6) /* sys_kill() */
225 # define SYS_GETKSIG (KERNEL_CALL + 7) /* sys_getsig() */
226 # define SYS_ENDKSIG (KERNEL_CALL + 8) /* sys_endsig() */
227 # define SYS_SIGSEND (KERNEL_CALL + 9) /* sys_sigsend() */
228 # define SYS_SIGRETURN (KERNEL_CALL + 10) /* sys_sigreturn() */
230 # define SYS_MEMSET (KERNEL_CALL + 13) /* sys_memset() */
232 # define SYS_UMAP (KERNEL_CALL + 14) /* sys_umap() */
233 # define SYS_VIRCOPY (KERNEL_CALL + 15) /* sys_vircopy() */
234 # define SYS_PHYSCOPY (KERNEL_CALL + 16) /* sys_physcopy() */
235 # define SYS_UMAP_REMOTE (KERNEL_CALL + 17) /* sys_umap_remote() */
236 # define SYS_VUMAP (KERNEL_CALL + 18) /* sys_vumap() */
238 # define SYS_IRQCTL (KERNEL_CALL + 19) /* sys_irqctl() */
239 # define SYS_INT86 (KERNEL_CALL + 20) /* sys_int86() */
240 # define SYS_DEVIO (KERNEL_CALL + 21) /* sys_devio() */
241 # define SYS_SDEVIO (KERNEL_CALL + 22) /* sys_sdevio() */
242 # define SYS_VDEVIO (KERNEL_CALL + 23) /* sys_vdevio() */
244 # define SYS_SETALARM (KERNEL_CALL + 24) /* sys_setalarm() */
245 # define SYS_TIMES (KERNEL_CALL + 25) /* sys_times() */
246 # define SYS_GETINFO (KERNEL_CALL + 26) /* sys_getinfo() */
247 # define SYS_ABORT (KERNEL_CALL + 27) /* sys_abort() */
248 # define SYS_IOPENABLE (KERNEL_CALL + 28) /* sys_enable_iop() */
249 # define SYS_SAFECOPYFROM (KERNEL_CALL + 31) /* sys_safecopyfrom() */
250 # define SYS_SAFECOPYTO (KERNEL_CALL + 32) /* sys_safecopyto() */
251 # define SYS_VSAFECOPY (KERNEL_CALL + 33) /* sys_vsafecopy() */
252 # define SYS_SETGRANT (KERNEL_CALL + 34) /* sys_setgrant() */
253 # define SYS_READBIOS (KERNEL_CALL + 35) /* sys_readbios() */
255 # define SYS_SPROF (KERNEL_CALL + 36) /* sys_sprof() */
256 # define SYS_CPROF (KERNEL_CALL + 37) /* sys_cprof() */
257 # define SYS_PROFBUF (KERNEL_CALL + 38) /* sys_profbuf() */
259 # define SYS_STIME (KERNEL_CALL + 39) /* sys_stime() */
260 # define SYS_SETTIME (KERNEL_CALL + 40) /* sys_settime() */
262 # define SYS_VMCTL (KERNEL_CALL + 43) /* sys_vmctl() */
264 # define SYS_DIAGCTL (KERNEL_CALL + 44) /* sys_diagctl() */
266 # define SYS_VTIMER (KERNEL_CALL + 45) /* sys_vtimer() */
267 # define SYS_RUNCTL (KERNEL_CALL + 46) /* sys_runctl() */
268 # define SYS_GETMCONTEXT (KERNEL_CALL + 50) /* sys_getmcontext() */
269 # define SYS_SETMCONTEXT (KERNEL_CALL + 51) /* sys_setmcontext() */
271 # define SYS_UPDATE (KERNEL_CALL + 52) /* sys_update() */
272 # define SYS_EXIT (KERNEL_CALL + 53) /* sys_exit() */
274 # define SYS_SCHEDCTL (KERNEL_CALL + 54) /* sys_schedctl() */
275 # define SYS_STATECTL (KERNEL_CALL + 55) /* sys_statectl() */
277 # define SYS_SAFEMEMSET (KERNEL_CALL + 56) /* sys_safememset() */
279 # define SYS_PADCONF (KERNEL_CALL + 57) /* sys_padconf() */
281 /* Total */
282 #define NR_SYS_CALLS 58 /* number of kernel calls */
284 #define SYS_CALL_MASK_SIZE BITMAP_CHUNKS(NR_SYS_CALLS)
286 /* Basic kernel calls allowed to every system process. */
287 #define SYS_BASIC_CALLS \
288 SYS_EXIT, SYS_SAFECOPYFROM, SYS_SAFECOPYTO, SYS_VSAFECOPY, SYS_GETINFO, \
289 SYS_TIMES, SYS_SETALARM, SYS_SETGRANT, \
290 SYS_PROFBUF, SYS_DIAGCTL, SYS_STATECTL, SYS_SAFEMEMSET
292 /* Field names for SYS_MEMSET. */
293 #define MEM_PTR m2_p1 /* base */
294 #define MEM_COUNT m2_l1 /* count */
295 #define MEM_PATTERN m2_l2 /* pattern to write */
296 #define MEM_PROCESS m2_i1 /* NONE (phys) or process id (vir) */
298 /* Field names for SYS_DEVIO, SYS_VDEVIO, SYS_SDEVIO. */
299 #define DIO_REQUEST m2_i3 /* device in or output */
300 # define _DIO_INPUT 0x001
301 # define _DIO_OUTPUT 0x002
302 # define _DIO_DIRMASK 0x00f
303 # define _DIO_BYTE 0x010
304 # define _DIO_WORD 0x020
305 # define _DIO_LONG 0x030
306 # define _DIO_TYPEMASK 0x0f0
307 # define _DIO_SAFE 0x100
308 # define _DIO_SAFEMASK 0xf00
309 # define DIO_INPUT_BYTE (_DIO_INPUT|_DIO_BYTE)
310 # define DIO_INPUT_WORD (_DIO_INPUT|_DIO_WORD)
311 # define DIO_INPUT_LONG (_DIO_INPUT|_DIO_LONG)
312 # define DIO_OUTPUT_BYTE (_DIO_OUTPUT|_DIO_BYTE)
313 # define DIO_OUTPUT_WORD (_DIO_OUTPUT|_DIO_WORD)
314 # define DIO_OUTPUT_LONG (_DIO_OUTPUT|_DIO_LONG)
315 # define DIO_SAFE_INPUT_BYTE (_DIO_INPUT|_DIO_BYTE|_DIO_SAFE)
316 # define DIO_SAFE_INPUT_WORD (_DIO_INPUT|_DIO_WORD|_DIO_SAFE)
317 # define DIO_SAFE_INPUT_LONG (_DIO_INPUT|_DIO_LONG|_DIO_SAFE)
318 # define DIO_SAFE_OUTPUT_BYTE (_DIO_OUTPUT|_DIO_BYTE|_DIO_SAFE)
319 # define DIO_SAFE_OUTPUT_WORD (_DIO_OUTPUT|_DIO_WORD|_DIO_SAFE)
320 # define DIO_SAFE_OUTPUT_LONG (_DIO_OUTPUT|_DIO_LONG|_DIO_SAFE)
321 #define DIO_PORT m2_l1 /* single port address */
322 #define DIO_VALUE m2_l2 /* single I/O value */
323 #define DIO_VEC_ADDR m2_p1 /* address of buffer or (p,v)-pairs */
324 #define DIO_VEC_SIZE m2_l2 /* number of elements in vector */
325 #define DIO_VEC_ENDPT m2_i2 /* number of process where vector is */
326 #define DIO_OFFSET m2_i1 /* offset from grant */
328 /* Field names for SYS_SETALARM. */
329 #define ALRM_EXP_TIME m2_l1 /* expire time for the alarm call */
330 #define ALRM_ABS_TIME m2_i2 /* set to 1 to use absolute alarm time */
331 #define ALRM_TIME_LEFT m2_l1 /* how many ticks were remaining */
333 /* Field names for SYS_IRQCTL. */
334 #define IRQ_REQUEST m5_s1 /* what to do? */
335 # define IRQ_SETPOLICY 1 /* manage a slot of the IRQ table */
336 # define IRQ_RMPOLICY 2 /* remove a slot of the IRQ table */
337 # define IRQ_ENABLE 3 /* enable interrupts */
338 # define IRQ_DISABLE 4 /* disable interrupts */
339 #define IRQ_VECTOR m5_s2 /* irq vector */
340 #define IRQ_POLICY m5_i1 /* options for IRQCTL request */
341 # define IRQ_REENABLE 0x001 /* reenable IRQ line after interrupt */
342 # define IRQ_BYTE 0x100 /* byte values */
343 # define IRQ_WORD 0x200 /* word values */
344 # define IRQ_LONG 0x400 /* long values */
345 #define IRQ_HOOK_ID m5_l3 /* id of irq hook at kernel */
347 /* Field names for SYS_ABORT. */
348 #define ABRT_HOW m1_i1 /* RBT_REBOOT, RBT_HALT, etc. */
350 /* Field names for SYS_IOPENABLE. */
351 #define IOP_ENDPT m2_l1 /* target endpoint */
353 /* Field names for _UMAP, _VIRCOPY, _PHYSCOPY. */
354 #define CP_SRC_ENDPT m5_i1 /* process to copy from */
355 #define CP_SRC_ADDR m5_l1 /* address where data come from */
356 #define CP_DST_ENDPT m5_i2 /* process to copy to */
357 #define CP_DST_ADDR m5_l2 /* address where data go to */
358 #define CP_NR_BYTES m5_l3 /* number of bytes to copy */
359 #define CP_FLAGS m5_s2 /* number of bytes to copy */
361 #define CP_FLAG_TRY 0x01 /* do not transparently map */
363 #define UMAP_SEG m5_s1
365 /* Field names for SYS_VUMAP. */
366 #define VUMAP_ENDPT m10_i1 /* grant owner, or SELF for local addresses */
367 #define VUMAP_VADDR m10_l1 /* address of virtual (input) vector */
368 #define VUMAP_VCOUNT m10_i2 /* number of elements in virtual vector */
369 #define VUMAP_OFFSET m10_l2 /* offset into first entry of input vector */
370 #define VUMAP_ACCESS m10_i3 /* access requested for input (VUA_ flags) */
371 #define VUMAP_PADDR m10_l3 /* address of physical (output) vector */
372 #define VUMAP_PMAX m10_i4 /* max number of physical vector elements */
373 #define VUMAP_PCOUNT m10_i1 /* upon return: number of elements filled */
375 /* Field names for SYS_GETINFO. */
376 #define I_REQUEST m7_i3 /* what info to get */
377 # define GET_KINFO 0 /* get kernel information structure */
378 # define GET_IMAGE 1 /* get system image table */
379 # define GET_PROCTAB 2 /* get kernel process table */
380 # define GET_RANDOMNESS 3 /* get randomness buffer */
381 # define GET_MONPARAMS 4 /* get monitor parameters */
382 # define GET_KENV 5 /* get kernel environment string */
383 # define GET_IRQHOOKS 6 /* get the IRQ table */
384 # define GET_PRIVTAB 8 /* get kernel privileges table */
385 # define GET_KADDRESSES 9 /* get various kernel addresses */
386 # define GET_SCHEDINFO 10 /* get scheduling queues */
387 # define GET_PROC 11 /* get process slot if given process */
388 # define GET_MACHINE 12 /* get machine information */
389 # define GET_LOCKTIMING 13 /* get lock()/unlock() latency timing */
390 # define GET_BIOSBUFFER 14 /* get a buffer for BIOS calls */
391 # define GET_LOADINFO 15 /* get load average information */
392 # define GET_IRQACTIDS 16 /* get the IRQ masks */
393 # define GET_PRIV 17 /* get privilege structure */
394 # define GET_HZ 18 /* get HZ value */
395 # define GET_WHOAMI 19 /* get own name, endpoint, and privileges */
396 # define GET_RANDOMNESS_BIN 20 /* get one randomness bin */
397 # define GET_IDLETSC 21 /* get cumulative idle time stamp counter */
398 # define GET_CPUINFO 23 /* get information about cpus */
399 # define GET_REGS 24 /* get general process registers */
400 # define GET_RUSAGE 25 /* get resource usage */
401 #define I_ENDPT m7_i4 /* calling process (may only be SELF) */
402 #define I_VAL_PTR m7_p1 /* virtual address at caller */
403 #define I_VAL_LEN m7_i1 /* max length of value */
404 #define I_VAL_PTR2 m7_p2 /* second virtual address */
405 #define I_VAL_LEN2_E m7_i2 /* second length, or proc nr */
407 /* GET_WHOAMI fields. */
408 #define GIWHO_EP m3_i1
409 #define GIWHO_NAME m3_ca1
410 #define GIWHO_PRIVFLAGS m3_i2
412 /* Field names for SYS_TIMES. */
413 #define T_ENDPT m4_l1 /* process to request time info for */
414 #define T_USER_TIME m4_l1 /* user time consumed by process */
415 #define T_SYSTEM_TIME m4_l2 /* system time consumed by process */
416 #define T_BOOTTIME m4_ll1 /* Boottime in seconds (also for SYS_STIME) */
417 #define T_REAL_TICKS m4_l4 /* number of wall clock ticks since boottime */
418 #define T_BOOT_TICKS m4_l5 /* number of hard clock ticks since boottime */
420 /* Field names for SYS_SETTIME. */
421 #define T_SETTIME_NOW m4_l2 /* non-zero for immediate, 0 for adjtime */
422 #define T_CLOCK_ID m4_l3 /* clock to adjust */
423 #define T_TIME_SEC m4_ll1 /* time in seconds since 1970 */
424 #define T_TIME_NSEC m4_l5 /* number of nano seconds */
426 /* Field names for SYS_TRACE, SYS_PRIVCTL, SYS_STATECTL. */
427 #define CTL_ENDPT m2_i1 /* process number of the caller */
428 #define CTL_REQUEST m2_i2 /* server control request */
429 #define CTL_ARG_PTR m2_p1 /* pointer to argument */
430 #define CTL_ADDRESS m2_l1 /* address at traced process' space */
431 #define CTL_DATA m2_l2 /* data field for tracing */
433 /* SYS_PRIVCTL with CTL_REQUEST == SYS_PRIV_QUERY_MEM */
434 #define CTL_PHYSSTART m2_l1 /* physical memory start in bytes*/
435 #define CTL_PHYSLEN m2_l2 /* length in bytes */
437 /* Subfunctions for SYS_PRIVCTL */
438 #define SYS_PRIV_ALLOW 1 /* Allow process to run */
439 #define SYS_PRIV_DISALLOW 2 /* Disallow process to run */
440 #define SYS_PRIV_SET_SYS 3 /* Set a system privilege structure */
441 #define SYS_PRIV_SET_USER 4 /* Set a user privilege structure */
442 #define SYS_PRIV_ADD_IO 5 /* Add I/O range (struct io_range) */
443 #define SYS_PRIV_ADD_MEM 6 /* Add memory range (struct mem_range)
445 #define SYS_PRIV_ADD_IRQ 7 /* Add IRQ */
446 #define SYS_PRIV_QUERY_MEM 8 /* Verify memory privilege. */
447 #define SYS_PRIV_UPDATE_SYS 9 /* Update a sys privilege structure. */
448 #define SYS_PRIV_YIELD 10 /* Allow process to run and suspend */
450 /* Field names for SYS_SETGRANT */
451 #define SG_ADDR m2_p1 /* address */
452 #define SG_SIZE m2_i2 /* no. of entries */
454 /* Field names for SYS_FORK, _EXEC, _EXIT, GETMCONTEXT, SETMCONTEXT.*/
455 #define PR_ENDPT m1_i1 /* indicates a process */
456 #define PR_PRIORITY m1_i2 /* process priority */
457 #define PR_SLOT m1_i2 /* indicates a process slot */
458 #define PR_STACK_PTR m1_p1 /* used for stack ptr in sys_exec, sys_getsp */
459 #define PR_NAME_PTR m1_p2 /* tells where program name is for dmp */
460 #define PR_IP_PTR m1_p3 /* initial value for ip after exec */
461 #define PR_PS_STR_PTR m1_p4 /* pointer to ps_strings, expected by __start */
462 #define PR_FORK_FLAGS m1_i3 /* optional flags for fork operation */
463 #define PR_FORK_MSGADDR m1_p1 /* reply message address of forked child */
464 #define PR_CTX_PTR m1_p1 /* pointer to mcontext_t structure */
466 /* Constants for exec. FIXME: these do not belong here. */
467 #define PMEF_AUXVECTORS 20
468 #define PMEF_EXECNAMELEN1 PATH_MAX
470 /* Flags for PR_FORK_FLAGS. */
471 #define PFF_VMINHIBIT 0x01 /* Don't schedule until release by VM. */
473 /* Field names for SYS_INT86 */
474 #define INT86_REG86 m1_p1 /* pointer to registers */
476 /* Field names for SYS_SAFECOPY* */
477 #define SCP_FROM_TO m2_i1 /* from/to whom? */
478 #define SCP_GID m2_i3 /* grant id */
479 #define SCP_OFFSET m2_l1 /* offset within grant */
480 #define SCP_ADDRESS m2_p1 /* my own address */
481 #define SCP_BYTES m2_l2 /* bytes from offset */
483 /* SYS_SAFEMEMSET */
484 #define SMS_DST m2_i1 /* dst endpoint */
485 #define SMS_GID m2_i3 /* grant id */
486 #define SMS_OFFSET m2_l1 /* offset within grant */
487 #define SMS_BYTES m2_l2 /* bytes from offset */
488 #define SMS_PATTERN m2_i2 /* memset() pattern */
490 /* Field names for SYS_VSAFECOPY* */
491 #define VSCP_VEC_ADDR m2_p1 /* start of vector */
492 #define VSCP_VEC_SIZE m2_l2 /* elements in vector */
494 /* Field names for SYS_SPROF, _CPROF, _PROFBUF. */
495 #define PROF_ACTION m7_i1 /* start/stop/reset/get */
496 #define PROF_MEM_SIZE m7_i2 /* available memory for data */
497 #define PROF_FREQ m7_i3 /* sample frequency */
498 #define PROF_ENDPT m7_i4 /* endpoint of caller */
499 #define PROF_INTR_TYPE m7_i5 /* interrupt type */
500 #define PROF_CTL_PTR m7_p1 /* location of info struct */
501 #define PROF_MEM_PTR m7_p2 /* location of profiling data */
503 /* Field names for SYS_READBIOS. */
504 #define RDB_SIZE m2_i1
505 #define RDB_ADDR m2_l1
506 #define RDB_BUF m2_p1
508 /* Field names for SYS_VMCTL. */
509 #define SVMCTL_WHO m1_i1
510 #define SVMCTL_PARAM m1_i2 /* All SYS_VMCTL requests. */
511 #define SVMCTL_VALUE m1_i3
512 #define SVMCTL_MRG_TARGET m2_i1 /* MEMREQ_GET reply: target process */
513 #define SVMCTL_MRG_ADDR m2_i2 /* MEMREQ_GET reply: address */
514 #define SVMCTL_MRG_LENGTH m2_i3 /* MEMREQ_GET reply: length */
515 #define SVMCTL_MRG_FLAG m2_s1 /* MEMREQ_GET reply: flag */
516 #define SVMCTL_MRG_EP2 m2_l1 /* MEMREQ_GET reply: source process */
517 #define SVMCTL_MRG_ADDR2 m2_l2 /* MEMREQ_GET reply: source address */
518 #define SVMCTL_MRG_REQUESTOR m2_p1 /* MEMREQ_GET reply: requestor */
519 #define SVMCTL_MAP_VIR_ADDR m1_p1
520 #define SVMCTL_PTROOT m1_i3
521 #define SVMCTL_PTROOT_V m1_p1
523 /* Reply message for VMCTL_KERN_PHYSMAP */
524 #define SVMCTL_MAP_FLAGS m2_i1 /* VMMF_* */
525 #define SVMCTL_MAP_PHYS_ADDR m2_l1
526 #define SVMCTL_MAP_PHYS_LEN m2_l2
528 #define VMMF_UNCACHED (1L << 0)
529 #define VMMF_USER (1L << 1)
530 #define VMMF_WRITE (1L << 2)
531 #define VMMF_GLO (1L << 3)
533 /* Values for SVMCTL_PARAM. */
534 #define VMCTL_CLEAR_PAGEFAULT 12
535 #define VMCTL_GET_PDBR 13
536 #define VMCTL_MEMREQ_GET 14
537 #define VMCTL_MEMREQ_REPLY 15
538 #define VMCTL_NOPAGEZERO 18
539 #define VMCTL_I386_KERNELLIMIT 19
540 #define VMCTL_I386_INVLPG 25
541 #define VMCTL_FLUSHTLB 26
542 #define VMCTL_KERN_PHYSMAP 27
543 #define VMCTL_KERN_MAP_REPLY 28
544 #define VMCTL_SETADDRSPACE 29
545 #define VMCTL_VMINHIBIT_SET 30
546 #define VMCTL_VMINHIBIT_CLEAR 31
547 #define VMCTL_CLEARMAPCACHE 32
548 #define VMCTL_BOOTINHIBIT_CLEAR 33
550 /* Codes and field names for SYS_DIAGCTL. */
551 #define DIAGCTL_CODE m1_i1 /* DIAGCTL_CODE_* below */
552 #define DIAGCTL_ARG1 m1_p1
553 #define DIAGCTL_ARG2 m1_i2
554 #define DIAGCTL_CODE_DIAG 1 /* Print diagnostics. */
555 #define DIAGCTL_CODE_STACKTRACE 2 /* Print process stack. */
556 #define DIAGCTL_CODE_REGISTER 3 /* Register for diagnostic signals */
557 #define DIAGCTL_CODE_UNREGISTER 4 /* Unregister for diagnostic signals */
558 #define DIAG_BUFSIZE (80*25)
560 /* Field names for SYS_VTIMER. */
561 #define VT_WHICH m2_i1 /* which timer to set/retrieve */
562 # define VT_VIRTUAL 1 /* the ITIMER_VIRTUAL timer */
563 # define VT_PROF 2 /* the ITIMER_PROF timer */
564 #define VT_SET m2_i2 /* 1 for setting a timer, 0 retrieval only */
565 #define VT_VALUE m2_l1 /* new/previous value of the timer */
566 #define VT_ENDPT m2_l2 /* process to set/retrieve the timer for */
568 /* Field names for SYS_RUNCTL. */
569 #define RC_ENDPT m1_i1 /* which process to stop or resume */
570 #define RC_ACTION m1_i2 /* set or clear stop flag */
571 # define RC_STOP 0 /* stop the process */
572 # define RC_RESUME 1 /* clear the stop flag */
573 #define RC_FLAGS m1_i3 /* request flags */
574 # define RC_DELAY 1 /* delay stop if process is sending */
576 /* Field names for SYS_UPDATE. */
577 #define SYS_UPD_SRC_ENDPT m1_i1 /* source endpoint */
578 #define SYS_UPD_DST_ENDPT m1_i2 /* destination endpoint */
580 /* Subfunctions for SYS_STATECTL */
581 #define SYS_STATE_CLEAR_IPC_REFS 1 /* clear IPC references */
583 /* Subfunctions for SYS_SCHEDCTL */
584 #define SCHEDCTL_FLAGS m9_l1 /* flags for setting the scheduler */
585 # define SCHEDCTL_FLAG_KERNEL 1 /* mark kernel scheduler and remove
586 * RTS_NO_QUANTUM; otherwise caller is
587 * marked scheduler
589 #define SCHEDCTL_ENDPOINT m9_l2 /* endpt of process to be scheduled */
590 #define SCHEDCTL_QUANTUM m9_l3 /* current scheduling quantum */
591 #define SCHEDCTL_PRIORITY m9_s4 /* current scheduling priority */
592 #define SCHEDCTL_CPU m9_l5 /* where to place this process */
594 /* Field names for SYS_PADCONF */
595 #define PADCONF_PADCONF m2_i1 /* pad to configure */
596 #define PADCONF_MASK m2_i2 /* mask to apply */
597 #define PADCONF_VALUE m2_i3 /* value to write */
599 /*===========================================================================*
600 * Messages for the Reincarnation Server *
601 *===========================================================================*/
603 #define RS_RQ_BASE 0x700
605 #define RS_UP (RS_RQ_BASE + 0) /* start system service */
606 #define RS_DOWN (RS_RQ_BASE + 1) /* stop system service */
607 #define RS_REFRESH (RS_RQ_BASE + 2) /* refresh system service */
608 #define RS_RESTART (RS_RQ_BASE + 3) /* restart system service */
609 #define RS_SHUTDOWN (RS_RQ_BASE + 4) /* alert about shutdown */
610 #define RS_UPDATE (RS_RQ_BASE + 5) /* update system service */
611 #define RS_CLONE (RS_RQ_BASE + 6) /* clone system service */
612 #define RS_EDIT (RS_RQ_BASE + 7) /* edit system service */
614 #define RS_LOOKUP (RS_RQ_BASE + 8) /* lookup server name */
616 #define RS_GETSYSINFO (RS_RQ_BASE + 9) /* get system information */
618 #define RS_INIT (RS_RQ_BASE + 20) /* service init message */
619 #define RS_LU_PREPARE (RS_RQ_BASE + 21) /* prepare to update message */
621 # define RS_CMD_ADDR m1_p1 /* command string */
622 # define RS_CMD_LEN m1_i1 /* length of command */
623 # define RS_PERIOD m1_i2 /* heartbeat period */
624 # define RS_DEV_MAJOR m1_i3 /* major device number */
626 # define RS_ENDPOINT m1_i1 /* endpoint number in reply */
628 # define RS_NAME m1_p1 /* name */
629 # define RS_NAME_LEN m1_i1 /* namelen */
631 # define RS_INIT_RESULT m7_i1 /* init result */
632 # define RS_INIT_TYPE m7_i2 /* init type */
633 # define RS_INIT_RPROCTAB_GID m7_i3 /* init rproc table gid */
634 # define RS_INIT_OLD_ENDPOINT m7_i4 /* init old endpoint */
636 # define RS_LU_RESULT m1_i1 /* live update result */
637 # define RS_LU_STATE m1_i2 /* state required to update */
638 # define RS_LU_PREPARE_MAXTIME m1_i3 /* the max time to prepare */
640 /*===========================================================================*
641 * Messages for the Data Store Server *
642 *===========================================================================*/
644 #define DS_RQ_BASE 0x800
646 #define DS_PUBLISH (DS_RQ_BASE + 0) /* publish data */
647 #define DS_RETRIEVE (DS_RQ_BASE + 1) /* retrieve data by name */
648 #define DS_SUBSCRIBE (DS_RQ_BASE + 2) /* subscribe to data updates */
649 #define DS_CHECK (DS_RQ_BASE + 3) /* retrieve updated data */
650 #define DS_DELETE (DS_RQ_BASE + 4) /* delete data */
651 #define DS_SNAPSHOT (DS_RQ_BASE + 5) /* take a snapshot */
652 #define DS_RETRIEVE_LABEL (DS_RQ_BASE + 6) /* retrieve label's name */
653 #define DS_GETSYSINFO (DS_RQ_BASE + 7) /* get system information */
655 /* DS field names */
656 # define DS_KEY_GRANT m2_i1 /* key for the data */
657 # define DS_KEY_LEN m2_s1 /* length of key incl. '\0' */
658 # define DS_FLAGS m2_i2 /* flags provided by caller */
660 # define DS_VAL m2_l1 /* data (u32, char *, etc.) */
661 # define DS_VAL_LEN m2_l2 /* data length */
662 # define DS_NR_SNAPSHOT m2_i3 /* number of snapshot */
663 # define DS_OWNER m2_i3 /* owner */
665 /*===========================================================================*
666 * Messages used between PM and VFS *
667 *===========================================================================*/
669 #define VFS_PM_RQ_BASE 0x900
670 #define VFS_PM_RS_BASE 0x980
672 #define IS_VFS_PM_RQ(type) (((type) & ~0x7f) == VFS_PM_RQ_BASE)
673 #define IS_VFS_PM_RS(type) (((type) & ~0x7f) == VFS_PM_RS_BASE)
675 /* Requests from PM to VFS. */
676 #define VFS_PM_INIT (VFS_PM_RQ_BASE + 0) /* Process table exchange */
677 #define VFS_PM_SETUID (VFS_PM_RQ_BASE + 1) /* Set new user ID */
678 #define VFS_PM_SETGID (VFS_PM_RQ_BASE + 2) /* Set group ID */
679 #define VFS_PM_SETSID (VFS_PM_RQ_BASE + 3) /* Set session leader */
680 #define VFS_PM_EXIT (VFS_PM_RQ_BASE + 4) /* Process exits */
681 #define VFS_PM_DUMPCORE (VFS_PM_RQ_BASE + 5) /* Process is to dump core */
682 #define VFS_PM_EXEC (VFS_PM_RQ_BASE + 6) /* Forwarded exec call */
683 #define VFS_PM_FORK (VFS_PM_RQ_BASE + 7) /* Newly forked process */
684 #define VFS_PM_SRV_FORK (VFS_PM_RQ_BASE + 8) /* fork for system services */
685 #define VFS_PM_UNPAUSE (VFS_PM_RQ_BASE + 9) /* Interrupt process call */
686 #define VFS_PM_REBOOT (VFS_PM_RQ_BASE + 10) /* System reboot */
687 #define VFS_PM_SETGROUPS (VFS_PM_RQ_BASE + 11) /* Set groups */
689 /* Replies from VFS to PM */
690 #define VFS_PM_SETUID_REPLY (VFS_PM_RS_BASE + 1)
691 #define VFS_PM_SETGID_REPLY (VFS_PM_RS_BASE + 2)
692 #define VFS_PM_SETSID_REPLY (VFS_PM_RS_BASE + 3)
693 #define VFS_PM_EXIT_REPLY (VFS_PM_RS_BASE + 4)
694 #define VFS_PM_CORE_REPLY (VFS_PM_RS_BASE + 5)
695 #define VFS_PM_EXEC_REPLY (VFS_PM_RS_BASE + 6)
696 #define VFS_PM_FORK_REPLY (VFS_PM_RS_BASE + 7)
697 #define VFS_PM_SRV_FORK_REPLY (VFS_PM_RS_BASE + 8)
698 #define VFS_PM_UNPAUSE_REPLY (VFS_PM_RS_BASE + 9)
699 #define VFS_PM_REBOOT_REPLY (VFS_PM_RS_BASE + 10)
700 #define VFS_PM_SETGROUPS_REPLY (VFS_PM_RS_BASE + 11)
702 /* Standard parameters for all requests and replies, except PM_REBOOT */
703 # define VFS_PM_ENDPT m7_i1 /* process endpoint */
705 /* Additional parameters for PM_INIT */
706 # define VFS_PM_SLOT m7_i2 /* process slot number */
707 # define VFS_PM_PID m7_i3 /* process pid */
709 /* Additional parameters for PM_SETUID and PM_SETGID */
710 # define VFS_PM_EID m7_i2 /* effective user/group id */
711 # define VFS_PM_RID m7_i3 /* real user/group id */
713 /* Additional parameter for PM_SETGROUPS */
714 # define VFS_PM_GROUP_NO m7_i2 /* number of groups */
715 # define VFS_PM_GROUP_ADDR m7_p1 /* struct holding group data */
717 /* Additional parameters for PM_EXEC */
718 # define VFS_PM_PATH m7_p1 /* executable */
719 # define VFS_PM_PATH_LEN m7_i2 /* length of path including
720 * terminating null character
722 # define VFS_PM_FRAME m7_p2 /* arguments and environment */
723 # define VFS_PM_FRAME_LEN m7_i3 /* size of frame */
724 # define VFS_PM_PS_STR m7_i5 /* ps_strings pointer */
726 /* Additional parameters for PM_EXEC_REPLY and PM_CORE_REPLY */
727 # define VFS_PM_STATUS m7_i2 /* OK or failure */
728 # define VFS_PM_PC m7_p1 /* program counter */
729 # define VFS_PM_NEWSP m7_p2 /* possibly-changed stack ptr */
730 # define VFS_PM_NEWPS_STR m7_i5 /* possibly-changed ps_strings ptr */
732 /* Additional parameters for PM_FORK and PM_SRV_FORK */
733 # define VFS_PM_PENDPT m7_i2 /* parent process endpoint */
734 # define VFS_PM_CPID m7_i3 /* child pid */
735 # define VFS_PM_REUID m7_i4 /* real and effective uid */
736 # define VFS_PM_REGID m7_i5 /* real and effective gid */
738 /* Additional parameters for PM_DUMPCORE */
739 # define VFS_PM_TERM_SIG m7_i2 /* process's termination signal */
741 /*===========================================================================*
742 * Messages used from VFS to file servers *
743 *===========================================================================*/
745 #define FS_BASE 0xA00 /* Requests sent by VFS to filesystem
746 * implementations. See <minix/vfsif.h>
749 /*===========================================================================*
750 * Common requests and miscellaneous field names *
751 *===========================================================================*/
753 #define COMMON_RQ_BASE 0xE00
755 /* Field names for system signals (sent by a signal manager). */
756 #define SIGS_SIGNAL_RECEIVED (COMMON_RQ_BASE+0)
757 # define SIGS_SIG_NUM m2_i1
759 /* Common request to all processes: gcov data. */
760 #define COMMON_REQ_GCOV_DATA (COMMON_RQ_BASE+1)
761 # define GCOV_GRANT m1_i2
762 # define GCOV_PID m1_i3
763 # define GCOV_BUFF_P m1_p1
764 # define GCOV_BUFF_SZ m1_i1
766 /*===========================================================================*
767 * Messages for VM server *
768 *===========================================================================*/
769 #define VM_RQ_BASE 0xC00
771 /* Calls from PM */
772 #define VM_EXIT (VM_RQ_BASE+0)
773 # define VME_ENDPOINT m1_i1
774 #define VM_FORK (VM_RQ_BASE+1)
775 # define VMF_ENDPOINT m1_i1
776 # define VMF_SLOTNO m1_i2
777 # define VMF_CHILD_ENDPOINT m1_i3 /* result */
778 #define VM_BRK (VM_RQ_BASE+2)
779 # define VMB_ADDR m1_p1
780 #define VM_EXEC_NEWMEM (VM_RQ_BASE+3)
781 # define VMEN_ENDPOINT m1_i1
782 # define VMEN_ARGSPTR m1_p1
783 # define VMEN_ARGSSIZE m1_i2
784 # define VMEN_FLAGS m1_i3 /* result */
785 # define VMEN_STACK_TOP m1_p2 /* result */
786 #define VM_WILLEXIT (VM_RQ_BASE+5)
787 # define VMWE_ENDPOINT m1_i1
789 /* General calls. */
790 #define VM_MMAP (VM_RQ_BASE+10)
791 # define VMM_ADDR m_mmap.addr
792 # define VMM_LEN m_mmap.len
793 # define VMM_PROT m_mmap.prot
794 # define VMM_FLAGS m_mmap.flags
795 # define VMM_FD m_mmap.fd
796 # define VMM_OFFSET m_mmap.offset
797 # define VMM_FORWHOM m_mmap.forwhom
798 # define VMM_RETADDR m_mmap.retaddr
800 #define VM_MUNMAP (VM_RQ_BASE+17)
801 # define VMUM_ADDR m_mmap.addr
802 # define VMUM_LEN m_mmap.len
804 /* to VM: inform VM about a region of memory that is used for
805 * bus-master DMA
807 #define VM_ADDDMA (VM_RQ_BASE+12)
808 # define VMAD_EP m2_i1
809 # define VMAD_START m2_l1
810 # define VMAD_SIZE m2_l2
812 /* to VM: inform VM that a region of memory that is no longer
813 * used for bus-master DMA
815 #define VM_DELDMA (VM_RQ_BASE+13)
816 # define VMDD_EP m2_i1
817 # define VMDD_START m2_l1
818 # define VMDD_SIZE m2_l2
820 /* to VM: ask VM for a region of memory that should not
821 * be used for bus-master DMA any longer
823 #define VM_GETDMA (VM_RQ_BASE+14)
824 # define VMGD_PROCP m2_i1
825 # define VMGD_BASEP m2_l1
826 # define VMGD_SIZEP m2_l2
828 #define VM_MAP_PHYS (VM_RQ_BASE+15)
829 # define VMMP_EP m1_i1
830 # define VMMP_PHADDR m1_p2
831 # define VMMP_LEN m1_i2
832 # define VMMP_VADDR_REPLY m1_p3
834 #define VM_UNMAP_PHYS (VM_RQ_BASE+16)
835 # define VMUP_EP m1_i1
836 # define VMUP_VADDR m1_p1
838 /* To VM: map in cache block by FS */
839 #define VM_MAPCACHEPAGE (VM_RQ_BASE+26)
841 /* To VM: identify cache block in FS */
842 #define VM_SETCACHEPAGE (VM_RQ_BASE+27)
844 /* To VM: clear all cache blocks for a device */
845 #define VM_CLEARCACHE (VM_RQ_BASE+28)
847 /* To VFS: fields for request from VM. */
848 # define VFS_VMCALL_REQ m10_i1
849 # define VFS_VMCALL_FD m10_i2
850 # define VFS_VMCALL_REQID m10_i3
851 # define VFS_VMCALL_ENDPOINT m10_i4
852 # define VFS_VMCALL_OFFSET m10_ull1
853 # define VFS_VMCALL_LENGTH m10_l3
855 /* Request codes to from VM to VFS */
856 #define VMVFSREQ_FDLOOKUP 101
857 #define VMVFSREQ_FDCLOSE 102
858 #define VMVFSREQ_FDIO 103
860 /* Calls from VFS. */
861 #define VM_VFS_REPLY (VM_RQ_BASE+30)
862 # define VMV_ENDPOINT m10_i1
863 # define VMV_RESULT m10_i2
864 # define VMV_REQID m10_i3
865 # define VMV_DEV m10_i4
866 # define VMV_INO m10_l1
867 # define VMV_FD m10_l2
868 # define VMV_SIZE_PAGES m10_l3
870 #define VM_REMAP (VM_RQ_BASE+33)
871 # define VMRE_D m1_i1
872 # define VMRE_S m1_i2
873 # define VMRE_DA m1_p1
874 # define VMRE_SA m1_p2
875 # define VMRE_RETA m1_p3
876 # define VMRE_SIZE m1_i3
877 # define VMRE_FLAGS m1_i3
879 #define VM_SHM_UNMAP (VM_RQ_BASE+34)
880 # define VMUN_ENDPT m_mmap.forwhom
881 # define VMUN_ADDR m_mmap.addr
883 #define VM_GETPHYS (VM_RQ_BASE+35)
884 # define VMPHYS_ENDPT m2_i1
885 # define VMPHYS_ADDR m2_l1
886 # define VMPHYS_RETA m2_l2
888 #define VM_GETREF (VM_RQ_BASE+36)
889 # define VMREFCNT_ENDPT m2_i1
890 # define VMREFCNT_ADDR m2_l1
891 # define VMREFCNT_RETC m2_i2
893 #define VM_RS_SET_PRIV (VM_RQ_BASE+37)
894 # define VM_RS_NR m2_i1
895 # define VM_RS_BUF m2_l1
896 # define VM_RS_SYS m2_i2
898 #define VM_QUERY_EXIT (VM_RQ_BASE+38)
899 # define VM_QUERY_RET_PT m2_i1
900 # define VM_QUERY_IS_MORE m2_i2
902 #define VM_NOTIFY_SIG (VM_RQ_BASE+39)
903 # define VM_NOTIFY_SIG_ENDPOINT m1_i1
904 # define VM_NOTIFY_SIG_IPC m1_i2
906 #define VM_INFO (VM_RQ_BASE+40)
907 # define VMI_WHAT m2_i1
908 # define VMI_EP m2_i2
909 # define VMI_COUNT m2_i3
910 # define VMI_PTR m2_p1
911 # define VMI_NEXT m2_l1
913 /* VMI_WHAT values. */
914 #define VMIW_STATS 1
915 #define VMIW_USAGE 2
916 #define VMIW_REGION 3
918 #define VM_RS_UPDATE (VM_RQ_BASE+41)
919 # define VM_RS_SRC_ENDPT m1_i1
920 # define VM_RS_DST_ENDPT m1_i2
922 #define VM_RS_MEMCTL (VM_RQ_BASE+42)
923 # define VM_RS_CTL_ENDPT m1_i1
924 # define VM_RS_CTL_REQ m1_i2
925 # define VM_RS_MEM_PIN 0 /* pin memory */
926 # define VM_RS_MEM_MAKE_VM 1 /* make VM instance */
928 #define VM_WATCH_EXIT (VM_RQ_BASE+43)
929 # define VM_WE_EP m1_i1
931 #define VM_REMAP_RO (VM_RQ_BASE+44)
932 /* same args as VM_REMAP */
934 #define VM_PROCCTL (VM_RQ_BASE+45)
935 #define VMPCTL_PARAM m9_l1
936 #define VMPCTL_WHO m9_l2
937 #define VMPCTL_M1 m9_l3
938 #define VMPCTL_LEN m9_l4
939 #define VMPCTL_FLAGS m9_l5
941 #define VMPPARAM_CLEAR 1 /* values for VMPCTL_PARAM */
942 #define VMPPARAM_HANDLEMEM 2
944 #define VM_VFS_MMAP (VM_RQ_BASE+46)
946 #define VM_GETRUSAGE (VM_RQ_BASE+47)
948 /* Total. */
949 #define NR_VM_CALLS 48
950 #define VM_CALL_MASK_SIZE BITMAP_CHUNKS(NR_VM_CALLS)
952 /* not handled as a normal VM call, thus at the end of the reserved rage */
953 #define VM_PAGEFAULT (VM_RQ_BASE+0xff)
954 # define VPF_ADDR m1_i1
955 # define VPF_FLAGS m1_i2
957 /* Basic vm calls allowed to every process. */
958 #define VM_BASIC_CALLS \
959 VM_BRK, VM_MMAP, VM_MUNMAP, VM_MAP_PHYS, VM_UNMAP_PHYS, VM_INFO, \
960 VM_GETRUSAGE
962 /*===========================================================================*
963 * Messages for IPC server *
964 *===========================================================================*/
965 #define IPC_BASE 0xD00
967 /* Shared Memory */
968 #define IPC_SHMGET (IPC_BASE+1)
969 # define SHMGET_KEY m2_l1
970 # define SHMGET_SIZE m2_l2
971 # define SHMGET_FLAG m2_i1
972 # define SHMGET_RETID m2_i2
973 #define IPC_SHMAT (IPC_BASE+2)
974 # define SHMAT_ID m2_i1
975 # define SHMAT_ADDR m2_l1
976 # define SHMAT_FLAG m2_i2
977 # define SHMAT_RETADDR m2_l2
978 #define IPC_SHMDT (IPC_BASE+3)
979 # define SHMDT_ADDR m2_l1
980 #define IPC_SHMCTL (IPC_BASE+4)
981 # define SHMCTL_ID m2_i1
982 # define SHMCTL_CMD m2_i2
983 # define SHMCTL_BUF m2_l1
984 # define SHMCTL_RET m2_i3
986 /* Semaphore */
987 #define IPC_SEMGET (IPC_BASE+5)
988 # define SEMGET_KEY m2_l1
989 # define SEMGET_NR m2_i1
990 # define SEMGET_FLAG m2_i2
991 # define SEMGET_RETID m2_i3
992 #define IPC_SEMCTL (IPC_BASE+6)
993 # define SEMCTL_ID m2_i1
994 # define SEMCTL_NUM m2_i2
995 # define SEMCTL_CMD m2_i3
996 # define SEMCTL_OPT m2_l1
997 #define IPC_SEMOP (IPC_BASE+7)
998 # define SEMOP_ID m2_i1
999 # define SEMOP_OPS m2_l1
1000 # define SEMOP_SIZE m2_i2
1002 /*===========================================================================*
1003 * Messages for Scheduling *
1004 *===========================================================================*/
1005 #define SCHEDULING_BASE 0xF00
1007 #define SCHEDULING_NO_QUANTUM (SCHEDULING_BASE+1)
1008 # define SCHEDULING_ACNT_DEQS m9_l1
1009 # define SCHEDULING_ACNT_IPC_SYNC m9_l2
1010 # define SCHEDULING_ACNT_IPC_ASYNC m9_l3
1011 # define SCHEDULING_ACNT_PREEMPT m9_l4
1012 # define SCHEDULING_ACNT_QUEUE m9_l5
1013 # define SCHEDULING_ACNT_CPU m9_s1
1014 # define SCHEDULING_ACNT_CPU_LOAD m9_s2
1015 /* These are used for SYS_SCHEDULE, a reply to SCHEDULING_NO_QUANTUM */
1016 # define SCHEDULING_ENDPOINT m9_l1
1017 # define SCHEDULING_QUANTUM m9_l2
1018 # define SCHEDULING_PRIORITY m9_s1
1019 # define SCHEDULING_CPU m9_l4
1022 * SCHEDULING_START uses _ENDPOINT, _PRIORITY and _QUANTUM from
1023 * SCHEDULING_NO_QUANTUM/SYS_SCHEDULE
1025 #define SCHEDULING_START (SCHEDULING_BASE+2)
1026 # define SCHEDULING_SCHEDULER m9_l1 /* Overrides _ENDPOINT on return*/
1027 # define SCHEDULING_PARENT m9_l3
1028 # define SCHEDULING_MAXPRIO m9_l4
1030 #define SCHEDULING_STOP (SCHEDULING_BASE+3)
1032 #define SCHEDULING_SET_NICE (SCHEDULING_BASE+4)
1034 /* SCHEDULING_INHERIT is like SCHEDULING_START, but without _QUANTUM field */
1035 #define SCHEDULING_INHERIT (SCHEDULING_BASE+5)
1037 /*===========================================================================*
1038 * Messages for USB *
1039 *===========================================================================*/
1041 #define USB_BASE 0x1100
1043 /* those are from driver to USBD */
1044 #define USB_RQ_INIT (USB_BASE + 0) /* First message to HCD driver */
1045 #define USB_RQ_DEINIT (USB_BASE + 1) /* Quit the session */
1046 #define USB_RQ_SEND_URB (USB_BASE + 2) /* Send URB */
1047 #define USB_RQ_CANCEL_URB (USB_BASE + 3) /* Cancel URB */
1048 #define USB_REPLY (USB_BASE + 4)
1051 /* those are from USBD to driver */
1052 #define USB_COMPLETE_URB (USB_BASE + 6)
1053 #define USB_ANNOUCE_DEV (USB_BASE + 7) /* Announce a new USB Device */
1054 #define USB_WITHDRAW_DEV (USB_BASE + 8) /* Withdraw a allready anncounced
1055 USB device*/
1056 # define USB_GRANT_ID m4_l1
1057 # define USB_GRANT_SIZE m4_l2
1059 # define USB_URB_ID m4_l1
1060 # define USB_RESULT m4_l2
1061 # define USB_DEV_ID m4_l1
1062 # define USB_DRIVER_EP m4_l2
1063 # define USB_INTERFACES m4_l3
1064 # define USB_RB_INIT_NAME m3_ca1
1066 /*===========================================================================*
1067 * Messages for DeviceManager (s/t like SysFS) *
1068 *===========================================================================*/
1070 #define DEVMAN_BASE 0x1200
1072 #define DEVMAN_ADD_DEV (DEVMAN_BASE + 0)
1073 #define DEVMAN_DEL_DEV (DEVMAN_BASE + 1)
1074 #define DEVMAN_ADD_BUS (DEVMAN_BASE + 2)
1075 #define DEVMAN_DEL_BUS (DEVMAN_BASE + 3)
1076 #define DEVMAN_ADD_DEVFILE (DEVMAN_BASE + 4)
1077 #define DEVMAN_DEL_DEVFILE (DEVMAN_BASE + 5)
1079 #define DEVMAN_REQUEST (DEVMAN_BASE + 6)
1080 #define DEVMAN_REPLY (DEVMAN_BASE + 7)
1082 #define DEVMAN_BIND (DEVMAN_BASE + 8)
1083 #define DEVMAN_UNBIND (DEVMAN_BASE + 9)
1085 # define DEVMAN_GRANT_ID m4_l1
1086 # define DEVMAN_GRANT_SIZE m4_l2
1088 # define DEVMAN_ENDPOINT m4_l3
1089 # define DEVMAN_DEVICE_ID m4_l2
1090 # define DEVMAN_RESULT m4_l1
1092 /*===========================================================================*
1093 * Messages for TTY *
1094 *===========================================================================*/
1096 #define TTY_RQ_BASE 0x1300
1098 #define TTY_FKEY_CONTROL (TTY_RQ_BASE + 1) /* control an F-key at TTY */
1099 # define FKEY_REQUEST m2_i1 /* request to perform at TTY */
1100 # define FKEY_MAP 10 /* observe function key */
1101 # define FKEY_UNMAP 11 /* stop observing function key */
1102 # define FKEY_EVENTS 12 /* request open key presses */
1103 # define FKEY_FKEYS m2_l1 /* F1-F12 keys pressed */
1104 # define FKEY_SFKEYS m2_l2 /* Shift-F1-F12 keys pressed */
1106 #define TTY_INPUT_UP (TTY_RQ_BASE + 2) /* input server is up */
1107 /* This message uses no message fields. */
1109 #define TTY_INPUT_EVENT (TTY_RQ_BASE + 3) /* relayed input event */
1110 /* This message shares its message fields with INPUT_EVENT. */
1112 /*===========================================================================*
1113 * Messages for input server and drivers *
1114 *===========================================================================*/
1116 /* The input protocol has no real replies. All messages are one-way. */
1117 #define INPUT_RQ_BASE 0x1500 /* from TTY to server, or server to driver */
1118 #define INPUT_RS_BASE 0x1580 /* from input driver to input server */
1120 #define INPUT_CONF (INPUT_RQ_BASE + 0) /* configure driver */
1121 # define INPUT_KBD_ID m7_i1 /* keyboard device ID */
1122 # define INPUT_MOUSE_ID m7_i2 /* mouse device ID */
1123 # define INPUT_RSVD1_ID m7_i3 /* ID for as yet unallocated type */
1124 # define INPUT_RSVD2_ID m7_i4 /* ID for as yet unallocated type */
1126 #define INPUT_SETLEDS (INPUT_RQ_BASE + 1) /* set keyboard LEDs */
1127 # define INPUT_LED_MASK m7_i1 /* status mask of LEDs */
1129 #define INPUT_EVENT (INPUT_RS_BASE + 0) /* send input event */
1130 # define INPUT_ID m7_i1 /* device ID */
1131 # define INPUT_PAGE m7_i2 /* usage page */
1132 # define INPUT_CODE m7_i3 /* usage code */
1133 # define INPUT_VALUE m7_i4 /* event value */
1134 # define INPUT_FLAGS m7_i5 /* flags associated with value */
1136 /*===========================================================================*
1137 * VFS-FS TRANSACTION IDs *
1138 *===========================================================================*/
1140 #define VFS_TRANSACTION_BASE 0xB00
1142 #define VFS_TRANSID (VFS_TRANSACTION_BASE + 1)
1143 #define IS_VFS_FS_TRANSID(type) (((type) & ~0xff) == VFS_TRANSACTION_BASE)
1145 /*===========================================================================*
1146 * Messages for character devices *
1147 *===========================================================================*/
1149 /* Base type for character device requests and responses. */
1150 #define CDEV_RQ_BASE 0x400
1151 #define CDEV_RS_BASE 0x480
1153 #define IS_CDEV_RQ(type) (((type) & ~0x7f) == CDEV_RQ_BASE)
1154 #define IS_CDEV_RS(type) (((type) & ~0x7f) == CDEV_RS_BASE)
1156 /* Message types for character device requests. */
1157 #define CDEV_OPEN (CDEV_RQ_BASE + 0) /* open a minor device */
1158 #define CDEV_CLOSE (CDEV_RQ_BASE + 1) /* close a minor device */
1159 #define CDEV_READ (CDEV_RQ_BASE + 2) /* read into a buffer */
1160 #define CDEV_WRITE (CDEV_RQ_BASE + 3) /* write from a buffer */
1161 #define CDEV_IOCTL (CDEV_RQ_BASE + 4) /* I/O control operation */
1162 #define CDEV_CANCEL (CDEV_RQ_BASE + 5) /* cancel suspended request */
1163 #define CDEV_SELECT (CDEV_RQ_BASE + 6) /* test for ready operations */
1165 /* Message types for character device responses. */
1166 #define CDEV_REPLY (CDEV_RS_BASE + 0) /* general reply code */
1167 #define CDEV_SEL1_REPLY (CDEV_RS_BASE + 1) /* immediate select reply */
1168 #define CDEV_SEL2_REPLY (CDEV_RS_BASE + 2) /* select notification reply */
1170 /* Field names for block device messages. */
1171 #define CDEV_MINOR m10_i1 /* minor device number */
1172 #define CDEV_STATUS m10_i2 /* OK, error code, minor device, operations */
1173 #define CDEV_ACCESS m10_i2 /* access bits for open requests */
1174 #define CDEV_GRANT m10_i2 /* grant ID of buffer */
1175 #define CDEV_OPS m10_i2 /* requested select operations */
1176 #define CDEV_COUNT m10_i3 /* number of bytes to transfer */
1177 #define CDEV_USER m10_i3 /* endpoint of user process */
1178 #define CDEV_FLAGS m10_i4 /* transfer flags */
1179 #define CDEV_ID m10_l1 /* opaque request ID */
1180 #define CDEV_REQUEST m10_l2 /* I/O control request */
1181 #define CDEV_POS m10_ull1 /* transfer position */
1183 /* Bits in 'CDEV_ACCESS' field of block device open requests. */
1184 # define CDEV_R_BIT 0x01 /* open with read access */
1185 # define CDEV_W_BIT 0x02 /* open with write access */
1186 # define CDEV_NOCTTY 0x04 /* not to become the controlling TTY */
1188 /* Bits in 'CDEV_FLAGS' field of block device transfer requests. */
1189 # define CDEV_NOFLAGS 0x00 /* no flags are set */
1190 # define CDEV_NONBLOCK 0x01 /* do not suspend I/O request */
1192 /* Bits in 'CDEV_OPS', 'CDEV_STATUS' fields of block device select messages. */
1193 # define CDEV_OP_RD 0x01 /* selected for read operation */
1194 # define CDEV_OP_WR 0x02 /* selected for write operation */
1195 # define CDEV_OP_ERR 0x04 /* selected for error operation */
1196 # define CDEV_NOTIFY 0x08 /* notification requested */
1198 /* Bits in 'CDEV_STATUS' field of block device open responses. */
1199 # define CDEV_CLONED 0x20000000 /* device is cloned */
1200 # define CDEV_CTTY 0x40000000 /* device is controlling TTY */
1202 /*===========================================================================*
1203 * Messages for block devices *
1204 *===========================================================================*/
1206 /* Base type for block device requests and responses. */
1207 #define BDEV_RQ_BASE 0x500
1208 #define BDEV_RS_BASE 0x580
1210 #define IS_BDEV_RQ(type) (((type) & ~0x7f) == BDEV_RQ_BASE)
1211 #define IS_BDEV_RS(type) (((type) & ~0x7f) == BDEV_RS_BASE)
1213 /* Message types for block device requests. */
1214 #define BDEV_OPEN (BDEV_RQ_BASE + 0) /* open a minor device */
1215 #define BDEV_CLOSE (BDEV_RQ_BASE + 1) /* close a minor device */
1216 #define BDEV_READ (BDEV_RQ_BASE + 2) /* read into a buffer */
1217 #define BDEV_WRITE (BDEV_RQ_BASE + 3) /* write from a buffer */
1218 #define BDEV_GATHER (BDEV_RQ_BASE + 4) /* read into a vector */
1219 #define BDEV_SCATTER (BDEV_RQ_BASE + 5) /* write from a vector */
1220 #define BDEV_IOCTL (BDEV_RQ_BASE + 6) /* I/O control operation */
1222 /* Message types for block device responses. */
1223 #define BDEV_REPLY (BDEV_RS_BASE + 0) /* general reply code */
1225 /* Field names for block device messages. */
1226 #define BDEV_MINOR m10_i1 /* minor device number */
1227 #define BDEV_STATUS m10_i1 /* OK or error code */
1228 #define BDEV_ACCESS m10_i2 /* access bits for open requests */
1229 #define BDEV_COUNT m10_i2 /* number of bytes or elements in transfer */
1230 #define BDEV_GRANT m10_i3 /* grant ID of buffer or vector */
1231 #define BDEV_FLAGS m10_i4 /* transfer flags */
1232 #define BDEV_USER m10_i4 /* user endpoint requesting I/O control */
1233 #define BDEV_ID m10_l1 /* opaque request ID */
1234 #define BDEV_REQUEST m10_l2 /* I/O control request */
1235 #define BDEV_POS m10_ull1 /* transfer position */
1237 /* Bits in 'BDEV_ACCESS' field of block device open requests. */
1238 # define BDEV_R_BIT 0x01 /* open with read access */
1239 # define BDEV_W_BIT 0x02 /* open with write access */
1241 /* Bits in 'BDEV_FLAGS' field of block device transfer requests. */
1242 # define BDEV_NOFLAGS 0x00 /* no flags are set */
1243 # define BDEV_FORCEWRITE 0x01 /* force write to disk immediately */
1244 # define BDEV_NOPAGE 0x02 /* eeprom: don't send page address */
1246 /*===========================================================================*
1247 * Messages for Real Time Clocks *
1248 *===========================================================================*/
1250 /* Base type for real time clock requests and responses. */
1251 #define RTCDEV_RQ_BASE 0x1400
1252 #define RTCDEV_RS_BASE 0x1480
1254 #define IS_RTCDEV_RQ(type) (((type) & ~0x7f) == RTCDEV_RQ_BASE)
1255 #define IS_RTCDEV_RS(type) (((type) & ~0x7f) == RTCDEV_RS_BASE)
1257 /* Message types for real time clock requests. */
1258 #define RTCDEV_GET_TIME (RTCDEV_RQ_BASE + 0) /* get time from hw clock */
1259 #define RTCDEV_SET_TIME (RTCDEV_RQ_BASE + 1) /* set time in hw clock */
1260 #define RTCDEV_PWR_OFF (RTCDEV_RQ_BASE + 2) /* set time to cut the power */
1262 /* Same as GET/SET above but using grants */
1263 #define RTCDEV_GET_TIME_G (RTCDEV_RQ_BASE + 3) /* get time from hw clock */
1264 #define RTCDEV_SET_TIME_G (RTCDEV_RQ_BASE + 4) /* set time in hw clock */
1266 /* Message types for real time clock responses. */
1267 #define RTCDEV_REPLY (RTCDEV_RS_BASE + 0) /* general reply code */
1269 /* Field names for real time clock messages */
1270 #define RTCDEV_TM m2_p1 /* pointer to struct tm */
1271 #define RTCDEV_FLAGS m2_s1 /* clock flags flags */
1272 #define RTCDEV_STATUS m2_i2 /* OK or error code */
1273 #define RTCDEV_GRANT m2_i3 /* grant containing struct tm */
1275 /* Bits in 'RTCDEV_FLAGS' field of real time clock requests. */
1276 #define RTCDEV_NOFLAGS 0x00 /* no flags are set */
1277 #define RTCDEV_Y2KBUG 0x01 /* Interpret 1980 as 2000 for RTC w/Y2K bug */
1278 #define RTCDEV_CMOSREG 0x02 /* Also set the CMOS clock register bits. */
1280 /*===========================================================================*
1281 * Field names shared across several call codes *
1282 *===========================================================================*/
1284 /* Field names for the getsysinfo(2) call. */
1285 #define SI_WHAT m1_i1 /* int */
1286 #define SI_WHERE m1_p1 /* void */
1287 #define SI_SIZE m1_i2 /* size_t */
1289 /* Field names for the svrctl(2) call. */
1290 #define SVRCTL_REQ m2_i1 /* int */
1291 #define SVRCTL_ARG m2_p1 /* void * */
1293 /* Field names for the getrusage(2) call. */
1294 #define RU_ENDPT m1_i1 /* endpoint_t */
1295 #define RU_WHO m1_i1 /* int */
1296 #define RU_RUSAGE_ADDR m1_p1 /* struct rusage * */
1298 /*===========================================================================*
1299 * Internal codes used by several services *
1300 *===========================================================================*/
1302 #define SUSPEND -998 /* status to suspend caller, reply later */
1304 #endif /* !_MINIX_COM_H */