-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathos.h
83 lines (71 loc) · 1.28 KB
/
os.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef __OS_H__
#define __OS_H__
#include "types.h"
#include "platform.h"
#include "riscv.h"
#include <stddef.h>
#include <stdarg.h>
// uart
extern int uart_putc(char ch);
extern void uart_puts(char *s);
extern int uart_getc(void);
// prinft
extern int printf(const char *s, ...);
extern void panic(char *s);
// memory management
extern void *page_alloc(int npages);
extern void page_free(void *p);
// multitasking
/* task management */
struct context {
/* ignore x0 */
reg_t ra;
reg_t sp;
reg_t gp;
reg_t tp;
reg_t t0;
reg_t t1;
reg_t t2;
reg_t s0;
reg_t s1;
reg_t a0;
reg_t a1;
reg_t a2;
reg_t a3;
reg_t a4;
reg_t a5;
reg_t a6;
reg_t a7;
reg_t s2;
reg_t s3;
reg_t s4;
reg_t s5;
reg_t s6;
reg_t s7;
reg_t s8;
reg_t s9;
reg_t s10;
reg_t s11;
reg_t t3;
reg_t t4;
reg_t t5;
reg_t t6;
reg_t pc;
};
extern int task_create(void (*task)(void));
extern void task_delay(volatile int count);
extern void task_yield();
extern int plic_claim(void);
extern void plic_complete(int irq);
/* lock */
extern int spin_lock(void);
extern int spin_unlock(void);
struct timer
{
void (*func)(void *arg);
void *arg;
uint32_t timeout_tick;
};
extern struct timer *timer_create(void (*handler)(void *arg), void *arg, uint32_t timeout);
extern void timer_delete(struct timer *timer);
#endif