kernel.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #ifndef CX_ZIVUOS_KERNEL_H_INCLUDED
  2. #define CX_ZIVUOS_KERNEL_H_INCLUDED
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. #include <stdbool.h>
  6. #include "models.h"
  7. #include "process.h"
  8. #include "scheduler.h"
  9. #include "result.h"
  10. typedef struct zv_kernel_s {
  11. size_t processes_count;
  12. zv_process_t *processes;
  13. zv_pid_t last;
  14. zv_scheduler_mode_t mode;
  15. zv_pid_t interrupts;
  16. zv_priority_t lowest_priority;
  17. } zv_kernel_t;
  18. void zv_kernel_init(
  19. zv_kernel_t *,
  20. zv_process_t *,
  21. zv_pid_t
  22. );
  23. zv_pid_t zv_kernel_add_process(
  24. zv_kernel_t *,
  25. zv_worker_t,
  26. zv_universal_t,
  27. zv_priority_t
  28. );
  29. void __zv_kernel_clean_balance(zv_kernel_t *);
  30. void zv_kernel_idle_task();
  31. bool zv_kernel_set_scheduler(zv_kernel_t *, zv_scheduler_mode_t);
  32. zv_result_t zv_kernel_trigger_process(zv_kernel_t *, zv_pid_t);
  33. static inline zv_process_t * __zv_kernel_get_process(
  34. zv_kernel_t *self,
  35. zv_pid_t target
  36. ) {
  37. if (self->processes_count <= target) {
  38. return NULL;
  39. }
  40. return self->processes + target;
  41. }
  42. static inline zv_pid_t zv_kernel_get_pid(
  43. zv_kernel_t *self,
  44. zv_process_t *target
  45. ) {
  46. return (zv_pid_t) (target - self->processes);
  47. }
  48. #endif