// proc.h // Author: Josh Holtrop // Date; 08/18/05 // Modified: 08/18/05 #ifndef __HOS_PROC_H__ #define __HOS_PROC_H__ __HOS_PROC_H__ #ifdef __HOS_CPP__ extern "C" { #endif #include "hos_defines.h" #include "kernel.h" typedef struct { u32_t *page_dir; /* Page directory with physical PT addys */ u32_t *v_page_dir; /* Virtual page table addresses for init */ u32_t p_page_dir; /* Physical address of page directory */ u32_t size; /* Process size, bytes from 0 through bss */ u32_t uid; /* Process owner */ int_stack_t int_stack; } process_t; typedef struct { u16_t backlink; u16_t reserved0; u32_t esp0; u16_t ss0; u16_t _ss0; u32_t esp1; u16_t ss1; u16_t _ss1; u32_t esp2; u16_t ss2; u16_t _ss2; u32_t pdbr; u32_t eip; u32_t eflags; u32_t eax; u32_t ecx; u32_t edx; u32_t ebx; u32_t esp; u32_t ebp; u32_t esi; u32_t edi; u16_t es; u16_t _es; u16_t cs; u16_t _cs; u16_t ss; u16_t _ss; u16_t ds; u16_t _ds; u16_t fs; u16_t _fs; u16_t gs; u16_t _gs; u16_t ldt; u16_t _ldt; u16_t trap; u16_t iomap; } __attribute__((packed)) tss_t; int proc_init(); void proc_sched(int_stack_t *int_stack); void switch_task(int_stack_t *int_stack, u32_t new_task); u32_t create_task(void *base, u32_t image_size, u32_t bss_size, void *entry); process_t *create_process(void *base, u32_t image_size, u32_t bss_size, void *entry); void create_address_space(process_t *p); void create_process_stack(process_t *p, void *entry); void copy_into_address_space(u32_t dest_addr, char *src_addr, u32_t pages, process_t *p); void zero_address_space(u32_t dest_addr, u32_t pages, process_t *p); #ifdef __HOS_CPP__ } #endif #endif