kernel.h 1017 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef CX_ZIVUOS_KERNEL_H_INCLUDED
  2. #define CX_ZIVUOS_KERNEL_H_INCLUDED
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "zv_types.h"
  6. #include "task.h"
  7. #define ZV_COUNT_TASKS(X) (sizeof(X) / sizeof(zv_task_t))
  8. typedef enum zv_scheduler_mode_e {
  9. ZV_SCHEDULER_BASIC,
  10. ZV_SCHEDULER_PRIORITY_STRICT,
  11. ZV_SCHEDULER_PRIORITY_AGING,
  12. } zv_scheduler_mode_t;
  13. typedef struct zv_kernel_s {
  14. zv_scheduler_mode_t scheduler;
  15. zv_task_t *tasks;
  16. zv_tid_t tasks_count;
  17. } zv_kernel_t;
  18. bool zv_kernel_init(zv_kernel_t *self, zv_task_t *tasks, zv_tid_t count);
  19. bool zv_kernel_boot(zv_kernel_t *self);
  20. zv_tid_t zv_kernel_create_process(
  21. zv_kernel_t *self,
  22. zv_worker_t worker,
  23. zv_priority_t priority,
  24. void *param
  25. );
  26. bool zv_kernel_kill_process(
  27. zv_kernel_t *self,
  28. zv_tid_t target
  29. );
  30. zv_tid_t __zv_kernel_get_empty_slot(zv_kernel_t *self);
  31. zv_task_t * __zv_kernel_get_task(zv_kernel_t *self, zv_tid_t target);
  32. zv_tid_t __zv_kernel_get_tid(zv_kernel_t *self, zv_task_t *target);
  33. #endif