1 /* This file defines constants for use in message communication (mostly) 2 * between system processes. 3 * 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: 7 * 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) 31 * 0x1700 - 0x17FF PTYFS requests 32 * 0x1800 - 0x18FF Management Information Base (MIB) requests 33 * 34 * Zero and negative values are widely used for OK and error responses. 35 */ 36 37 #ifndef _MINIX_COM_H 38 #define _MINIX_COM_H 39 40 /*===========================================================================* 41 * Process numbers of processes in the system image * 42 *===========================================================================*/ 43 44 /* Kernel tasks. These all run in the same address space. */ 45 #define ASYNCM ((endpoint_t) -5) /* notifies about finished async sends */ 46 #define IDLE ((endpoint_t) -4) /* runs when no one else can run */ 47 #define CLOCK ((endpoint_t) -3) /* alarms and other clock functions */ 48 #define SYSTEM ((endpoint_t) -2) /* request system functionality */ 49 #define KERNEL ((endpoint_t) -1) /* pseudo-process for IPC and scheduling */ 50 #define HARDWARE KERNEL /* for hardware interrupt handlers */ 51 52 /* Number of tasks. Note that NR_PROCS is defined in <minix/config.h>. */ 53 #define MAX_NR_TASKS 1023 54 #define NR_TASKS 5 55 56 /* User-space processes, that is, device drivers, servers, and INIT. */ 57 #define PM_PROC_NR ((endpoint_t) 0) /* process manager */ 58 #define VFS_PROC_NR ((endpoint_t) 1) /* file system */ 59 #define RS_PROC_NR ((endpoint_t) 2) /* reincarnation server */ 60 #define MEM_PROC_NR ((endpoint_t) 3) /* memory driver (RAM disk, null, etc.) */ 61 #define SCHED_PROC_NR ((endpoint_t) 4) /* scheduler */ 62 #define TTY_PROC_NR ((endpoint_t) 5) /* terminal (TTY) driver */ 63 #define DS_PROC_NR ((endpoint_t) 6) /* data store server */ 64 #define MIB_PROC_NR ((endpoint_t) 7) /* management info base service */ 65 #define VM_PROC_NR ((endpoint_t) 8) /* memory server */ 66 #define PFS_PROC_NR ((endpoint_t) 9) /* pipe filesystem */ 67 #define MFS_PROC_NR ((endpoint_t) 10) /* minix root filesystem */ 68 #define LAST_SPECIAL_PROC_NR 11 /* An untyped version for 69 computation in macros.*/ 70 #define INIT_PROC_NR ((endpoint_t) LAST_SPECIAL_PROC_NR) /* init 71 -- goes multiuser */ 72 #define NR_BOOT_MODULES (INIT_PROC_NR+1) 73 74 /* Root system process and root user process. */ 75 #define ROOT_SYS_PROC_NR RS_PROC_NR 76 #define ROOT_USR_PROC_NR INIT_PROC_NR 77 78 /*===========================================================================* 79 * Kernel notification types * 80 *===========================================================================*/ 81 82 /* Kernel notification types. In principle, these can be sent to any process, 83 * so make sure that these types do not interfere with other message types. 84 * Notifications are prioritized because of the way they are unhold() and 85 * blocking notifications are delivered. The lowest numbers go first. The 86 * offset are used for the per-process notification bit maps. 87 */ 88 #define NOTIFY_MESSAGE 0x1000 89 /* FIXME the old is_notify(a) should be replaced by is_ipc_notify(status). */ 90 #define is_ipc_notify(ipc_status) (IPC_STATUS_CALL(ipc_status) == NOTIFY) 91 #define is_notify(a) ((unsigned) ((a) - NOTIFY_MESSAGE) < 0x100) 92 #define is_ipc_asynch(ipc_status) \ 93 (is_ipc_notify(ipc_status) || IPC_STATUS_CALL(ipc_status) == SENDA) 94 95 /*===========================================================================* 96 * Messages for BUS controller drivers * 97 *===========================================================================*/ 98 #define BUSC_RQ_BASE 0x300 /* base for request types */ 99 #define BUSC_RS_BASE 0x380 /* base for response types */ 100 101 #define BUSC_PCI_INIT (BUSC_RQ_BASE + 0) /* First message to 102 * PCI driver 103 */ 104 #define BUSC_PCI_FIRST_DEV (BUSC_RQ_BASE + 1) /* Get index (and 105 * vid/did) of the 106 * first PCI device 107 */ 108 #define BUSC_PCI_NEXT_DEV (BUSC_RQ_BASE + 2) /* Get index (and 109 * vid/did) of the 110 * next PCI device 111 */ 112 #define BUSC_PCI_FIND_DEV (BUSC_RQ_BASE + 3) /* Get index of a 113 * PCI device based on 114 * bus/dev/function 115 */ 116 #define BUSC_PCI_IDS (BUSC_RQ_BASE + 4) /* Get vid/did from an 117 * index 118 */ 119 #define BUSC_PCI_RESERVE (BUSC_RQ_BASE + 7) /* Reserve a PCI dev */ 120 #define BUSC_PCI_ATTR_R8 (BUSC_RQ_BASE + 8) /* Read 8-bit 121 * attribute value 122 */ 123 #define BUSC_PCI_ATTR_R16 (BUSC_RQ_BASE + 9) /* Read 16-bit 124 * attribute value 125 */ 126 #define BUSC_PCI_ATTR_R32 (BUSC_RQ_BASE + 10) /* Read 32-bit 127 * attribute value 128 */ 129 #define BUSC_PCI_ATTR_W8 (BUSC_RQ_BASE + 11) /* Write 8-bit 130 * attribute value 131 */ 132 #define BUSC_PCI_ATTR_W16 (BUSC_RQ_BASE + 12) /* Write 16-bit 133 * attribute value 134 */ 135 #define BUSC_PCI_ATTR_W32 (BUSC_RQ_BASE + 13) /* Write 32-bit 136 * attribute value 137 */ 138 #define BUSC_PCI_RESCAN (BUSC_RQ_BASE + 14) /* Rescan bus */ 139 #define BUSC_PCI_DEV_NAME_S (BUSC_RQ_BASE + 15) /* Get the name of a 140 * PCI device 141 * (safecopy) 142 */ 143 #define BUSC_PCI_SLOT_NAME_S (BUSC_RQ_BASE + 16) /* Get the name of a 144 * PCI slot (safecopy) 145 */ 146 #define BUSC_PCI_SET_ACL (BUSC_RQ_BASE + 17) /* Set the ACL for a 147 * driver (safecopy) 148 */ 149 #define BUSC_PCI_DEL_ACL (BUSC_RQ_BASE + 18) /* Delete the ACL of a 150 * driver 151 */ 152 #define BUSC_PCI_GET_BAR (BUSC_RQ_BASE + 19) /* Get Base Address 153 * Register properties 154 */ 155 #define IOMMU_MAP (BUSC_RQ_BASE + 32) /* Ask IOMMU to map 156 * a segment of memory 157 */ 158 159 #define BUSC_I2C_RESERVE (BUSC_RQ_BASE + 64) /* reserve i2c device */ 160 #define BUSC_I2C_EXEC (BUSC_RQ_BASE + 65) /* perform i2c action */ 161 162 /*===========================================================================* 163 * Messages for networking layer * 164 *===========================================================================*/ 165 166 /* Base type for data link layer requests and responses. */ 167 #define DL_RQ_BASE 0x200 168 #define DL_RS_BASE 0x280 169 170 #define IS_DL_RQ(type) (((type) & ~0x7f) == DL_RQ_BASE) 171 #define IS_DL_RS(type) (((type) & ~0x7f) == DL_RS_BASE) 172 173 /* Message types for data link layer requests. */ 174 #define DL_CONF (DL_RQ_BASE + 0) 175 #define DL_GETSTAT_S (DL_RQ_BASE + 1) 176 #define DL_WRITEV_S (DL_RQ_BASE + 2) 177 #define DL_READV_S (DL_RQ_BASE + 3) 178 179 /* Message type for data link layer replies. */ 180 #define DL_CONF_REPLY (DL_RS_BASE + 0) 181 #define DL_STAT_REPLY (DL_RS_BASE + 1) 182 #define DL_TASK_REPLY (DL_RS_BASE + 2) 183 184 /* Bits in 'flags' field of DL replies. */ 185 # define DL_NOFLAGS 0x00 186 # define DL_PACK_SEND 0x01 187 # define DL_PACK_RECV 0x02 188 189 /* Bits in 'DL_MODE' field of DL requests. */ 190 # define DL_NOMODE 0x0 191 # define DL_PROMISC_REQ 0x1 192 # define DL_MULTI_REQ 0x2 193 # define DL_BROAD_REQ 0x4 194 195 /*===========================================================================* 196 * SYSTASK request types and field names * 197 *===========================================================================*/ 198 199 /* System library calls are dispatched via a call vector, so be careful when 200 * modifying the system call numbers. The numbers here determine which call 201 * is made from the call vector. 202 */ 203 #define KERNEL_CALL 0x600 /* base for kernel calls to SYSTEM */ 204 205 # define SYS_FORK (KERNEL_CALL + 0) /* sys_fork() */ 206 # define SYS_EXEC (KERNEL_CALL + 1) /* sys_exec() */ 207 # define SYS_CLEAR (KERNEL_CALL + 2) /* sys_clear() */ 208 # define SYS_SCHEDULE (KERNEL_CALL + 3) /* sys_schedule() */ 209 # define SYS_PRIVCTL (KERNEL_CALL + 4) /* sys_privctl() */ 210 # define SYS_TRACE (KERNEL_CALL + 5) /* sys_trace() */ 211 # define SYS_KILL (KERNEL_CALL + 6) /* sys_kill() */ 212 213 # define SYS_GETKSIG (KERNEL_CALL + 7) /* sys_getsig() */ 214 # define SYS_ENDKSIG (KERNEL_CALL + 8) /* sys_endsig() */ 215 # define SYS_SIGSEND (KERNEL_CALL + 9) /* sys_sigsend() */ 216 # define SYS_SIGRETURN (KERNEL_CALL + 10) /* sys_sigreturn() */ 217 218 # define SYS_MEMSET (KERNEL_CALL + 13) /* sys_memset() */ 219 220 # define SYS_UMAP (KERNEL_CALL + 14) /* sys_umap() */ 221 # define SYS_VIRCOPY (KERNEL_CALL + 15) /* sys_vircopy() */ 222 # define SYS_PHYSCOPY (KERNEL_CALL + 16) /* sys_physcopy() */ 223 # define SYS_UMAP_REMOTE (KERNEL_CALL + 17) /* sys_umap_remote() */ 224 # define SYS_VUMAP (KERNEL_CALL + 18) /* sys_vumap() */ 225 226 # define SYS_IRQCTL (KERNEL_CALL + 19) /* sys_irqctl() */ 227 # define SYS_INT86 (KERNEL_CALL + 20) /* sys_int86() */ 228 # define SYS_DEVIO (KERNEL_CALL + 21) /* sys_devio() */ 229 # define SYS_SDEVIO (KERNEL_CALL + 22) /* sys_sdevio() */ 230 # define SYS_VDEVIO (KERNEL_CALL + 23) /* sys_vdevio() */ 231 232 # define SYS_SETALARM (KERNEL_CALL + 24) /* sys_setalarm() */ 233 # define SYS_TIMES (KERNEL_CALL + 25) /* sys_times() */ 234 # define SYS_GETINFO (KERNEL_CALL + 26) /* sys_getinfo() */ 235 # define SYS_ABORT (KERNEL_CALL + 27) /* sys_abort() */ 236 # define SYS_IOPENABLE (KERNEL_CALL + 28) /* sys_enable_iop() */ 237 # define SYS_SAFECOPYFROM (KERNEL_CALL + 31) /* sys_safecopyfrom() */ 238 # define SYS_SAFECOPYTO (KERNEL_CALL + 32) /* sys_safecopyto() */ 239 # define SYS_VSAFECOPY (KERNEL_CALL + 33) /* sys_vsafecopy() */ 240 # define SYS_SETGRANT (KERNEL_CALL + 34) /* sys_setgrant() */ 241 # define SYS_READBIOS (KERNEL_CALL + 35) /* sys_readbios() */ 242 243 # define SYS_SPROF (KERNEL_CALL + 36) /* sys_sprof() */ 244 245 # define SYS_STIME (KERNEL_CALL + 39) /* sys_stime() */ 246 # define SYS_SETTIME (KERNEL_CALL + 40) /* sys_settime() */ 247 248 # define SYS_VMCTL (KERNEL_CALL + 43) /* sys_vmctl() */ 249 250 # define SYS_DIAGCTL (KERNEL_CALL + 44) /* sys_diagctl() */ 251 252 # define SYS_VTIMER (KERNEL_CALL + 45) /* sys_vtimer() */ 253 # define SYS_RUNCTL (KERNEL_CALL + 46) /* sys_runctl() */ 254 # define SYS_GETMCONTEXT (KERNEL_CALL + 50) /* sys_getmcontext() */ 255 # define SYS_SETMCONTEXT (KERNEL_CALL + 51) /* sys_setmcontext() */ 256 257 # define SYS_UPDATE (KERNEL_CALL + 52) /* sys_update() */ 258 # define SYS_EXIT (KERNEL_CALL + 53) /* sys_exit() */ 259 260 # define SYS_SCHEDCTL (KERNEL_CALL + 54) /* sys_schedctl() */ 261 # define SYS_STATECTL (KERNEL_CALL + 55) /* sys_statectl() */ 262 263 # define SYS_SAFEMEMSET (KERNEL_CALL + 56) /* sys_safememset() */ 264 265 # define SYS_PADCONF (KERNEL_CALL + 57) /* sys_padconf() */ 266 267 /* Total */ 268 #define NR_SYS_CALLS 58 /* number of kernel calls */ 269 270 #define SYS_CALL_MASK_SIZE BITMAP_CHUNKS(NR_SYS_CALLS) 271 272 /* Basic kernel calls allowed to every system process. */ 273 #define SYS_BASIC_CALLS \ 274 SYS_EXIT, SYS_SAFECOPYFROM, SYS_SAFECOPYTO, SYS_VSAFECOPY, SYS_GETINFO, \ 275 SYS_TIMES, SYS_SETALARM, SYS_SETGRANT, \ 276 SYS_DIAGCTL, SYS_STATECTL, SYS_SAFEMEMSET 277 278 /* Field names for SYS_DEVIO, SYS_VDEVIO, SYS_SDEVIO. */ 279 # define _DIO_INPUT 0x001 280 # define _DIO_OUTPUT 0x002 281 # define _DIO_DIRMASK 0x00f 282 # define _DIO_BYTE 0x010 283 # define _DIO_WORD 0x020 284 # define _DIO_LONG 0x030 285 # define _DIO_TYPEMASK 0x0f0 286 # define _DIO_SAFE 0x100 287 # define _DIO_SAFEMASK 0xf00 288 # define DIO_INPUT_BYTE (_DIO_INPUT|_DIO_BYTE) 289 # define DIO_INPUT_WORD (_DIO_INPUT|_DIO_WORD) 290 # define DIO_INPUT_LONG (_DIO_INPUT|_DIO_LONG) 291 # define DIO_OUTPUT_BYTE (_DIO_OUTPUT|_DIO_BYTE) 292 # define DIO_OUTPUT_WORD (_DIO_OUTPUT|_DIO_WORD) 293 # define DIO_OUTPUT_LONG (_DIO_OUTPUT|_DIO_LONG) 294 # define DIO_SAFE_INPUT_BYTE (_DIO_INPUT|_DIO_BYTE|_DIO_SAFE) 295 # define DIO_SAFE_INPUT_WORD (_DIO_INPUT|_DIO_WORD|_DIO_SAFE) 296 # define DIO_SAFE_INPUT_LONG (_DIO_INPUT|_DIO_LONG|_DIO_SAFE) 297 # define DIO_SAFE_OUTPUT_BYTE (_DIO_OUTPUT|_DIO_BYTE|_DIO_SAFE) 298 # define DIO_SAFE_OUTPUT_WORD (_DIO_OUTPUT|_DIO_WORD|_DIO_SAFE) 299 # define DIO_SAFE_OUTPUT_LONG (_DIO_OUTPUT|_DIO_LONG|_DIO_SAFE) 300 301 /* Field names for SYS_IRQCTL. */ 302 # define IRQ_SETPOLICY 1 /* manage a slot of the IRQ table */ 303 # define IRQ_RMPOLICY 2 /* remove a slot of the IRQ table */ 304 # define IRQ_ENABLE 3 /* enable interrupts */ 305 # define IRQ_DISABLE 4 /* disable interrupts */ 306 # define IRQ_REENABLE 0x001 /* reenable IRQ line after interrupt */ 307 # define IRQ_BYTE 0x100 /* byte values */ 308 # define IRQ_WORD 0x200 /* word values */ 309 # define IRQ_LONG 0x400 /* long values */ 310 311 #define CP_FLAG_TRY 0x01 /* do not transparently map */ 312 313 /* Field names for SYS_GETINFO. */ 314 # define GET_KINFO 0 /* get kernel information structure */ 315 # define GET_IMAGE 1 /* get system image table */ 316 # define GET_PROCTAB 2 /* get kernel process table */ 317 # define GET_RANDOMNESS 3 /* get randomness buffer */ 318 # define GET_MONPARAMS 4 /* get monitor parameters */ 319 # define GET_KENV 5 /* get kernel environment string */ 320 # define GET_IRQHOOKS 6 /* get the IRQ table */ 321 # define GET_PRIVTAB 8 /* get kernel privileges table */ 322 # define GET_KADDRESSES 9 /* get various kernel addresses */ 323 # define GET_SCHEDINFO 10 /* get scheduling queues */ 324 # define GET_PROC 11 /* get process slot if given process */ 325 # define GET_MACHINE 12 /* get machine information */ 326 # define GET_LOCKTIMING 13 /* get lock()/unlock() latency timing */ 327 # define GET_BIOSBUFFER 14 /* get a buffer for BIOS calls */ 328 # define GET_LOADINFO 15 /* get load average information */ 329 # define GET_IRQACTIDS 16 /* get the IRQ masks */ 330 # define GET_PRIV 17 /* get privilege structure */ 331 # define GET_HZ 18 /* get HZ value */ 332 # define GET_WHOAMI 19 /* get own name, endpoint, and privileges */ 333 # define GET_RANDOMNESS_BIN 20 /* get one randomness bin */ 334 # define GET_IDLETSC 21 /* get cumulative idle time stamp counter */ 335 # define GET_CPUINFO 23 /* get information about cpus */ 336 # define GET_REGS 24 /* get general process registers */ 337 # define GET_CPUTICKS 25 /* get per-state ticks for a cpu */ 338 339 /* Subfunctions for SYS_PRIVCTL */ 340 #define SYS_PRIV_ALLOW 1 /* Allow process to run */ 341 #define SYS_PRIV_DISALLOW 2 /* Disallow process to run */ 342 #define SYS_PRIV_SET_SYS 3 /* Set a system privilege structure */ 343 #define SYS_PRIV_SET_USER 4 /* Set a user privilege structure */ 344 #define SYS_PRIV_ADD_IO 5 /* Add I/O range (struct io_range) */ 345 #define SYS_PRIV_ADD_MEM 6 /* Add memory range (struct mem_range) 346 */ 347 #define SYS_PRIV_ADD_IRQ 7 /* Add IRQ */ 348 #define SYS_PRIV_QUERY_MEM 8 /* Verify memory privilege. */ 349 #define SYS_PRIV_UPDATE_SYS 9 /* Update a sys privilege structure. */ 350 #define SYS_PRIV_YIELD 10 /* Allow process to run and suspend */ 351 #define SYS_PRIV_CLEAR_IPC_REFS 11 /* Clear pending IPC for the process */ 352 353 /* Constants for exec. FIXME: these do not belong here. */ 354 #define PMEF_AUXVECTORS 20 355 #define PMEF_EXECNAMELEN1 PATH_MAX 356 357 /* Flags for PR_FORK_FLAGS. */ 358 #define PFF_VMINHIBIT 0x01 /* Don't schedule until release by VM. */ 359 360 /* SYS_SAFEMEMSET */ 361 #define SMS_DST m2_i1 /* dst endpoint */ 362 #define SMS_GID m2_i3 /* grant id */ 363 #define SMS_OFFSET m2_l1 /* offset within grant */ 364 #define SMS_BYTES m2_l2 /* bytes from offset */ 365 #define SMS_PATTERN m2_i2 /* memset() pattern */ 366 367 /* Field names for SYS_VMCTL. */ 368 #define SVMCTL_WHO m1_i1 369 #define SVMCTL_PARAM m1_i2 /* All SYS_VMCTL requests. */ 370 #define SVMCTL_VALUE m1_i3 371 #define SVMCTL_MRG_TARGET m2_i1 /* MEMREQ_GET reply: target process */ 372 #define SVMCTL_MRG_ADDR m2_i2 /* MEMREQ_GET reply: address */ 373 #define SVMCTL_MRG_LENGTH m2_i3 /* MEMREQ_GET reply: length */ 374 #define SVMCTL_MRG_FLAG m2_s1 /* MEMREQ_GET reply: flag */ 375 #define SVMCTL_MRG_EP2 m2_l1 /* MEMREQ_GET reply: source process */ 376 #define SVMCTL_MRG_ADDR2 m2_l2 /* MEMREQ_GET reply: source address */ 377 #define SVMCTL_MRG_REQUESTOR m2_p1 /* MEMREQ_GET reply: requestor */ 378 #define SVMCTL_MAP_VIR_ADDR m1_p1 379 #define SVMCTL_PTROOT m1_i3 380 #define SVMCTL_PTROOT_V m1_p1 381 382 /* Reply message for VMCTL_KERN_PHYSMAP */ 383 #define SVMCTL_MAP_FLAGS m2_i1 /* VMMF_* */ 384 #define SVMCTL_MAP_PHYS_ADDR m2_l1 385 #define SVMCTL_MAP_PHYS_LEN m2_l2 386 387 #define VMMF_UNCACHED (1L << 0) 388 #define VMMF_USER (1L << 1) 389 #define VMMF_WRITE (1L << 2) 390 #define VMMF_GLO (1L << 3) 391 392 /* Values for SVMCTL_PARAM. */ 393 #define VMCTL_CLEAR_PAGEFAULT 12 394 #define VMCTL_GET_PDBR 13 395 #define VMCTL_MEMREQ_GET 14 396 #define VMCTL_MEMREQ_REPLY 15 397 #define VMCTL_NOPAGEZERO 18 398 #define VMCTL_I386_KERNELLIMIT 19 399 #define VMCTL_I386_INVLPG 25 400 #define VMCTL_FLUSHTLB 26 401 #define VMCTL_KERN_PHYSMAP 27 402 #define VMCTL_KERN_MAP_REPLY 28 403 #define VMCTL_SETADDRSPACE 29 404 #define VMCTL_VMINHIBIT_SET 30 405 #define VMCTL_VMINHIBIT_CLEAR 31 406 #define VMCTL_CLEARMAPCACHE 32 407 #define VMCTL_BOOTINHIBIT_CLEAR 33 408 409 /* Codes and field names for SYS_DIAGCTL. */ 410 #define DIAGCTL_CODE_DIAG 1 /* Print diagnostics. */ 411 #define DIAGCTL_CODE_STACKTRACE 2 /* Print process stack. */ 412 #define DIAGCTL_CODE_REGISTER 3 /* Register for diagnostic signals */ 413 #define DIAGCTL_CODE_UNREGISTER 4 /* Unregister for diagnostic signals */ 414 #define DIAG_BUFSIZE (80*25) 415 416 /* Field names for SYS_VTIMER. */ 417 #define VT_WHICH m2_i1 /* which timer to set/retrieve */ 418 # define VT_VIRTUAL 1 /* the ITIMER_VIRTUAL timer */ 419 # define VT_PROF 2 /* the ITIMER_PROF timer */ 420 #define VT_SET m2_i2 /* 1 for setting a timer, 0 retrieval only */ 421 #define VT_VALUE m2_l1 /* new/previous value of the timer */ 422 #define VT_ENDPT m2_l2 /* process to set/retrieve the timer for */ 423 424 /* Field names for SYS_RUNCTL. */ 425 #define RC_ENDPT m1_i1 /* which process to stop or resume */ 426 #define RC_ACTION m1_i2 /* set or clear stop flag */ 427 # define RC_STOP 0 /* stop the process */ 428 # define RC_RESUME 1 /* clear the stop flag */ 429 #define RC_FLAGS m1_i3 /* request flags */ 430 # define RC_DELAY 1 /* delay stop if process is sending */ 431 432 /* Field names for SYS_UPDATE. */ 433 #define SYS_UPD_SRC_ENDPT m1_i1 /* source endpoint */ 434 #define SYS_UPD_DST_ENDPT m1_i2 /* destination endpoint */ 435 #define SYS_UPD_FLAGS m1_i3 /* update flags */ 436 # define SYS_UPD_ROLLBACK 0x1 /* update is rollback */ 437 438 439 /* Subfunctions for SYS_STATECTL */ 440 #define SYS_STATE_CLEAR_IPC_REFS 1 /* clear IPC references */ 441 #define SYS_STATE_SET_STATE_TABLE 2 /* set state map */ 442 #define SYS_STATE_ADD_IPC_BL_FILTER 3 /* set IPC blacklist filter */ 443 #define SYS_STATE_ADD_IPC_WL_FILTER 4 /* set IPC whitelist filter */ 444 #define SYS_STATE_CLEAR_IPC_FILTERS 5 /* clear IPC filters */ 445 446 /* Subfunctions for SYS_SCHEDCTL */ 447 # define SCHEDCTL_FLAG_KERNEL 1 /* mark kernel scheduler and remove 448 * RTS_NO_QUANTUM; otherwise caller is 449 * marked scheduler 450 */ 451 452 /* Field names for SYS_PADCONF */ 453 #define PADCONF_PADCONF m2_i1 /* pad to configure */ 454 #define PADCONF_MASK m2_i2 /* mask to apply */ 455 #define PADCONF_VALUE m2_i3 /* value to write */ 456 457 /*===========================================================================* 458 * Messages for the Reincarnation Server * 459 *===========================================================================*/ 460 461 #define RS_RQ_BASE 0x700 462 463 #define RS_UP (RS_RQ_BASE + 0) /* start system service */ 464 #define RS_DOWN (RS_RQ_BASE + 1) /* stop system service */ 465 #define RS_REFRESH (RS_RQ_BASE + 2) /* refresh system service */ 466 #define RS_RESTART (RS_RQ_BASE + 3) /* restart system service */ 467 #define RS_SHUTDOWN (RS_RQ_BASE + 4) /* alert about shutdown */ 468 #define RS_UPDATE (RS_RQ_BASE + 5) /* update system service */ 469 #define RS_CLONE (RS_RQ_BASE + 6) /* clone system service */ 470 #define RS_UNCLONE (RS_RQ_BASE + 7) /* unclone system service */ 471 472 #define RS_LOOKUP (RS_RQ_BASE + 8) /* lookup server name */ 473 474 #define RS_GETSYSINFO (RS_RQ_BASE + 9) /* get system information */ 475 476 #define RS_INIT (RS_RQ_BASE + 20) /* service init message */ 477 #define RS_LU_PREPARE (RS_RQ_BASE + 21) /* prepare to update message */ 478 #define RS_EDIT (RS_RQ_BASE + 22) /* edit system service */ 479 #define RS_SYSCTL (RS_RQ_BASE + 23) /* perform system ctl action */ 480 #define RS_FI (RS_RQ_BASE + 24) /* inject fault into service */ 481 482 /* Subfunctions for RS_SYSCTL. */ 483 #define RS_SYSCTL_SRV_STATUS 1 484 #define RS_SYSCTL_UPD_START 2 485 #define RS_SYSCTL_UPD_RUN 3 486 #define RS_SYSCTL_UPD_STOP 4 487 #define RS_SYSCTL_UPD_STATUS 5 488 489 /* Subfunctions for RS_FI. */ 490 #define RS_FI_CRASH 1 491 492 /*===========================================================================* 493 * Messages for the Data Store Server * 494 *===========================================================================*/ 495 496 #define DS_RQ_BASE 0x800 497 498 #define DS_PUBLISH (DS_RQ_BASE + 0) /* publish data */ 499 #define DS_RETRIEVE (DS_RQ_BASE + 1) /* retrieve data by name */ 500 #define DS_SUBSCRIBE (DS_RQ_BASE + 2) /* subscribe to data updates */ 501 #define DS_CHECK (DS_RQ_BASE + 3) /* retrieve updated data */ 502 #define DS_DELETE (DS_RQ_BASE + 4) /* delete data */ 503 #define DS_SNAPSHOT (DS_RQ_BASE + 5) /* take a snapshot */ 504 #define DS_RETRIEVE_LABEL (DS_RQ_BASE + 6) /* retrieve label's name */ 505 #define DS_GETSYSINFO (DS_RQ_BASE + 7) /* get system information */ 506 507 /*===========================================================================* 508 * Messages used between PM and VFS * 509 *===========================================================================*/ 510 511 #define VFS_PM_RQ_BASE 0x900 512 #define VFS_PM_RS_BASE 0x980 513 514 #define IS_VFS_PM_RQ(type) (((type) & ~0x7f) == VFS_PM_RQ_BASE) 515 #define IS_VFS_PM_RS(type) (((type) & ~0x7f) == VFS_PM_RS_BASE) 516 517 /* Requests from PM to VFS. */ 518 #define VFS_PM_INIT (VFS_PM_RQ_BASE + 0) /* Process table exchange */ 519 #define VFS_PM_SETUID (VFS_PM_RQ_BASE + 1) /* Set new user ID */ 520 #define VFS_PM_SETGID (VFS_PM_RQ_BASE + 2) /* Set group ID */ 521 #define VFS_PM_SETSID (VFS_PM_RQ_BASE + 3) /* Set session leader */ 522 #define VFS_PM_EXIT (VFS_PM_RQ_BASE + 4) /* Process exits */ 523 #define VFS_PM_DUMPCORE (VFS_PM_RQ_BASE + 5) /* Process is to dump core */ 524 #define VFS_PM_EXEC (VFS_PM_RQ_BASE + 6) /* Forwarded exec call */ 525 #define VFS_PM_FORK (VFS_PM_RQ_BASE + 7) /* Newly forked process */ 526 #define VFS_PM_SRV_FORK (VFS_PM_RQ_BASE + 8) /* fork for system services */ 527 #define VFS_PM_UNPAUSE (VFS_PM_RQ_BASE + 9) /* Interrupt process call */ 528 #define VFS_PM_REBOOT (VFS_PM_RQ_BASE + 10) /* System reboot */ 529 #define VFS_PM_SETGROUPS (VFS_PM_RQ_BASE + 11) /* Set groups */ 530 531 /* Replies from VFS to PM */ 532 #define VFS_PM_SETUID_REPLY (VFS_PM_RS_BASE + 1) 533 #define VFS_PM_SETGID_REPLY (VFS_PM_RS_BASE + 2) 534 #define VFS_PM_SETSID_REPLY (VFS_PM_RS_BASE + 3) 535 #define VFS_PM_EXIT_REPLY (VFS_PM_RS_BASE + 4) 536 #define VFS_PM_CORE_REPLY (VFS_PM_RS_BASE + 5) 537 #define VFS_PM_EXEC_REPLY (VFS_PM_RS_BASE + 6) 538 #define VFS_PM_FORK_REPLY (VFS_PM_RS_BASE + 7) 539 #define VFS_PM_SRV_FORK_REPLY (VFS_PM_RS_BASE + 8) 540 #define VFS_PM_UNPAUSE_REPLY (VFS_PM_RS_BASE + 9) 541 #define VFS_PM_REBOOT_REPLY (VFS_PM_RS_BASE + 10) 542 #define VFS_PM_SETGROUPS_REPLY (VFS_PM_RS_BASE + 11) 543 544 /* Standard parameters for all requests and replies, except PM_REBOOT */ 545 # define VFS_PM_ENDPT m7_i1 /* process endpoint */ 546 547 /* Additional parameters for PM_INIT */ 548 # define VFS_PM_SLOT m7_i2 /* process slot number */ 549 # define VFS_PM_PID m7_i3 /* process pid */ 550 551 /* Additional parameters for PM_SETUID and PM_SETGID */ 552 # define VFS_PM_EID m7_i2 /* effective user/group id */ 553 # define VFS_PM_RID m7_i3 /* real user/group id */ 554 555 /* Additional parameter for PM_SETGROUPS */ 556 # define VFS_PM_GROUP_NO m7_i2 /* number of groups */ 557 # define VFS_PM_GROUP_ADDR m7_p1 /* struct holding group data */ 558 559 /* Additional parameters for PM_EXEC */ 560 # define VFS_PM_PATH m7_p1 /* executable */ 561 # define VFS_PM_PATH_LEN m7_i2 /* length of path including 562 * terminating null character 563 */ 564 # define VFS_PM_FRAME m7_p2 /* arguments and environment */ 565 # define VFS_PM_FRAME_LEN m7_i3 /* size of frame */ 566 # define VFS_PM_PS_STR m7_i5 /* ps_strings pointer */ 567 568 /* Additional parameters for PM_EXEC_REPLY and PM_CORE_REPLY */ 569 # define VFS_PM_STATUS m7_i2 /* OK or failure */ 570 # define VFS_PM_PC m7_p1 /* program counter */ 571 # define VFS_PM_NEWSP m7_p2 /* possibly-changed stack ptr */ 572 # define VFS_PM_NEWPS_STR m7_i5 /* possibly-changed ps_strings ptr */ 573 574 /* Additional parameters for PM_FORK and PM_SRV_FORK */ 575 # define VFS_PM_PENDPT m7_i2 /* parent process endpoint */ 576 # define VFS_PM_CPID m7_i3 /* child pid */ 577 # define VFS_PM_REUID m7_i4 /* real and effective uid */ 578 # define VFS_PM_REGID m7_i5 /* real and effective gid */ 579 580 /* Additional parameters for PM_DUMPCORE */ 581 # define VFS_PM_TERM_SIG m7_i2 /* process's termination signal */ 582 583 /*===========================================================================* 584 * Messages used from VFS to file servers * 585 *===========================================================================*/ 586 587 #define FS_BASE 0xA00 /* Requests sent by VFS to filesystem 588 * implementations. See <minix/vfsif.h> 589 */ 590 591 /*===========================================================================* 592 * Common requests and miscellaneous field names * 593 *===========================================================================*/ 594 595 #define COMMON_RQ_BASE 0xE00 596 #define COMMON_RS_BASE 0xE80 597 598 /* Field names for system signals (sent by a signal manager). */ 599 #define SIGS_SIGNAL_RECEIVED (COMMON_RQ_BASE+0) 600 601 /* Common request to all processes: gcov data. */ 602 #define COMMON_REQ_GCOV_DATA (COMMON_RQ_BASE+1) 603 604 /* Common fault injection ctl request to all processes. */ 605 #define COMMON_REQ_FI_CTL (COMMON_RQ_BASE+2) 606 607 /* Process event message from PM. */ 608 #define PROC_EVENT (COMMON_RQ_BASE+3) 609 610 /* Reply to process event message to PM. */ 611 #define PROC_EVENT_REPLY (COMMON_RS_BASE+0) 612 613 /*===========================================================================* 614 * Messages for VM server * 615 *===========================================================================*/ 616 #define VM_RQ_BASE 0xC00 617 618 /* Calls from PM */ 619 #define VM_EXIT (VM_RQ_BASE+0) 620 # define VME_ENDPOINT m1_i1 621 #define VM_FORK (VM_RQ_BASE+1) 622 # define VMF_ENDPOINT m1_i1 623 # define VMF_SLOTNO m1_i2 624 # define VMF_CHILD_ENDPOINT m1_i3 /* result */ 625 #define VM_BRK (VM_RQ_BASE+2) 626 #define VM_EXEC_NEWMEM (VM_RQ_BASE+3) 627 # define VMEN_ENDPOINT m1_i1 628 # define VMEN_ARGSPTR m1_p1 629 # define VMEN_ARGSSIZE m1_i2 630 # define VMEN_FLAGS m1_i3 /* result */ 631 # define VMEN_STACK_TOP m1_p2 /* result */ 632 #define VM_WILLEXIT (VM_RQ_BASE+5) 633 # define VMWE_ENDPOINT m1_i1 634 635 /* General calls. */ 636 #define VM_MMAP (VM_RQ_BASE+10) 637 638 #define VM_MUNMAP (VM_RQ_BASE+17) 639 # define VMUM_ADDR m_mmap.addr 640 # define VMUM_LEN m_mmap.len 641 642 /* to VM: inform VM about a region of memory that is used for 643 * bus-master DMA 644 */ 645 #define VM_ADDDMA (VM_RQ_BASE+12) 646 # define VMAD_EP m2_i1 647 # define VMAD_START m2_l1 648 # define VMAD_SIZE m2_l2 649 650 /* to VM: inform VM that a region of memory that is no longer 651 * used for bus-master DMA 652 */ 653 #define VM_DELDMA (VM_RQ_BASE+13) 654 # define VMDD_EP m2_i1 655 # define VMDD_START m2_l1 656 # define VMDD_SIZE m2_l2 657 658 /* to VM: ask VM for a region of memory that should not 659 * be used for bus-master DMA any longer 660 */ 661 #define VM_GETDMA (VM_RQ_BASE+14) 662 # define VMGD_PROCP m2_i1 663 # define VMGD_BASEP m2_l1 664 # define VMGD_SIZEP m2_l2 665 666 #define VM_MAP_PHYS (VM_RQ_BASE+15) 667 668 #define VM_UNMAP_PHYS (VM_RQ_BASE+16) 669 670 /* To VM: map in cache block by FS */ 671 #define VM_MAPCACHEPAGE (VM_RQ_BASE+26) 672 673 /* To VM: identify cache block in FS */ 674 #define VM_SETCACHEPAGE (VM_RQ_BASE+27) 675 676 /* To VM: forget cache block in FS */ 677 #define VM_FORGETCACHEPAGE (VM_RQ_BASE+28) 678 679 /* To VM: clear all cache blocks for a device */ 680 #define VM_CLEARCACHE (VM_RQ_BASE+29) 681 682 /* To VFS: fields for request from VM. */ 683 # define VFS_VMCALL_REQ m10_i1 684 # define VFS_VMCALL_FD m10_i2 685 # define VFS_VMCALL_REQID m10_i3 686 # define VFS_VMCALL_ENDPOINT m10_i4 687 # define VFS_VMCALL_OFFSET m10_ull1 688 # define VFS_VMCALL_LENGTH m10_l3 689 690 /* Request codes to from VM to VFS */ 691 #define VMVFSREQ_FDLOOKUP 101 692 #define VMVFSREQ_FDCLOSE 102 693 #define VMVFSREQ_FDIO 103 694 695 /* Calls from VFS. */ 696 #define VM_VFS_REPLY (VM_RQ_BASE+30) 697 # define VMV_ENDPOINT m10_i1 698 # define VMV_RESULT m10_i2 699 # define VMV_REQID m10_i3 700 # define VMV_DEV m10_i4 701 # define VMV_INO m10_l1 702 # define VMV_FD m10_l2 703 # define VMV_SIZE_PAGES m10_l3 704 705 #define VM_REMAP (VM_RQ_BASE+33) 706 707 #define VM_SHM_UNMAP (VM_RQ_BASE+34) 708 709 #define VM_GETPHYS (VM_RQ_BASE+35) 710 711 #define VM_GETREF (VM_RQ_BASE+36) 712 713 #define VM_RS_SET_PRIV (VM_RQ_BASE+37) 714 # define VM_RS_NR m2_i1 715 # define VM_RS_BUF m2_l1 716 # define VM_RS_SYS m2_i2 717 718 #define VM_INFO (VM_RQ_BASE+40) 719 720 /* VM_INFO 'what' values. */ 721 #define VMIW_STATS 1 722 #define VMIW_USAGE 2 723 #define VMIW_REGION 3 724 725 #define VM_RS_UPDATE (VM_RQ_BASE+41) 726 727 #define VM_RS_MEMCTL (VM_RQ_BASE+42) 728 # define VM_RS_CTL_ENDPT m1_i1 729 # define VM_RS_CTL_REQ m1_i2 730 # define VM_RS_MEM_PIN 0 /* pin memory */ 731 # define VM_RS_MEM_MAKE_VM 1 /* make VM instance */ 732 # define VM_RS_MEM_HEAP_PREALLOC 2 /* preallocate heap regions */ 733 # define VM_RS_MEM_MAP_PREALLOC 3 /* preallocate mmaped regions */ 734 # define VM_RS_MEM_GET_PREALLOC_MAP 4 /* get preallocated mmaped regions */ 735 # define VM_RS_CTL_ADDR m2_p1 736 # define VM_RS_CTL_LEN m2_i3 737 738 #define VM_REMAP_RO (VM_RQ_BASE+44) 739 /* same args as VM_REMAP */ 740 741 #define VM_PROCCTL (VM_RQ_BASE+45) 742 #define VMPCTL_PARAM m9_l1 743 #define VMPCTL_WHO m9_l2 744 #define VMPCTL_M1 m9_l3 745 #define VMPCTL_LEN m9_l4 746 #define VMPCTL_FLAGS m9_l5 747 748 #define VMPPARAM_CLEAR 1 /* values for VMPCTL_PARAM */ 749 #define VMPPARAM_HANDLEMEM 2 750 751 #define VM_VFS_MMAP (VM_RQ_BASE+46) 752 753 #define VM_GETRUSAGE (VM_RQ_BASE+47) 754 755 #define VM_RS_PREPARE (VM_RQ_BASE+48) 756 757 /* Total. */ 758 #define NR_VM_CALLS 49 759 #define VM_CALL_MASK_SIZE BITMAP_CHUNKS(NR_VM_CALLS) 760 761 /* not handled as a normal VM call, thus at the end of the reserved rage */ 762 #define VM_PAGEFAULT (VM_RQ_BASE+0xff) 763 # define VPF_ADDR m1_i1 764 # define VPF_FLAGS m1_i2 765 766 /* Basic vm calls allowed to every process. */ 767 #define VM_BASIC_CALLS \ 768 VM_BRK, VM_MMAP, VM_MUNMAP, VM_MAP_PHYS, VM_UNMAP_PHYS, VM_INFO, \ 769 VM_GETRUSAGE /* VM_GETRUSAGE is to be removed from this list ASAP */ 770 771 /*===========================================================================* 772 * Messages for IPC server * 773 *===========================================================================*/ 774 #define IPC_BASE 0xD00 775 776 /* Shared Memory */ 777 #define IPC_SHMGET (IPC_BASE+1) 778 #define IPC_SHMAT (IPC_BASE+2) 779 #define IPC_SHMDT (IPC_BASE+3) 780 #define IPC_SHMCTL (IPC_BASE+4) 781 782 /* Semaphore */ 783 #define IPC_SEMGET (IPC_BASE+5) 784 #define IPC_SEMCTL (IPC_BASE+6) 785 #define IPC_SEMOP (IPC_BASE+7) 786 787 /*===========================================================================* 788 * Messages for Scheduling * 789 *===========================================================================*/ 790 #define SCHEDULING_BASE 0xF00 791 792 #define SCHEDULING_NO_QUANTUM (SCHEDULING_BASE+1) 793 #define SCHEDULING_START (SCHEDULING_BASE+2) 794 #define SCHEDULING_STOP (SCHEDULING_BASE+3) 795 #define SCHEDULING_SET_NICE (SCHEDULING_BASE+4) 796 #define SCHEDULING_INHERIT (SCHEDULING_BASE+5) 797 798 /*===========================================================================* 799 * Messages for USB * 800 *===========================================================================*/ 801 802 #define USB_BASE 0x1100 803 804 /* those are from driver to USBD */ 805 #define USB_RQ_INIT (USB_BASE + 0) /* First message to HCD driver */ 806 #define USB_RQ_DEINIT (USB_BASE + 1) /* Quit the session */ 807 #define USB_RQ_SEND_URB (USB_BASE + 2) /* Send URB */ 808 #define USB_RQ_CANCEL_URB (USB_BASE + 3) /* Cancel URB */ 809 #define USB_RQ_SEND_INFO (USB_BASE + 4) /* Sends various information */ 810 #define USB_REPLY (USB_BASE + 5) 811 812 813 /* those are from USBD to driver */ 814 #define USB_COMPLETE_URB (USB_BASE + 6) 815 #define USB_ANNOUCE_DEV (USB_BASE + 7) /* Announce a new USB Device */ 816 #define USB_WITHDRAW_DEV (USB_BASE + 8) /* Withdraw a allready anncounced 817 USB device*/ 818 # define USB_GRANT_ID m4_l1 819 # define USB_GRANT_SIZE m4_l2 820 821 # define USB_URB_ID m4_l1 822 # define USB_RESULT m4_l2 823 # define USB_DEV_ID m4_l1 824 # define USB_DRIVER_EP m4_l2 825 # define USB_INTERFACES m4_l3 826 # define USB_RB_INIT_NAME m3_ca1 827 828 # define USB_INFO_TYPE m4_l1 829 # define USB_INFO_VALUE m4_l2 830 831 /*===========================================================================* 832 * Messages for DeviceManager (s/t like SysFS) * 833 *===========================================================================*/ 834 835 #define DEVMAN_BASE 0x1200 836 837 #define DEVMAN_ADD_DEV (DEVMAN_BASE + 0) 838 #define DEVMAN_DEL_DEV (DEVMAN_BASE + 1) 839 #define DEVMAN_ADD_BUS (DEVMAN_BASE + 2) 840 #define DEVMAN_DEL_BUS (DEVMAN_BASE + 3) 841 #define DEVMAN_ADD_DEVFILE (DEVMAN_BASE + 4) 842 #define DEVMAN_DEL_DEVFILE (DEVMAN_BASE + 5) 843 844 #define DEVMAN_REQUEST (DEVMAN_BASE + 6) 845 #define DEVMAN_REPLY (DEVMAN_BASE + 7) 846 847 #define DEVMAN_BIND (DEVMAN_BASE + 8) 848 #define DEVMAN_UNBIND (DEVMAN_BASE + 9) 849 850 # define DEVMAN_GRANT_ID m4_l1 851 # define DEVMAN_GRANT_SIZE m4_l2 852 853 # define DEVMAN_ENDPOINT m4_l3 854 # define DEVMAN_DEVICE_ID m4_l2 855 # define DEVMAN_RESULT m4_l1 856 857 /*===========================================================================* 858 * Messages for TTY * 859 *===========================================================================*/ 860 861 #define TTY_RQ_BASE 0x1300 862 863 #define TTY_FKEY_CONTROL (TTY_RQ_BASE + 1) /* control an F-key at TTY */ 864 # define FKEY_MAP 10 /* observe function key */ 865 # define FKEY_UNMAP 11 /* stop observing function key */ 866 # define FKEY_EVENTS 12 /* request open key presses */ 867 868 #define TTY_INPUT_UP (TTY_RQ_BASE + 2) /* input server is up */ 869 #define TTY_INPUT_EVENT (TTY_RQ_BASE + 3) /* relayed input event */ 870 871 /*===========================================================================* 872 * Messages for input server and drivers * 873 *===========================================================================*/ 874 875 /* The input protocol has no real replies. All messages are one-way. */ 876 #define INPUT_RQ_BASE 0x1500 /* from TTY to server, or server to driver */ 877 #define INPUT_RS_BASE 0x1580 /* from input driver to input server */ 878 879 #define INPUT_CONF (INPUT_RQ_BASE + 0) /* configure driver */ 880 #define INPUT_SETLEDS (INPUT_RQ_BASE + 1) /* set keyboard LEDs */ 881 882 #define INPUT_EVENT (INPUT_RS_BASE + 0) /* send input event */ 883 884 /*===========================================================================* 885 * Messages for PTYFS * 886 *===========================================================================*/ 887 888 #define PTYFS_BASE 0x1700 889 890 #define PTYFS_SET (PTYFS_BASE + 0) /* add/update node */ 891 #define PTYFS_CLEAR (PTYFS_BASE + 1) /* delete node */ 892 #define PTYFS_NAME (PTYFS_BASE + 2) /* get node name */ 893 894 /*===========================================================================* 895 * VFS-FS TRANSACTION IDs * 896 *===========================================================================*/ 897 898 #define VFS_TRANSACTION_BASE 0xB00 899 900 #define VFS_TRANSID (VFS_TRANSACTION_BASE + 1) 901 #define IS_VFS_FS_TRANSID(type) (((type) & ~0xff) == VFS_TRANSACTION_BASE) 902 903 /*===========================================================================* 904 * Messages for character devices * 905 *===========================================================================*/ 906 907 /* Base type for character device requests and responses. */ 908 #define CDEV_RQ_BASE 0x400 909 #define CDEV_RS_BASE 0x480 910 911 #define IS_CDEV_RQ(type) (((type) & ~0x7f) == CDEV_RQ_BASE) 912 #define IS_CDEV_RS(type) (((type) & ~0x7f) == CDEV_RS_BASE) 913 914 /* Message types for character device requests. */ 915 #define CDEV_OPEN (CDEV_RQ_BASE + 0) /* open a minor device */ 916 #define CDEV_CLOSE (CDEV_RQ_BASE + 1) /* close a minor device */ 917 #define CDEV_READ (CDEV_RQ_BASE + 2) /* read into a buffer */ 918 #define CDEV_WRITE (CDEV_RQ_BASE + 3) /* write from a buffer */ 919 #define CDEV_IOCTL (CDEV_RQ_BASE + 4) /* I/O control operation */ 920 #define CDEV_CANCEL (CDEV_RQ_BASE + 5) /* cancel suspended request */ 921 #define CDEV_SELECT (CDEV_RQ_BASE + 6) /* test for ready operations */ 922 923 /* Message types for character device responses. */ 924 #define CDEV_REPLY (CDEV_RS_BASE + 0) /* general reply code */ 925 #define CDEV_SEL1_REPLY (CDEV_RS_BASE + 1) /* immediate select reply */ 926 #define CDEV_SEL2_REPLY (CDEV_RS_BASE + 2) /* select notification reply */ 927 928 /* Bits in 'CDEV_ACCESS' field of block device open requests. */ 929 # define CDEV_R_BIT 0x01 /* open with read access */ 930 # define CDEV_W_BIT 0x02 /* open with write access */ 931 # define CDEV_NOCTTY 0x04 /* not to become the controlling TTY */ 932 933 /* Bits in 'CDEV_FLAGS' field of block device transfer requests. */ 934 # define CDEV_NOFLAGS 0x00 /* no flags are set */ 935 # define CDEV_NONBLOCK 0x01 /* do not suspend I/O request */ 936 937 /* Bits in 'CDEV_OPS', 'CDEV_STATUS' fields of block device select messages. */ 938 # define CDEV_OP_RD 0x01 /* selected for read operation */ 939 # define CDEV_OP_WR 0x02 /* selected for write operation */ 940 # define CDEV_OP_ERR 0x04 /* selected for error operation */ 941 # define CDEV_NOTIFY 0x08 /* notification requested */ 942 943 /* Bits in 'CDEV_STATUS' field of block device open responses. */ 944 # define CDEV_CLONED 0x20000000 /* device is cloned */ 945 # define CDEV_CTTY 0x40000000 /* device is controlling TTY */ 946 947 /*===========================================================================* 948 * Messages for block devices * 949 *===========================================================================*/ 950 951 /* Base type for block device requests and responses. */ 952 #define BDEV_RQ_BASE 0x500 953 #define BDEV_RS_BASE 0x580 954 955 #define IS_BDEV_RQ(type) (((type) & ~0x7f) == BDEV_RQ_BASE) 956 #define IS_BDEV_RS(type) (((type) & ~0x7f) == BDEV_RS_BASE) 957 958 /* Message types for block device requests. */ 959 #define BDEV_OPEN (BDEV_RQ_BASE + 0) /* open a minor device */ 960 #define BDEV_CLOSE (BDEV_RQ_BASE + 1) /* close a minor device */ 961 #define BDEV_READ (BDEV_RQ_BASE + 2) /* read into a buffer */ 962 #define BDEV_WRITE (BDEV_RQ_BASE + 3) /* write from a buffer */ 963 #define BDEV_GATHER (BDEV_RQ_BASE + 4) /* read into a vector */ 964 #define BDEV_SCATTER (BDEV_RQ_BASE + 5) /* write from a vector */ 965 #define BDEV_IOCTL (BDEV_RQ_BASE + 6) /* I/O control operation */ 966 967 /* Message types for block device responses. */ 968 #define BDEV_REPLY (BDEV_RS_BASE + 0) /* general reply code */ 969 970 /* Bits in 'BDEV_ACCESS' field of block device open requests. */ 971 # define BDEV_R_BIT 0x01 /* open with read access */ 972 # define BDEV_W_BIT 0x02 /* open with write access */ 973 974 /* Bits in 'BDEV_FLAGS' field of block device transfer requests. */ 975 # define BDEV_NOFLAGS 0x00 /* no flags are set */ 976 # define BDEV_FORCEWRITE 0x01 /* force write to disk immediately */ 977 # define BDEV_NOPAGE 0x02 /* eeprom: don't send page address */ 978 979 /*===========================================================================* 980 * Messages for Real Time Clocks * 981 *===========================================================================*/ 982 983 /* Base type for real time clock requests and responses. */ 984 #define RTCDEV_RQ_BASE 0x1400 985 #define RTCDEV_RS_BASE 0x1480 986 987 #define IS_RTCDEV_RQ(type) (((type) & ~0x7f) == RTCDEV_RQ_BASE) 988 #define IS_RTCDEV_RS(type) (((type) & ~0x7f) == RTCDEV_RS_BASE) 989 990 /* Message types for real time clock requests. */ 991 #define RTCDEV_GET_TIME (RTCDEV_RQ_BASE + 0) /* get time from hw clock */ 992 #define RTCDEV_SET_TIME (RTCDEV_RQ_BASE + 1) /* set time in hw clock */ 993 #define RTCDEV_PWR_OFF (RTCDEV_RQ_BASE + 2) /* set time to cut the power */ 994 995 /* Same as GET/SET above but using grants */ 996 #define RTCDEV_GET_TIME_G (RTCDEV_RQ_BASE + 3) /* get time from hw clock */ 997 #define RTCDEV_SET_TIME_G (RTCDEV_RQ_BASE + 4) /* set time in hw clock */ 998 999 /* Message types for real time clock responses. */ 1000 #define RTCDEV_REPLY (RTCDEV_RS_BASE + 0) /* general reply code */ 1001 1002 /* Bits in 'lc_readclock_rtcdev.flags' field of real time clock requests. */ 1003 #define RTCDEV_NOFLAGS 0x00 /* no flags are set */ 1004 #define RTCDEV_Y2KBUG 0x01 /* Interpret 1980 as 2000 for RTC w/Y2K bug */ 1005 #define RTCDEV_CMOSREG 0x02 /* Also set the CMOS clock register bits. */ 1006 1007 /*===========================================================================* 1008 * Calls to MIB * 1009 *===========================================================================*/ 1010 1011 #define MIB_BASE 0x1800 1012 1013 #define IS_MIB_CALL(type) (((type) & ~0xff) == MIB_BASE) 1014 1015 #define MIB_SYSCTL (MIB_BASE + 0) /* sysctl(2) */ 1016 1017 #define NR_MIB_CALLS 1 /* highest number from base plus one */ 1018 1019 /*===========================================================================* 1020 * Internal codes used by several services * 1021 *===========================================================================*/ 1022 1023 #define SUSPEND -998 /* status to suspend caller, reply later */ 1024 1025 #endif /* !_MINIX_COM_H */ 1026