annotate packages/hal/mips/arch/current/src/hal_misc.c @ 1777:c16341b1bac6 default tip

* Added execute permissions to files missed in conversion from CVS
author alexs
date Mon, 12 Oct 2009 02:26:09 +0100
parents b3be5b1e1cfd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3 // hal_misc.c
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5 // HAL miscellaneous functions
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
7 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
12 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
14 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
16 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
20 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
21 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
22 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
25 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
27 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
28 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
30 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
32 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
34 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
35 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
38 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
40 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
43 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
44 // Contributors: nickg, jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
45 // Date: 1999-01-21
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
46 // Purpose: HAL miscellaneous functions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
47 // Description: This file contains miscellaneous functions provided by the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
48 // HAL.
0
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 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
52 //========================================================================*/
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 #include <cyg/infra/cyg_type.h> // Base types
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 #include <cyg/infra/cyg_trac.h> // tracing macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 #include <cyg/infra/cyg_ass.h> // assertion macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
60 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 #include <cyg/hal/hal_arch.h> // architectural definitions
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 #include <cyg/hal/hal_intr.h> // Interrupt handling
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 #include <cyg/hal/hal_cache.h> // Cache handling
165
d63db767121d Merge from eCos master repository on 2001-06-29-06:43:03-BST
jlarmour
parents: 154
diff changeset
66 #include <cyg/hal/hal_if.h> // hal_ctrlc_isr()
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
67 #include <cyg/hal/mips-regs.h> // FPU cause register definitions
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
68
198
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
69 #include CYGHWR_MEMORY_LAYOUT_H
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
70
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
71 /*------------------------------------------------------------------------*/
18
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
72 /* If required, define a variable to store the clock period. */
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
73
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
74 #ifdef CYGHWR_HAL_CLOCK_PERIOD_DEFINED
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
75
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
76 CYG_WORD32 cyg_hal_clock_period;
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
77
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
78 #endif
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
79
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
80 /*------------------------------------------------------------------------*/
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
81 /* First level C exception handler. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 externC void __handle_exception (void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 externC HAL_SavedRegisters *_hal_registers;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86
130
eb9fd8c04db3 Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents: 126
diff changeset
87 externC void* volatile __mem_fault_handler;
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
88
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
89 externC cyg_uint8 cyg_hal_mips_process_fpe( HAL_SavedRegisters *regs );
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
90
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
91 externC cyg_uint32 cyg_hal_exception_handler(HAL_SavedRegisters *regs)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 {
200
8147f1c99f15 Merge from eCos master repository on 2001-12-21-06:43:03-GMT
jlarmour
parents: 198
diff changeset
93 #if defined(CYGHWR_HAL_MIPS_FPU) || \
8147f1c99f15 Merge from eCos master repository on 2001-12-21-06:43:03-GMT
jlarmour
parents: 198
diff changeset
94 (defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && defined(CYGPKG_HAL_EXCEPTIONS))
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
95 int vec = regs->vector>>2;
200
8147f1c99f15 Merge from eCos master repository on 2001-12-21-06:43:03-GMT
jlarmour
parents: 198
diff changeset
96 #endif
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
97
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
98 #if defined(CYGHWR_HAL_MIPS_FPU)
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
99 // Special handling of FPU exceptions
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
100 if (CYGNUM_HAL_VECTOR_FPE == vec) {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
101
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
102 #if defined(CYGSEM_HAL_MIPS_EMULATE_UNIMPLEMENTED_FPU_OPS)
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
103 // We may be required to emulate certain unimplemented Floating Point
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
104 // operations
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
105
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
106 // cyg_hal_mips_process_fpe() returns non-zero if it could handle
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
107 // the exception successfully. If so, we just return
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
108
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
109 if ( cyg_hal_mips_process_fpe(regs) )
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
110 return 0;
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
111 #endif
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
112
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
113 // Find the cause of the FPU exception, clear the flag and use
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
114 // the decoded vector number.
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
115 {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
116 cyg_uint32 cause = regs->fcr31;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
117
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
118 if (cause & FCR31_CAUSE_I) {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
119 vec = CYGNUM_HAL_EXCEPTION_FPU_INEXACT;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
120 cause &= ~(FCR31_FLAGS_I | FCR31_CAUSE_I);
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
121 } else if (cause & FCR31_CAUSE_U) {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
122 vec = CYGNUM_HAL_EXCEPTION_FPU_UNDERFLOW;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
123 cause &= ~(FCR31_FLAGS_U | FCR31_CAUSE_U);
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
124 } else if (cause & FCR31_CAUSE_O) {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
125 vec = CYGNUM_HAL_EXCEPTION_FPU_OVERFLOW;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
126 cause &= ~(FCR31_FLAGS_O | FCR31_CAUSE_O);
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
127 } else if (cause & FCR31_CAUSE_Z) {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
128 vec = CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
129 cause &= ~(FCR31_FLAGS_Z | FCR31_CAUSE_Z);
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
130 } else if (cause & FCR31_CAUSE_V) {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
131 vec = CYGNUM_HAL_EXCEPTION_FPU_INVALID;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
132 cause &= ~(FCR31_FLAGS_V | FCR31_CAUSE_V);
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
133 }
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
134 regs->fcr31 = cause;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
135
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
136 #if 1
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
137 // Update the FPU status register with the new
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
138 // setting. This is a workaround for the signal2 test
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
139 // which does a longjump in the exception handler and thus
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
140 // never gets around to executing the register restore
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
141 // code.
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
142 asm ("ctc1 %0,$31" : : "r" (cause));
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
143 #endif
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
144 }
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
145 }
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
146 #endif // CYGHWR_HAL_MIPS_FPU
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
147
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
148
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
151 // If we caught an exception inside the stubs, see if we were expecting it
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
152 // and if so jump to the saved address
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
153 if (__mem_fault_handler) {
194
feb0fcf83327 Merge from eCos master repository on 2001-10-26-06:43:03-BST
jlarmour
parents: 184
diff changeset
154 regs->pc = (CYG_HAL_MIPS_REG)(signed long)__mem_fault_handler;
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
155 return 0; // Caught an exception inside stubs
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
156 }
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
157
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 // Set the pointer to the registers of the current exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 // context. At entry the GDB stub will expand the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 // HAL_SavedRegisters structure into a (bigger) register array.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 _hal_registers = regs;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 __handle_exception();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 #elif defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && defined(CYGPKG_HAL_EXCEPTIONS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 // We should decode the vector and pass a more appropriate
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 // value as the second argument. For now we simply pass a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 // pointer to the saved registers. We should also divert
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 // breakpoint and other debug vectors into the debug stubs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 101
diff changeset
171 cyg_hal_deliver_exception( vec, (CYG_ADDRWORD)regs );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 CYG_FAIL("Exception!!!");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 #endif
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
178 return 0;
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
181 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
182 /* default ISR */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
184 #ifndef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 {
50
a0774359f013 Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents: 38
diff changeset
187 #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: 6
diff changeset
188 defined(CYGHWR_HAL_GDB_PORT_VECTOR) && \
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
189 defined(HAL_CTRLC_ISR)
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
190
18
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
191 #ifndef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
192 if( vector == CYGHWR_HAL_GDB_PORT_VECTOR )
18
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
193 #endif
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
194 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
195 cyg_uint32 result = HAL_CTRLC_ISR( vector, data );
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
196 if( result != 0 ) return result;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
197 }
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
198
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 50
diff changeset
199 #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: 36
diff changeset
200 #if defined(HAL_DIAG_IRQ_CHECK)
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
201 {
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
202 cyg_uint32 ret;
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
203 /* let ROM monitor handle unexpected interrupts */
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
204 HAL_DIAG_IRQ_CHECK(vector, ret);
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
205 if (ret<=0)
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
206 return ret;
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
207 }
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
208 #endif // def HAL_DIAG_IRQ_CHECK
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 50
diff changeset
209 #endif // def CYGSEM_HAL_USE_ROM_MONITOR_CygMon
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
210 #endif
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
211
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 CYG_TRACE1(true, "Interrupt: %d", vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 CYG_FAIL("Spurious Interrupt!!!");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
217 #else // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
218
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
219 externC cyg_uint32 hal_arch_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
220 {
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
221 #if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) && \
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
222 defined(CYGHWR_HAL_GDB_PORT_VECTOR) && \
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
223 defined(HAL_CTRLC_ISR)
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
224
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
225 #if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
226 #if defined(HAL_DIAG_IRQ_CHECK)
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
227 {
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
228 cyg_uint32 ret;
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
229 /* let ROM monitor handle unexpected interrupts */
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
230 HAL_DIAG_IRQ_CHECK(vector, ret);
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
231 if (ret<=0)
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
232 return ret;
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
233 }
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
234 #endif // def HAL_DIAG_IRQ_CHECK
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
235 #endif // def CYGSEM_HAL_USE_ROM_MONITOR_CygMon
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
236 #endif
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
237
153
5e8f3b328bb3 Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents: 143
diff changeset
238 #ifdef CYGPKG_REDBOOT
5e8f3b328bb3 Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents: 143
diff changeset
239 hal_ctrlc_isr( vector, data );
5e8f3b328bb3 Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents: 143
diff changeset
240 #endif
5e8f3b328bb3 Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents: 143
diff changeset
241
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
242 return 0;
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
243 }
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
244
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
245 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 76
diff changeset
246
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
247 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
248 /* data copy and bss zero functions */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
250 typedef void (CYG_SYM_ADDRESS)(void);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
252 // All these must use this type of address to stop them being given relocations
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
253 // relative to $gp (i.e. assuming they would be in .sdata)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
254 extern CYG_SYM_ADDRESS __ram_data_start;
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
255 extern CYG_SYM_ADDRESS __ram_data_end;
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
256 extern CYG_SYM_ADDRESS __rom_data_start;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
257
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
258 #ifdef CYG_HAL_STARTUP_ROM
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 void hal_copy_data(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 {
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
261 char *p = (char *)&__ram_data_start;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 char *q = (char *)&__rom_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 while( p != (char *)&__ram_data_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 *p++ = *q++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
269 /*------------------------------------------------------------------------*/
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
271 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
272 cyg_bool cyg_hal_stop_constructors;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
273 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
274
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
275 typedef void (*pfunc) (void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
276 extern pfunc __CTOR_LIST__[];
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
277 extern pfunc __CTOR_END__[];
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 void
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
280 cyg_hal_invoke_constructors(void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
282 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
283 static pfunc *p = &__CTOR_END__[-1];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
284
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
285 cyg_hal_stop_constructors = 0;
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
286 for (; p >= __CTOR_LIST__; p--) {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
287 (*p) ();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
288 if (cyg_hal_stop_constructors) {
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
289 p--;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
290 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
291 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
292 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
293 #else
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
294 pfunc *p;
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
295
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
296 for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--)
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
297 (*p) ();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
298 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
300 } // cyg_hal_invoke_constructors()
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
302 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
303 /* Determine the index of the ls bit of the supplied mask. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 cyg_uint32 hal_lsbit_index(cyg_uint32 mask)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 cyg_uint32 n = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 static const signed char tab[64] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 { -1, 0, 1, 12, 2, 6, 0, 13, 3, 0, 7, 0, 0, 0, 0, 14, 10,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 4, 0, 0, 8, 0, 0, 25, 0, 0, 0, 0, 0, 21, 27 , 15, 31, 11,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 5, 0, 0, 0, 0, 0, 9, 0, 0, 24, 0, 0 , 20, 26, 30, 0, 0, 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 0, 23, 0, 19, 29, 0, 22, 18, 28, 17, 16, 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 n &= ~(n-1UL);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 n = (n<<16)-n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 n = (n<<6)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 n = (n<<4)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 return tab[n>>26];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
324 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
325 /* Determine the index of the ms bit of the supplied mask. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 cyg_uint32 hal_msbit_index(cyg_uint32 mask)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 cyg_uint32 x = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 cyg_uint32 w;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 /* Phase 1: make word with all ones from that one to the right */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 x |= x >> 16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 x |= x >> 8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 x |= x >> 4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 x |= x >> 2;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 x |= x >> 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 /* Phase 2: calculate number of "1" bits in the word */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 w = (x & 0x55555555) + ((x >> 1) & 0x55555555);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 w = (w & 0x33333333) + ((w >> 2) & 0x33333333);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 w = w + (w >> 4);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343 w = (w & 0x000F000F) + ((w >> 8) & 0x000F000F);
196
9b55e9c69693 Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents: 194
diff changeset
344 return (cyg_uint32)((w + (w >> 16)) & 0xFF) - 1;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
348 /*------------------------------------------------------------------------*/
143
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
349 /* Delay for some number of useconds. */
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
350 void
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
351 hal_delay_us(int us)
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
352 {
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
353 cyg_uint32 val1, val2;
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
354 int diff;
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
355 long usticks;
143
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
356 long ticks;
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
357
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
358 // Calculate the number of counter register ticks per microsecond.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
359
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
360 usticks = (CYGNUM_HAL_RTC_PERIOD * CYGNUM_HAL_RTC_DENOMINATOR) / 1000000;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
361
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
362 // Make sure that the value is not zero. This will only happen if the
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
363 // CPU is running at < 2MHz.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
364 if( usticks == 0 ) usticks = 1;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
365
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
366 while( us > 0 )
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
367 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
368 int us1 = us;
143
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
369
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
370 // Wait in bursts of less than 10000us to avoid any overflow
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
371 // problems in the multiply.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
372 if( us1 > 10000 )
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
373 us1 = 10000;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
374
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
375 us -= us1;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
376
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
377 ticks = us1 * usticks;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
378
488
b3be5b1e1cfd * src/hal_misc.c (hal_delay_us): Use HAL_CLOCK_READ instead of inline
jlarmour
parents: 210
diff changeset
379 HAL_CLOCK_READ(&val1);
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
380 while (ticks > 0) {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
381 do {
488
b3be5b1e1cfd * src/hal_misc.c (hal_delay_us): Use HAL_CLOCK_READ instead of inline
jlarmour
parents: 210
diff changeset
382 HAL_CLOCK_READ(&val2);
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
383 } while (val1 == val2);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
384 diff = val2 - val1;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
385 if (diff < 0) diff += CYGNUM_HAL_RTC_PERIOD;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
386 ticks -= diff;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
387 val1 = val2;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 165
diff changeset
388 }
143
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
389 }
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
390 }
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
391
6b5f480c6929 Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents: 130
diff changeset
392 /*------------------------------------------------------------------------*/
198
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
393
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
394 void hal_arch_program_new_stack(void *_func)
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
395 {
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
396 externC void hal_program_new_stack( void *func, CYG_ADDRESS addr);
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
397 hal_program_new_stack( (void *)_func,
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
398 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - sizeof(CYG_ADDRESS)) & ~15 );
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
399 }
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
400
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
401 /*------------------------------------------------------------------------*/
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
402 /* Idle thread action */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
404 #include <cyg/infra/diag.h>
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
405
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 void hal_idle_thread_action( cyg_uint32 count )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407 {
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
408 #if 0 //def CYGPKG_HAL_MIPS_SIM
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 if( (count % 1000) == 0 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 // This code causes a fake interrupt.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 "xor $24,$24,$24;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 "mtc0 $24,$13;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 "lui $25,%%hi(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 "ori $25,$25,%%lo(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 "j other_vector;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 "nop;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 "1:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 : "t8", "t9"
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 #endif
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
426 #if 0 //def CYGPKG_HAL_MIPS_TX39_JMR3904
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
428 if( (count % 100000 ) == 0 )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 // cyg_uint32 tval, isr, imr, ilr;
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
431 cyg_uint32 sr = 0, cr = 0, ctr = 0, cpr = 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 // HAL_CLOCK_READ( &tval );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 // HAL_READ_UINT32( 0xFFFFC000, isr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 // HAL_READ_UINT32( 0xFFFFC004, imr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 // HAL_READ_UINT32( 0xFFFFC01C, ilr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 // CYG_TRACE2(1, "Timer value, ISR ",tval, isr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 // CYG_TRACE2(1, "IMR ILR0 ", imr, ilr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
439 // asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
440 // "mfc0 %0,$12;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
441 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
442 // "mfc0 %1,$13;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
443 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
444 // "mfc0 %2,$9;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
445 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
446 // "mfc0 %3,$11;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
447 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
448 // : "=r"(sr), "=r"(cr), "=r"(ctr), "=r"(cpr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
449 // );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
450
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
451
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
452 // diag_printf("Status %08x ", sr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
453 // diag_printf("Cause %08x ", cr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
454 // diag_printf("Counter %08x ", ctr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
455 // diag_printf("Compare %08x\n", cpr);
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
456
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
457 #if 0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 "mfc0 %0,$12;"
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
460 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
461 : "=r"(sr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
462 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
463 diag_write_string("Status "); diag_write_hex( sr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
464
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
465 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
466 "mfc0 %0,$13;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
467 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
468 : "=r"(cr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
469 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
470 diag_write_string(" Cause "); diag_write_hex( cr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
471
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
472 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
473 "mfc0 %0,$9;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
474 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
475 : "=r"(ctr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
476 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
477 diag_write_string(" Counter "); diag_write_hex( ctr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
478
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
479 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
480 "mfc0 %0,$11;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
481 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
482 : "=r"(cpr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
483 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
484 diag_write_string(" Compare "); diag_write_hex( cpr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
485 diag_write_string( "\n" );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
486
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
487 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
488 #if 1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
489 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
490 "mfc0 %0,$12;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
491 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
492 : "=r"(sr)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
495 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
496 "mfc0 %0,$13;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
497 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
498 : "=r"(cr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
499 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
500
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
501 CYG_INSTRUMENT_USER( 1, sr, cr );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
503 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
504 "mfc0 %0,$9;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
505 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
506 : "=r"(ctr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
507 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
508
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
509 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
510 "mfc0 %0,$11;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
511 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
512 : "=r"(cpr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
513 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
514
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
515 CYG_INSTRUMENT_USER( 2, ctr, cpr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
516 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
517
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 // if( count == 4 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519 // {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520 // HAL_ENABLE_INTERRUPTS();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 // }
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 // if( count >= 10 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
524 // for(;;);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526 #endif
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
527 #if 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
528 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
529 static CYG_WORD32 istat[3] = { 0xffffffff,0xffffffff,0xffffffff };
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
530 int i;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
531 for( i = 0; i < 3; i++ )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
532 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
533 CYG_WORD32 reg, sr;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
534 HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4373_INTC_STAT0 + i * CYGHWR_HAL_MIPS_VRC4373_INTC_MASK_OFF, reg );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
535 if( reg != istat[i] )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
536 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
537 hal_diag_ai_write_char('~');
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
538 hal_diag_ai_write_char('0'+i);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
539 hal_diag_ai_write_hex8( reg );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
540 istat[i] = reg;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
541 HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4373_INTC_MASK0 + i * CYGHWR_HAL_MIPS_VRC4373_INTC_MASK_OFF, reg );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
542 hal_diag_ai_write_char('.');
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
543 hal_diag_ai_write_hex8( reg );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
544 #if 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
545 asm volatile (
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
546 "mfc0 %0,$12;"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
547 "nop; nop; nop;"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
548 : "=r"(sr)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
549 );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
550 hal_diag_ai_write_char('.');
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
551 hal_diag_ai_write_hex8( sr );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
552 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
553 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
554 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
555 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
556 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
557 static CYG_WORD32 old_pins = 0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
558 CYG_WORD32 reg;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
559 HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4373_INTC_PINS, reg );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
560 if( reg != old_pins )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
561 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
562 hal_diag_ai_write_char('%');
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
563 hal_diag_ai_write_hex8( reg );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
564 old_pins = reg;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
565 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
566 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
567 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
568 #if 0 //def CYGPKG_HAL_MIPS_VR4300_VRC4373
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
569
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
570 // Wiggle one of the leds to show we are running
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
571
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
572 if( (count % 50000 ) == 0 )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
573 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
574 cyg_uint8 lr;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
575 { int i; for( i = 0; i < 200; i++ ); }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
576 HAL_READ_UINT8( 0xc2000008, lr );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
577 lr ^= 2;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
578 { int i; for( i = 0; i < 200; i++ ); }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
579 HAL_WRITE_UINT8( 0xc2000008, lr );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
580
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
581 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
582 #endif
0
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
585 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
586 /* End of hal_misc.c */