Mercurial > ecos
annotate packages/hal/common/current/src/hal_if.c @ 110:84e4bde58b26 ecos-sw-2000-07-14
Merge from eCos master repository on 2000-07-14-22:00:02-BST
| author | jlarmour |
|---|---|
| date | Mon, 17 Jul 2000 14:42:27 +0000 |
| parents | 7f461c3a372c |
| children | 02ea4320376c |
| rev | line source |
|---|---|
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
1 //============================================================================= |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
3 // hal_if.c |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
5 // ROM/RAM interfacing functions |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
7 //============================================================================= |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
8 //####COPYRIGHTBEGIN#### |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
9 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
10 // ------------------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
11 // The contents of this file are subject to the Red Hat eCos Public License |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
12 // Version 1.1 (the "License"); you may not use this file except in |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
13 // compliance with the License. You may obtain a copy of the License at |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
14 // http://www.redhat.com/ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
15 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
16 // Software distributed under the License is distributed on an "AS IS" |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
18 // License for the specific language governing rights and limitations under |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
19 // the License. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
20 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
21 // The Original Code is eCos - Embedded Configurable Operating System, |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
22 // released September 30, 1998. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
23 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
24 // The Initial Developer of the Original Code is Red Hat. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
25 // Portions created by Red Hat are |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
27 // All Rights Reserved. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
28 // ------------------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
29 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
30 //####COPYRIGHTEND#### |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
31 //============================================================================= |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
32 //#####DESCRIPTIONBEGIN#### |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
33 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
34 // Author(s): jskov |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
35 // Contributors:jskov |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
36 // Date: 2000-06-07 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
37 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
38 //####DESCRIPTIONEND#### |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
39 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
40 //============================================================================= |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
41 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
42 #include <pkgconf/hal.h> |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
43 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
44 #ifdef CYGPKG_KERNEL |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
45 # include <pkgconf/kernel.h> |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
46 #endif |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
47 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
48 #include <cyg/infra/cyg_ass.h> // assertions |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
49 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
50 #include <cyg/hal/hal_arch.h> // set/restore GP |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
51 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
52 #include <cyg/hal/hal_io.h> // IO macros |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
53 #include <cyg/hal/hal_if.h> // our interface |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
54 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
55 #include <cyg/hal/hal_diag.h> // Diag IO |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
56 #include <cyg/hal/hal_misc.h> // User break |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
57 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
58 #include <cyg/hal/hal_stub.h> // stub functionality |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
59 #include <cyg/hal/plf_stub.h> // reset entry - FIXME, should be moved |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
60 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
61 #include <cyg/hal/hal_intr.h> // hal_vsr_table and others |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
62 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
63 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
64 //-------------------------------------------------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
65 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
66 externC void patch_dbg_syscalls(void * vector); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
67 externC void init_thread_syscall(void * vector); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
68 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
69 //-------------------------------------------------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
70 // Implementations and function wrappers for monitor services |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
71 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
72 #ifdef CYGPRI_HAL_IMPLEMENTS_IF_SERVICES |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
73 static void |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
74 delay_us(cyg_int32 usecs) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
75 { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
76 #ifdef CYGPKG_KERNEL |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
77 cyg_int32 start, elapsed; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
78 cyg_int32 usec_ticks, slice; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
79 CYGARC_HAL_SAVE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
80 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
81 // How many ticks total we should wait for. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
82 usec_ticks = usecs*CYGNUM_KERNEL_COUNTERS_RTC_PERIOD; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
83 usec_ticks /= CYGNUM_HAL_RTC_NUMERATOR/CYGNUM_HAL_RTC_DENOMINATOR/1000; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
84 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
85 do { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
86 // Spin in slices of 1/2 the RTC period. Allows interrupts |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
87 // time to run without messing up the algorithm. If we spun |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
88 // for 1 period (or more) of the RTC, there'd be also problems |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
89 // figuring out when the timer wrapped. We may lose a tick or |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
90 // two for each cycle but it shouldn't matter much. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
91 slice = usec_ticks % (CYGNUM_KERNEL_COUNTERS_RTC_PERIOD / 2); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
92 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
93 HAL_CLOCK_READ(&start); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
94 do { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
95 HAL_CLOCK_READ(&elapsed); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
96 elapsed = (elapsed - start); // counts up! |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
97 if (elapsed < 0) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
98 elapsed += CYGNUM_KERNEL_COUNTERS_RTC_PERIOD; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
99 } while (elapsed < slice); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
100 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
101 // Adjust by elapsed, not slice, since an interrupt may have |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
102 // been stalling us for some time. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
103 usec_ticks -= elapsed; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
104 } while (usec_ticks > 0); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
105 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
106 CYGARC_HAL_RESTORE_GP(); |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
107 #else |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
108 // Use a HAL feature if defined |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
109 #ifdef HAL_DELAY_US |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
110 HAL_DELAY_US(usecs); |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
111 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
112 #endif |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
113 } |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
114 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
115 static void |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
116 reset(void) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
117 { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
118 CYGARC_HAL_SAVE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
119 // With luck, the platform defines some magic that will cause a hardware |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
120 // reset. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
121 HAL_STUB_PLATFORM_RESET(); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
122 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
123 #ifdef HAL_STUB_PLATFORM_RESET_ENTRY |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
124 // If that's not the case (above is an empty statement) there may |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
125 // be defined an address we can jump to - and effectively |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
126 // reinitialize the system. Not quite as good as a reset, but it |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
127 // is often enough. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
128 goto *HAL_STUB_PLATFORM_RESET_ENTRY; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
129 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
130 #else |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
131 #error " no RESET_ENTRY" |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
132 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
133 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
134 CYGARC_HAL_RESTORE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
135 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
136 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
137 // This is the system's default kill signal routine. Unless overridden |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
138 // by the application, it will cause a board reset when GDB quits the |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
139 // connection. (The user can avoid the reset by using the GDB 'detach' |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
140 // command instead of 'kill' or 'quit'). |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
141 static int |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
142 kill_by_reset(int __irq_nr, void* __regs) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
143 { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
144 CYGARC_HAL_SAVE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
145 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
146 reset(); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
147 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
148 CYGARC_HAL_RESTORE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
149 return 0; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
150 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
151 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
152 static int |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
153 nop_service(void) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
154 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
155 // This is the default service. It always returns false (0), and |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
156 // _does_ not trigger any assertions. Clients must either cope |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
157 // with the service failure or assert. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
158 return 0; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
159 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
160 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
161 //---------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
162 // Comm controls |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
163 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
164 static hal_virtual_comm_table_t comm_channels[CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS+1]; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
165 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
166 static int |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
167 set_debug_comm(int __comm_id) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
168 { |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
169 static int __selected_id = CYGNUM_CALL_IF_SET_COMM_ID_EMPTY; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
170 hal_virtual_comm_table_t* __chan; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
171 int interrupt_state = 0; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
172 int res = 1, update = 0; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
173 CYGARC_HAL_SAVE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
174 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
175 CYG_ASSERT(__comm_id >= CYGNUM_CALL_IF_SET_COMM_ID_MANGLER |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
176 && __comm_id < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS, |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
177 "Invalid channel"); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
178 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
179 switch (__comm_id) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
180 case CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
181 if (__selected_id > 0) |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
182 res = __selected_id-1; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
183 else if (__selected_id == 0) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
184 res = CYGNUM_CALL_IF_SET_COMM_ID_MANGLER; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
185 else |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
186 res = __selected_id; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
187 break; |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
188 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
189 case CYGNUM_CALL_IF_SET_COMM_ID_EMPTY: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
190 CYGACC_CALL_IF_DEBUG_PROCS_SET(0); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
191 __selected_id = __comm_id; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
192 break; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
193 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
194 case CYGNUM_CALL_IF_SET_COMM_ID_MANGLER: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
195 __comm_id = 0; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
196 update = 1; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
197 break; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
198 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
199 default: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
200 __comm_id++; // skip mangler entry |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
201 update = 1; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
202 break; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
203 } |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
204 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
205 if (update) { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
206 // Find the interrupt state of the channel. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
207 __chan = CYGACC_CALL_IF_DEBUG_PROCS(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
208 if (__chan) |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
209 interrupt_state = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_IRQ_DISABLE); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
210 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
211 __selected_id = __comm_id; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
212 CYGACC_CALL_IF_DEBUG_PROCS_SET(comm_channels[__comm_id]); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
213 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
214 // Set interrupt state on the new channel. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
215 __chan = CYGACC_CALL_IF_DEBUG_PROCS(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
216 if (interrupt_state) |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
217 CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_IRQ_ENABLE); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
218 else |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
219 CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_IRQ_DISABLE); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
220 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
221 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
222 CYGARC_HAL_RESTORE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
223 return res; |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
224 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
225 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
226 static int |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
227 set_console_comm(int __comm_id) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
228 { |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
229 static int __selected_id = CYGNUM_CALL_IF_SET_COMM_ID_EMPTY; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
230 int res = 1, update = 0; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
231 CYGARC_HAL_SAVE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
232 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
233 CYG_ASSERT(__comm_id >= CYGNUM_CALL_IF_SET_COMM_ID_MANGLER |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
234 && __comm_id < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS, |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
235 "Invalid channel"); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
236 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
237 switch (__comm_id) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
238 case CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
239 if (__selected_id > 0) |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
240 res = __selected_id-1; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
241 else if (__selected_id == 0) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
242 res = CYGNUM_CALL_IF_SET_COMM_ID_MANGLER; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
243 else |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
244 res = __selected_id; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
245 break; |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
246 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
247 case CYGNUM_CALL_IF_SET_COMM_ID_EMPTY: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
248 CYGACC_CALL_IF_CONSOLE_PROCS_SET(0); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
249 __selected_id = __comm_id; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
250 break; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
251 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
252 case CYGNUM_CALL_IF_SET_COMM_ID_MANGLER: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
253 __comm_id = 0; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
254 update = 1; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
255 break; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
256 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
257 default: |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
258 __comm_id++; // skip mangler entry |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
259 update = 1; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
260 break; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
261 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
262 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
263 if (update) { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
264 __selected_id = __comm_id; |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
265 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
266 CYGACC_CALL_IF_CONSOLE_PROCS_SET(comm_channels[__comm_id]); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
267 } |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
268 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
269 CYGARC_HAL_RESTORE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
270 return res; |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
271 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
272 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
273 //---------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
274 // Cache functions |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
275 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
276 static void |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
277 flush_icache(void *__p, int __nbytes) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
278 { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
279 CYGARC_HAL_SAVE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
280 #ifdef HAL_ICACHE_FLUSH |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
281 HAL_ICACHE_FLUSH( __p , __nbytes ); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
282 #elif defined(HAL_ICACHE_INVALIDATE) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
283 HAL_ICACHE_INVALIDATE(); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
284 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
285 CYGARC_HAL_RESTORE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
286 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
287 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
288 static void |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
289 flush_dcache(void *__p, int __nbytes) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
290 { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
291 CYGARC_HAL_SAVE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
292 #ifdef HAL_DCACHE_FLUSH |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
293 HAL_DCACHE_FLUSH( __p , __nbytes ); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
294 #elif defined(HAL_DCACHE_INVALIDATE) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
295 HAL_DCACHE_INVALIDATE(); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
296 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
297 CYGARC_HAL_RESTORE_GP(); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
298 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
299 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
300 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
301 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
302 #if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
303 //----------------------------------------------------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
304 // Console IO functions that adhere to the virtual vector table semantics in |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
305 // order to ensure proper debug agent mangling when required. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
306 // |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
307 // The platform HAL must specify the channel used, and provide raw IO |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
308 // routines for that channel. The platform HAL also has the necessary |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
309 // information to determine if the channel is already initialized by |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
310 // a debug agent (either builtin or in ROM). |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
311 void |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
312 hal_if_diag_init(void) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
313 { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
314 #ifdef CYGPRI_HAL_IMPLEMENTS_IF_SERVICES |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
315 cyg_hal_plf_comms_init(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
316 #endif |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
317 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
318 // Set console channel. This should only be done when the console channel |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
319 // differs from the debug channel to prevent removing the debug agent's |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
320 // mangler procs. |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
321 if (CYGACC_CALL_IF_SET_DEBUG_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT) |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
322 != CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
323 |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
324 CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
325 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
326 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
327 void |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
328 hal_if_diag_write_char(char c) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
329 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
330 hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
331 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
332 if (__chan) |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
333 CYGACC_COMM_IF_PUTC(*__chan, c); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
334 else { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
335 __chan = CYGACC_CALL_IF_DEBUG_PROCS(); |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
336 CYGACC_COMM_IF_PUTC(*__chan, c); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
337 } |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
338 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
339 // Check interrupt flag |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
340 if (CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG()) { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
341 cyg_hal_user_break(0); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
342 CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(0); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
343 } |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
344 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
345 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
346 void |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
347 hal_if_diag_read_char(char *c) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
348 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
349 hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
350 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
351 if (__chan) |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
352 *c = CYGACC_COMM_IF_GETC(*__chan); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
353 else { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
354 __chan = CYGACC_CALL_IF_DEBUG_PROCS(); |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
355 *c = CYGACC_COMM_IF_GETC(*__chan); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
356 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
357 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
358 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
359 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
360 //============================================================================= |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
361 // CtrlC support |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
362 //============================================================================= |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
363 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
364 #if defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) \ |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
365 || defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
366 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
367 struct Hal_SavedRegisters *hal_saved_interrupt_state; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
368 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
369 void |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
370 hal_ctrlc_isr_init(void) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
371 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
372 // A ROM monitor never enables the interrupt itself. This is left |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
373 // to the (RAM) application. |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
374 #ifndef CYGSEM_HAL_ROM_MONITOR |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
375 hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
376 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
377 #if 1 // Prevents crash on older stubs |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
378 if (CYGNUM_CALL_IF_TABLE_VERSION != CYGACC_CALL_IF_VERSION()) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
379 return; |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
380 |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
381 // Now trash that value - otherwise downloading an image with |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
382 // builtin stubs on a board with older stubs may cause all |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
383 // subsequent runs to (wrongly) fall through to the below code. |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
384 // If there is a new stub on the board, it will reinitialize the |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
385 // version field on reset. |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
386 // Yes, this is a gross hack! |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
387 CYGACC_CALL_IF_VERSION_SET(CYGNUM_CALL_IF_TABLE_VERSION+1); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
388 #endif |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
389 |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
390 CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_IRQ_ENABLE); |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
107
diff
changeset
|
391 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
392 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
393 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
394 cyg_uint32 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
395 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
396 { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
397 hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
398 int isr_ret, ctrlc = 0; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
399 |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
400 isr_ret = CYGACC_COMM_IF_DBG_ISR(*__chan, &ctrlc, vector, data); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
401 if (ctrlc) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
402 cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state ); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
403 return isr_ret; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
404 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
405 #endif // CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT || CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
406 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
407 //-------------------------------------------------------------------------- |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
408 // Init function. It should be called from the platform initialization code. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
409 // For monitor configurations it will initialize the calling interface table, |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
410 // for client configurations it will patch the existing table as per |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
411 // configuration. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
412 void |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
413 hal_if_init(void) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
414 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
415 // Set up services provided by monitors |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
416 #ifdef CYGPRI_HAL_IMPLEMENTS_IF_SERVICES |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
417 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
418 int i, j; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
419 // Initialize tables with the NOP service. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
420 // This should only be done for service routine entries - data |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
421 // pointers should be NULLed. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
422 for (i = 0; i < CYGNUM_CALL_IF_TABLE_SIZE; i++) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
423 hal_virtual_vector_table[i] = (CYG_ADDRWORD) &nop_service; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
424 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
425 for (j = 0; j < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS+1; j++) |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
426 for (i = 0; i < CYGNUM_COMM_IF_TABLE_SIZE; i++) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
427 comm_channels[j][i] = (CYG_ADDRWORD) &nop_service; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
428 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
429 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
430 // Fill in supported services. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
431 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
432 // Version number |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
433 CYGACC_CALL_IF_VERSION_SET(CYGNUM_CALL_IF_TABLE_VERSION); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
434 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
435 // ICTRL and EXC tables - I assume these to be the equivalents of |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
436 // ISR and VSR tables. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
437 CYGACC_CALL_IF_ICTRL_TABLE_SET(hal_interrupt_handlers); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
438 CYGACC_CALL_IF_EXC_TABLE_SET(hal_vsr_table); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
439 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
440 // Miscellaneous services with wrappers in this file. |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
441 CYGACC_CALL_IF_RESET_SET(reset); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
442 CYGACC_CALL_IF_KILL_VECTOR_SET(kill_by_reset); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
443 CYGACC_CALL_IF_DELAY_US_SET(delay_us); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
444 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
445 // Comm controls |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
446 CYGACC_CALL_IF_SET_DEBUG_COMM_SET(set_debug_comm); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
447 CYGACC_CALL_IF_SET_CONSOLE_COMM_SET(set_console_comm); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
448 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
449 // Cache functions |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
450 CYGACC_CALL_IF_FLUSH_ICACHE_SET(flush_icache); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
451 CYGACC_CALL_IF_FLUSH_DCACHE_SET(flush_dcache); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
452 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
453 // Clear debug and console procs entries. If platform has been |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
454 // configured to use a separate console port, it will be set |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
455 // up later (hal_diag_init). Alternatively (if this is a stub) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
456 // it will be initialized with the output mangler |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
457 // (O-packetizer for GDB) which uses the debug comms. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
458 set_debug_comm(CYGNUM_CALL_IF_SET_COMM_ID_EMPTY); |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
459 set_console_comm(CYGNUM_CALL_IF_SET_COMM_ID_EMPTY); |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
460 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
461 // Data entries not currently supported in eCos |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
462 CYGACC_CALL_IF_CPU_DATA_SET(0); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
463 CYGACC_CALL_IF_BOARD_DATA_SET(0); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
464 CYGACC_CALL_IF_DBG_DATA_SET(0); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
465 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
466 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
467 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
468 // Reset console interrupt flag. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
469 CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(0); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
470 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
471 // Set up services provided by clients |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
472 #if defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
473 ( defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs) \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
474 || defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
475 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
476 patch_dbg_syscalls( (void *)(hal_virtual_vector_table) ); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
477 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
478 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
479 // Init client services |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
480 #if !defined(CYGPKG_KERNEL) && defined(CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
481 // Only include this code if we do not have a kernel. Otherwise |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
482 // the kernel supplies the functionality for the app we are linked |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
483 // with. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
484 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
485 // Prepare for application installation of thread info function in |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
486 // vector table. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
487 init_thread_syscall( (void *)&hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_SYSCALL] ); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
488 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
489 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
490 // Finally, install async breakpoint handler if it is configured in. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
491 // FIXME: this should probably check for STUBS instead (but code is |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
492 // conditional on BREAK for now) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
493 #if defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
494 // Install async breakpoint handler into vector table. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
495 CYGACC_CALL_IF_INSTALL_BPT_FN_SET(&cyg_hal_gdb_interrupt); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
496 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
diff
changeset
|
497 } |
