annotate packages/hal/mips/arch/current/src/vectors.S @ 154:e2d866e32dac

Merge from eCos master repository on 2001-02-26-23:18:05-GMT
author jlarmour
date Tue, 27 Feb 2001 01:21:45 +0000
parents 25e238959bae
children 70a4cc6d69d2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 ## vectors.S
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 ## MIPS exception vectors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 #####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
9 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
10 # -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
11 # The contents of this file are subject to the Red Hat eCos Public License
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
12 # Version 1.1 (the "License"); you may not use this file except in
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
13 # compliance with the License. You may obtain a copy of the License at
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
14 # http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
15 #
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
16 # Software distributed under the License is distributed on an "AS IS"
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
17 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
18 # License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
19 # the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
20 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
21 # The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
22 # released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
23 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
24 # The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
25 # Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
26 # Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
27 # All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
28 # -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 62
diff changeset
29 #
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 #####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 #######DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 ## Author(s): nickg
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
35 ## Contributors: nickg, dmoseley
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 ## Date: 1998-02-04
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 ## Purpose: MIPS exception vectors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 ## Description: This file defines the code placed into the exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 ## vectors. It also contains the first level default VSRs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 ## that save and restore state for both exceptions and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 ## interrupts.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 ######DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 #include <pkgconf/system.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #ifdef CYGPKG_KERNEL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 # include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
54 #include <cyg/hal/arch.inc>
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
55 #include <cyg/hal/hal_arch.h>
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
56
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
57 #ifdef at
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
58 #undef at
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
59 #endif
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
60 .extern cyg_instrument
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
61
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 ## Hardware supplied vectors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 .set noreorder
92
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
66
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 .section ".reset_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 # Reset vector at 0xBFC00000
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
70
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
71 FUNC_START(reset_vector)
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
72
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
73 #ifndef CYG_HAL_STARTUP_RAM
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
74 # if defined(CYGPKG_HAL_RESET_VECTOR_FIRST_CODE)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
75 hal_reset_vector_first_code
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
76 # endif
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
77 # if defined(CYGPKG_HAL_EARLY_INIT)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
78 hal_early_init
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
79 # endif
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
80 # Decide whether this is an NMI, cold or warm boot.
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
81
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
82 mfc0 k0,status # get status reg
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
83 lui k1,0x0008 # isolate NMI bit
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
84 and k1,k1,k0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
85 beqz k1,1f # skip if zero
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
86 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
87
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
88 lar k1,__nmi_entry # jump to ROM nmi code
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
89 jalr k1
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
90 nop
52
7b011d1ab50f Merge from eCos master repository on 1999-11-05-17:34:28-GMT
jlarmour
parents: 50
diff changeset
91 1:
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
92 lui k1,0x0010 # isolate soft reset bit
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
93 and k1,k1,k0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
94 beqz k1,2f # skip if zero
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
95 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
96
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
97 lar k1,__warm_start # jump to ROM warm_start code
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
98 jr k1
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
99 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
100 2:
52
7b011d1ab50f Merge from eCos master repository on 1999-11-05-17:34:28-GMT
jlarmour
parents: 50
diff changeset
101 la k0,INITIAL_CONFIG0 # Set up config0 register
7b011d1ab50f Merge from eCos master repository on 1999-11-05-17:34:28-GMT
jlarmour
parents: 50
diff changeset
102 mtc0 k0,config0 # to disable cache
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
103 #endif
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
104 lar v0,_start # jump to start
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
105 #ifdef CYGARC_START_FUNC_UNCACHED
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 92
diff changeset
106 CYGARC_ADDRESS_REG_UNCACHED(v0)
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
107 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
108
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 jr v0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 nop # (delay slot)
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
111
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
112 FUNC_END(reset_vector)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
113
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 .section ".debug_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 # Debug vector at 0xBFC00200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
118 FUNC_START(debug_vector)
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
119 la k0,32*4
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 la k1,hal_vsr_table # Get VSR table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 lw k1,32*4(k1) # load debug vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 jr k1 # go there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 nop # (delay slot)
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
124 FUNC_END(debug_vector)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 .section ".other_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 # Common vector at 0x80000080 or 0xBFC00180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
130 FUNC_START(other_vector)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 mfc0 k0,cause # K0 = exception cause
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 andi k0,k0,0x7F # isolate exception code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 la k1,hal_vsr_table # address of VSR table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 add k1,k1,k0 # offset of VSR entry
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 lw k1,0(k1) # k1 = pointer to VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 jr k1 # go there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 nop # (delay slot)
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
139 FUNC_END(other_vector)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
140
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 .section ".utlb_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
143 FUNC_START(utlb_vector)
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
144 mfc0 k0,cause # K0 = exception cause
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
145 nop
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
146 andi k0,k0,0x7F # isolate exception code
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
147 la k1,hal_vsr_table # address of VSR table
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
148 add k1,k1,k0 # offset of VSR entry
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 115
diff changeset
149 lw k1,0(k1) # k1 = pointer to VSR
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 jr k1 # go there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 nop # (delay slot)
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
152 FUNC_END(utlb_vector)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 ## Startup code
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
156
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 .text
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
159 FUNC_START(_start)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 # Initialize hardware
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
162 hal_cpu_init
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
163 hal_diag_init
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
164 hal_mmu_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
165 hal_fpu_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
166 hal_memc_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
167 hal_intc_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
168 hal_cache_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
169 hal_timer_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
170
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 # Load Global Pointer register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 la gp,_gp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 # load initial stack pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 la a0,__interrupt_stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 move sp,a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
178 hal_mon_init
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 #ifdef CYG_HAL_STARTUP_ROM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 # Copy data from ROM to RAM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 .extern hal_copy_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 jal hal_copy_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 nop
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
186
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 #endif
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
188
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 # Zero BSS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 .extern hal_zero_bss
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 jal hal_zero_bss
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
195 # Call variant and platform HAL
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
196 # initialization routines.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
198 .extern hal_variant_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
199 jal hal_variant_init
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
200 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
201
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
202 .extern hal_platform_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
203 jal hal_platform_init
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
204 nop
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
205
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
206 # Call constructors
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
207 .extern cyg_hal_invoke_constructors
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
208 jal cyg_hal_invoke_constructors
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
209 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
210
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
211 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
212 .extern initialize_stub
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
213 jal initialize_stub
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 nop
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
215 #endif
92
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
216 #if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT)
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
217 .extern hal_ctrlc_isr_init
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
218 jal hal_ctrlc_isr_init
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
219 nop
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
220 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 # Call cyg_start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 .extern cyg_start
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
225 j cyg_start
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
226 lui ra,0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
228 FUNC_END(_start )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
230
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
231 ##-----------------------------------------------------------------------------
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
232
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
233 FUNC_START(__warm_start)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
234
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
235 ## The following is debug code left in here for now in case it
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
236 ## proves useful in the near future.
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
237 #if 0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
238 move s0,t0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
239 move s1,a1
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
240
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
241 # hal_diag_init
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
242
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
243 hal_diag_writec '$'
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
244 mvafc0 a0,$30 # get ErrorEPC
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
245 lar k0,hal_diag_ai_write_hex8
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
246 jalr k0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
247 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
248 hal_diag_writec '-'
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
249 move a0,s0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
250 jalr k0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
251 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
252 hal_diag_writec '-'
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
253 move a0,s1
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
254 jalr k0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
255 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
256 1:
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
257 b 1b
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
258 nop
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
259 #endif
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
260
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
261 # Treat a warm-start either as a cold-start or an NMI
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
262 #if defined(CYGHWR_HAL_MIPS_WARMSTART_COLDSTART)
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
263 lar v0,_start # jump to start
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
264 jr v0
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
265 nop # (delay slot)
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
266 #else
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
267 # Defaults to NMI
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
268 b __nmi_entry
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
269 nop
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
270 #endif
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
271
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
272 FUNC_END(__warm_start)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
273
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
274 ##-----------------------------------------------------------------------------
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
275
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
276 FUNC_START(__nmi_entry)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
277
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
278 # Clear exception state
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
279 hal_cpu_except_enable
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
280
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
281 # Move the ErrorEPC register to the EPC register so that the
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
282 # default exception handler saves the right PC value.
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
283 mvafc0 k0,$30
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
284 nop; nop; nop;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
285 mvatc0 k0,epc
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
286 nop; nop; nop;
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
287
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
288 #if (INITIAL_SR & 0x00400000) == 0
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
289 # Taking this exception will have set the BEV bit to 1.
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
290 # If we normally run with it zero, we must clear it here.
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
291 mfc0 k0,status
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
292 la k1,0xFFBFFFFF
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
293 and k0,k0,k1
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
294 mtc0 k0,status
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
295 #endif
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
296
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
297 la k0,34*4
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
298 la k1,hal_vsr_table # Get VSR table
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
299 lw k1,34*4(k1) # load NMI vector
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
300 jr k1 # go there
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
301 nop # (delay slot)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
302
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
303 FUNC_END(__nmi_entry)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
304
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 ## Default exception VSR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 ## Saves machine state and calls external handling code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
309 FUNC_START(__default_exception_vsr)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 # We enter here with all of the CPU state still
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 # in its registers except:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 # K0 = vector index
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 # K1 = address of this function
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
316 move k1,sp # K1 = original SP
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
317
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
318 #ifdef CYGSEM_HAL_ROM_MONITOR
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 # Switch to interrupt stack to handle exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 la sp,__interrupt_stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 #endif
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
322
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 addi sp,sp,-mips_exception_decrement
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 # space for registers + safety margin
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 sw k0,mipsreg_vector(sp) # store vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
328 # store GPRs
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 .set noat
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
330 sgpr 0,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
331 sgpr 1,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
332 sgpr 2,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
333 sgpr 3,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
334 sgpr 4,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
335 sgpr 5,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
336 sgpr 6,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
337 sgpr 7,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
338 sgpr 8,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
339 sgpr 9,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
340 sgpr 10,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
341 sgpr 11,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
342 sgpr 12,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
343 sgpr 13,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
344 sgpr 14,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
345 sgpr 15,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
346 sgpr 16,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
347 sgpr 17,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
348 sgpr 18,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
349 sgpr 19,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
350 sgpr 20,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
351 sgpr 21,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
352 sgpr 22,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
353 sgpr 23,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
354 sgpr 24,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
355 sgpr 25,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
356 # sgpr 26,sp # == K0
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
357 # sgpr 27,sp # == K1
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
358 sgpr 28,sp # == GP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
359 # sgpr 29,sp # == SP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
360 sgpr 30,sp # == FP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
361 sgpr 31,sp # == RA
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
362 .set at
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
363
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 mfhi a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 mflo a1
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
366 shi a0,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
367 slo a1,sp
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369 # K1 contains original SP
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
370 ssp k1,sp # store in reg dump
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372 # save remaining machine state registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 mfc0 t0,cause
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
374 mfc0 t1,status
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 16
diff changeset
375 mfc0 t2,cachectrl
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
376 mvafc0 t3,badvr
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377 mfc0 t4,config
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 mfc0 t5,prid
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
379 mvafc0 t6,epc
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 sw t0,mipsreg_cause(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 sw t1,mipsreg_sr(sp)
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 16
diff changeset
383 sw t2,mipsreg_cachectrl(sp)
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
384 sva t3,mipsreg_badvr(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 sw t4,mipsreg_config(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 sw t5,mipsreg_prid(sp)
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
387 sva t6,mipsreg_pc(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
389 hal_fpu_save sp
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 # The machine state is now all saved on the stack.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
393 hal_diag_excpt_start
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
394
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 # Load Global Pointer register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 la gp,_gp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 move s0,sp # save pointer to saved state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 addi sp,sp,-mips_stack_frame_size # make a null frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 # Need to set up back pointers etc. ???
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 la ra,restore_state # load return address
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
405
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
406 hal_cpu_except_enable # reenable exceptions
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
407
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
408 .extern cyg_hal_exception_handler
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
409 j cyg_hal_exception_handler # call C code
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 move a0,s0 # arg0 = register dump (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 # When the exception handler returns, it will
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 # go back to restore_state, below.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
415 FUNC_END(__default_exception_vsr)
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 14
diff changeset
416
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 ##------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 ## Default interrupt VSR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 ## Saves machine state and calls appropriate ISR. When done, calls
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 ## interrupt_end() to finish up and possibly reschedule.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
422 FUNC_START(__default_interrupt_vsr)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 # We enter here with all of the CPU state still
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 # in its registers except:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 # K0 = vector index
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 # K1 = address of this function
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
430 move k1,sp # K1 = original SP
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
431
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 addi sp,sp,-mips_exception_decrement
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 # space for registers + safety margin
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 sw k0,mipsreg_vector(sp) # store vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 # store GPRs
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
438 .set noat
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
439 sgpr 0,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
440 sgpr 1,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
441 sgpr 2,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
442 sgpr 3,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
443 sgpr 4,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
444 sgpr 5,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
445 sgpr 6,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
446 sgpr 7,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
447 sgpr 8,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
448 sgpr 9,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
449 sgpr 10,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
450 sgpr 11,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
451 sgpr 12,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
452 sgpr 13,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
453 sgpr 14,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
454 sgpr 15,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
455 sgpr 16,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
456 sgpr 17,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
457 sgpr 18,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
458 sgpr 19,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
459 sgpr 20,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
460 sgpr 21,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
461 sgpr 22,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
462 sgpr 23,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
463 sgpr 24,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
464 sgpr 25,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
465 # sgpr 26,sp # == K0
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
466 # sgpr 27,sp # == K1
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
467 sgpr 28,sp # == GP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
468 # sgpr 29,sp # == SP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
469 sgpr 30,sp # == FP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
470 sgpr 31,sp # == RA
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
471 .set at
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
472
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
473 mfhi a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 mflo a1
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
475 shi a0,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
476 slo a1,sp
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
478 # K1 contains original SP
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
479 ssp k1,sp # store in reg dump
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
480
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
481 mfc0 t1,status
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 16
diff changeset
482 mfc0 t2,cachectrl
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
483 mvafc0 t3,epc
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485 sw t1,mipsreg_sr(sp)
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 16
diff changeset
486 sw t2,mipsreg_cachectrl(sp)
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
487 sva t3,mipsreg_pc(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
489 hal_fpu_save sp
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
490
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 # The machine state is now all saved on the stack.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 # Load Global Pointer register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 la gp,_gp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
497 .extern cyg_scheduler_sched_lock
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
498 la v0,cyg_scheduler_sched_lock
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 lw a0,0(v0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 addi a0,a0,1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501 sw a0,0(v0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504 move s0,sp # save pointer to saved state
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
505
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 la a0,__interrupt_stack # a0 = stack top
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509 la a1,__interrupt_stack_base # a1 = stack base
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510 sub a3,sp,a1 # a3 = sp - base
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
511 bltz a3,1f # not on istack if < 0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 nop # delay slot
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
513 sub t0,a0,sp # t0 = top - sp
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
514 bgtz t0,8f # already on istack if > 0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 nop # delay slot
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
516 1:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
517 move sp,a0 # switch to istack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 8:
50
a0774359f013 Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents: 48
diff changeset
519 addi sp,sp,-8 # space for old SP
a0774359f013 Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents: 48
diff changeset
520 # (8 to keep dword alignment!)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 sw s0,0(sp) # save old SP on stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
524
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525 subu sp,sp,mips_stack_frame_size # make a null frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
527 # Need to set up back pointers etc. ???
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
528
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529 # Decode external interrupt via interrupt controller
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
531 hal_intc_decode s2
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
532
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
533 # Here, s2 contains the number of the interrupt being serviced,
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
534 # we need to derive from that the vector number to call in the ISR
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
535 # table.
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
536
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
537 hal_intc_translate s2,s1
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
538
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539 # Here s1 is the number of the vector to be called and s2 is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 # the number of the interrupt being serviced.
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
541
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
542 hal_diag_intr_start
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
543
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
546 # Call cyg_instrument to record that this interrupt is being raised.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 li a0,0x0301 # a0 = type = INTR,RAISE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549 move a1,s1 # a1 = vector number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 jal cyg_instrument # call instrument function
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 38
diff changeset
551 move a2,s2 # a2 = interrupt number
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553
50
a0774359f013 Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents: 48
diff changeset
554 #if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT)
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
555 # If we are supporting Ctrl-C interrupts from GDB, we must squirrel
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
556 # away a pointer to the save interrupt state here so that we can
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
557 # plant a breakpoint at some later time.
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
558
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
559 .extern hal_saved_interrupt_state
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
560 la v0,hal_saved_interrupt_state
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
561 sw s0,0(v0)
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
562
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
563 #endif
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
564
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 sll s1,s1,2 # s1 = byte offset of vector
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
566
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
567 hal_cpu_except_enable # reenable exceptions
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
568
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569 la t2,hal_interrupt_handlers # handler table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 add t2,t2,s1 # address of ISR ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 lw t2,0(t2) # ISR pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 la a1,hal_interrupt_data # data table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 add a1,a1,s1 # address of data ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 lw a1,0(a1) # Data pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577 move a0,s2 # pass interrupt number
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
578
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 jalr t2 # call ISR via t2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
580 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
581
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 # If we are returning from the last nested interrupt, move back
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 # to the thread stack. interrupt_end() must be called on the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 # thread stack since it potentially causes a context switch.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
587 # Since we have arranged for the top of stack location to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
588 # contain the sp we need to go back to here, just pop it off
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
589 # and put it in SP.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
590
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
591
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
592 lw sp,mips_stack_frame_size(sp) # sp = *sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593 subu sp,sp,mips_stack_frame_size # make a null frame
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
594 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
595
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
596 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
597
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
598 # We only need to call _interrupt_end() when there is a kernel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
599 # present to do any tidying up.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 # On return v0 bit 1 will indicate whether a DSR is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602 # to be posted. Pass this together with a pointer to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 # the interrupt object we have just used to the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604 # interrupt tidy up routine.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606 # Note that s0, s1 and s2 are defined to be preserved across
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607 # calls by the calling convention, so they still contain
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 # the register dump, the vector offset and the interrupt number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 # respectively.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
611 move s2,v0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 la a1,hal_interrupt_objects # interrupt object table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614 add a1,a1,s1 # address of object ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 lw a1,0(a1) # a1 = object ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 move a2,s0 # arg3 = saved register dump
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619 .extern interrupt_end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620 jal interrupt_end # call into C to finish off
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
621 move a0,v0 # put ISR result in arg0
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
622
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
623 move v0,s2 # return value from isr
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
624 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
625
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
626 restore_state:
92
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
627 #if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
628 move k0,v0
92
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
629 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
630
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
631 # All done, restore CPU state and continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
632
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
633 addi sp,sp,mips_stack_frame_size # retrieve CPU state ptr
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
634
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
635 # Disable interrupts again while we restore state.
92
08ffab08d2ee Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents: 90
diff changeset
636 hal_cpu_int_disable
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
637
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
638 hal_diag_restore
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
639
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
640 hal_fpu_load sp
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 16
diff changeset
642 lw t0,mipsreg_cachectrl(sp)
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
643 lhi t1,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
644 llo t2,sp
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
645
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 16
diff changeset
646 mtc0 t0,cachectrl
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
647 mthi t1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
648 mtlo t2
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
649
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
650 # load GPRs
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
651 .set noat
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
652 # lgpr 0,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
653 lgpr 1,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
654 lgpr 2,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
655 lgpr 3,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
656 lgpr 4,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
657 lgpr 5,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
658 lgpr 6,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
659 lgpr 7,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
660 lgpr 8,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
661 lgpr 9,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
662 lgpr 10,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
663 lgpr 11,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
664 lgpr 12,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
665 lgpr 13,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
666 lgpr 14,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
667 lgpr 15,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
668 lgpr 16,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
669 lgpr 17,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
670 lgpr 18,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
671 lgpr 19,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
672 lgpr 20,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
673 lgpr 21,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
674 lgpr 22,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
675 lgpr 23,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
676 lgpr 24,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
677 lgpr 25,sp
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
678 # lgpr 26,sp # == K0
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
679 # lgpr 27,sp # == K1
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
680 lgpr 28,sp # == GP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
681 # lgpr 29,sp # == SP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
682 lgpr 30,sp # == FP
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
683 lgpr 31,sp # == RA
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
684 .set at
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
685
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
686 #if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
687
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
688 # If we have a Cygmon that wants to listen to network interrupts, then
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
689 # the return code from the earlier call to hal_default_isr() will
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
690 # have been negative to indicate this. So we jump into Cygmon here
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
691 # because Cygmon requires the processor state to be the same as when
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
692 # the interrupt was taken, but with k0 as the exception number.
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
693
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
694 bgez k0,1f
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
695 nop
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
696 # Check for new cygmon
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
697 sw k0,(mipsreg_regs+26*4)(sp) # save k0
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
698 la k1,0x80000100 + 41*4 # New cygmon "magic" id
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
699 lw k1,0(k1)
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
700 lui k0,0x55aa
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
701 ori k0,0x4321
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
702 bne k0,k1,1f
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
703
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
704 # Need to let cygmon handle this
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
705 la k1,0x80000100 + 39*4 # stub entry vector
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
706 lw k0,(mipsreg_regs+26*4)(sp) # restore k0
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
707 lw k1,0(k1)
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
708 lw sp,(mipsreg_regs+29*4)(sp) # restore SP
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
709 sll k0,1 # clear bit 31.
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
710 jr k1
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
711 srl k0,1
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
712 1:
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 24
diff changeset
713 #endif
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
714 lva k0,mipsreg_pc(sp) # K0 = return PC
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
715 lw k1,mipsreg_sr(sp) # K1 = saved SR
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 52
diff changeset
716 lsp sp,sp # load SP
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
717
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
718 # Invoke CPU specific mechanism for returning from this
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
719 # exception
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
720
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
721 hal_cpu_eret k0,k1
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
723 FUNC_END(__default_interrupt_vsr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
724
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
725 hal_intc_decode_data
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
726
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
727 ##-----------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
728 ## Execute pending DSRs on the interrupt stack with interrupts enabled.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
729 ## Note: this can only be called from code running on a thread stack
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
730
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
731 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
732 .extern cyg_interrupt_call_pending_DSRs
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
734 FUNC_START(hal_interrupt_stack_call_pending_DSRs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
735 mfc0 t0,status # get status register value
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
736 la v0,__interrupt_stack # v0 = interrupt stack
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
737 move v1,sp # v1 = original stack ptr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
738 move sp,v0 # sp = interrupt stack
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
739 addi sp,sp,-32 # make a null frame
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
740 sw v1,16(sp) # save old sp
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
741 sw ra,20(sp) # save old ra
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
742 sw t0,24(sp) # save old sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
743
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
744 hal_cpu_int_enable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
745
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
746 jal cyg_interrupt_call_pending_DSRs # call back to kernel
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
747 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
748
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
749 lw a0,24(sp) # get status reg
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
750
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
751 hal_cpu_int_merge a0 # merge with current SR
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
752
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
753 lw ra,20(sp) # restore ra
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
754 lw sp,16(sp) # restore sp
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
755
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
756 jr ra # go back
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
757 nop # delay slot
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
758
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
759 FUNC_END(hal_interrupt_stack_call_pending_DSRs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
760 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
761
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
762 ##-----------------------------------------------------------------------------
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
763 ## Short circuit in case any code tries to use "__gccmain()"
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
764
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
765 FUNC_START(__gccmain)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
766 jr ra
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
767 nop
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
768 FUNC_END(__gccmain)
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
769
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
770 ##-----------------------------------------------------------------------------
154
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
771 ## hal_zero_bss
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
772 ## Zero bss. Done in assembler to be optimal rather than using memset,
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
773 ## which would risk zeroing bss while using it.
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
774
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
775 FUNC_START(hal_zero_bss)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
776 #ifdef CYGHWR_HAL_MIPS_64BIT
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
777 #define STORE_OP sd
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
778 #define BLOCK_SHIFT 6
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
779 #else
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
780 #define STORE_OP sw
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
781 #define BLOCK_SHIFT 5
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
782 #endif
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
783 la a0,__bss_start # start of bss
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
784 la a1,__bss_end # end of bss
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
785 andi a2,a0,mips_regsize-1 # is bss aligned?
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
786 bne a2,zero,1f # skip word copy
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
787 nop
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
788
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
789 # loop with 8 stores per loop
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
790 subu a3,a1,a0 # get length
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
791 srl a3,a3,BLOCK_SHIFT # get number of blocks
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
792 sll a3,a3,BLOCK_SHIFT # get length of blocks
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
793 addu a3,a0,a3 # get end addr of blocks
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
794 2: STORE_OP zero,(mips_regsize*0)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
795 STORE_OP zero,(mips_regsize*1)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
796 STORE_OP zero,(mips_regsize*2)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
797 STORE_OP zero,(mips_regsize*3)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
798 STORE_OP zero,(mips_regsize*4)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
799 STORE_OP zero,(mips_regsize*5)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
800 STORE_OP zero,(mips_regsize*6)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
801 STORE_OP zero,(mips_regsize*7)(a0)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
802 addu a0,a0,mips_regsize*8 # next addr
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
803 bne a3,a0,2b # to next store
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
804 nop
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
805
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
806 # finish 1 byte at a time
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
807 1: sb zero,0(a0) # zero memory
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
808 addiu a0,a0,1 # next addr
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
809 bne a0,a1,1b # to next store
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
810 nop
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
811 jr ra
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
812 FUNC_END(hal_zero_bss)
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
813
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
814
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
815 ##-----------------------------------------------------------------------------
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
816 ## VSR springboard for break instruction exceptions
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
817 ## Both GCC and GDB use break instructions. GCC for division-by-zero
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
818 ## notification and GDB for program-flow breakpoints. This springboard
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
819 ## looks for the d-b-z kind and directs them to another vector so libc
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
820 ## can handle these without affecting the debugger.
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
821
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
822 FUNC_START(__break_vsr_springboard)
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 126
diff changeset
823 mvafc0 k0,epc
90
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
824 mfc0 k1,cause
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
825 bltzl k1,1f
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
826 addi k0,k0,4 # delay slot (only executed if BD set)
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
827 1: lw k1,0(k0) # get break instruction
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
828 la k0,0x0007000d # break 0x7 used by GCC for d-b-z
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
829 bne k0,k1,2f
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
830 nop
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
831 ori k0,$0,14*4 # CYGNUM_HAL_VECTOR_DIV_BY_ZERO
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
832 la k1,hal_vsr_table # address of VSR table
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
833 add k1,k1,k0 # offset of VSR entry
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
834 lw k1,0(k1) # k1 = pointer to VSR
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
835 jr k1 # go there
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
836 nop # (delay slot)
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
837 2: ori k0,$0,9*4 # CYGNUM_HAL_VECTOR_BREAKPOINT
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
838 j __default_exception_vsr
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
839 nop # (delay slot)
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
840 FUNC_END(__break_vsr_springboard)
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
841
70190fa0fe10 Merge from eCos master repository on 2000-05-19-07:47:03-BST
jlarmour
parents: 76
diff changeset
842
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
843 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
844 ## Interrupt Stack.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
845 ## Used during intialization and for executing ISRs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
846
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
847 .bss
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
848
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
849 .balign 16
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
850 .global cyg_interrupt_stack_base
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
851 cyg_interrupt_stack_base:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
852 __interrupt_stack_base:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
853 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
854 .byte 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
855 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
856 .balign 16
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
857 .global cyg_interrupt_stack
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
858 cyg_interrupt_stack:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
859 __interrupt_stack:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
860
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
861 .long 0,0,0,0,0,0,0,0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
862
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 ## VSR table.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
865 ## The main interrupt code indirects through here to find the VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
866 ## to execute for each architecture defined interrupt.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
867 ## This is only used for simulated targets, on real targets a fixed location VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
868 ## table is now allocated at 0x80000100.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
869
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
870 #ifndef CYG_HAL_MIPS_VSR_TABLE_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
871
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
872 ## .section ".vsr_table","a"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
873
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
874 .data
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
875
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
876 .globl hal_vsr_table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
877
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
878 hal_vsr_table:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
879 .long __default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
880 .rept 63
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
881 .long __default_exception_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
882 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
883
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
884 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
887 # Interrupt vector tables.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
888 # These tables contain the isr, data and object pointers used to deliver
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
889 # interrupts to user code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
890 # hal_interrupt_level contains the interrupt level set by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
891 # HAL_INTERRUPT_CONFIGURE().
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
892 # This is a default set that provide support only for the 6 external
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
893 # interrupts in the status/cause registers. Platforms or boards are expected
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
894 # to define their own versions of these if they have their own interrupt mappings.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
895
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
896 #ifndef CYG_HAL_MIPS_ISR_TABLES_DEFINED
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
898 .extern hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
899
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
900 .data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 .globl hal_interrupt_handlers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 hal_interrupt_handlers:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
906 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
907 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
909 .long hal_default_isr
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
910
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 .globl hal_interrupt_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913 hal_interrupt_data:
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
914 .rept 6
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
915 .long 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
916 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918 .globl hal_interrupt_objects
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
919 hal_interrupt_objects:
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
920 .rept 6
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
921 .long 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
922 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
923
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
924 #endif
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 6
diff changeset
925
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
926 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
927 ## end of vectors.S
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
928
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
929