Reorganize the headers
[monolithium.git] / kernel / include / process.h
1 /*
2  * process.h
3  *
4  * Copyright (C) 2016 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as
8  * published by the Free Software Foundation, either version 3 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef _PROCESS_H_
21 #define _PROCESS_H_
22
23 #include <sdk/process.h>
24 #include <common.h>
25 #include <object.h>
26 #include <memory.h>
27 #include <clock.h>
28 #include <pipe.h>
29 #include <thread.h>
30 #include <vm86.h>
31 #include <user.h>
32
33 #define MAX_PROCESSES 2097152
34 #define PROCESS_POOL_ADDRESS NULL
35 #define PROCESS_POOL_SIZE 524288
36 #define STARTUP_HANDLE_TABLE_SIZE (256 * sizeof(handle_info_t))
37
38 #ifndef THREAD_TYPEDEF
39 #define THREAD_TYPEDEF
40 typedef struct thread thread_t;
41 #endif
42
43 typedef struct
44 {
45     object_t *obj; /* strong reference */
46     access_flags_t access_flags;
47 } handle_info_t;
48
49 struct process
50 {
51     object_t header;
52     dword_t pid;
53     char *name;
54     memory_address_space_t memory_space;
55     dword_t exit_code;
56     bool_t terminating;
57     dword_t terminated;
58     clock_time_t start_time;
59     clock_time_t end_time;
60     list_entry_t threads;
61     resource_t thread_list_res;
62     handle_info_t *handle_table;
63     dword_t handle_count, handle_table_size;
64     resource_t handle_table_res;
65     user_t *original_user; /* weak reference */
66     user_t *current_user; /* strong reference */
67 };
68
69 #ifndef PROCESS_TYPEDEF
70 #define PROCESS_TYPEDEF
71 typedef struct process process_t;
72 #endif
73
74 extern process_t *kernel_process;
75
76 process_t *get_current_process();
77 dword_t open_process(dword_t pid, handle_t *handle);
78 void init_user_stack(uintptr_t *stack_pointer, process_params_t *parameters);
79 dword_t create_process(const char *path, dword_t flags, process_params_t *parameters, handle_t *process_handle, handle_t *thread_handle);
80 void process_cleanup(object_t *proc);
81 void destroy_process(process_t *process);
82 dword_t terminate(handle_t handle, dword_t exit_code);
83 dword_t get_process_id();
84 dword_t query_process(handle_t handle, process_info_t info_type, void *buffer, dword_t size);
85 dword_t enum_processes(dword_t *pid_array, dword_t *count);
86 dword_t wait_process(handle_t handle, dword_t timeout);
87 process_t *switch_process(process_t *new_process);
88 void process_init();
89
90 #endif