Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xfree86 / os-support / bsd / bsd_ev56.c
1
2 #ifdef HAVE_XORG_CONFIG_H
3 #include <xorg-config.h>
4 #endif
5
6 #include <X11/X.h>
7 #include "input.h"
8 #include "scrnintstr.h"
9 #include "compiler.h"
10
11 #include "xf86.h"
12 #include "xf86Priv.h"
13 #include "xf86_OSlib.h"
14 #include "xf86OSpriv.h"
15
16 #include <machine/bwx.h>
17
18 /*
19 * The following functions are used only on EV56 and greater CPUs,
20 * and the assembler requires going to EV56 mode in order to emit
21 * these instructions.
22 */
23 __asm(".arch ev56");
24
25 int readDense8(pointer Base, register unsigned long Offset);
26 int readDense16(pointer Base, register unsigned long Offset);
27 int readDense32(pointer Base, register unsigned long Offset);
28 void
29 writeDenseNB8(int Value, pointer Base, register unsigned long Offset);
30 void
31 writeDenseNB16(int Value, pointer Base, register unsigned long Offset);
32 void
33 writeDenseNB32(int Value, pointer Base, register unsigned long Offset);
34 void
35 writeDense8(int Value, pointer Base, register unsigned long Offset);
36 void
37 writeDense16(int Value, pointer Base, register unsigned long Offset);
38 void
39 writeDense32(int Value, pointer Base, register unsigned long Offset);
40
41 int
42 readDense8(pointer Base, register unsigned long Offset)
43 {
44 mem_barrier();
45 return (alpha_ldbu((pointer) ((unsigned long) Base + (Offset))));
46 }
47
48 int
49 readDense16(pointer Base, register unsigned long Offset)
50 {
51 mem_barrier();
52 return (alpha_ldwu((pointer) ((unsigned long) Base + (Offset))));
53 }
54
55 int
56 readDense32(pointer Base, register unsigned long Offset)
57 {
58 mem_barrier();
59 return *(volatile CARD32 *) ((unsigned long) Base + (Offset));
60 }
61
62 void
63 writeDenseNB8(int Value, pointer Base, register unsigned long Offset)
64 {
65 alpha_stb((pointer) ((unsigned long) Base + (Offset)), Value);
66 }
67
68 void
69 writeDenseNB16(int Value, pointer Base, register unsigned long Offset)
70 {
71 alpha_stw((pointer) ((unsigned long) Base + (Offset)), Value);
72 }
73
74 void
75 writeDenseNB32(int Value, pointer Base, register unsigned long Offset)
76 {
77 *(volatile CARD32 *) ((unsigned long) Base + (Offset)) = Value;
78 }
79
80 void
81 writeDense8(int Value, pointer Base, register unsigned long Offset)
82 {
83 write_mem_barrier();
84 alpha_stb((pointer) ((unsigned long) Base + (Offset)), Value);
85 }
86
87 void
88 writeDense16(int Value, pointer Base, register unsigned long Offset)
89 {
90 write_mem_barrier();
91 alpha_stw((pointer) ((unsigned long) Base + (Offset)), Value);
92 }
93
94 void
95 writeDense32(int Value, pointer Base, register unsigned long Offset)
96 {
97 write_mem_barrier();
98 *(volatile CARD32 *) ((unsigned long) Base + (Offset)) = Value;
99 }