Commit | Line | Data |
---|---|---|
a09e091a JB |
1 | /* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. |
2 | * | |
3 | * Permission is hereby granted, free of charge, to any person obtaining a | |
4 | * copy of this software and associated documentation files (the "Software"), | |
5 | * to deal in the Software without restriction, including without limitation | |
6 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
7 | * and/or sell copies of the Software, and to permit persons to whom the | |
8 | * Software is furnished to do so, subject to the following conditions: | |
9 | * | |
10 | * The above copyright notice and this permission notice (including the next | |
11 | * paragraph) shall be included in all copies or substantial portions of the | |
12 | * Software. | |
13 | * | |
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | |
20 | * DEALINGS IN THE SOFTWARE. | |
21 | */ | |
22 | ||
23 | #ifdef INLINE_ASM | |
24 | #define FUNCTION_START(f,n) .inline f,n | |
25 | #define FUNCTION_END(f) .end | |
26 | #else | |
27 | #define _ASM | |
28 | #include <sys/asm_linkage.h> | |
29 | #define FUNCTION_START(f,n) ENTRY(f) | |
30 | #define FUNCTION_END(f) retl; nop; SET_SIZE(f) | |
31 | #endif | |
32 | ||
33 | /* Converted from common/compiler.h gcc inline format to Sun cc inline | |
34 | * format by Kenjiro Tsuji | |
35 | * | |
36 | * The value 0x88 means ASI_PRIMARY_LITTLE. | |
37 | * The store or load to/from the address space will be done | |
38 | * as little-endian. In the original xrog code, the value | |
39 | * is defined as the macro ASI_PL. | |
40 | * | |
41 | * In the original xorg code, "membar #StoreStore|#StoreLoad" | |
42 | * is directly implemented as an instruction "0x8143e00a". | |
43 | * | |
44 | */ | |
45 | ||
46 | FUNCTION_START(outb, 0) | |
47 | stba %o1, [%o0] 0x88 | |
48 | membar #StoreStore|#StoreLoad | |
49 | FUNCTION_END(outb) | |
50 | ||
51 | FUNCTION_START(outw, 0) | |
52 | stha %o1, [%o0] 0x88 | |
53 | membar #StoreStore|#StoreLoad | |
54 | FUNCTION_END(outw) | |
55 | ||
56 | FUNCTION_START(outl, 0) | |
57 | sta %o1, [%o0] 0x88 | |
58 | membar #StoreStore|#StoreLoad | |
59 | FUNCTION_END(outl) | |
60 | ||
61 | FUNCTION_START(inb, 0) | |
62 | lduba [%o0] 0x88, %o0 | |
63 | FUNCTION_END(inb) | |
64 | ||
65 | FUNCTION_START(inw, 0) | |
66 | lduha [%o0] 0x88, %o0 | |
67 | FUNCTION_END(inw) | |
68 | ||
69 | FUNCTION_START(inl, 0) | |
70 | lda [%o0] 0x88, %o0 | |
71 | FUNCTION_END(inl) | |
72 | ||
73 | FUNCTION_START(xf86ReadMmio8, 0) | |
74 | lduba [%o0 + %o1] 0x88, %o0 | |
75 | FUNCTION_END(xf86ReadMmio8) | |
76 | ||
77 | FUNCTION_START(xf86ReadMmio16Be, 0) | |
78 | lduh [%o0 + %o1], %o0 | |
79 | FUNCTION_END(xf86ReadMmio16Be) | |
80 | ||
81 | FUNCTION_START(xf86ReadMmio16Le, 0) | |
82 | lduha [%o0 + %o1] 0x88, %o0 | |
83 | FUNCTION_END(xf86ReadMmio16Le) | |
84 | ||
85 | FUNCTION_START(xf86ReadMmio32Be, 0) | |
86 | ld [%o0 + %o1], %o0 | |
87 | FUNCTION_END(xf86ReadMmio32Be) | |
88 | ||
89 | FUNCTION_START(xf86ReadMmio32Le, 0) | |
90 | lda [%o0 + %o1] 0x88, %o0 | |
91 | FUNCTION_END(xf86ReadMmio32Le) | |
92 | ||
93 | FUNCTION_START(xf86WriteMmio8, 0) | |
94 | stba %o2, [%o0 + %o1] 0x88 | |
95 | membar #StoreStore|#StoreLoad | |
96 | FUNCTION_END(xf86WriteMmio8) | |
97 | ||
98 | FUNCTION_START(xf86WriteMmio16Be, 0) | |
99 | sth %o2, [%o0 + %o1] | |
100 | membar #StoreStore|#StoreLoad | |
101 | FUNCTION_END(xf86WriteMmio16Be) | |
102 | ||
103 | FUNCTION_START(xf86WriteMmio16Le, 0) | |
104 | stha %o2, [%o0 + %o1] 0x88 | |
105 | membar #StoreStore|#StoreLoad | |
106 | FUNCTION_END(xf86WriteMmio16Le) | |
107 | ||
108 | FUNCTION_START(xf86WriteMmio32Be, 0) | |
109 | st %o2, [%o0 + %o1] | |
110 | membar #StoreStore|#StoreLoad | |
111 | FUNCTION_END(xf86WriteMmio32Be) | |
112 | ||
113 | FUNCTION_START(xf86WriteMmio32Le, 0) | |
114 | sta %o2, [%o0 + %o1] 0x88 | |
115 | membar #StoreStore|#StoreLoad | |
116 | FUNCTION_END(xf86WriteMmio32Le) | |
117 | ||
118 | FUNCTION_START(xf86WriteMmio8NB, 0) | |
119 | add %o0, %o1, %o0 | |
120 | stba %o2, [%o0] 0x88 | |
121 | FUNCTION_END(xf86WriteMmio8NB) | |
122 | ||
123 | FUNCTION_START(xf86WriteMmio16BeNB, 0) | |
124 | sth %o2, [%o0 + %o1] | |
125 | FUNCTION_END(xf86WriteMmio16BeNB) | |
126 | ||
127 | FUNCTION_START(xf86WriteMmio16LeNB, 0) | |
128 | stha %o2, [%o0 + %o1] 0x88 | |
129 | FUNCTION_END(xf86WriteMmio16LeNB) | |
130 | ||
131 | FUNCTION_START(xf86WriteMmio32BeNB, 0) | |
132 | st %o2, [%o0 + %o1] | |
133 | FUNCTION_END(xf86WriteMmio32BeNB) | |
134 | ||
135 | FUNCTION_START(xf86WriteMmio32LeNB, 0) | |
136 | sta %o2, [%o0 + %o1] 0x88 | |
137 | FUNCTION_END(xf86WriteMmio32LeNB) | |
138 |