-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathio.h
executable file
·60 lines (53 loc) · 2.63 KB
/
io.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
/**
* io.h - definition for registers of ccmu controller
* date: 2012-2-13 8:42:56
* author: Aaron<[email protected]>
* history: V0.1
*/
#ifndef __IO_H
#define __IO_H
#include "type.h"
#define get_bvalue(addr) (*((volatile unsigned char *)(addr)))
#define put_bvalue(addr, v) (*((volatile unsigned char *)(addr)) = (unsigned char)(v))
#define get_hvalue(addr) (*((volatile unsigned short *)(addr)))
#define put_hvalue(addr, v) (*((volatile unsigned short *)(addr)) = (unsigned short)(v))
#define get_wvalue(addr) (*((volatile unsigned long *)(addr)))
#define put_wvalue(addr, v) (*((volatile unsigned long *)(addr)) = (unsigned long)(v))
#define set_bit(addr, v) (*((volatile unsigned char *)(addr)) |= (unsigned char)(v))
#define clr_bit(addr, v) (*((volatile unsigned char *)(addr)) &= ~(unsigned char)(v))
#define set_bbit(addr, v) (*((volatile unsigned char *)(addr)) |= (unsigned char)(v))
#define clr_bbit(addr, v) (*((volatile unsigned char *)(addr)) &= ~(unsigned char)(v))
#define set_hbit(addr, v) (*((volatile unsigned short *)(addr)) |= (unsigned short)(v))
#define clr_hbit(addr, v) (*((volatile unsigned short *)(addr)) &= ~(unsigned short)(v))
#define set_wbit(addr, v) (*((volatile unsigned long *)(addr)) |= (unsigned long)(v))
#define clr_wbit(addr, v) (*((volatile unsigned long *)(addr)) &= ~(unsigned long)(v))
#define cmp_wvalue(addr, v) (v == (*((volatile unsigned long *) (addr))))
#define readb(addr) (*((volatile unsigned char *)(addr)))
#define readw(addr) (*((volatile unsigned short *)(addr)))
#define readl(addr) (*((volatile unsigned long *)(addr)))
#define writeb(v, addr) (*((volatile unsigned char *)(addr)) = (unsigned char)(v))
#define writew(v, addr) (*((volatile unsigned short *)(addr)) = (unsigned short)(v))
#define writel(v, addr) (*((volatile unsigned long *)(addr)) = (unsigned long)(v))
/**
* sr32 - clear & set a value in a bit range for a 32 bit address
*/
static __inline void sr32_aw(u32 addr, u32 start_bit, u32 num_bits, u32 value)
{
uint32_t tmp, msk = (1 << num_bits) - 1;
tmp = readl(addr) & ~(msk << start_bit);
tmp |= value << start_bit;
writel(tmp, addr);
}
/*****************************************************************
* sr32 - clear & set a value in a bit range for a 32 bit address
*****************************************************************/
static __inline void sr32(void *addr, u32 start_bit, u32 num_bits, u32 value)
{
u32 tmp, msk = 0;
msk = 1 << num_bits;
--msk;
tmp = readl((u32)addr) & ~(msk << start_bit);
tmp |= value << start_bit;
writel(tmp, (u32)addr);
}
#endif