]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/hal/mips/mips64/v2_0/include/variant.inc
Initial revision
[karo-tx-redboot.git] / packages / hal / mips / mips64 / v2_0 / include / variant.inc
1 #ifndef CYGONCE_HAL_VARIANT_INC
2 #define CYGONCE_HAL_VARIANT_INC
3 ##=============================================================================
4 ##
5 ##      variant.inc
6 ##
7 ##      MIPS 32 family assembler header file
8 ##
9 ##=============================================================================
10 #####ECOSGPLCOPYRIGHTBEGIN####
11 ## -------------------------------------------
12 ## This file is part of eCos, the Embedded Configurable Operating System.
13 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
14 ##
15 ## eCos is free software; you can redistribute it and/or modify it under
16 ## the terms of the GNU General Public License as published by the Free
17 ## Software Foundation; either version 2 or (at your option) any later version.
18 ##
19 ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
20 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 ## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
22 ## for more details.
23 ##
24 ## You should have received a copy of the GNU General Public License along
25 ## with eCos; if not, write to the Free Software Foundation, Inc.,
26 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 ##
28 ## As a special exception, if other files instantiate templates or use macros
29 ## or inline functions from this file, or you compile this file and link it
30 ## with other works to produce a work based on this file, this file does not
31 ## by itself cause the resulting work to be covered by the GNU General Public
32 ## License. However the source code for this file must still be made available
33 ## in accordance with section (3) of the GNU General Public License.
34 ##
35 ## This exception does not invalidate any other reasons why a work based on
36 ## this file might be covered by the GNU General Public License.
37 ##
38 ## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
39 ## at http://sources.redhat.com/ecos/ecos-license/
40 ## -------------------------------------------
41 #####ECOSGPLCOPYRIGHTEND####
42 ##=============================================================================
43 #######DESCRIPTIONBEGIN####
44 ##
45 ## Author(s):   dmoseley
46 ## Contributors:        dmoseley
47 ## Date:        2001-01-30
48 ## Purpose:     MIPS64 family definitions.
49 ## Description: This file contains various definitions and macros that are
50 ##              useful for writing assembly code for the MIPS64 CPU family.
51 ## Usage:
52 ##              #include <cyg/hal/variant.inc>
53 ##              ...
54 ##              
55 ##
56 ######DESCRIPTIONEND####
57 ##
58 ##=============================================================================
59
60 #include <pkgconf/hal.h>
61         
62 #include <cyg/hal/mips.inc>
63
64 #include <cyg/hal/platform.inc>
65
66 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
67 #include <cyg/hal/mips-regs.h>
68 #include <cyg/hal/var_arch.h>
69
70 ##-----------------------------------------------------------------------------
71 ## Define CPU variant for architecture HAL.
72                         
73 #define CYG_HAL_MIPS_MIPS64
74
75 # Set the KX bit to use 64 bit addressing in kernel mode.
76
77 #define INITIAL_SR_VAR 0x00000080
78
79 #------------------------------------------------------------------------------
80 # Cache macros.
81         
82 #ifndef CYGPKG_HAL_MIPS_CACHE_DEFINED
83
84         .macro  hal_cache_init
85
86         # Setup a temporary stack pointer for running C code.
87         la      a0,__interrupt_stack
88         move    sp,a0
89         CYGARC_ADDRESS_REG_UNCACHED(sp)
90         
91         # Read the CONFIG1 register into a0
92         mfc0    a0, C0_CONFIG, 1
93         nop
94         nop
95         nop
96
97         # Jump to C-code to initialize caches (uncached)
98         lar     k0, hal_c_cache_init
99         CYGARC_ADDRESS_REG_UNCACHED(k0)
100         jalr    k0
101         nop
102         .endm
103
104 #define CYGPKG_HAL_MIPS_CACHE_DEFINED
105
106 #endif  
107
108 #------------------------------------------------------------------------------
109 # Monitor initialization.
110         
111 #ifndef CYGPKG_HAL_MIPS_MON_DEFINED
112
113 #if     defined(CYG_HAL_STARTUP_ROM) ||                 \
114         (       defined(CYG_HAL_STARTUP_RAM) &&         \
115                 !defined(CYGSEM_HAL_USE_ROM_MONITOR))
116         # If we are starting up from ROM, or we are starting in
117         # RAM and NOT using a ROM monitor, initialize the VSR table.
118
119         .macro  hal_mon_init
120         la      a0,__default_interrupt_vsr
121         la      a1,__default_exception_vsr
122         la      a3,hal_vsr_table
123
124         sw      a0,0(a3)
125         sw      a1,1*4(a3)
126         sw      a1,2*4(a3)
127         sw      a1,3*4(a3)
128         sw      a1,4*4(a3)
129         sw      a1,5*4(a3)
130         sw      a1,6*4(a3)
131         sw      a1,7*4(a3)
132         sw      a1,8*4(a3)
133         sw      a1,9*4(a3)
134         sw      a1,10*4(a3)
135         sw      a1,11*4(a3)
136         sw      a1,12*4(a3)
137         sw      a1,13*4(a3)
138         sw      a1,14*4(a3)
139         sw      a1,15*4(a3)
140
141         sw      a1,32*4(a3)
142         sw      a1,33*4(a3)
143         .endm
144         
145 #elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR)
146
147         # Initialize the VSR table entries
148         # We only take control of the interrupt vector,
149         # the rest are left to the ROM for now...
150
151         .macro  hal_mon_init
152         la      a0,__default_interrupt_vsr
153         la      a3,hal_vsr_table
154         sw      a0,0(a3)
155         .endm
156
157 #else
158
159         .macro  hal_mon_init
160         .endm
161
162 #endif
163                         
164
165 #define CYGPKG_HAL_MIPS_MON_DEFINED
166
167 #endif  
168
169 #------------------------------------------------------------------------------
170 # Decide whether the VSR table is defined externally, or is to be defined
171 # here.
172
173 #if defined(CYGPKG_HAL_MIPS_SIM) ||        \
174     ( defined(CYGPKG_HAL_MIPS_ATLAS) &&    \
175       defined(CYG_HAL_STARTUP_RAM) &&      \
176       !defined(CYGSEM_HAL_USE_ROM_MONITOR) \
177     )
178
179 ## VSR table defined in linker script
180
181 #else
182
183 #define CYG_HAL_MIPS_VSR_TABLE_DEFINED
184
185 #endif
186
187 #------------------------------------------------------------------------------
188 #endif // ifndef CYGONCE_HAL_VARIANT_INC
189 # end of variant.inc