xref: /minix/minix/include/minix/rs.h (revision 27852ebe)
1 #ifndef RS_H
2 #define RS_H
3 
4 /*
5 minix/rs.h
6 
7 Interface to the reincarnation server
8 */
9 
10 #include <minix/bitmap.h>
11 #include <minix/com.h>
12 #include <minix/ipc_filter.h>
13 
14 #define SERVICE_LOGIN	"service"	/* passwd file entry for services */
15 
16 /* The following definition should be kept in sync with the actual
17  * /etc/master.passwd value for SERVICE_LOGIN for now, and removed altogether
18  * once we are able to obtain its value dynamically everywhere.  The value has
19  * been chosen so as to avoid creating conflicts with future NetBSD additions
20  * to the password files, although one can never be sure.
21  */
22 #define SERVICE_UID		999		/* user ID for services */
23 
24 /* RSS definitions. */
25 #define RSS_NR_IRQ		16
26 #define RSS_NR_IO		16
27 #define RSS_IRQ_ALL		(RSS_NR_IRQ+1)
28 #define RSS_IO_ALL		(RSS_NR_IO+1)
29 #define RSS_IPC_ALL		"IPC_ALL"
30 #define RSS_IPC_ALL_SYS		"IPC_ALL_SYS"
31 
32 /* RSS flags. */
33 #define RSS_COPY	0x01	/* keep an in-memory copy of the binary */
34 #define RSS_REUSE	0x04	/* Try to reuse previously copied binary */
35 #define RSS_NOBLOCK	0x08	/* unblock caller immediately */
36 #define RSS_REPLICA	0x10	/* keep a replica of the service */
37 #define RSS_BATCH	0x20	/* batch mode */
38 #define RSS_SELF_LU	0x40	/* perform self update */
39 #define RSS_ASR_LU	0x80	/* perform ASR update */
40 #define RSS_FORCE_SELF_LU	0x0100	/* force self update */
41 #define RSS_PREPARE_ONLY_LU	0x0200	/* request prepare-only update */
42 #define RSS_FORCE_INIT_CRASH    0x0400  /* force crash at initialization time (for debugging) */
43 #define RSS_FORCE_INIT_FAIL     0x0800  /* force failure at initialization time (for debugging) */
44 #define RSS_FORCE_INIT_TIMEOUT  0x1000  /* force timeout at initialization time (for debugging) */
45 #define RSS_FORCE_INIT_DEFCB    0x2000  /* force default cb at initialization time (for debugging) */
46 #define RSS_SYS_BASIC_CALLS	0x4000	/* include basic kernel calls */
47 #define RSS_VM_BASIC_CALLS	0x8000	/* include basic vm calls */
48 #define RSS_NOMMAP_LU          0x10000  /* don't inherit mmapped regions */
49 #define RSS_DETACH             0x20000  /* detach on update/restart */
50 #define RSS_NORESTART          0x40000  /* don't restart */
51 #define RSS_FORCE_INIT_ST      0x80000  /* force state transfer at initialization time */
52 #define RSS_NO_BIN_EXP        0x100000  /* suppress binary exponential offset */
53 
54 /* Common definitions. */
55 #define RS_NR_CONTROL		 8
56 #define RS_NR_PCI_DEVICE	32
57 #define RS_NR_PCI_CLASS		 4
58 #define RS_MAX_LABEL_LEN	16
59 #define RS_MAX_IPCF_STR_LEN	 (RS_MAX_LABEL_LEN+12)
60 #define RS_MAX_IPC_FILTERS	 4
61 
62 /* CPU special values */
63 #define RS_CPU_DEFAULT		-1 /* use the default cpu or do not change the current one */
64 #define RS_CPU_BSP		-2 /* use the bootstrap cpu */
65 
66 /* Labels are copied over separately. */
67 struct rss_label
68 {
69 	char *l_addr;
70 	size_t l_len;
71 };
72 
73 struct rs_pci_id {
74 	u16_t vid;
75 	u16_t did;
76 	u16_t sub_vid;
77 	u16_t sub_did;
78 };
79 #define NO_SUB_VID	0xffff
80 #define NO_SUB_DID	0xffff
81 
82 struct rs_pci_class {
83 	u32_t pciclass;
84 	u32_t mask;
85 };
86 
87 /* State-related data. */
88 struct rs_ipc_filter_el {
89 	int flags;
90 	char m_label[RS_MAX_LABEL_LEN];
91 	int m_type;
92 };
93 struct rs_state_data {
94 	size_t size;
95 	void *ipcf_els;
96 	size_t ipcf_els_size;
97 	int ipcf_els_gid;
98 	void *eval_addr;
99 	size_t eval_len;
100 	int eval_gid;
101 };
102 
103 /* Arguments needed to start a new driver or server */
104 struct rs_start
105 {
106 	unsigned rss_flags;
107 	char *rss_cmd;
108 	size_t rss_cmdlen;
109 	uid_t rss_uid;
110 	endpoint_t rss_sigmgr;
111 	endpoint_t rss_scheduler;
112 	int rss_priority;
113 	int rss_quantum;
114 	int rss_major;
115 	long rss_period;
116 	char *rss_script;
117 	size_t rss_scriptlen;
118 	long rss_asr_count;
119 	long rss_restarts;
120 	long rss_heap_prealloc_bytes;
121 	long rss_map_prealloc_bytes;
122 	int rss_nr_irq;
123 	int rss_irq[RSS_NR_IRQ];
124 	int rss_nr_io;
125 	struct { unsigned base; unsigned len; } rss_io[RSS_NR_IO];
126 	int rss_nr_pci_id;
127 	struct rs_pci_id rss_pci_id[RS_NR_PCI_DEVICE];
128 	int rss_nr_pci_class;
129 	struct rs_pci_class rss_pci_class[RS_NR_PCI_CLASS];
130 	bitchunk_t rss_system[SYS_CALL_MASK_SIZE];
131 	struct rss_label rss_label;
132 	struct rss_label rss_trg_label;
133 	char *rss_ipc;
134 	size_t rss_ipclen;
135 	bitchunk_t rss_vm[VM_CALL_MASK_SIZE];
136 	int rss_nr_control;
137 	struct rss_label rss_control[RS_NR_CONTROL];
138 	struct rs_state_data rss_state_data;
139 	int devman_id;
140 	char *rss_progname;
141 	size_t rss_prognamelen;
142 	int rss_nr_domain;
143 	int rss_domain[NR_DOMAIN];
144 	/*
145 	 * SMP specific data
146 	 *
147 	 * must be at the end of the structure for binary compatibility with
148 	 * non-smp sysytems
149 	 */
150 	int rss_cpu;
151 };
152 
153 /* ACL information for access to PCI devices */
154 struct rs_pci
155 {
156 	char rsp_label[RS_MAX_LABEL_LEN];
157 	int rsp_endpoint;
158 	int rsp_nr_device;
159 	struct rs_pci_id rsp_device[RS_NR_PCI_DEVICE];
160 	int rsp_nr_class;
161 	struct rs_pci_class rsp_class[RS_NR_PCI_CLASS];
162 };
163 
164 /* Definition of a public entry of the system process table. */
165 struct rprocpub {
166   short in_use; 		  /* set when the entry is in use */
167   unsigned sys_flags; 		  /* sys flags */
168   endpoint_t endpoint;		  /* process endpoint number */
169   endpoint_t old_endpoint;	  /* old instance endpoint number (for VM, when updating) */
170   endpoint_t new_endpoint;	  /* new instance endpoint number (for VM, when updating) */
171 
172   devmajor_t dev_nr;		  /* major device number or NO_DEV */
173   int nr_domain;		  /* number of socket driver domains */
174   int domain[NR_DOMAIN];	  /* set of socket driver domains */
175 
176   char label[RS_MAX_LABEL_LEN];	  /* label of this service */
177   char proc_name[RS_MAX_LABEL_LEN]; /* process name of this service */
178 
179   bitchunk_t vm_call_mask[VM_CALL_MASK_SIZE]; /* vm call mask */
180 
181   struct rs_pci pci_acl;	  /* pci acl */
182   int devman_id;
183 };
184 
185 /* Return whether the given boot process is a user process, as opposed to a
186  * system process. Only usable by core services during SEF initialization.
187  */
188 #define IS_RPUB_BOOT_USR(rpub) ((rpub)->endpoint == INIT_PROC_NR)
189 
190 /* Sys flag values. */
191 #define SF_CORE_SRV     0x001    /* set for core system services */
192 #define SF_SYNCH_BOOT   0X002    /* set when process needs synch boot init */
193 #define SF_NEED_COPY    0x004    /* set when process needs copy to start */
194 #define SF_USE_COPY     0x008    /* set when process has a copy in memory */
195 #define SF_NEED_REPL    0x010    /* set when process needs replica to start */
196 #define SF_USE_REPL     0x020    /* set when process has a replica */
197 #define SF_VM_UPDATE    0x040    /* set when process needs vm update */
198 #define SF_VM_ROLLBACK  0x080    /* set when vm update is a rollback */
199 #define SF_VM_NOMMAP    0x100    /* set when vm update ignores mmapped regions */
200 #define SF_USE_SCRIPT   0x200    /* set when process has restart script */
201 #define SF_DET_RESTART  0x400    /* set when process detaches on restart */
202 #define SF_NORESTART    0x800    /* set when process should not be restarted */
203 #define SF_NO_BIN_EXP  0x1000    /* set when we should ignore binary exp. offset */
204 
205 #define IMM_SF          \
206     (SF_NO_BIN_EXP | SF_CORE_SRV | SF_SYNCH_BOOT | SF_NEED_COPY | SF_NEED_REPL) /* immutable */
207 
208 int minix_rs_lookup(const char *name, endpoint_t *value);
209 
210 #endif
211