]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/hal/mips/idt79s334a/v2_0/include/platform.inc
Initial revision
[karo-tx-redboot.git] / packages / hal / mips / idt79s334a / v2_0 / include / platform.inc
1 #ifndef CYGONCE_HAL_PLATFORM_INC
2 #define CYGONCE_HAL_PLATFORM_INC
3 ##=============================================================================
4 ##
5 ##      platform.inc
6 ##
7 ##      REFIDT334 board 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):    tmichals
46 ## Contributors: nickg
47 ## Date:         2003-02-13
48 ## Purpose:      IDT32334 board definitions.
49 ## Description:  This file contains various definitions and macros that are
50 ##               useful for writing assembly code for the IDT32334 reference
51 ##               board.
52 ## Usage:
53 ##               #include <cyg/hal/platform.inc>
54 ##               ...
55 ##              
56 ##
57 ######DESCRIPTIONEND####
58 ##
59 ##=============================================================================
60
61 #include <cyg/hal/mips.inc>
62
63 #------------------------------------------------------------------------------
64 # Monitor initialization.
65         
66 #ifndef CYGPKG_HAL_MIPS_MON_DEFINED
67
68 #if     defined(CYG_HAL_STARTUP_ROM) ||                 \
69         (       defined(CYG_HAL_STARTUP_RAM) &&         \
70                 !defined(CYGSEM_HAL_USE_ROM_MONITOR))
71         
72         # If we are starting up from ROM, or we are starting in
73         # RAM and NOT using a ROM monitor, initialize the VSR table.
74
75         .macro  hal_mon_init
76         la      a0,__default_interrupt_vsr
77         la      a1,__default_exception_vsr
78         la      a3,hal_vsr_table
79         sw      a0,0(a3)
80         sw      a1,1*4(a3)
81         sw      a1,2*4(a3)
82         sw      a1,3*4(a3)
83         sw      a1,4*4(a3)
84         sw      a1,5*4(a3)
85         sw      a1,6*4(a3)
86         sw      a1,7*4(a3)
87         sw      a1,8*4(a3)
88         sw      a1,9*4(a3)
89         sw      a1,10*4(a3)
90         sw      a1,11*4(a3)
91         sw      a1,12*4(a3)
92         sw      a1,13*4(a3)
93         sw      a1,14*4(a3)
94         sw      a1,15*4(a3)
95
96         sw      a1,32*4(a3)
97         sw      a1,33*4(a3)
98         .endm
99         
100 #elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR)
101
102         # Initialize the VSR table entries
103         # We only take control of the interrupt vector,
104         # the rest are left to the ROM for now...
105
106         .macro  hal_mon_init
107         la      a0,__default_interrupt_vsr
108         la      a3,hal_vsr_table
109         sw      a0,0(a3)
110         .endm
111
112 #else
113
114         .macro  hal_mon_init
115         .endm
116
117 #endif
118                         
119
120 #define CYGPKG_HAL_MIPS_MON_DEFINED
121
122 #endif  
123
124 #------------------------------------------------------------------------------
125 # Decide whether the VSR table is defined externally, or is to be defined
126 # here.
127
128 #if defined(CYGPKG_HAL_MIPS_SIM) ||        \
129     ( defined(CYGPKG_HAL_MIPS_TX3904) &&   \
130       defined(CYG_HAL_STARTUP_RAM) &&      \
131       !defined(CYGSEM_HAL_USE_ROM_MONITOR) \
132     )
133
134 ## VSR table defined in linker script
135
136 #else
137
138 #define CYG_HAL_MIPS_VSR_TABLE_DEFINED
139
140 #endif
141
142 #if defined(CYG_HAL_STARTUP_ROMRAM) || defined(CYG_HAL_STARTUP_ROM)
143 #ifndef CYGPKG_HAL_MIPS_MEMC_DEFINED
144
145 .macro  hal_memc_init
146         .extern hal_memc_setup
147         lar     t0,hal_memc_setup
148         jalr    t0
149         nop
150 #if defined(CYG_HAL_STARTUP_ROMRAM)
151         
152
153         # Having got the RAM working, we must now relocate the Entire
154         # ROM into it and then continue execution from RAM.
155
156         la      t0,0x80000000           # dest addr
157         la      t1,0xbfc00000           # source addr
158         la      t3,__ram_data_end       # end dest addr
159 1:      
160         lw      v0,0(t1)                # get word
161         addi    t1,t1,4
162         sw      v0,0(t0)                # write word
163         addi    t0,t0,4
164         bne     t0,t3,1b
165         nop
166
167 /* set up and move interrupts */
168
169 /* setup and move the vector table into ram */
170 /* This allows execptions to happen in ROM first
171 ** then when running in RAM, they are switched */
172         mfc0    v0, status
173         nop
174         li      v1, ~0x00400000
175         and   v0, v0,v1
176         mtc0    v0, status
177         nop
178
179
180         la      t0, hal_vsr_table
181         la      t1,__default_interrupt_vsr
182
183         sw      t1, 0(t0)
184
185         la      t1,__default_exception_vsr
186         li      t2, 62
187         li      t3, 0
188         addi    t0,t0,4
189 12:
190         sw      t1,0(t0)
191         addi    t3,t3,1
192         addi    t0,t0,4
193         bne     t3,t2, 12b
194         nop
195
196         la      v0,2f                   # RAM address to go to
197         jr      v0
198         nop
199 2:      
200         # We are now executing out of RAM!
201 #endif
202
203 .endm
204 #define CYGPKG_HAL_MIPS_MEMC_DEFINED
205 #endif
206 #endif
207 #------------------------------------------------------------------------------
208 #endif // ifndef CYGONCE_HAL_PLATFORM_INC
209 # end of platform.inc