OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [mips/] [jmr3904/] [current/] [src/] [plf_misc.c] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
//==========================================================================
2
//
3
//      plf_misc.c
4
//
5
//      HAL platform miscellaneous functions
6
//
7
//==========================================================================
8
// ####ECOSGPLCOPYRIGHTBEGIN####                                            
9
// -------------------------------------------                              
10
// This file is part of eCos, the Embedded Configurable Operating System.   
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under    
14
// the terms of the GNU General Public License as published by the Free     
15
// Software Foundation; either version 2 or (at your option) any later      
16
// version.                                                                 
17
//
18
// eCos is distributed in the hope that it will be useful, but WITHOUT      
19
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or    
20
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License    
21
// for more details.                                                        
22
//
23
// You should have received a copy of the GNU General Public License        
24
// along with eCos; if not, write to the Free Software Foundation, Inc.,    
25
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.            
26
//
27
// As a special exception, if other files instantiate templates or use      
28
// macros or inline functions from this file, or you compile this file      
29
// and link it with other works to produce a work based on this file,       
30
// this file does not by itself cause the resulting work to be covered by   
31
// the GNU General Public License. However the source code for this file    
32
// must still be made available in accordance with section (3) of the GNU   
33
// General Public License v2.                                               
34
//
35
// This exception does not invalidate any other reasons why a work based    
36
// on this file might be covered by the GNU General Public License.         
37
// -------------------------------------------                              
38
// ####ECOSGPLCOPYRIGHTEND####                                              
39
//==========================================================================
40
//#####DESCRIPTIONBEGIN####
41
//
42
// Author(s):    nickg
43
// Contributors: nickg, jlarmour
44
// Date:         1999-01-21
45
// Purpose:      HAL miscellaneous functions
46
// Description:  This file contains miscellaneous functions provided by the
47
//               HAL.
48
//
49
//####DESCRIPTIONEND####
50
//
51
//========================================================================*/
52
 
53
#include <pkgconf/hal.h>
54
 
55
#include <cyg/infra/cyg_type.h>         // Base types
56
#include <cyg/infra/cyg_trac.h>         // tracing macros
57
#include <cyg/infra/cyg_ass.h>          // assertion macros
58
 
59
#include <cyg/hal/hal_arch.h>           // architectural definitions
60
 
61
#include <cyg/hal/hal_intr.h>           // Interrupt handling
62
 
63
#include <cyg/hal/hal_cache.h>          // Cache handling
64
 
65
/*------------------------------------------------------------------------*/
66
 
67
extern void patch_dbg_syscalls(void * vector);
68
 
69
/*------------------------------------------------------------------------*/
70
 
71
void hal_platform_init(void)
72
{
73
 
74
    HAL_ICACHE_INVALIDATE_ALL();
75
    HAL_ICACHE_ENABLE();
76
    HAL_DCACHE_INVALIDATE_ALL();
77
    HAL_DCACHE_ENABLE();
78
 
79
#if !defined(CYGHWR_HAL_MIPS_TX39_JMR3904_ENABLE_TOE)
80
 
81
    HAL_TX39_DEBUG_TOE_DISABLE();
82
 
83
#else
84
 
85
    HAL_TX39_DEBUG_TOE_ENABLE();
86
 
87
#endif
88
 
89
#if defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT)   && \
90
    defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
91
    {
92
        patch_dbg_syscalls( (void *)(&hal_vsr_table[0]) );
93
    }
94
#endif
95
 
96
}
97
 
98
/*------------------------------------------------------------------------*/
99
/* Functions to support the detection and execution of a user provoked    */
100
/* program break. These are usually called from interrupt routines.       */
101
 
102
cyg_bool cyg_hal_is_break(char *buf, int size)
103
{
104
    while( size )
105
        if( buf[--size] == 0x03 ) return true;
106
 
107
    return false;
108
}
109
 
110
void cyg_hal_user_break( CYG_ADDRWORD *regs )
111
{
112
#if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
113
    // The following code should be at the very start of this function so
114
    // that it can access the RA register before it is saved and reused.
115
    register CYG_WORD32 ra;
116
    asm volatile ( "move %0,$31;" : "=r" (ra) );
117
 
118
        {
119
            typedef void install_bpt_fn(void *epc);
120
            CYG_WORD32 pc;
121
            HAL_SavedRegisters *sreg = (HAL_SavedRegisters *)regs;
122
            install_bpt_fn *ibp = (install_bpt_fn *)hal_vsr_table[35];
123
 
124
            if( regs == NULL ) pc = ra;
125
            else pc = sreg->pc;
126
 
127
            if( ibp != NULL ) ibp((void *)pc);
128
        }
129
 
130
#elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
131
 
132
        {
133
            extern void breakpoint(void);
134
            breakpoint();
135
        }
136
 
137
#else
138
 
139
        HAL_BREAKPOINT(breakinst);
140
 
141
#endif
142
 
143
}
144
 
145
/*------------------------------------------------------------------------*/
146
/* Control C ISR support                                                  */
147
 
148
#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT)
149
 
150
#define DIAG_BASE       0xfffff300
151
#define DIAG_SLCR       (DIAG_BASE+0x00)
152
#define DIAG_SLSR       (DIAG_BASE+0x04)
153
#define DIAG_SLDICR     (DIAG_BASE+0x08)
154
#define DIAG_SLDISR     (DIAG_BASE+0x0C)
155
#define DIAG_SFCR       (DIAG_BASE+0x10)
156
#define DIAG_SBRG       (DIAG_BASE+0x14)
157
#define DIAG_TFIFO      (DIAG_BASE+0x20)
158
#define DIAG_RFIFO      (DIAG_BASE+0x30)
159
 
160
#define BRG_T0          0x0000
161
#define BRG_T2          0x0100
162
#define BRG_T4          0x0200
163
#define BRG_T5          0x0300
164
 
165
struct Hal_SavedRegisters *hal_saved_interrupt_state;
166
 
167
void hal_ctrlc_isr_init(void)
168
{
169
    CYG_WORD16 dicr;
170
 
171
    HAL_READ_UINT16( DIAG_SLDICR , dicr );
172
    dicr = 0x0001;
173
    HAL_WRITE_UINT16( DIAG_SLDICR , dicr );
174
 
175
    HAL_INTERRUPT_SET_LEVEL( CYGHWR_HAL_GDB_PORT_VECTOR, 1 );
176
    HAL_INTERRUPT_UNMASK( CYGHWR_HAL_GDB_PORT_VECTOR );
177
}
178
 
179
cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
180
{
181
    char c;
182
    CYG_WORD16 disr;
183
 
184
    HAL_INTERRUPT_ACKNOWLEDGE( CYGHWR_HAL_GDB_PORT_VECTOR );
185
 
186
    HAL_READ_UINT16( DIAG_SLDISR , disr );
187
 
188
    if( disr & 0x0001 )
189
    {
190
 
191
        disr = disr & ~0x0001;
192
 
193
        HAL_READ_UINT8( DIAG_RFIFO, c );
194
 
195
        HAL_WRITE_UINT16( DIAG_SLDISR , disr );
196
 
197
        if( cyg_hal_is_break( &c , 1 ) )
198
            cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state );
199
    }
200
 
201
    return 2;
202
}
203
 
204
#endif
205
 
206
/*------------------------------------------------------------------------*/
207
/* End of plf_misc.c                                                      */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.