| 1 | #ifndef _CTX_HANDLER_H | 
|---|
| 2 | #define _CTX_HANDLER_H | 
|---|
| 3 |  | 
|---|
| 4 | #include <giet_config.h> | 
|---|
| 5 |  | 
|---|
| 6 | ///////////////////////////////////////////////////////////////////////////////// | 
|---|
| 7 | //    Definition of the scheduler structure | 
|---|
| 8 | ///////////////////////////////////////////////////////////////////////////////// | 
|---|
| 9 |  | 
|---|
| 10 | typedef struct static_scheduler_s | 
|---|
| 11 | { | 
|---|
| 12 | unsigned int context[15][64];      // at most 15 task contexts | 
|---|
| 13 | unsigned int tasks;                // actual number of tasks | 
|---|
| 14 | unsigned int current;              // current task index | 
|---|
| 15 | unsigned int interrupt_vector[32]; // interrupt vector | 
|---|
| 16 | } static_scheduler_t; | 
|---|
| 17 |  | 
|---|
| 18 |  | 
|---|
| 19 | ///////////////////////////////////////////////////////////////////////////////// | 
|---|
| 20 | //  "idle" task index definition | 
|---|
| 21 | ///////////////////////////////////////////////////////////////////////////////// | 
|---|
| 22 |  | 
|---|
| 23 | #define IDLE_TASK_INDEX        14 | 
|---|
| 24 |  | 
|---|
| 25 | ///////////////////////////////////////////////////////////////////////////////// | 
|---|
| 26 | //    Definition of the task context slots indexes | 
|---|
| 27 | ///////////////////////////////////////////////////////////////////////////////// | 
|---|
| 28 |  | 
|---|
| 29 | #define CTX_SP_ID        29 | 
|---|
| 30 | #define CTX_RA_ID        31 | 
|---|
| 31 |  | 
|---|
| 32 | #define CTX_EPC_ID       32  // Exception Program Counter (CP0) | 
|---|
| 33 | #define CTX_CR_ID        33  // Cause Register (CP0) | 
|---|
| 34 | #define CTX_SR_ID        34  // Status Register (CP0) | 
|---|
| 35 | #define CTX_BVAR_ID      35      // Bad Virtual Address Register (CP0) | 
|---|
| 36 |  | 
|---|
| 37 | #define CTX_PTAB_ID      36  // Page Table Virtual address | 
|---|
| 38 | #define CTX_LTID_ID      37  // Local  Task Index (in scheduler) | 
|---|
| 39 | #define CTX_VSID_ID      38  // Vspace Index | 
|---|
| 40 | #define CTX_PTPR_ID      39  // Page Table Pointer Register (PADDR>>13) | 
|---|
| 41 |  | 
|---|
| 42 | #define CTX_TTY_ID       40  // global TTY terminal | 
|---|
| 43 | #define CTX_DMA_ID       41  // local DMA channel | 
|---|
| 44 | #define CTX_NIC_ID       42  // global NIC channel | 
|---|
| 45 | #define CTX_TIM_ID       43  // local TIMER channel | 
|---|
| 46 | #define CTX_HBA_ID       44  // global HBA channel | 
|---|
| 47 | #define CTX_CMA_ID       45  // global CMA channel | 
|---|
| 48 | #define CTX_GTID_ID      46  // Global Task Index | 
|---|
| 49 | #define CTX_RUN_ID       47  // Boolean: task runable | 
|---|
| 50 | #define CTX_TRDID_ID     48  // Thread Index in vspace | 
|---|
| 51 |  | 
|---|
| 52 | ////////////////////////////////////////////////////////////////////////////////// | 
|---|
| 53 | //     Prototype of the context switch function | 
|---|
| 54 | ////////////////////////////////////////////////////////////////////////////////// | 
|---|
| 55 |  | 
|---|
| 56 | extern void _ctx_switch(); | 
|---|
| 57 | extern void _ctx_eret(); | 
|---|
| 58 | extern void _idle_task(); | 
|---|
| 59 |  | 
|---|
| 60 | extern static_scheduler_t _scheduler[]; | 
|---|
| 61 |  | 
|---|
| 62 | #endif | 
|---|