summaryrefslogtreecommitdiffstats
path: root/src/target/firmware/include/layer1/mframe_sched.h
blob: 74e2d27127ae22a26abbca19a8b1ce84e4a9f47f (plain)
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
#ifndef _L1_MFRAME_SCHED_H
#define _L1_MFRAME_SCHED_H

#include <stdint.h>

enum mframe_task {
	MF_TASK_BCCH_NORM,
	MF_TASK_BCCH_EXT,
	MF_TASK_CCCH,
	MF_TASK_CCCH_COMB,

	MF_TASK_SDCCH4_0,
	MF_TASK_SDCCH4_1,
	MF_TASK_SDCCH4_2,
	MF_TASK_SDCCH4_3,

	MF_TASK_SDCCH8_0,
	MF_TASK_SDCCH8_1,
	MF_TASK_SDCCH8_2,
	MF_TASK_SDCCH8_3,
	MF_TASK_SDCCH8_4,
	MF_TASK_SDCCH8_5,
	MF_TASK_SDCCH8_6,
	MF_TASK_SDCCH8_7,

	MF_TASK_SDCCH4_CBCH,
	MF_TASK_SDCCH8_CBCH,

	MF_TASK_TCH_F_EVEN,
	MF_TASK_TCH_F_ODD,
	MF_TASK_TCH_H_0,
	MF_TASK_TCH_H_1,

	MF_TASK_NEIGH_PM51_C0T0,
	MF_TASK_NEIGH_PM51,
	MF_TASK_NEIGH_PM26E,
	MF_TASK_NEIGH_PM26O,

	/* Test task: send Normal Burst in all timeslots */
	MF_TASK_UL_ALL_NB,
};

enum mf_sched_item_flag {
	MF_F_SACCH	= (1 << 0),
};

/* The scheduler itself */
struct mframe_scheduler {
	uint32_t tasks;
	uint32_t tasks_tgt;
	uint32_t safe_fn;
};

uint8_t mframe_task2chan_nr(enum mframe_task mft, uint8_t ts);

/* Enable a specific task */
void mframe_enable(enum mframe_task task_id);

/* Disable a specific task */
void mframe_disable(enum mframe_task task_id);

/* Replace the current active set by the new one */
void mframe_set(uint32_t tasks);

/* Schedule mframe_sched_items according to current MF TASK list */
void mframe_schedule(void);

/* reset the scheduler, disabling all tasks */
void mframe_reset(void);

#endif /* _MFRAME_SCHED_H */