special usb hub handling, IDE disks, and retries all over the place
[linux-2.4.git] / include / asm-sh64 / registers.h
1 #ifndef __ASM_SH64_REGISTERS_H
2 #define __ASM_SH64_REGISTERS_H
3
4 /*
5  * This file is subject to the terms and conditions of the GNU General Public
6  * License.  See the file "COPYING" in the main directory of this archive
7  * for more details.
8  *
9  * include/asm-sh64/registers.h
10  *
11  * Copyright (C) 2000, 2001  Paolo Alberelli
12  *
13  */
14
15 #ifdef __ASSEMBLY__
16 /* =====================================================================
17 ** 
18 ** Section 1: acts on assembly sources pre-processed by GPP ( <source.S>).
19 **            Assigns symbolic names to control & target registers.
20 */
21
22 /*
23  * Concerning registers name, the assembly sources follows the
24  * CDC naming convention.
25  * This section converts CDC registers names into RedHat style.
26  */
27
28 /*
29  * Control Registers.
30  */
31 #define SR      cr0
32 #define SSR     cr1
33 #define PSSR    cr2
34                         /* cr3 UNDEFINED */
35 #define INTEVT  cr4
36 #define EXPEVT  cr5
37 #define PEXPEVT cr6
38 #define TRA     cr7
39 #define SPC     cr8
40 #define PSPC    cr9
41 #define RESVEC  cr10
42 #define VBR     cr11
43                         /* cr12 UNDEFINED */
44 #define TEA     cr13
45                         /* cr14-cr15 UNDEFINED */
46 #define DCR     cr16
47 #define KCR0    cr17
48 #define KCR1    cr18
49                         /* cr19-cr31 UNDEFINED */
50                         /* cr32-cr61 RESERVED */
51 #define CTC     cr62
52 #define USR     cr63
53
54 /*
55  * ABI dependent registers (general purpose set)
56  * Note: this set of registers name could be shared by the
57  *       CDC and RedHat toolchain
58  */
59 #define RET     r2
60 #define ARG1    r2
61 #define ARG2    r3
62 #define ARG3    r4
63 #define ARG4    r5
64 #define ARG5    r6
65 #define ARG6    r7
66 #define FBP     r14
67 #define SP      r15
68 #define GVDT    r26
69 #define GCDT    r27
70 #define LINK    r18
71 #define OS      r40
72 #define ZERO    r63
73
74 /*
75  * Target registers need name convertion...
76  * (defines only those used by assembly code)
77  */
78 #define t0      tr0
79 #define t1      tr1
80 #define t2      tr2
81 #define t3      tr3
82 #define t4      tr4
83 #define t5      tr5
84 #define t6      tr6
85 #define t7      tr7
86
87 /*
88 ** RedHat style compatibility macros:
89 **
90 **   _loada: loads the address the address  of the symbol (first
91 **           argument) into the general purpose register (second
92 **           argument)
93 */
94         .macro  _loada   symbol, gp_reg
95          movi   \symbol, \gp_reg
96         .endm
97
98         .macro  _ptar    symbol, tr_reg
99          pt     \symbol, \tr_reg
100         .endm
101
102         .macro  _ptaru   symbol, tr_reg
103          pt/u   \symbol, \tr_reg
104         .endm
105
106         .macro  _pta    disp_b,  tr_reg
107          pta    $+\disp_b, \tr_reg
108         .endm
109
110 /*
111  * Status register defines: used only by assembly sources (and
112  *                          syntax independednt)
113  */
114 #define SR_RESET_VAL    0x0000000050008000
115 #define SR_HARMLESS     0x00000000500080f0      /* Write ignores for most */
116 #define SR_ENABLE_FPU   0xffffffffffff7fff      /* AND with this */
117
118 #if defined (CONFIG_SH64_SR_WATCH)
119 #define SR_ENABLE_MMU   0x0000000084000000      /* OR with this */
120 #else
121 #define SR_ENABLE_MMU   0x0000000080000000      /* OR with this */
122 #endif
123
124 #define SR_UNBLOCK_EXC  0xffffffffefffffff      /* AND with this */
125 #define SR_BLOCK_EXC    0x0000000010000000      /* OR with this */
126
127 #else   /* Not __ASSEMBLY__ syntax */
128
129 /* =====================================================================
130 ** 
131 ** Section 2: this is required to manage __asm__ statement expanded
132 **            by "C" compiler
133 */
134         /*
135         ** RedHat style symbolic address resolution inside "asm" blocks
136         */
137         asm ("\t.macro  _loada   symbol, gp_reg\n"
138              "\tmovi    \\symbol, \\gp_reg\n"
139              "\t.endm\n"
140              "\n"
141              "\t.macro  _ptar    symbol, tr_reg\n"
142              "\tpt      \\symbol, \\tr_reg\n"
143              "\t.endm\n"
144              "\n"
145              "\t.macro  _pta    disp_b, tr_reg\n"
146              "\tpta     $+\\disp_b, \\tr_reg\n"
147              "\t.endm\n"
148              "\n"
149              "\t.macro  _fgetscr  f_reg63\n"
150              "\tfgetscr \\f_reg63\n"
151              "\t.endm\n"
152              "\n"
153              "\t.macro  _fputscr  f_reg63\n"
154              "\tfputscr \\f_reg63\n"
155              "\t.endm\n"
156              "\n"
157             );
158
159         /*
160         ** RedHat style target register name inside "asm" blocks
161         */
162 #       define __t0     __str(tr0)
163 #       define __t1     __str(tr1)
164 #       define __t2     __str(tr2)
165 #       define __t3     __str(tr3)
166 #       define __t4     __str(tr4)
167 #       define __t5     __str(tr5)
168 #       define __t6     __str(tr6)
169 #       define __t7     __str(tr7)
170
171         /*
172         ** RedHat style control register name inside "asm" blocks
173         */
174 #       define __c0     __str(cr0)              /* SR       */
175 #       define __c1     __str(cr1)              /* SSR      */
176 #       define __c2     __str(cr2)              /* PSSR     */
177 #       define __c4     __str(cr4)              /* INTEVT   */
178 #       define __c5     __str(cr5)              /* EXPEVT   */
179 #       define __c6     __str(cr6)              /* PEXPEVT  */
180 #       define __c8     __str(cr8)              /* SPC      */
181 #       define __c9     __str(cr9)              /* PSPC     */
182 #       define __c13    __str(cr13)             /* TEA      */
183 #       define __c17    __str(cr17)             /* KCR0     */
184 #       define __c18    __str(cr18)             /* KCR1     */
185
186         /*
187         ** RedHat style float and double register name inside "asm" blocks
188         ** defines below are used only in .../arch/sh5/kernel/fpu.c
189         */
190 #       define __f(x)   __str(fr##x)
191 #       define __p(x)   __str(fp##x)
192 #       define __d(x)   __str(dr##x)
193
194         /*
195         ** Stringify reg. name (common for CDC & RedHat)
196         */
197 #       define __str(x)  #x
198
199 #endif /* __ASSEMBLY__ */
200 #endif /* __ASM_SH64_REGISTERS_H */