This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
portland-os/src/kernel/task.h
2021-01-24 12:00:11 -05:00

63 lines
No EOL
1.1 KiB
C

#ifndef TASK_H
#define TASK_H
#include <stdbool.h>
#include <stdint.h>
#define TASK_NAME_LEN 15
#define MAX_WAITS 16
struct wait {
enum {
NONE,
PROCESS_END,
WINDOW_ACTION,
IPC_RECEIVE,
IPC_RECEIVE_ANY,
IPC_SEND
} mode;
union {
struct task_state *task;
};
};
struct task_state {
uint32_t ret_addr;
void *page_directory;
uint32_t ebx;
uint32_t ecx;
uint32_t edx;
uint32_t esi;
uint32_t edi;
uint32_t ebp;
uint32_t esp;
uint32_t stack_bottom;
struct wait waits[MAX_WAITS];
bool waiting;
char name[TASK_NAME_LEN + 1];
} __attribute__ ((packed));
void add_wait(struct wait wait);
void unwait_any(struct wait wait);
void unwait(struct task_state *task, struct wait wait);
extern struct task_state tasks[];
extern struct task_state *active_task;
void init_tasks();
uint32_t new_task(struct task_state state);
void advance_active_task();
void delete_task(struct task_state *state);
uint32_t ipc_send(uint32_t reader_handle, uint32_t count, const void *buffer);
uint32_t ipc_read(uint32_t sender_handle, uint32_t count, void *buffer);
uint32_t find_unread_ipc();
#endif