Pristine Ack-5.5
[Ack-5.5.git] / lib / minix / include / minix / com.h
1 /* System calls. */
2 #define SEND               1    /* function code for sending messages */
3 #define RECEIVE            2    /* function code for receiving messages */
4 #define BOTH               3    /* function code for SEND + RECEIVE */
5 #define ANY   (NR_PROCS+100)    /* receive(ANY, buf) accepts from any source */
6
7 /* Task numbers, function codes and reply codes. */
8
9 #define TTY         -NR_TASKS   /* terminal I/O class */
10 #       define TTY_READ     3   /* fcn code for reading from tty */
11 #       define TTY_WRITE    4   /* fcn code for writing to tty */
12 #       define TTY_IOCTL    5   /* fcn code for ioctl */
13 #       define TTY_SETPGRP  6   /* fcn code for setpgrp */
14 #       define TTY_OPEN     7   /* fcn code for opening tty */
15 #       define TTY_CLOSE    8   /* fcn code for closing tty */
16 #       define SUSPEND   -998   /* used in interrupts when tty has no data */
17
18 #ifdef AM_KERNEL
19 #define AMOEBA
20 #endif
21
22 #ifdef AMOEBA
23
24 /* There are AM_NTASK copies of the amoeba kernel task.
25  * If you change AM_NTASKS be sure to adjust kernel/table.c and fs/table.c
26  */
27 #define AM_NTASKS          4    /* number of kernel tasks of this class */
28
29 #define AMINT_CLASS         (TTY+1)     /* Amoeba event handler */
30 #define AMOEBA_CLASS        (AMINT_CLASS+AM_NTASKS) /* transaction handlers */
31 #       define ETHER_ARRIV   1  /* fcn code for packet arrival */
32 #       define AM_TRANS      2  /* amoeba transaction */                
33 #       define AM_GETREQ     3  /* amoeba getrequest */
34 #       define AM_PUTREP     4  /* amoeba putrep */
35 #       define AM_REVIVE     6  /* used by kernel task to revive luser task */
36 #       define AM_TIMEOUT    8  /* used to talk to clock task */
37 #       define AM_PUTSIG     9  /* when the luser hits the DEL ! */
38 #       define AM_TASK_DIED 10  /* sent if task died during a transaction */
39
40 #else   /* if AMOEBA not defined */
41
42 #define AMOEBA_CLASS    TTY
43
44 #endif /* AMOEBA */
45
46 /*
47  * New class definitions should go here and should be defined relative
48  * to AMOEBA_CLASS  (ie. as AMOEBA_CLASS+n, for the nth task added).
49  */
50
51 #define IDLE (AMOEBA_CLASS+1)   /* task to run when there's nothing to run */
52
53 #define PRINTER           -7            /* printer  I/O class */
54 /* The printer uses the same commands as TTY. */
55
56 #define WINCHESTER        -6    /* winchester (hard) disk class */
57 #define FLOPPY            -5    /* floppy disk class */
58 #       define DISK_READ   3    /* fcn code to DISK (must equal TTY_READ) */
59 #       define DISK_WRITE  4    /* fcn code to DISK (must equal TTY_WRITE) */
60 #       define DISK_IOCTL  5    /* fcn code for setting up RAM disk */
61 #       define SCATTERED_IO 6   /* fcn code for multiple reads/writes */
62 #       define OPTIONAL_IO 16   /* modifier to DISK_* codes within vector */
63
64 #define MEM               -4    /* /dev/ram, /dev/(k)mem and /dev/null class */
65 #       define RAM_DEV     0    /* minor device for /dev/ram */
66 #       define MEM_DEV     1    /* minor device for /dev/mem */
67 #       define KMEM_DEV    2    /* minor device for /dev/kmem */
68 #       define NULL_DEV    3    /* minor device for /dev/null */
69 #if (CHIP == INTEL)
70 #       define PORT_DEV    4    /* minor device for /dev/port */
71 #endif
72
73 #define CLOCK             -3    /* clock class */
74 #       define SET_ALARM   1    /* fcn code to CLOCK, set up alarm */
75 #       define GET_TIME    3    /* fcn code to CLOCK, get real time */
76 #       define SET_TIME    4    /* fcn code to CLOCK, set real time */
77 #       define REAL_TIME   1    /* reply from CLOCK: here is real time */
78
79 #define SYSTASK           -2    /* internal functions */
80 #       define SYS_XIT     1    /* fcn code for sys_xit(parent, proc) */
81 #       define SYS_GETSP   2    /* fcn code for sys_sp(proc, &new_sp) */
82 #       define SYS_SIG     3    /* fcn code for sys_sig(proc, sig) */
83 #       define SYS_FORK    4    /* fcn code for sys_fork(parent, child) */
84 #       define SYS_NEWMAP  5    /* fcn code for sys_newmap(procno, map_ptr) */
85 #       define SYS_COPY    6    /* fcn code for sys_copy(ptr) */
86 #       define SYS_EXEC    7    /* fcn code for sys_exec(procno, new_sp) */
87 #       define SYS_TIMES   8    /* fcn code for sys_times(procno, bufptr) */
88 #       define SYS_ABORT   9    /* fcn code for sys_abort() */
89 #       define SYS_FRESH  10    /* fcn code for sys_fresh()  (Atari only) */
90 #       define SYS_KILL   11    /* fcn code for sys_kill(proc, sig) */
91 #       define SYS_GBOOT  12    /* fcn code for sys_gboot(procno, bootptr) */
92 #       define SYS_UMAP   13    /* fcn code for sys_umap(procno, etc) */
93 #       define SYS_MEM    14    /* fcn code for sys_mem() */
94 #       define SYS_TRACE  15    /* fcn code for sys_trace(req,pid,addr,data) */
95
96 #define HARDWARE          -1    /* used as source on interrupt generated msgs*/
97
98 /* Names of message fields for messages to CLOCK task. */
99 #define DELTA_TICKS    m6_l1    /* alarm interval in clock ticks */
100 #define FUNC_TO_CALL   m6_f1    /* pointer to function to call */
101 #define NEW_TIME       m6_l1    /* value to set clock to (SET_TIME) */
102 #define CLOCK_PROC_NR  m6_i1    /* which proc (or task) wants the alarm? */
103 #define SECONDS_LEFT   m6_l1    /* how many seconds were remaining */
104
105 /* Names of message fields used for messages to block and character tasks. */
106 #define DEVICE         m2_i1    /* major-minor device */
107 #define PROC_NR        m2_i2    /* which (proc) wants I/O? */
108 #define COUNT          m2_i3    /* how many bytes to transfer */
109 #define POSITION       m2_l1    /* file offset */
110 #define ADDRESS        m2_p1    /* core buffer address */
111
112 /* Names of message fields for messages to TTY task. */
113 #define TTY_LINE       m2_i1    /* message parameter: terminal line */
114 #define TTY_REQUEST    m2_i3    /* message parameter: ioctl request code */
115 #define TTY_SPEK       m2_l1    /* message parameter: ioctl speed, erasing */
116 #define TTY_FLAGS      m2_l2    /* message parameter: ioctl tty mode */
117 #define TTY_PGRP       m2_i3    /* message parameter: process group */
118
119 /* Names of messages fields used in reply messages from tasks. */
120 #define REP_PROC_NR    m2_i1    /* # of proc on whose behalf I/O was done */
121 #define REP_STATUS     m2_i2    /* bytes transferred or error number */
122
123 /* Names of fields for copy message to SYSTASK. */
124 #define SRC_SPACE      m5_c1    /* T or D space (stack is also D) */
125 #define SRC_PROC_NR    m5_i1    /* process to copy from */
126 #define SRC_BUFFER     m5_l1    /* virtual address where data come from */
127 #define DST_SPACE      m5_c2    /* T or D space (stack is also D) */
128 #define DST_PROC_NR    m5_i2    /* process to copy to */
129 #define DST_BUFFER     m5_l2    /* virtual address where data go to */
130 #define COPY_BYTES     m5_l3    /* number of bytes to copy */
131
132 /* Field names for accounting, SYSTASK and miscellaneous. */
133 #define USER_TIME      m4_l1    /* user time consumed by process */
134 #define SYSTEM_TIME    m4_l2    /* system time consumed by process */
135 #define CHILD_UTIME    m4_l3    /* user time consumed by process' children */
136 #define CHILD_STIME    m4_l4    /* sys time consumed by process' children */
137
138 #define PROC1          m1_i1    /* indicates a process */
139 #define PROC2          m1_i2    /* indicates a process */
140 #define PID            m1_i3    /* process id passed from MM to kernel */
141 #define STACK_PTR      m1_p1    /* used for stack ptr in sys_exec, sys_getsp */
142 #define PR             m6_i1    /* process number for sys_sig */
143 #define SIGNUM         m6_i2    /* signal number for sys_sig */
144 #define FUNC           m6_f1    /* function pointer for sys_sig */
145 #define MEM_PTR        m1_p1    /* tells where memory map is for sys_newmap */
146 #define CANCEL             0    /* general request to force a task to cancel */
147 #define SIG_MAP        m1_i2    /* used by kernel for passing signal bit map */
148
149 #ifdef AMOEBA
150
151 /* Names of message fields for amoeba tasks */
152 #define AM_OP           m2_i1   /* one of the above operators */
153 #define AM_PROC_NR      m2_i2   /* process # of proc doing operation */
154 #define AM_COUNT        m2_i3   /* size of buffer for operation */
155 #define AM_ADDRESS      m2_p1   /* address of buffer for operation */
156
157 /* For communication between MM and AMOEBA_CLASS kernel tasks */
158 #define AM_STATUS       m2_i3   /* same use as REP_STATUS but for amoeba */
159 #define AM_FREE_IT      m2_l1   /* 1=not a getreq, 0=is a getreq */
160
161 /* Special for passing a physical address from the ethernet driver */
162 #define AM_PADDR        m2_l1   /* to the transaction layer */
163
164 #endif /* AMOEBA */
165
166 #define HARD_INT           2    /* fcn code for all hardware interrupts */