Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
54 pj 1
#include <stdint.h>
2
 
3
#ifndef __alpha__
4
 
5
#define v_readb(addr) (*(volatile uint8_t *) (MMIO_POINTER+(addr)))
6
#define v_readw(addr) (*(volatile uint16_t *) (MMIO_POINTER+(addr)))
7
#define v_readl(addr) (*(volatile uint32_t *) (MMIO_POINTER+(addr)))
8
 
9
#define v_writeb(b,addr) (*(volatile uint8_t *) (MMIO_POINTER+(addr)) = (b))
10
#define v_writew(b,addr) (*(volatile uint16_t *) (MMIO_POINTER+(addr)) = (b))
11
#define v_writel(b,addr) (*(volatile uint32_t *) (MMIO_POINTER+(addr)) = (b))
12
 
13
#else
14
 
15
#define vip     volatile int *
16
#define vuip    volatile unsigned int *
17
#define vulp    volatile unsigned long *
18
 
19
#define mb() \
20
__asm__ __volatile__("mb": : :"memory")
21
 
22
#define __kernel_extbl(val, shift)                                      \
23
  ({ unsigned long __kir;                                               \
24
     __asm__("extbl %2,%1,%0" : "=r"(__kir) : "rI"(shift), "r"(val));   \
25
     __kir; })
26
#define __kernel_extwl(val, shift)                                      \
27
  ({ unsigned long __kir;                                               \
28
     __asm__("extwl %2,%1,%0" : "=r"(__kir) : "rI"(shift), "r"(val));   \
29
     __kir; })
30
 
31
static inline uint8_t v_readb(unsigned long addr)
32
{
33
        unsigned long result;
34
 
35
        result = *(vip) ((addr << 5) + SPARSE_MMIO + 0x00);
36
        return __kernel_extbl(result, addr & 3);
37
}
38
 
39
static inline uint16_t v_readw(unsigned long addr)
40
{
41
        unsigned long result;
42
 
43
        result = *(vip) ((addr << 5) + SPARSE_MMIO + 0x08);
44
        return __kernel_extwl(result, addr & 3);
45
}
46
 
47
static inline uint32_t v_readl(unsigned long addr)
48
{
49
        return *(vuip) ((addr << 5) + SPARSE_MMIO + 0x18);
50
}
51
 
52
static inline void v_writeb(uint8_t b, unsigned long addr)
53
{
54
        *(vuip) ((addr << 5) + SPARSE_MMIO + 0x00) = b * 0x01010101;
55
        mb();
56
}
57
 
58
static inline void v_writew(uint16_t b, unsigned long addr)
59
{
60
        *(vuip) ((addr << 5) + SPARSE_MMIO + 0x08) = b * 0x00010001;
61
        mb();
62
}
63
 
64
static inline void v_writel(uint32_t b, unsigned long addr)
65
{
66
        *(vuip) ((addr << 5) + SPARSE_MMIO + 0x18) = b;
67
        mb();
68
}
69
 
70
#endif /* __alpha__ */