Full support for Ginger Console
[linux-ginger.git] / arch / sh / include / asm / hwblk.h
blob5d3ccae4202b64186f24e33d8b2441389fb7bddf
1 #ifndef __ASM_SH_HWBLK_H
2 #define __ASM_SH_HWBLK_H
4 #include <asm/clock.h>
5 #include <asm/io.h>
7 #define HWBLK_CNT_USAGE 0
8 #define HWBLK_CNT_IDLE 1
9 #define HWBLK_CNT_DEVICES 2
10 #define HWBLK_CNT_NR 3
12 #define HWBLK_AREA_FLAG_PARENT (1 << 0) /* valid parent */
14 #define HWBLK_AREA(_flags, _parent) \
15 { \
16 .flags = _flags, \
17 .parent = _parent, \
20 struct hwblk_area {
21 int cnt[HWBLK_CNT_NR];
22 unsigned char parent;
23 unsigned char flags;
26 #define HWBLK(_mstp, _bit, _area) \
27 { \
28 .mstp = (void __iomem *)_mstp, \
29 .bit = _bit, \
30 .area = _area, \
33 struct hwblk {
34 void __iomem *mstp;
35 unsigned char bit;
36 unsigned char area;
37 int cnt[HWBLK_CNT_NR];
40 struct hwblk_info {
41 struct hwblk_area *areas;
42 int nr_areas;
43 struct hwblk *hwblks;
44 int nr_hwblks;
47 /* Should be defined by processor-specific code */
48 int arch_hwblk_init(void);
49 int arch_hwblk_sleep_mode(void);
51 int hwblk_register(struct hwblk_info *info);
52 int hwblk_init(void);
54 void hwblk_enable(struct hwblk_info *info, int hwblk);
55 void hwblk_disable(struct hwblk_info *info, int hwblk);
57 void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int cnt);
58 void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int cnt);
60 /* allow clocks to enable and disable hardware blocks */
61 #define SH_HWBLK_CLK(_name, _id, _parent, _hwblk, _flags) \
62 { \
63 .name = _name, \
64 .id = _id, \
65 .parent = _parent, \
66 .arch_flags = _hwblk, \
67 .flags = _flags, \
70 int sh_hwblk_clk_register(struct clk *clks, int nr);
72 #endif /* __ASM_SH_HWBLK_H */