xref: /OK3568_Linux_fs/external/xserver/hw/xfree86/os-support/bsd/bsd_ev56.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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