Files
mkrtos-real/mkrtos_knl/knl/task.c

86 lines
1.5 KiB
C
Raw Normal View History

2023-08-20 20:52:23 +08:00
#include "task.h"
#include "kobject.h"
#include "factory.h"
#include "init.h"
enum task_op_code
{
TASK_OBJ_MAP,
2023-08-27 21:25:09 +08:00
TASK_OBJ_UNMAP,
2023-08-20 20:52:23 +08:00
};
static msg_tag_t task_syscall_func(entry_frame_t *f)
{
msg_tag_t tag = msg_tag_init(f->r[0]);
if (tag.prot != TASK_PROT)
{
return msg_tag_init3(0, 0, -EINVAL);
}
switch (tag.type)
{
case TASK_OBJ_MAP:
/* code */
break;
2023-08-27 21:25:09 +08:00
case TASK_OBJ_UNMAP:
break;
2023-08-20 20:52:23 +08:00
default:
break;
}
return tag;
}
2023-08-27 21:25:09 +08:00
void task_init(task_t *task, ram_limit_t *ram, int is_knl)
2023-08-20 20:52:23 +08:00
{
assert(task);
assert(ram);
kobject_init(&task->kobj);
obj_space_init(&task->obj_space, ram);
2023-08-27 21:25:09 +08:00
mm_space_init(&task->mm_space, is_knl);
2023-08-27 16:52:53 +08:00
task->lim = ram;
2023-08-20 20:52:23 +08:00
}
2023-08-27 21:25:09 +08:00
task_t *task_create(ram_limit_t *lim, int is_knl)
2023-08-20 20:52:23 +08:00
{
task_t *tk = mm_limit_alloc(lim, sizeof(task_t));
if (!tk)
{
return NULL;
}
2023-08-27 21:25:09 +08:00
task_init(tk, lim, is_knl);
2023-08-20 20:52:23 +08:00
return tk;
}
/**
* @brief
*
* @param lim
* @param arg0
* @param arg1
* @param arg2
* @param arg3
* @return kobject_t*
*/
static kobject_t *task_create_func(ram_limit_t *lim, umword_t arg0, umword_t arg1,
umword_t arg2, umword_t arg3)
{
2023-08-27 21:25:09 +08:00
task_t *tk = task_create(lim, FALSE);
2023-08-20 20:52:23 +08:00
return &tk->kobj;
}
/**
* @brief TODO:
*
*/
2023-08-22 00:26:34 +08:00
void task_factory_register(void)
2023-08-20 20:52:23 +08:00
{
factory_register(task_create_func, TASK_PROT);
}
2023-08-22 00:26:34 +08:00
INIT_KOBJ(task_factory_register);