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 #ifndef __DC_DMCU_H__
26 #define __DC_DMCU_H__
27
28 #include "dm_services_types.h"
29
30
31
32
33
34
35 enum dmcu_state {
36 DMCU_UNLOADED = 0,
37 DMCU_LOADED_UNINITIALIZED = 1,
38 DMCU_RUNNING = 2,
39 };
40
41 struct dmcu_version {
42 unsigned int interface_version;
43 unsigned int abm_version;
44 unsigned int psr_version;
45 unsigned int build_version;
46 };
47
48 struct dmcu {
49 struct dc_context *ctx;
50 const struct dmcu_funcs *funcs;
51
52 enum dmcu_state dmcu_state;
53 struct dmcu_version dmcu_version;
54 unsigned int cached_wait_loop_number;
55 };
56
57 struct dmcu_funcs {
58 bool (*dmcu_init)(struct dmcu *dmcu);
59 bool (*load_iram)(struct dmcu *dmcu,
60 unsigned int start_offset,
61 const char *src,
62 unsigned int bytes);
63 void (*set_psr_enable)(struct dmcu *dmcu, bool enable, bool wait);
64 bool (*setup_psr)(struct dmcu *dmcu,
65 struct dc_link *link,
66 struct psr_context *psr_context);
67 void (*get_psr_state)(struct dmcu *dmcu, uint32_t *psr_state);
68 void (*set_psr_wait_loop)(struct dmcu *dmcu,
69 unsigned int wait_loop_number);
70 void (*get_psr_wait_loop)(struct dmcu *dmcu,
71 unsigned int *psr_wait_loop_number);
72 bool (*is_dmcu_initialized)(struct dmcu *dmcu);
73 bool (*lock_phy)(struct dmcu *dmcu);
74 bool (*unlock_phy)(struct dmcu *dmcu);
75 };
76
77 #endif