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(void *Base, register unsigned long Offset);
26 int readDense16(void *Base, register unsigned long Offset);
27 int readDense32(void *Base, register unsigned long Offset);
28 void
29 writeDense8(int Value, void *Base, register unsigned long Offset);
30 void
31 writeDense16(int Value, void *Base, register unsigned long Offset);
32 void
33 writeDense32(int Value, void *Base, register unsigned long Offset);
34
35 int
readDense8(void * Base,register unsigned long Offset)36 readDense8(void *Base, register unsigned long Offset)
37 {
38 mem_barrier();
39 return (alpha_ldbu((void *) ((unsigned long) Base + (Offset))));
40 }
41
42 int
readDense16(void * Base,register unsigned long Offset)43 readDense16(void *Base, register unsigned long Offset)
44 {
45 mem_barrier();
46 return (alpha_ldwu((void *) ((unsigned long) Base + (Offset))));
47 }
48
49 int
readDense32(void * Base,register unsigned long Offset)50 readDense32(void *Base, register unsigned long Offset)
51 {
52 mem_barrier();
53 return *(volatile CARD32 *) ((unsigned long) Base + (Offset));
54 }
55
56 void
writeDense8(int Value,void * Base,register unsigned long Offset)57 writeDense8(int Value, void *Base, register unsigned long Offset)
58 {
59 write_mem_barrier();
60 alpha_stb((void *) ((unsigned long) Base + (Offset)), Value);
61 }
62
63 void
writeDense16(int Value,void * Base,register unsigned long Offset)64 writeDense16(int Value, void *Base, register unsigned long Offset)
65 {
66 write_mem_barrier();
67 alpha_stw((void *) ((unsigned long) Base + (Offset)), Value);
68 }
69
70 void
writeDense32(int Value,void * Base,register unsigned long Offset)71 writeDense32(int Value, void *Base, register unsigned long Offset)
72 {
73 write_mem_barrier();
74 *(volatile CARD32 *) ((unsigned long) Base + (Offset)) = Value;
75 }
76