• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/arch/sh/include/asm/
1#ifndef __ASM_SH_HWBLK_H
2#define __ASM_SH_HWBLK_H
3
4#include <asm/clock.h>
5#include <asm/io.h>
6
7#define HWBLK_CNT_USAGE 0
8#define HWBLK_CNT_IDLE 1
9#define HWBLK_CNT_DEVICES 2
10#define HWBLK_CNT_NR 3
11
12#define HWBLK_AREA_FLAG_PARENT (1 << 0) /* valid parent */
13
14#define HWBLK_AREA(_flags, _parent)		\
15{						\
16	.flags = _flags,			\
17	.parent = _parent,			\
18}
19
20struct hwblk_area {
21	int cnt[HWBLK_CNT_NR];
22	unsigned char parent;
23	unsigned char flags;
24};
25
26#define HWBLK(_mstp, _bit, _area)		\
27{						\
28	.mstp = (void __iomem *)_mstp,		\
29	.bit = _bit,				\
30	.area = _area,				\
31}
32
33struct hwblk {
34	void __iomem *mstp;
35	unsigned char bit;
36	unsigned char area;
37	int cnt[HWBLK_CNT_NR];
38};
39
40struct hwblk_info {
41	struct hwblk_area *areas;
42	int nr_areas;
43	struct hwblk *hwblks;
44	int nr_hwblks;
45};
46
47/* Should be defined by processor-specific code */
48int arch_hwblk_init(void);
49int arch_hwblk_sleep_mode(void);
50
51int hwblk_register(struct hwblk_info *info);
52int hwblk_init(void);
53
54void hwblk_enable(struct hwblk_info *info, int hwblk);
55void hwblk_disable(struct hwblk_info *info, int hwblk);
56
57void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int cnt);
58void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int cnt);
59
60/* allow clocks to enable and disable hardware blocks */
61#define SH_HWBLK_CLK(_hwblk, _parent, _flags)	\
62[_hwblk] = {					\
63	.parent		= _parent,		\
64	.arch_flags	= _hwblk,		\
65	.flags		= _flags,		\
66}
67
68int sh_hwblk_clk_register(struct clk *clks, int nr);
69
70#endif /* __ASM_SH_HWBLK_H */
71