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

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/hal/v85x
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v850/v2_0/cdl/hal_v85x_v850.cdl
0,0 → 1,121
# ====================================================================
#
# hal_v85x_v850.cdl
#
# NEC/V850 variant architectural HAL package configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): gthomas
# Contributors: jlarmour
# Date: 2000-03-09
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_HAL_V85X_V850 {
display "V850 variant"
parent CYGPKG_HAL_V85X
hardware
include_dir cyg/hal
define_header hal_v85x_v850.h
description "
The V850 variant HAL package provides generic support
for this processor architecture. It is also necessary to
select a specific target platform HAL package."
 
define_proc {
puts $::cdl_header "#include <pkgconf/hal_v85x.h>"
}
 
compile v850_stub.c v850_misc.c context.S hal_diag.c
 
implements CYGINT_HAL_TESTS_NO_CACHES
 
cdl_interface CYGINT_HAL_V850_DIAG_ONCHIP_SERIAL0 {
display "Defined if platform uses standard on-chip serial0"
}
cdl_option CYGBLD_HAL_V850_DIAG_USE_ONCHIP_SERIAL0 {
display "Build diag driver for on-chip V850 serial 0"
active_if { CYGINT_HAL_V850_DIAG_ONCHIP_SERIAL0 != 0 }
compile hal_diag.c
}
 
cdl_interface CYGINT_HAL_V850_VARIANT_SA1 {
display "Defined if CPU is a V850/SA1"
}
 
cdl_interface CYGINT_HAL_V850_VARIANT_SB1 {
display "Defined if CPU is a V850/SB1"
}
 
requires 1 == CYGINT_HAL_V850_VARIANT_SA1 ^ 1 == CYGINT_HAL_V850_VARIANT_SB1
# by virtue of the above requires:
implements CYGINT_HAL_V85X_VARIANT
 
cdl_option CYGDBG_HAL_V850_ICE {
display "Support debugging via ICE"
default_value { (0 != CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT) && \
("RAM" != CYG_HAL_STARTUP) }
requires CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
implements CYGINT_HAL_V85X_ICE_DEBUG
compile -library=libextras.a v850_ice.cxx
description \
"This option enables additional support for debugging via
ICE, chiefly in the form of an interface to gdbserv which
allows it to provide eCos thread data in GDB."
}
 
make {
<PREFIX>/lib/target.ld: <PACKAGE>/src/v85x_v850.ld
$(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $<
@echo $@ ": \\" > $(notdir $@).deps
@tail +2 target.tmp >> $(notdir $@).deps
@echo >> $(notdir $@).deps
@rm target.tmp
}
 
cdl_option CYGBLD_LINKER_SCRIPT {
display "Linker script"
flavor data
no_define
calculated { "src/v85x_v850.ld" }
}
 
}
/v850/v2_0/tests/nmitest.c
0,0 → 1,97
//==========================================================================
//
// nmitest.c
//
// V850 NMI test program
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 2001-02-01
// Purpose: Test NMI function
// Description: This test allows the NMI functionality to be tested.
// It is not built by default.
//
//####DESCRIPTIONEND####
//
//========================================================================*/
 
#include <cyg/hal/hal_intr.h>
#include <cyg/infra/diag.h>
 
#include <cyg/kernel/kapi.h>
 
int nmicount;
char stack[4096];
static cyg_handle_t thr0h;
static cyg_thread thr0;
 
void
nmi_handler(cyg_addrword_t data, cyg_code_t exception_number,
cyg_addrword_t info)
{
nmicount++;
}
 
static void
entry0( cyg_addrword_t data )
{
int oldnmicount=0;
 
cyg_exception_set_handler( CYGNUM_HAL_VECTOR_NMI,
&nmi_handler,
0,
NULL,
NULL );
for (;;) {
if ( oldnmicount != nmicount ) {
diag_printf("Caught NMI\n");
oldnmicount = nmicount;
}
}
}
 
void
cyg_user_start(void)
{
cyg_thread_create(4, entry0, (cyg_addrword_t)0, "thread 0",
(void *)&stack[0], sizeof(stack), &thr0h, &thr0 );
cyg_thread_resume(thr0h);
}
 
// EOF nmitest.c
/v850/v2_0/include/v850_common.h
0,0 → 1,562
#ifndef CYGONCE_V850_COMMON_H
#define CYGONCE_V850_COMMON_H
 
/*=============================================================================
//
// v850_common.h
//
// NEC/V850 common definitions
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas, jlarmour
// Contributors: gthomas, jlarmour
// Date: 2000-03-10
// Purpose: NEC/V850 CPU family hardware description
// Description:
// Usage: #include <cyg/hal/v850_common.h>
//
//####DESCRIPTIONEND####
//
//===========================================================================*/
 
// Note: these defintions match the documentation, thus no attempt is made
// to sanitise (mangle) the names. Also, care should be taken to keep this
// clean for use in assembly code (no "C" constructs).
 
#include <pkgconf/hal.h>
 
// These definitions are for the NEC V850/SA1 (70301x)
 
#if CYGINT_HAL_V850_VARIANT_SA1
 
#define V850_REGS 0xFFFFF000
 
#define V850_REG_P0 0xFFFFF000
#define V850_REG_P1 0xFFFFF002
#define V850_REG_P2 0xFFFFF004
#define V850_REG_P3 0xFFFFF006
#define V850_REG_P4 0xFFFFF008
#define V850_REG_P5 0xFFFFF00A
#define V850_REG_P6 0xFFFFF00C
#define V850_REG_P7 0xFFFFF00E
#define V850_REG_P8 0xFFFFF010
#define V850_REG_P9 0xFFFFF012
#define V850_REG_P10 0xFFFFF014
#define V850_REG_P11 0xFFFFF016
#define V850_REG_P12 0xFFFFF018
 
#define V850_REG_PM0 0xFFFFF020
#define V850_REG_PM1 0xFFFFF022
#define V850_REG_PM2 0xFFFFF024
#define V850_REG_PM3 0xFFFFF026
#define V850_REG_PM4 0xFFFFF028
#define V850_REG_PM5 0xFFFFF02A
#define V850_REG_PM6 0xFFFFF02C
#define V850_REG_PM9 0xFFFFF032
#define V850_REG_PM10 0xFFFFF034
#define V850_REG_PM11 0xFFFFF036
#define V850_REG_PM12 0xFFFFF038
 
#define V850_REG_MM 0xFFFFF04C
 
#define V850_REG_PMC12 0xFFFFF058
 
#define V850_REG_DWC 0xFFFFF060
#define V850_REG_BCC 0xFFFFF062
#define V850_REG_SYC 0xFFFFF064
#define V850_REG_MAM 0xFFFFF068
 
#define V850_REG_PSC 0xFFFFF070
#define V850_REG_PCC 0xFFFFF074
#define V850_REG_SYS 0xFFFFF078
 
#define V850_REG_PU0 0xFFFFF080
#define V850_REG_PU1 0xFFFFF082
#define V850_REG_PU2 0xFFFFF084
#define V850_REG_PU3 0xFFFFF086
#define V850_REG_PU10 0xFFFFF094
#define V850_REG_PU11 0xFFFFF096
 
#define V850_REG_PF1 0xFFFFF0A2
#define V850_REG_PF2 0xFFFFF0A4
#define V850_REG_PF10 0xFFFFF0B4
 
#define V850_REG_EGP0 0xFFFFF0C0
#define V850_REG_EGN0 0xFFFFF0C2
 
#define V850_REG_WDTIC 0xFFFFF100
#define V850_REG_PIC0 0xFFFFF102
#define V850_REG_PIC1 0xFFFFF104
#define V850_REG_PIC2 0xFFFFF106
#define V850_REG_PIC3 0xFFFFF108
#define V850_REG_PIC4 0xFFFFF10A
#define V850_REG_PIC5 0xFFFFF10C
#define V850_REG_PIC6 0xFFFFF10E
#define V850_REG_WTIIC 0xFFFFF110
#define V850_REG_WTNIIC 0xFFFFF110
#define V850_REG_TMIC00 0xFFFFF112
#define V850_REG_TMIC01 0xFFFFF114
#define V850_REG_TMIC10 0xFFFFF116
#define V850_REG_TMIC11 0xFFFFF118
#define V850_REG_TMIC2 0xFFFFF11A
#define V850_REG_TMIC3 0xFFFFF11C
#define V850_REG_TMIC4 0xFFFFF11E
#define V850_REG_TMIC5 0xFFFFF120
#define V850_REG_CSIC0 0xFFFFF122
#define V850_REG_SERIC0 0xFFFFF124
#define V850_REG_CSIC1 0xFFFFF126
#define V850_REG_SRIC0 0xFFFFF126
#define V850_REG_STIC0 0xFFFFF128
#define V850_REG_CSIC2 0xFFFFF12A
#define V850_REG_SRIC2 0xFFFFF12A
#define V850_REG_SERIC1 0xFFFFF12C
#define V850_REG_SRIC1 0xFFFFF12E
#define V850_REG_STIC1 0xFFFFF130
#define V850_REG_ADIC 0xFFFFF132
#define V850_REG_DMAIC0 0xFFFFF134
#define V850_REG_DMAIC1 0xFFFFF136
#define V850_REG_DMAIC2 0xFFFFF138
#define V850_REG_WTIC 0xFFFFF13A
#define V850_REG_WTNIC 0xFFFFF13A
 
#define V850_REG_ISPR 0xFFFFF166
#define V850_REG_PRCMD 0xFFFFF170
 
#define V850_REG_DIOA0 0xFFFFF180
#define V850_REG_DRA0 0xFFFFF182
#define V850_REG_DBC0 0xFFFFF184
#define V850_REG_DCHC0 0xFFFFF186
 
#define V850_REG_DIOA1 0xFFFFF190
#define V850_REG_DRA1 0xFFFFF192
#define V850_REG_DBC1 0xFFFFF194
#define V850_REG_DCHC1 0xFFFFF196
 
#define V850_REG_DIOA2 0xFFFFF1A0
#define V850_REG_DRA2 0xFFFFF1A2
#define V850_REG_DBC2 0xFFFFF1A4
#define V850_REG_DCHC2 0xFFFFF1A6
 
#define V850_REG_TM0 0xFFFFF200
#define V850_REG_CR00 0xFFFFF202
#define V850_REG_CR01 0xFFFFF204
#define V850_REG_PRM0 0xFFFFF206
#define V850_REG_PRM00 0xFFFFF206
#define V850_REG_TMC0 0xFFFFF208
#define V850_REG_CRC0 0xFFFFF20A
#define V850_REG_TOC0 0xFFFFF20C
#define V850_REG_PRM01 0xFFFFF20E
 
#define V850_REG_TM1 0xFFFFF210
#define V850_REG_CR10 0xFFFFF212
#define V850_REG_CR11 0xFFFFF214
#define V850_REG_PRM1 0xFFFFF216
#define V850_REG_PRM10 0xFFFFF216
#define V850_REG_TMC1 0xFFFFF218
#define V850_REG_CRC1 0xFFFFF21A
#define V850_REG_TOC1 0xFFFFF21C
#define V850_REG_PRM11 0xFFFFF21E
 
#define V850_REG_TM2 0xFFFFF240
#define V850_REG_CR20 0xFFFFF242
#define V850_REG_TCL2 0xFFFFF244
#define V850_REG_TMC2 0xFFFFF246
#define V850_REG_TM23 0xFFFFF24A
#define V850_REG_CR23 0xFFFFF24C
#define V850_REG_TCL21 0xFFFFF24E
 
#define V850_REG_TM3 0xFFFFF250
#define V850_REG_CR30 0xFFFFF252
#define V850_REG_TCL3 0xFFFFF254
#define V850_REG_TMC3 0xFFFFF256
#define V850_REG_TCL31 0xFFFFF25E
 
#define V850_REG_TM4 0xFFFFF260
#define V850_REG_CR40 0xFFFFF262
#define V850_REG_TCL4 0xFFFFF264
#define V850_REG_TMC4 0xFFFFF266
#define V850_REG_TM45 0xFFFFF26A
#define V850_REG_CR45 0xFFFFF26C
#define V850_REG_TCL41 0xFFFFF26E
 
#define V850_REG_TM5 0xFFFFF270
#define V850_REG_CR50 0xFFFFF272
#define V850_REG_TCL5 0xFFFFF274
#define V850_REG_TMC5 0xFFFFF276
#define V850_REG_TCL51 0xFFFFF27E
 
#define V850_REG_SIO0 0xFFFFF2A0
#define V850_REG_CSIM0 0xFFFFF2A2
#define V850_REG_CSIS0 0xFFFFF2A4
 
#define V850_REG_SIO1 0xFFFFF2B0
#define V850_REG_CSIM1 0xFFFFF2B2
#define V850_REG_CSIS1 0xFFFFF2B4
 
#define V850_REG_SIO2 0xFFFFF2C0
#define V850_REG_CSIM2 0xFFFFF2C2
#define V850_REG_CSIS2 0xFFFFF2C4
 
#define V850_REG_ASIM0 0xFFFFF300
#define V850_REG_ASIS0 0xFFFFF302
#define V850_REG_BRGC0 0xFFFFF304
#define V850_REG_TXS0 0xFFFFF306
#define V850_REG_RXB0 0xFFFFF308
#define V850_REG_BRGMC0 0xFFFFF30E
#define V850_REG_BRGMC00 0xFFFFF30E
 
#define V850_REG_ASIM1 0xFFFFF310
#define V850_REG_ASIS1 0xFFFFF312
#define V850_REG_BRGC1 0xFFFFF314
#define V850_REG_TXS1 0xFFFFF316
#define V850_REG_RXB1 0xFFFFF318
#define V850_REG_BRGMC1 0xFFFFF31E
#define V850_REG_BRGMC10 0xFFFFF31E
#define V850_REG_BRGMC01 0xFFFFF320
 
#define V850_REG_IICC0 0xFFFFF340
#define V850_REG_IICS0 0xFFFFF342
#define V850_REG_IICCL0 0xFFFFF344
#define V850_REG_SVA0 0xFFFFF346
#define V850_REG_IIC0 0xFFFFF348
#define V850_REG_IICX0 0xFFFFF34A
 
#define V850_REG_WTM 0xFFFFF360
#define V850_REG_OSTS 0xFFFFF380
#define V850_REG_WDCS 0xFFFFF382
#define V850_REG_WDTM 0xFFFFF384
 
#define V850_REG_RTBL 0xFFFFF3A0
#define V850_REG_RTBH 0xFFFFF3A2
#define V850_REG_RTPM 0xFFFFF3A4
#define V850_REG_RTPC 0xFFFFF3A6
 
#define V850_REG_ADM 0xFFFFF3C0
#define V850_REG_ADS 0xFFFFF3C2
#define V850_REG_ADCR 0xFFFFF3C4
#define V850_REG_ADCRH 0xFFFFF3C6
 
/*---------------------------------------------------------------------------*/
 
// These definitions are for the NEC V850/SB1 (70303x)
 
#elif CYGINT_HAL_V850_VARIANT_SB1
 
#define V850_REGS 0xFFFFF000
 
#define V850_REG_P0 0xFFFFF000
#define V850_REG_P1 0xFFFFF002
#define V850_REG_P2 0xFFFFF004
#define V850_REG_P3 0xFFFFF006
#define V850_REG_P4 0xFFFFF008
#define V850_REG_P5 0xFFFFF00A
#define V850_REG_P6 0xFFFFF00C
#define V850_REG_P7 0xFFFFF00E
#define V850_REG_P8 0xFFFFF010
#define V850_REG_P9 0xFFFFF012
#define V850_REG_P10 0xFFFFF014
#define V850_REG_P11 0xFFFFF016
 
#define V850_REG_PM0 0xFFFFF020
#define V850_REG_PM1 0xFFFFF022
#define V850_REG_PM2 0xFFFFF024
#define V850_REG_PM3 0xFFFFF026
#define V850_REG_PM4 0xFFFFF028
#define V850_REG_PM5 0xFFFFF02A
#define V850_REG_PM6 0xFFFFF02C
#define V850_REG_PM9 0xFFFFF032
#define V850_REG_PM10 0xFFFFF034
#define V850_REG_PM11 0xFFFFF036
 
#define V850_REG_PAC 0xFFFFF040
#define V850_REG_MM 0xFFFFF04C
 
#define V850_REG_DWC 0xFFFFF060
#define V850_REG_BCC 0xFFFFF062
#define V850_REG_SYC 0xFFFFF064
#define V850_REG_MAM 0xFFFFF068
 
#define V850_REG_PSC 0xFFFFF070
#define V850_REG_PCC 0xFFFFF074
#define V850_REG_SYS 0xFFFFF078
 
#define V850_REG_PU0 0xFFFFF080
#define V850_REG_PU1 0xFFFFF082
#define V850_REG_PU2 0xFFFFF084
#define V850_REG_PU3 0xFFFFF086
#define V850_REG_PU10 0xFFFFF094
#define V850_REG_PU11 0xFFFFF096
 
#define V850_REG_PF1 0xFFFFF0A2
#define V850_REG_PF2 0xFFFFF0A4
#define V850_REG_PF3 0xFFFFF0A6
#define V850_REG_PF10 0xFFFFF0B4
 
#define V850_REG_EGP0 0xFFFFF0C0
#define V850_REG_EGN0 0xFFFFF0C2
 
#define V850_REG_WDTIC 0xFFFFF100
#define V850_REG_PIC0 0xFFFFF102
#define V850_REG_PIC1 0xFFFFF104
#define V850_REG_PIC2 0xFFFFF106
#define V850_REG_PIC3 0xFFFFF108
#define V850_REG_PIC4 0xFFFFF10A
#define V850_REG_PIC5 0xFFFFF10C
#define V850_REG_PIC6 0xFFFFF10E
#define V850_REG_WTNIIC 0xFFFFF118
#define V850_REG_TMIC00 0xFFFFF11A
#define V850_REG_TMIC01 0xFFFFF11C
#define V850_REG_TMIC10 0xFFFFF11E
#define V850_REG_TMIC11 0xFFFFF120
#define V850_REG_TMIC2 0xFFFFF122
#define V850_REG_TMIC3 0xFFFFF124
#define V850_REG_TMIC4 0xFFFFF126
#define V850_REG_TMIC5 0xFFFFF128
#define V850_REG_TMIC6 0xFFFFF12A
#define V850_REG_TMIC7 0xFFFFF12C
#define V850_REG_CSIC0 0xFFFFF12E
#define V850_REG_SERIC0 0xFFFFF130
#define V850_REG_CSIC1 0xFFFFF132
#define V850_REG_SRIC0 0xFFFFF132
#define V850_REG_STIC0 0xFFFFF134
#define V850_REG_CSIC2 0xFFFFF136
#define V850_REG_SRIC2 0xFFFFF136
#define V850_REG_IICIC1 0xFFFFF138
#define V850_REG_SERIC1 0xFFFFF13A
#define V850_REG_CSIC3 0xFFFFF13C
#define V850_REG_SRIC3 0xFFFFF13C
#define V850_REG_STIC1 0xFFFFF13E
#define V850_REG_CSIC4 0xFFFFF140
#define V850_REG_SRIC4 0xFFFFF140
#define V850_REG_IEBIC1 0xFFFFF142
#define V850_REG_IEBIC2 0xFFFFF144
#define V850_REG_ADIC 0xFFFFF146
#define V850_REG_DMAIC0 0xFFFFF148
#define V850_REG_DMAIC1 0xFFFFF14A
#define V850_REG_DMAIC2 0xFFFFF14C
#define V850_REG_DMAIC3 0xFFFFF14E
#define V850_REG_DMAIC4 0xFFFFF150
#define V850_REG_DMAIC5 0xFFFFF152
#define V850_REG_WTNIC 0xFFFFF154
#define V850_REG_KRIC 0xFFFFF156
 
#define V850_REG_ISPR 0xFFFFF166
#define V850_REG_PRCMD 0xFFFFF170
 
#define V850_REG_DIOA0 0xFFFFF180
#define V850_REG_DRA0 0xFFFFF182
#define V850_REG_DBC0 0xFFFFF184
#define V850_REG_DCHC0 0xFFFFF186
 
#define V850_REG_DIOA1 0xFFFFF190
#define V850_REG_DRA1 0xFFFFF192
#define V850_REG_DBC1 0xFFFFF194
#define V850_REG_DCHC1 0xFFFFF196
 
#define V850_REG_DIOA2 0xFFFFF1A0
#define V850_REG_DRA2 0xFFFFF1A2
#define V850_REG_DBC2 0xFFFFF1A4
#define V850_REG_DCHC2 0xFFFFF1A6
 
#define V850_REG_DIOA3 0xFFFFF1B0
#define V850_REG_DRA3 0xFFFFF1B2
#define V850_REG_DBC3 0xFFFFF1B4
#define V850_REG_DCHC3 0xFFFFF1B6
 
#define V850_REG_DIOA4 0xFFFFF1C0
#define V850_REG_DRA4 0xFFFFF1C2
#define V850_REG_DBC4 0xFFFFF1C4
#define V850_REG_DCHC4 0xFFFFF1C6
 
#define V850_REG_DIOA5 0xFFFFF1D0
#define V850_REG_DRA5 0xFFFFF1D2
#define V850_REG_DBC5 0xFFFFF1D4
#define V850_REG_DCHC5 0xFFFFF1D6
 
#define V850_REG_TM0 0xFFFFF200
#define V850_REG_CR00 0xFFFFF202
#define V850_REG_CR01 0xFFFFF204
#define V850_REG_PRM00 0xFFFFF206
#define V850_REG_TMC0 0xFFFFF208
#define V850_REG_CRC0 0xFFFFF20A
#define V850_REG_TOC0 0xFFFFF20C
#define V850_REG_PRM01 0xFFFFF20E
 
#define V850_REG_TM1 0xFFFFF210
#define V850_REG_CR10 0xFFFFF212
#define V850_REG_CR11 0xFFFFF214
#define V850_REG_PRM10 0xFFFFF216
#define V850_REG_TMC1 0xFFFFF218
#define V850_REG_CRC1 0xFFFFF21A
#define V850_REG_TOC1 0xFFFFF21C
#define V850_REG_PRM11 0xFFFFF21E
 
#define V850_REG_TM2 0xFFFFF240
#define V850_REG_CR20 0xFFFFF242
#define V850_REG_TCL20 0xFFFFF244
#define V850_REG_TMC2 0xFFFFF246
#define V850_REG_TM23 0xFFFFF24A
#define V850_REG_CR23 0xFFFFF24C
#define V850_REG_TCL21 0xFFFFF24E
 
#define V850_REG_TM3 0xFFFFF250
#define V850_REG_CR30 0xFFFFF252
#define V850_REG_TCL30 0xFFFFF254
#define V850_REG_TMC3 0xFFFFF256
#define V850_REG_TCL31 0xFFFFF25E
 
#define V850_REG_TM4 0xFFFFF260
#define V850_REG_CR40 0xFFFFF262
#define V850_REG_TCL40 0xFFFFF264
#define V850_REG_TMC4 0xFFFFF266
#define V850_REG_TM45 0xFFFFF26A
#define V850_REG_CR45 0xFFFFF26C
#define V850_REG_TCL41 0xFFFFF26E
 
#define V850_REG_TM5 0xFFFFF270
#define V850_REG_CR50 0xFFFFF272
#define V850_REG_TCL50 0xFFFFF274
#define V850_REG_TMC5 0xFFFFF276
#define V850_REG_TCL51 0xFFFFF27E
 
#define V850_REG_TM6 0xFFFFF280
#define V850_REG_CR60 0xFFFFF282
#define V850_REG_TCL60 0xFFFFF284
#define V850_REG_TMC6 0xFFFFF286
#define V850_REG_TM67 0xFFFFF28A
#define V850_REG_CR67 0xFFFFF28C
#define V850_REG_TCL61 0xFFFFF28E
 
#define V850_REG_TM7 0xFFFFF290
#define V850_REG_CR70 0xFFFFF292
#define V850_REG_TCL70 0xFFFFF294
#define V850_REG_TMC7 0xFFFFF296
#define V850_REG_TCL71 0xFFFFF29E
 
#define V850_REG_SIO0 0xFFFFF2A0
#define V850_REG_CSIM0 0xFFFFF2A2
#define V850_REG_CSIS0 0xFFFFF2A4
 
#define V850_REG_SIO1 0xFFFFF2B0
#define V850_REG_CSIM1 0xFFFFF2B2
#define V850_REG_CSIS1 0xFFFFF2B4
 
#define V850_REG_SIO2 0xFFFFF2C0
#define V850_REG_CSIM2 0xFFFFF2C2
#define V850_REG_CSIS2 0xFFFFF2C4
 
#define V850_REG_SIO3 0xFFFFF2D0
#define V850_REG_CSIM3 0xFFFFF2D2
#define V850_REG_CSIS3 0xFFFFF2D4
 
#define V850_REG_SIO4 0xFFFFF2E0
#define V850_REG_CSIM4 0xFFFFF2E2
#define V850_REG_CSIB4 0xFFFFF2E4
#define V850_REG_BRGCN4 0xFFFFF2E6
#define V850_REG_BRGCK4 0xFFFFF2E8
 
#define V850_REG_ASIM0 0xFFFFF300
#define V850_REG_ASIS0 0xFFFFF302
#define V850_REG_BRGC0 0xFFFFF304
#define V850_REG_TXS0 0xFFFFF306
#define V850_REG_RXB0 0xFFFFF308
#define V850_REG_BRGMC00 0xFFFFF30E
 
#define V850_REG_ASIM1 0xFFFFF310
#define V850_REG_ASIS1 0xFFFFF312
#define V850_REG_BRGC1 0xFFFFF314
#define V850_REG_TXS1 0xFFFFF316
#define V850_REG_RXB1 0xFFFFF318
#define V850_REG_BRGMC10 0xFFFFF31E
#define V850_REG_BRGMC01 0xFFFFF320
#define V850_REG_BRGMC11 0xFFFFF322
 
#define V850_REG_IICC0 0xFFFFF340
#define V850_REG_IICS0 0xFFFFF342
#define V850_REG_IICCL0 0xFFFFF344
#define V850_REG_SVA0 0xFFFFF346
#define V850_REG_IIC0 0xFFFFF348
#define V850_REG_IICX0 0xFFFFF34A
#define V850_REG_IICCE0 0xFFFFF34C
 
#define V850_REG_IICC1 0xFFFFF350
#define V850_REG_IICS1 0xFFFFF352
#define V850_REG_IICCL1 0xFFFFF354
#define V850_REG_SVA1 0xFFFFF356
#define V850_REG_IIC1 0xFFFFF358
#define V850_REG_IICX1 0xFFFFF35A
#define V850_REG_IICCE1 0xFFFFF35C
 
#define V850_REG_WTNM 0xFFFFF360
#define V850_REG_WTNCS 0xFFFFF364
 
#define V850_REG_CORCN 0xFFFFF36C
#define V850_REG_CORRQ 0xFFFFF36E
#define V850_REG_CORAD0 0xFFFFF370
#define V850_REG_CORAD1 0xFFFFF374
#define V850_REG_CORAD2 0xFFFFF378
#define V850_REG_CORAD3 0xFFFFF37C
 
#define V850_REG_OSTS 0xFFFFF380
#define V850_REG_WDCS 0xFFFFF382
#define V850_REG_WDTM 0xFFFFF384
#define V850_REG_DMAS 0xFFFFF38E
 
#define V850_REG_RTBL 0xFFFFF3A0
#define V850_REG_RTBH 0xFFFFF3A2
#define V850_REG_RTPM 0xFFFFF3A4
#define V850_REG_RTPC 0xFFFFF3A6
 
#define V850_REG_ADM1 0xFFFFF3C0
#define V850_REG_ADS 0xFFFFF3C2
#define V850_REG_ADCR 0xFFFFF3C4
#define V850_REG_ADCRH 0xFFFFF3C6
#define V850_REG_ADM2 0xFFFFF3C8
 
#define V850_REG_KRM 0xFFFFF3D0
 
#define V850_REG_NCC 0xFFFFF3D4
 
#else // elif CYGINT_HAL_V850_VARIANT_SB1
# error No v850 variant defined
#endif
 
 
/*---------------------------------------------------------------------------*/
/* end of v850_common.h */
#endif /* CYGONCE_V850_COMMON_H */
/v850/v2_0/include/var_cache.h
0,0 → 1,80
#ifndef CYGONCE_VAR_CACHE_H
#define CYGONCE_VAR_CACHE_H
 
//=============================================================================
//
// var_cache.h
//
// HAL cache control API
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg,jlarmour
// Date: 2001-03-21
// Purpose: Cache control API
// Description: The macros defined here provide the HAL APIs for handling
// cache control operations.
// Usage:
// #include <cyg/hal/var_cache.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <cyg/hal/plf_cache.h>
 
// No caches defined in this variant by default
#ifndef HAL_ICACHE_ENABLE
# define HAL_ICACHE_ENABLE()
# define HAL_ICACHE_DISABLE()
# define HAL_ICACHE_SYNC()
# define HAL_ICACHE_INVALIDATE_ALL()
#endif
 
#ifndef HAL_DCACHE_ENABLE
# define HAL_DCACHE_ENABLE()
# define HAL_DCACHE_DISABLE()
# define HAL_DCACHE_SYNC()
# define HAL_DCACHE_INVALIDATE_ALL()
#endif
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_VAR_CACHE_H
// End of var_cache.h
/v850/v2_0/include/var_intr.h
0,0 → 1,272
#ifndef CYGONCE_HAL_VAR_INTR_H
#define CYGONCE_HAL_VAR_INTR_H
 
//==========================================================================
//
// var_intr.h
//
// NEC V850 Interrupt and clock support
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg, jskov, gthomas, jlarmour
// Date: 2001-03-21
// Purpose: NEC V850 Interrupt support
// Description: The macros defined here provide the HAL APIs for handling
// interrupts and the clock for variants of the NEC V85x
// architecture.
//
// Usage:
// #include <cyg/hal/var_intr.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
 
#include <cyg/infra/cyg_type.h>
 
#include <cyg/hal/plf_intr.h>
 
//--------------------------------------------------------------------------
// NEC V850/SA1 (70301x) and V850/SB1 (70303x) vectors.
 
// These are the exception codes presented in the Cause register and
// correspond to VSRs. These values are the ones to use for HAL_VSR_GET/SET
 
#define CYGNUM_HAL_VECTOR_RESET 0x00
#define CYGNUM_HAL_VECTOR_NMI 0x01
#define CYGNUM_HAL_VECTOR_INTWDT 0x02 // watchdog timer NMI
#define CYGNUM_HAL_VECTOR_TRAP00 0x04
#define CYGNUM_HAL_VECTOR_TRAP10 0x05
#define CYGNUM_HAL_VECTOR_ILGOP 0x06 // illegal opcode
#define CYGNUM_HAL_VECTOR_INTWDTM 0x08 // watchdog timer maskable
#define CYGNUM_HAL_VECTOR_INTP0 0x09
#define CYGNUM_HAL_VECTOR_INTP1 0x0A
#define CYGNUM_HAL_VECTOR_INTP2 0x0B
#define CYGNUM_HAL_VECTOR_INTP3 0x0C
#define CYGNUM_HAL_VECTOR_INTP4 0x0D
#define CYGNUM_HAL_VECTOR_INTP5 0x0E
#define CYGNUM_HAL_VECTOR_INTP6 0x0F
 
#if CYGINT_HAL_V850_VARIANT_SA1
#define CYGNUM_HAL_VECTOR_INTWTNI 0x10
#define CYGNUM_HAL_VECTOR_INTTM00 0x11
#define CYGNUM_HAL_VECTOR_INTTM01 0x12
#define CYGNUM_HAL_VECTOR_INTTM10 0x13
#define CYGNUM_HAL_VECTOR_INTTM11 0x14
#define CYGNUM_HAL_VECTOR_INTTM2 0x15
#define CYGNUM_HAL_VECTOR_INTTM3 0x16
#define CYGNUM_HAL_VECTOR_INTTM4 0x17
#define CYGNUM_HAL_VECTOR_INTTM5 0x18
#define CYGNUM_HAL_VECTOR_INTIIC0 0x19
#define CYGNUM_HAL_VECTOR_INTCSI0 0x19
#define CYGNUM_HAL_VECTOR_INTSER0 0x1A
#define CYGNUM_HAL_VECTOR_INTSR0 0x1B
#define CYGNUM_HAL_VECTOR_INTCSI1 0x1B
#define CYGNUM_HAL_VECTOR_INTST0 0x1C
#define CYGNUM_HAL_VECTOR_INTCSI2 0x1D
#define CYGNUM_HAL_VECTOR_INTSER1 0x1E
#define CYGNUM_HAL_VECTOR_INTSR1 0x1F
#define CYGNUM_HAL_VECTOR_INTST1 0x20
#define CYGNUM_HAL_VECTOR_INTAD 0x21
#define CYGNUM_HAL_VECTOR_INTDMA0 0x22
#define CYGNUM_HAL_VECTOR_INTDMA1 0x23
#define CYGNUM_HAL_VECTOR_INTDMA2 0x24
#define CYGNUM_HAL_VECTOR_INTWTN 0x25
 
#define CYGNUM_HAL_VSR_MIN 0
#define CYGNUM_HAL_VSR_MAX 0x25
#define CYGNUM_HAL_VSR_COUNT 0x26
 
#elif CYGINT_HAL_V850_VARIANT_SB1
 
#define CYGNUM_HAL_VECTOR_INTWTNI 0x14
#define CYGNUM_HAL_VECTOR_INTTM00 0x15
#define CYGNUM_HAL_VECTOR_INTTM01 0x16
#define CYGNUM_HAL_VECTOR_INTTM10 0x17
#define CYGNUM_HAL_VECTOR_INTTM11 0x18
#define CYGNUM_HAL_VECTOR_INTTM2 0x19
#define CYGNUM_HAL_VECTOR_INTTM3 0x1A
#define CYGNUM_HAL_VECTOR_INTTM4 0x1B
#define CYGNUM_HAL_VECTOR_INTTM5 0x1C
#define CYGNUM_HAL_VECTOR_INTTM6 0x1D
#define CYGNUM_HAL_VECTOR_INTTM7 0x1E
#define CYGNUM_HAL_VECTOR_INTIIC0 0x1F
#define CYGNUM_HAL_VECTOR_INTCSI0 0x1F
#define CYGNUM_HAL_VECTOR_INTSER0 0x20
#define CYGNUM_HAL_VECTOR_INTSR0 0x21
#define CYGNUM_HAL_VECTOR_INTCSI1 0x21
#define CYGNUM_HAL_VECTOR_INTST0 0x22
#define CYGNUM_HAL_VECTOR_INTCSI2 0x23
#define CYGNUM_HAL_VECTOR_INTIIC1 0x24
#define CYGNUM_HAL_VECTOR_INTSER1 0x25
#define CYGNUM_HAL_VECTOR_INTSR1 0x26
#define CYGNUM_HAL_VECTOR_INTCSI3 0x26
#define CYGNUM_HAL_VECTOR_INTST1 0x27
#define CYGNUM_HAL_VECTOR_INTCSI4 0x28
#ifdef __SB2
#define CYGNUM_HAL_VECTOR_INTIE1 0x29
#define CYGNUM_HAL_VECTOR_INTIE2 0x2A
#endif
#define CYGNUM_HAL_VECTOR_INTAD 0x2B
#define CYGNUM_HAL_VECTOR_INTDMA0 0x2C
#define CYGNUM_HAL_VECTOR_INTDMA1 0x2D
#define CYGNUM_HAL_VECTOR_INTDMA2 0x2E
#define CYGNUM_HAL_VECTOR_INTDMA3 0x2F
#define CYGNUM_HAL_VECTOR_INTDMA4 0x30
#define CYGNUM_HAL_VECTOR_INTDMA5 0x31
#define CYGNUM_HAL_VECTOR_INTWTN 0x32
#define CYGNUM_HAL_VECTOR_INTKR 0x33
 
 
#define CYGNUM_HAL_VSR_MIN 0
#define CYGNUM_HAL_VSR_MAX 0x33
#define CYGNUM_HAL_VSR_COUNT ((CYGNUM_HAL_VSR_MAX-CYGNUM_HAL_VSR_MIN)+1)
 
#else
# error No v850 variant implemented!
#endif
 
// Min/Max exception numbers and how many there are
#define CYGNUM_HAL_EXCEPTION_MIN 0
#define CYGNUM_HAL_EXCEPTION_MAX 7
#define CYGNUM_HAL_EXCEPTION_COUNT ((CYGNUM_HAL_EXCEPTION_MAX-CYGNUM_HAL_EXCEPTION_MIN)+1)
 
// Min/Max ISR numbers and how many there are
#define CYGNUM_HAL_ISR_MIN 0x08
#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_VSR_MAX
#define CYGNUM_HAL_ISR_COUNT ((CYGNUM_HAL_ISR_MAX-CYGNUM_HAL_ISR_MIN)+1)
 
// The vector used by the Real time clock.
#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_VECTOR_INTTM10
 
// Mapping from interrupt numbers to hardware registers
#if CYGINT_HAL_V850_VARIANT_SA1
#define CYG_HAL_V85X_INTERRUPT_CONTROL_REGISTERS \
(volatile unsigned char *)V850_REG_WDTIC, \
(volatile unsigned char *)V850_REG_PIC0, \
(volatile unsigned char *)V850_REG_PIC1, \
(volatile unsigned char *)V850_REG_PIC2, \
(volatile unsigned char *)V850_REG_PIC3, \
(volatile unsigned char *)V850_REG_PIC4, \
(volatile unsigned char *)V850_REG_PIC5, \
(volatile unsigned char *)V850_REG_PIC6, \
(volatile unsigned char *)V850_REG_WTNIIC, \
(volatile unsigned char *)V850_REG_TMIC00, \
(volatile unsigned char *)V850_REG_TMIC01, \
(volatile unsigned char *)V850_REG_TMIC10, \
(volatile unsigned char *)V850_REG_TMIC11, \
(volatile unsigned char *)V850_REG_TMIC2, \
(volatile unsigned char *)V850_REG_TMIC3, \
(volatile unsigned char *)V850_REG_TMIC4, \
(volatile unsigned char *)V850_REG_TMIC5, \
(volatile unsigned char *)V850_REG_CSIC0, \
(volatile unsigned char *)V850_REG_SERIC0, \
(volatile unsigned char *)V850_REG_CSIC1, \
(volatile unsigned char *)V850_REG_STIC0, \
(volatile unsigned char *)V850_REG_CSIC2, \
(volatile unsigned char *)V850_REG_SERIC1, \
(volatile unsigned char *)V850_REG_SRIC1, \
(volatile unsigned char *)V850_REG_STIC1, \
(volatile unsigned char *)V850_REG_ADIC, \
(volatile unsigned char *)V850_REG_DMAIC0, \
(volatile unsigned char *)V850_REG_DMAIC1, \
(volatile unsigned char *)V850_REG_DMAIC2, \
(volatile unsigned char *)V850_REG_WTNIC
 
#elif CYGINT_HAL_V850_VARIANT_SB1
#define CYG_HAL_V85X_INTERRUPT_CONTROL_REGISTERS \
(volatile unsigned char *)V850_REG_WDTIC, \
(volatile unsigned char *)V850_REG_PIC0, \
(volatile unsigned char *)V850_REG_PIC1, \
(volatile unsigned char *)V850_REG_PIC2, \
(volatile unsigned char *)V850_REG_PIC3, \
(volatile unsigned char *)V850_REG_PIC4, \
(volatile unsigned char *)V850_REG_PIC5, \
(volatile unsigned char *)V850_REG_PIC6, \
NULL, \
NULL, \
NULL, \
NULL, \
(volatile unsigned char *)V850_REG_WTNIIC, \
(volatile unsigned char *)V850_REG_TMIC00, \
(volatile unsigned char *)V850_REG_TMIC01, \
(volatile unsigned char *)V850_REG_TMIC10, \
(volatile unsigned char *)V850_REG_TMIC11, \
(volatile unsigned char *)V850_REG_TMIC2, \
(volatile unsigned char *)V850_REG_TMIC3, \
(volatile unsigned char *)V850_REG_TMIC4, \
(volatile unsigned char *)V850_REG_TMIC5, \
(volatile unsigned char *)V850_REG_TMIC6, \
(volatile unsigned char *)V850_REG_TMIC7, \
(volatile unsigned char *)V850_REG_CSIC0, \
(volatile unsigned char *)V850_REG_SERIC0, \
(volatile unsigned char *)V850_REG_CSIC1, \
(volatile unsigned char *)V850_REG_STIC0, \
(volatile unsigned char *)V850_REG_CSIC2, \
(volatile unsigned char *)V850_REG_IICIC1, \
(volatile unsigned char *)V850_REG_SERIC1, \
(volatile unsigned char *)V850_REG_CSIC3, \
(volatile unsigned char *)V850_REG_STIC1, \
(volatile unsigned char *)V850_REG_CSIC4, \
(volatile unsigned char *)V850_REG_IEBIC1, \
(volatile unsigned char *)V850_REG_IEBIC2, \
(volatile unsigned char *)V850_REG_ADIC, \
(volatile unsigned char *)V850_REG_DMAIC0, \
(volatile unsigned char *)V850_REG_DMAIC1, \
(volatile unsigned char *)V850_REG_DMAIC2, \
(volatile unsigned char *)V850_REG_DMAIC3, \
(volatile unsigned char *)V850_REG_DMAIC4, \
(volatile unsigned char *)V850_REG_DMAIC5, \
(volatile unsigned char *)V850_REG_WTNIC, \
(volatile unsigned char *)V850_REG_KRIC
 
#endif // elif CYGINT_HAL_V850_VARIANT_SB1
 
//--------------------------------------------------------------------------
// Clock control
 
// This is handled by the default code
 
//--------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_VAR_INTR_H
// End of var_intr.h
/v850/v2_0/include/var_arch.h
0,0 → 1,93
#ifndef CYGONCE_HAL_VAR_ARCH_H
#define CYGONCE_HAL_VAR_ARCH_H
 
//==========================================================================
//
// var_arch.h
//
// Architecture specific abstractions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg, gthomas
// Date: 1999-02-17
// Purpose: Define architecture abstractions
// Description: This file contains any extra or modified definitions for
// this variant of the architecture.
// Usage: #include <cyg/hal/var_arch.h>
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <cyg/infra/cyg_type.h>
 
#define CYG_HAL_GDB_REG CYG_WORD32
 
// Copy a set of registers from a HAL_SavedRegisters structure into a
// GDB ordered array.
#define HAL_GET_GDB_REGISTERS( _aregval_ , _regs_ ) \
{ \
CYG_HAL_GDB_REG *_regval_ = (CYG_HAL_GDB_REG *)(_aregval_); \
int _i_; \
\
for( _i_ = 0; _i_ < 32; _i_++ ) \
_regval_[_i_] = (_regs_)->d[_i_]; \
\
_regval_[37] = (_regs_)->psw; \
_regval_[36] = (_regs_)->cause; \
_regval_[64] = (_regs_)->pc; \
}
 
// Copy a GDB ordered array into a HAL_SavedRegisters structure.
#define HAL_SET_GDB_REGISTERS( _regs_ , _aregval_ ) \
{ \
CYG_HAL_GDB_REG *_regval_ = (CYG_HAL_GDB_REG *)(_aregval_); \
int _i_; \
\
for( _i_ = 0; _i_ < 32; _i_++ ) \
(_regs_)->d[_i_] = _regval_[_i_]; \
\
(_regs_)->psw = _regval_[37]; \
(_regs_)->cause = _regval_[36]; \
(_regs_)->pc = _regval_[64]; \
}
 
//--------------------------------------------------------------------------
#endif // CYGONCE_HAL_VAR_ARCH_H
// End of var_arch.h
/v850/v2_0/ChangeLog
0,0 → 1,175
2003-04-10 Nick Garnett <nickg@balti.calivar.com>
 
* src/v85x_v850.ld:
Added .eh_frame to data section. This is a stopgap fix to allow
C++ programs that define exceptions to link and run. It does not
allow them to actually throw exceptions, since that depends on
compiler changes that have not been made. Further, more
far-reaching, linker script changes will also be needs when that
happens.
Added libsupc++.a to GROUP() directive for GCC versions later than
3.0.
 
2002-05-23 Jesper Skov <jskov@redhat.com>
 
* cdl/hal_v85x_v850.cdl: Don't run cache tests.
 
2001-06-21 Jonathan Larmour <jlarmour@redhat.com>
 
* include/v850_common.h: Add register defns for other V850/SA1 models.
 
2001-04-24 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_v850.cdl: Separate v850_ice.cxx into separate file
and only build if CYGDBG_HAL_V850_ICE. Also only build for ROM
or ROMRAM startup.
* src/hal_diag.c: msec_timeout can be static
* src/v850_stub.c: Separate ICE support into new v850_ice.cxx file from
here
* src/v850_ice.cxx: New file
* src/v85x_v850.ld: Enter at reset_vector for ROM or ROMRAM startup.
This is better when loading via ICE.
 
2001-03-29 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_v850.cdl: Fix typo.
 
2001-03-28 Jonathan Larmour <jlarmour@redhat.com>
 
* src/hal_diag.c: Move here from platform HALs - on-board serial0
is generic for V850 platforms.
 
* cdl/hal_v85x_v850.cdl: Build hal_diag.c
Add interfaces indicating variant.
Add option for ICE debugging.
 
* include/v850_common.h: Move register definitions here from
platform HAL and define both SA1 and SB1 variants.
Also rename some to match official docs.
 
* include/var_arch.h: No need to include <pkgconf/hal.h>
 
* include/var_cache.h: Provide empty default cache macros here.
 
* include/var_intr.h: Move interrupt definitions here from
platform HAL and define for both SA1 and SB1 variants.
Also rename some to match official docs.
 
* src/v850_misc.c: Doesn't use tracing, so don't include header.
 
* src/v850_stub.c: Reflect CYGNUM_HAL_VECTOR_WATCHDOG_TIMER ->
CYGNUM_HAL_VECTOR_INTWDT renaming.
Add support for debugging via ICE and gdbserv.
 
* src/v85x_v850.ld: Start at "start" not "reset_vector".
Support ram_vectors section (separated out to support ROMRAM startup).
 
* src/nec.ld: Remove - redundant.
 
* tests/nmitest.c: Added. Standalone test for checking if we've
received an NMI.
 
2000-09-06 Gary Thomas <gthomas@redhat.com>
 
* cdl/hal_v85x_v850.cdl: Improve [CPU] variant support.
 
2000-07-24 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* src/v850_stub.c (__is_breakpoint_function): Removed use
of CYG_LABEL_NAME() and added underscore to _breakinst.
 
* src/nec.ld, src/v85x_v850.ld:
Switched to new table definition mechanism.
 
2000-06-12 Gary Thomas <gthomas@redhat.com>
 
* src/v850_misc.c (hal_interrupt_unmask): Remove [extra]
debug message.
 
2000-06-09 Gary Thomas <gthomas@redhat.com>
 
* src/v850_misc.c: Make interrupt handling routines safe.
Also add asserts to verify.
 
2000-05-25 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850.ld: Add platform specifics. In particular the
special, hardwired symbol "hal_vsr_table" needs to be platform
specific.
 
2000-05-24 Gary Thomas <gthomas@redhat.com>
 
* include/v850_common.h: Split into platform specific files.
 
2000-04-25 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850.ld: Fix linking problem with "_etext".
 
2000-04-14 Gary Thomas <gthomas@redhat.com>
 
* src/v850_stub.c: Use 'br *' with a watchdog to emulate a
breakpoint since the hardware does not support them directly.
 
2000-04-11 Gary Thomas <gthomas@redhat.com>
 
* src/v850_stub.c (next_pc): Instruction "jmp [Rn]" was being
decoded incorrectly, leading to erroneous single step behaviour.
 
2000-03-31 Gary Thomas <gthomas@redhat.com>
 
* src/context.S: Use SLD/SST for smaller, faster code in context
save/restore functions.
 
2000-03-30 Gary Thomas <gthomas@redhat.com>
 
* src/context.S (_hal_longjmp):
(_hal_setjmp): Need to save R1/R2/R4/R5 since GCC seems to use them.
 
2000-03-27 Gary Thomas <gthomas@redhat.com>
 
* include/var_intr.h: Remove extra junk left over from cut&paste.
 
* src/context.S: Add setjmp/longjmp support.
 
2000-03-21 Gary Thomas <gthomas@redhat.com>
 
* src/v850_stub.c (__skipinst): Use single step code properly.
 
2000-03-20 Gary Thomas <gthomas@redhat.com>
 
* src/v850_stub.c: Add single step support.
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/v850/v2_0/src/v850_stub.c
0,0 → 1,326
//========================================================================
//
// v850_stub.c
//
// Helper functions for stub, generic to all NEC processors
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Red Hat, gthomas, jlarmour
// Contributors: Red Hat, gthomas, jskov
// Date: 1998-11-26
// Purpose:
// Description: Helper functions for stub, generic to all NEC processors
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
#include <stddef.h>
 
#include <pkgconf/hal.h>
#ifdef CYGPKG_CYGMON
#include <pkgconf/cygmon.h>
#endif
 
#ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
#include <cyg/hal/dbg-threads-api.h>
#endif
 
#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
#include <cyg/hal/hal_stub.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/hal_intr.h>
 
#ifndef FALSE
#define FALSE 0
#define TRUE 1
#endif
 
/* Given a trap value TRAP, return the corresponding signal. */
 
int __computeSignal (unsigned int trap_number)
{
unsigned short curins, *pc;
switch (trap_number) {
case CYGNUM_HAL_VECTOR_INTWDT: // watchdog timer NMI
pc = (unsigned short *)_hal_registers->pc;
curins = *pc;
if (curins == 0x0585) {
// "br *" - used for breakpoint
return SIGTRAP;
} else {
// Anything else - just ignore it happened
return 0;
}
case CYGNUM_HAL_VECTOR_NMI:
return SIGINT;
default:
return SIGTRAP;
}
}
 
 
/* Return the trap number corresponding to the last-taken trap. */
int __get_trap_number (void)
{
// The vector is not not part of the GDB register set so get it
// directly from the save context.
return _hal_registers->vector;
}
 
/* Set the currently-saved pc register value to PC. */
 
void set_pc (target_register_t pc)
{
put_register (PC, pc);
}
 
 
/*----------------------------------------------------------------------
* Single-step support
*/
 
/* Set things up so that the next user resume will execute one instruction.
This may be done by setting breakpoints or setting a single step flag
in the saved user registers, for example. */
 
static unsigned short *ss_saved_pc = 0;
static unsigned short ss_saved_instr[2];
static int ss_saved_instr_size;
 
#define FIXME() {diag_printf("FIXME - %s\n", __FUNCTION__); }
 
static unsigned short *
next_pc(unsigned short *pc)
{
unsigned short curins = *pc;
unsigned short *newpc = pc;
 
switch ((curins & 0x0780) >> 7) {
case 0x0:
if ((curins & 0x60) == 0x60) {
int Rn = curins & 0x1F;
newpc = (unsigned short *)get_register(Rn);
} else {
newpc = pc+1;
}
break;
case 0x1:
case 0x2:
case 0x3:
case 0x4:
case 0x5:
// Arithmetic - no branch opcodes
newpc = pc+1;
break;
case 0x6:
case 0x7:
case 0x8:
case 0x9:
case 0xA:
// Load and store - no branch opcodes
newpc = pc+2;
break;
case 0xB:
// Conditional branch
if (1) {
unsigned long psw = get_register(PSW);
#define PSW_SAT 0x10
#define PSW_CY 0x08
#define PSW_OV 0x04
#define PSW_S 0x02
#define PSW_Z 0x01
long disp = ((curins & 0xF800) >> 8) | ((curins & 0x70) >> 4);
int cc = curins & 0x0F;
int S = (psw & PSW_S) != 0;
int Z = (psw & PSW_Z) != 0;
int OV = (psw & PSW_OV) != 0;
int CY = (psw & PSW_CY) != 0;
int do_branch = 0;
if (curins & 0x8000) disp |= 0xFFFFFF00;
switch (cc) {
case 0x0: // BV
do_branch = (OV == 1);
break;
case 0x1: // BL
do_branch = (CY == 1);
break;
case 0x2: // BE
do_branch = (Z == 1);
break;
case 0x3: // BNH
do_branch = ((CY | Z) == 1);
break;
case 0x4: // BN
do_branch = (S == 1);
break;
case 0x5: // - always
do_branch = 1;
break;
case 0x6: // BLT
do_branch = ((S ^ OV) == 1);
break;
case 0x7: // BLE
do_branch = (((S ^ OV) | Z) == 1);
break;
case 0x8: // BNV
do_branch = (OV == 0);
break;
case 0x9: // BNL
do_branch = (CY == 0);
break;
case 0xA: // BNE
do_branch = (Z == 0);
break;
case 0xB: // BH
do_branch = ((CY | Z) == 0);
break;
case 0xC: // BP
do_branch = (S == 0);
break;
case 0xD: // BSA
do_branch = ((psw & PSW_SAT) != 0);
break;
case 0xE: // BGE
do_branch = ((S ^ OV) == 0);
break;
case 0xF: // BGT
do_branch = (((S ^ OV) | Z) == 0);
break;
}
if (do_branch) {
newpc = pc + disp;
} else {
newpc = pc + 1;
}
}
break;
case 0xC:
case 0xD:
case 0xE:
// Arithmetic & load/store - no branch opcodes
newpc = pc+2;
break;
case 0xF:
if ((curins & 0x60) >= 0x40) {
// Bitfield and extended instructions - no branch opcodes
newpc = pc+2;
} else {
// JR/JARL
long disp = ((curins & 0x3F) << 16) | *(pc+1);
if (curins & 0x20) disp |= 0xFFC00000;
newpc = pc + (disp>>1);
}
}
return newpc;
}
 
void __single_step (void)
{
unsigned short *pc = (unsigned short *)get_register(PC);
unsigned short *break_pc;
unsigned short _breakpoint[] = {0x07E0, 0x0780};
unsigned short *breakpoint = _breakpoint;
// If the current instruction is a branch, decide if the branch will
// be taken to determine where to set the breakpoint.
break_pc = next_pc(pc);
// Now see what kind of breakpoint can be used.
// Note: since this is a single step, always use the 32 bit version.
ss_saved_pc = break_pc;
ss_saved_instr_size = 2;
ss_saved_instr[0] = *break_pc;
*break_pc++ = *breakpoint++;
ss_saved_instr[1] = *break_pc;
*break_pc++ = *breakpoint++;
}
 
/* Clear the single-step state. */
 
void __clear_single_step (void)
{
unsigned short *pc, *val;
int i;
if (ss_saved_instr_size != 0) {
pc = ss_saved_pc;
val = ss_saved_instr;
for (i = 0; i < ss_saved_instr_size; i++) {
*pc++ = *val++;
}
ss_saved_instr_size = 0;
}
}
 
#if !defined(CYGPKG_CYGMON)
void __install_breakpoints (void)
{
// FIXME();
}
 
void __clear_breakpoints (void)
{
// FIXME();
}
#endif // !CYGPKG_CYGMON
 
/* If the breakpoint we hit is in the breakpoint() instruction, return a
non-zero value. */
 
int
__is_breakpoint_function ()
{
return get_register (PC) == (target_register_t)&_breakinst;
}
 
 
/* Skip the current instruction. Since this is only called by the
stub when the PC points to a breakpoint or trap instruction,
*/
 
void __skipinst (void)
{
unsigned short *pc = (unsigned short *)get_register(PC);
pc = next_pc(pc);
put_register(PC, (unsigned long)pc);
}
 
 
#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
// EOF v850_stub.c
/v850/v2_0/src/v850_ice.cxx
0,0 → 1,573
//========================================================================
//
// v850_ice.cxx
//
// ICE debugging support for V850 processors
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 2001-03-12
// Purpose:
// Description: ICE debugging support for V850 processors
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
#include <pkgconf/hal.h>
 
#ifdef CYGDBG_HAL_V850_ICE
 
#include <stddef.h>
#include <cyg/infra/cyg_type.h>
#include <cyg/hal/dbg-threads-api.h>
#include <cyg/hal/nec-stub.h>
#include <cyg/hal/hal_arch.h>
 
#define ICEDEBUG 0
 
#if ICEDEBUG
#include <cyg/infra/diag.h>
#endif
 
/* ----------------------------------------------------------------------- */
/* Common ICE syscall information */
 
/* Magic area for syscall information, from vectors.S */
__externC char hal_v85x_ice_syscall_info[];
 
/* Syscall operation codes. This is a "contract" with the host. */
 
#define V850ICE_SYSCALL_GET_THREADNEXT 1
#define V850ICE_SYSCALL_GET_THREADREGS 2
#define V850ICE_SYSCALL_SET_THREADREGS 3
#define V850ICE_SYSCALL_GET_CURRTHREAD 4
#define V850ICE_SYSCALL_GET_THREADINFO 5
#define V850ICE_SYSCALL_CONSOLE_INPUT 6
 
/* System call information area layout */
#define ICE_SYSCALL_INFO_VALIDATOR (*(int *)&hal_v85x_ice_syscall_info[0])
#define ICE_SYSCALL_INFO_STARTPC (*(int *)&hal_v85x_ice_syscall_info[4])
#define ICE_SYSCALL_INFO_ENDPC (*(int *)&hal_v85x_ice_syscall_info[8])
#define ICE_SYSCALL_INFO_STACK (*(int *)&hal_v85x_ice_syscall_info[12])
#define ICE_SYSCALL_INFO_IOBUF (*(int *)&hal_v85x_ice_syscall_info[16])
#define ICE_SYSCALL_INFO_DIAGOUTPC (*(int *)&hal_v85x_ice_syscall_info[20])
#define ICE_SYSCALL_INFO_DIAGOUTBUF (*(int *)&hal_v85x_ice_syscall_info[24])
#define ICE_SYSCALL_INFO_DIAGOUTBUFEND (*(int *)&hal_v85x_ice_syscall_info[28])
 
/* We can't use normal memcpy when invoked via the ICE. It may be unsafe. */
static void
my_memcpy( void *vd, const void *vs, int n)
{
char *d = (char *)vd;
char *s = (char *)vs;
 
while (n--)
*d++=*s++;
}
 
static void
my_memset( void *vs, char c, int n)
{
char *s = (char *)vs;
 
while (n--)
*s++ = c;
}
 
/* ----------------------------------------------------------------------- */
/* Support for diag output via ICE */
 
#ifdef CYGDBG_HAL_V85X_V850_ICE_DIAG
 
#include <cyg/hal/hal_if.h>
 
static volatile cyg_uint8 v850ice_output_buf[128];
static volatile cyg_uint8 *v850ice_output_end = v850ice_output_buf;
#define OUTPUT_BUF_END (&v850ice_output_buf[ sizeof(v850ice_output_buf)])
static volatile cyg_uint8 v850ice_input_buf[128];
#define INPUT_BUF_END (&v850ice_input_buf[ sizeof(v850ice_input_buf)])
static volatile cyg_uint8 *v850ice_input_ptr_put = v850ice_input_buf;
static volatile cyg_uint8 *v850ice_input_ptr_get = v850ice_input_buf;
static volatile cyg_uint8 v850ice_input_buf_bytes_used = 0;
 
__externC void hal_v850_ice_output_break(void);
 
static void
hal_v850_ice_indicate_output(void)
{
HAL_BREAKPOINT(hal_v850_ice_output_break);
}
 
// Actually write character
void
cyg_hal_plf_diag_ice_putc(void* __ch_data, cyg_uint8 c)
{
CYGARC_HAL_SAVE_GP();
 
// Send character
*v850ice_output_end++ = c;
 
if (c == '\n' ||
v850ice_output_end == OUTPUT_BUF_END) {
hal_v850_ice_indicate_output();
v850ice_output_end = v850ice_output_buf;
}
 
CYGARC_HAL_RESTORE_GP();
}
 
static cyg_bool
cyg_hal_plf_diag_ice_getc_nonblock(void* __ch_data, cyg_uint8* ch)
{
if ( v850ice_input_buf_bytes_used == 0 )
return false; // buffer empty
 
*ch = *v850ice_input_ptr_get++;
if ( v850ice_input_ptr_get == INPUT_BUF_END ) {
v850ice_input_ptr_get = v850ice_input_buf;
}
 
v850ice_input_buf_bytes_used--;
 
return true;
}
 
cyg_uint8
cyg_hal_plf_diag_ice_getc(void* __ch_data)
{
cyg_uint8 ch;
CYGARC_HAL_SAVE_GP();
 
while(!cyg_hal_plf_diag_ice_getc_nonblock(__ch_data, &ch));
 
CYGARC_HAL_RESTORE_GP();
return ch;
}
 
static cyg_bool
cyg_hal_plf_diag_ice_receive_char(cyg_uint8 ch)
{
/* buffer full? */
if ( v850ice_input_buf_bytes_used == sizeof(v850ice_input_buf) )
return false;
 
*v850ice_input_ptr_put++ = ch;
if ( v850ice_input_ptr_put == INPUT_BUF_END ) {
v850ice_input_ptr_put = v850ice_input_buf;
}
return true;
}
 
static void
cyg_hal_plf_diag_ice_write(void* __ch_data, const cyg_uint8* __buf,
cyg_uint32 __len)
{
CYGARC_HAL_SAVE_GP();
 
#define MIN(__x, __y) ((__x) < (__y) ? (__x) : (__y))
 
while(__len > 0) {
int copylen = MIN(__len,
(cyg_uint32) (OUTPUT_BUF_END - v850ice_output_end));
 
my_memcpy( (void *)v850ice_output_buf, __buf, copylen );
__len -= copylen;
v850ice_output_end += copylen;
hal_v850_ice_indicate_output();
v850ice_output_end = v850ice_output_buf;
}
CYGARC_HAL_RESTORE_GP();
}
 
static void
cyg_hal_plf_diag_ice_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len)
{
CYGARC_HAL_SAVE_GP();
 
while(__len-- > 0)
*__buf++ = cyg_hal_plf_diag_ice_getc(__ch_data);
 
CYGARC_HAL_RESTORE_GP();
}
 
static cyg_int32 msec_timeout = 1000;
 
cyg_bool
cyg_hal_plf_diag_ice_getc_timeout(void* __ch_data, cyg_uint8* ch)
{
int delay_count = msec_timeout * 10; // delay in .1 ms steps
cyg_bool res;
CYGARC_HAL_SAVE_GP();
 
for(;;) {
res = cyg_hal_plf_diag_ice_getc_nonblock(__ch_data, ch);
if (res || 0 == delay_count--)
break;
CYGACC_CALL_IF_DELAY_US(100);
}
 
CYGARC_HAL_RESTORE_GP();
return res;
}
 
static int
cyg_hal_plf_diag_ice_control(void *__ch_data, __comm_control_cmd_t __func, ...)
{
static int irq_state = 0;
int ret = 0;
CYGARC_HAL_SAVE_GP();
 
switch (__func) {
case __COMMCTL_IRQ_ENABLE:
irq_state = 1;
break;
case __COMMCTL_IRQ_DISABLE:
ret = irq_state;
irq_state = 0;
break;
case __COMMCTL_DBG_ISR_VECTOR:
ret = 0;
break;
case __COMMCTL_SET_TIMEOUT:
{
va_list ap;
 
va_start(ap, __func);
 
ret = msec_timeout;
msec_timeout = va_arg(ap, cyg_uint32);
 
va_end(ap);
}
default:
break;
}
CYGARC_HAL_RESTORE_GP();
return ret;
}
 
static int
cyg_hal_plf_diag_ice_isr(void *__ch_data, int* __ctrlc,
CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
{
CYGARC_HAL_SAVE_GP();
*__ctrlc = 0;
CYGARC_HAL_RESTORE_GP();
return 0;
}
 
__externC void
cyg_hal_plf_ice_diag_init()
{
hal_virtual_comm_table_t* comm;
int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
 
// Init channels
ICE_SYSCALL_INFO_DIAGOUTPC = (int)&hal_v850_ice_output_break;
ICE_SYSCALL_INFO_DIAGOUTBUF = (int)&v850ice_output_buf[0];
ICE_SYSCALL_INFO_DIAGOUTBUFEND = (int)&v850ice_output_end;
 
// Setup procs in the vector table
 
// Set channel 1
CYGACC_CALL_IF_SET_CONSOLE_COMM(1);
comm = CYGACC_CALL_IF_CONSOLE_PROCS();
CYGACC_COMM_IF_CH_DATA_SET(*comm, 0);
CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_diag_ice_write);
CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_diag_ice_read);
CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_diag_ice_putc);
CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_diag_ice_getc);
CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_diag_ice_control);
CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_diag_ice_isr);
CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_diag_ice_getc_timeout);
// Restore original console
CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
}
 
#endif // ifdef CYGDBG_HAL_V85X_V850_ICE_DIAG
 
 
/* ----------------------------------------------------------------------- */
/* Support for debugging via ICE */
 
#define ICE_STACK_SIZE 1024/sizeof(int)
static int ice_stack[ICE_STACK_SIZE]; // ints so as to ensure alignment
static int ice_iobuf[128];
 
static void
hal_v85x_ice_syscall_end(void)
{
for (;;);
}
 
static void
hal_v85x_ice_syscall(void)
{
int code, len;
code = ice_iobuf[0];
len = ice_iobuf[1];
switch (code) {
case V850ICE_SYSCALL_GET_THREADNEXT:
{
int ret;
threadref currthread, nextthread;
int thread_id;
 
/* Unmarshall thread ref */
my_memcpy( &currthread, &ice_iobuf[2], 8 );
#if ICEDEBUG
diag_printf("*NEXTTHREAD* currthread=%08x,%08x\n",
*(int *)&currthread[0],
*(int *)(((char *)&currthread[0])+4));
#endif
// null threadref?
if ((ice_iobuf[2] == 0) &&
(ice_iobuf[3] == 0)) {
#if ICEDEBUG
diag_printf("null threadref\n");
#endif
ret = dbg_threadlist( 1, NULL, &nextthread );
} else {
#if ICEDEBUG
diag_printf("non-null threadref\n");
#endif
ret = dbg_threadlist( 0, &currthread, &nextthread );
}
#if ICEDEBUG
diag_printf("*NEXTTHREAD* nextthread=%08x,%08x\n",
*(int *)&nextthread[0],
*(int *)(((char *)&nextthread[0])+4));
#endif
if (ret) { // if valid thread found
thread_id = dbg_thread_id( &nextthread );
/* Returns 0 on error */
if (thread_id != 0) {
ice_iobuf[1] = thread_id;
my_memcpy( &ice_iobuf[2], nextthread, 8 );
// set return data size to 12
ice_iobuf[0] = 12;
#if ICEDEBUG
{
int i;
for (i=0; i<3; i++)
diag_printf("%x, ", ice_iobuf[i]);
diag_printf("\n");
}
#endif
} else {
ret = 0;
}
}
if (!ret) {
// set to null
my_memset( &ice_iobuf[1], 0, 12 );
}
}
break;
case V850ICE_SYSCALL_GET_THREADREGS:
{
int ret;
threadref thread;
 
/* Unmarshall thread ref */
my_memcpy( &thread, &ice_iobuf[2], 8 );
#if ICEDEBUG
diag_printf("*GTHREADREGS* thread=%08x,%08x\n", *(int *)&thread[0],
*(int *)(((char *)&thread[0])+4));
#endif
ret = dbg_getthreadreg( &thread, NUMREGS, &ice_iobuf[1]);
if (ret)
ice_iobuf[0] = NUMREGS * 4;
else
ice_iobuf[0] = 0;
}
break;
case V850ICE_SYSCALL_SET_THREADREGS:
{
int ret;
threadref thread;
 
/* Unmarshall thread ref */
my_memcpy( &thread, &ice_iobuf[2], 8 );
#if ICEDEBUG
diag_printf("*STHREADREGS* thread=%08x,%08x\n", *(int *)&thread[0],
*(int *)(((char *)&thread[0])+4));
#endif
ret = dbg_setthreadreg( &thread, NUMREGS, &ice_iobuf[4]);
if (ret)
ice_iobuf[0] = 1;
else
ice_iobuf[0] = 0;
}
break;
case V850ICE_SYSCALL_GET_CURRTHREAD:
{
int ret, thread_id;
threadref thread;
 
ret = dbg_currthread( &thread );
#if ICEDEBUG
diag_printf("*CURRTHREAD* thread=%08x,%08x\n", *(int *)&thread[0],
*(int *)(((char *)&thread[0])+4));
#endif
if (ret) {
thread_id = dbg_thread_id( &thread );
/* Returns 0 on error */
if (thread_id != 0) {
ice_iobuf[1] = thread_id;
my_memcpy( &ice_iobuf[2], thread, 8 );
}
else {
ret = 0;
}
}
if (ret)
ice_iobuf[0] = 12;
else
ice_iobuf[0] = 0;
}
break;
case V850ICE_SYSCALL_GET_THREADINFO:
{
int ret;
threadref thread;
struct cygmon_thread_debug_info info;
char *s=(char *)&ice_iobuf[1], *p;
 
/* Unmarshall thread ref */
my_memcpy( &thread, &ice_iobuf[2], 8 );
#if ICEDEBUG
diag_printf("*INFO* thread=%08x,%08x\n", *(int *)&thread[0],
*(int *)(((char *)&thread[0])+4));
#endif
 
ret = dbg_threadinfo( &thread, &info );
if (ret) {
if (info.thread_display) {
my_memcpy (s, "State: ", 7);
s += 7;
p = info.thread_display;
while (*p) {
*s++ = *p++;
}
}
 
if (info.unique_thread_name && info.unique_thread_name[0]) {
my_memcpy (s, ", Name: ", 8);
s += 8;
p = info.unique_thread_name;
while (*p) {
*s++ = *p++;
}
}
 
if (info.more_display) {
my_memcpy (s, ", ", 2);
s += 2;
p = info.more_display;
while (*p) {
*s++ = *p++;
}
}
 
}
*s++ = '\0';
if (ret)
ice_iobuf[0] = s - (char *)&ice_iobuf[1];
else
ice_iobuf[0] = 0;
}
break;
case V850ICE_SYSCALL_CONSOLE_INPUT:
{
#ifdef CYGDBG_HAL_V85X_V850_ICE_DIAG
int len = ice_iobuf[0];
int i;
 
for (i=1; i <= len; i++) {
if (false == cyg_hal_plf_diag_ice_receive_char(ice_iobuf[i]))
break;
}
ice_iobuf[0] = i-1;
#else
ice_iobuf[0] = 0;
#endif
}
break;
default:
// set return data size to 0
ice_iobuf[0] = 0;
break;
}
hal_v85x_ice_syscall_end();
}
 
class Cyg_dummy_ice_syscall_init_class {
public:
Cyg_dummy_ice_syscall_init_class() {
 
const int valid_string = 0x45434956; // "VICE"
 
ICE_SYSCALL_INFO_STARTPC = (int)&hal_v85x_ice_syscall;
ICE_SYSCALL_INFO_ENDPC = (int)&hal_v85x_ice_syscall_end;
// top of stack, less 4 ints for parameter flushback area as per ABI
ICE_SYSCALL_INFO_STACK = (int)&ice_stack[ICE_STACK_SIZE-4];
ICE_SYSCALL_INFO_IOBUF = (int)&ice_iobuf[0];
 
HAL_REORDER_BARRIER();
 
// Leave validation string to last
ICE_SYSCALL_INFO_VALIDATOR = valid_string;
}
};
 
static Cyg_dummy_ice_syscall_init_class dummy_syscall_class;
 
#endif // ifdef CYGDBG_HAL_V850_ICE
 
// EOF v850_ice.cxx
/v850/v2_0/src/context.S
0,0 → 1,214
// #=============================================================================
// #
// # context.S
// #
// # NEC/V850 context switch code
// #
// #=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
// #=============================================================================
// ######DESCRIPTIONBEGIN####
// #
// # Author(s): nickg, gthomas
// # Contributors: nickg, gthomas
// # Date: 1998-09-15
// # Purpose: NEC/V850 context switch code
// # Description: This file contains implementations of the thread context
// # switch routines. It also contains the longjmp() and setjmp() routines.
// #
// #####DESCRIPTIONEND####
// #
// #=============================================================================
 
#include <pkgconf/hal.h>
 
#include <cyg/hal/nec_offsets.inc>
 
.text
// ------------------------------------------------------------------------------
// hal_thread_switch_context
// Switch thread contexts
// R6 = address of sp of next thread to execute
// R7 = address of sp save location of current thread
.globl __hal_thread_switch_context
__hal_thread_switch_context:
addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp
st.w ep,CYGARC_REG_EP[sp]
mov sp,ep
sst.w r1,CYGARC_REG_R1[ep]
sst.w r2,CYGARC_REG_R2[ep]
addi CYGARC_EXCEPTION_FRAME_SIZE,ep,r1
sst.w r1,CYGARC_REG_SP[ep] // sp
sst.w r4,CYGARC_REG_R4[ep]
sst.w r5,CYGARC_REG_R5[ep]
sst.w r6,CYGARC_REG_R6[ep]
sst.w r7,CYGARC_REG_R7[ep]
sst.w r8,CYGARC_REG_R8[ep]
sst.w r9,CYGARC_REG_R9[ep]
sst.w r10,CYGARC_REG_R10[ep]
sst.w r11,CYGARC_REG_R11[ep]
sst.w r12,CYGARC_REG_R12[ep]
sst.w r13,CYGARC_REG_R13[ep]
sst.w r14,CYGARC_REG_R14[ep]
sst.w r15,CYGARC_REG_R15[ep]
sst.w r16,CYGARC_REG_R16[ep]
sst.w r17,CYGARC_REG_R17[ep]
sst.w r18,CYGARC_REG_R18[ep]
sst.w r19,CYGARC_REG_R19[ep]
sst.w r20,CYGARC_REG_R20[ep]
sst.w r21,CYGARC_REG_R21[ep]
sst.w r22,CYGARC_REG_R22[ep]
sst.w r23,CYGARC_REG_R23[ep]
sst.w r24,CYGARC_REG_R24[ep]
sst.w r25,CYGARC_REG_R25[ep]
sst.w r26,CYGARC_REG_R26[ep]
sst.w r27,CYGARC_REG_R27[ep]
sst.w r28,CYGARC_REG_R28[ep]
sst.w r29,CYGARC_REG_R29[ep]
sst.w lp,CYGARC_REG_LP[ep]
sst.w lp,CYGARC_REG_PC[ep]
stsr PSW,r1
st.w r1,CYGARC_REG_PSW[ep]
st.w sp,0[r7] // return new stack pointer
 
# Now load the destination thread by dropping through
# to hal_thread_load_context
// ------------------------------------------------------------------------------
// hal_thread_load_context
// Load thread context
// R6 = address of sp of next thread to execute
// Note that this function is also the second half of hal_thread_switch_context
// and is simply dropped into from it.
 
.globl __hal_thread_load_context
__hal_thread_load_context:
di // disable interrupts while updating state
ld.w 0[r6],ep // get pointer to saved state
ld.w CYGARC_REG_PSW[ep],r6
sld.w CYGARC_REG_LP[ep],r7
sld.w CYGARC_REG_R1[ep],r1 // restore volatile registers
sld.w CYGARC_REG_R2[ep],r2
ldsr r6,EIPSW // avoids pipline bubble
ldsr r7,EIPC
sld.w CYGARC_REG_R4[ep],r4
sld.w CYGARC_REG_R5[ep],r5
sld.w CYGARC_REG_R6[ep],r6
sld.w CYGARC_REG_R7[ep],r7
sld.w CYGARC_REG_R8[ep],r8
sld.w CYGARC_REG_R9[ep],r9
sld.w CYGARC_REG_R10[ep],r10
sld.w CYGARC_REG_R11[ep],r11
sld.w CYGARC_REG_R12[ep],r12
sld.w CYGARC_REG_R13[ep],r13
sld.w CYGARC_REG_R14[ep],r14
sld.w CYGARC_REG_R15[ep],r15
sld.w CYGARC_REG_R16[ep],r16
sld.w CYGARC_REG_R17[ep],r17
sld.w CYGARC_REG_R18[ep],r18
sld.w CYGARC_REG_R19[ep],r19
sld.w CYGARC_REG_R20[ep],r20
sld.w CYGARC_REG_R21[ep],r21
sld.w CYGARC_REG_R22[ep],r22
sld.w CYGARC_REG_R23[ep],r23
sld.w CYGARC_REG_R24[ep],r24
sld.w CYGARC_REG_R25[ep],r25
sld.w CYGARC_REG_R26[ep],r26
sld.w CYGARC_REG_R27[ep],r27
sld.w CYGARC_REG_R28[ep],r28
sld.w CYGARC_REG_R29[ep],r29
sld.w CYGARC_REG_LP[ep],lp
sld.w CYGARC_REG_SP[ep],sp
sld.w CYGARC_REG_EP[ep],ep
reti
// ------------------------------------------------------------------------------
// HAL longjmp, setjmp implementations
 
#define fp r29
 
.globl _hal_setjmp
_hal_setjmp:
st.w r1,CYGARC_JMPBUF_R1[r6]
st.w r2,CYGARC_JMPBUF_R2[r6]
st.w r4,CYGARC_JMPBUF_R4[r6]
st.w r5,CYGARC_JMPBUF_R5[r6]
st.w sp,CYGARC_JMPBUF_SP[r6]
st.w gp,CYGARC_JMPBUF_GP[r6]
st.w tp,CYGARC_JMPBUF_TP[r6]
st.w r20,CYGARC_JMPBUF_R20[r6]
st.w r21,CYGARC_JMPBUF_R21[r6]
st.w r22,CYGARC_JMPBUF_R22[r6]
st.w r23,CYGARC_JMPBUF_R23[r6]
st.w r24,CYGARC_JMPBUF_R24[r6]
st.w r25,CYGARC_JMPBUF_R25[r6]
st.w r26,CYGARC_JMPBUF_R26[r6]
st.w r27,CYGARC_JMPBUF_R27[r6]
st.w r28,CYGARC_JMPBUF_R28[r6]
st.w fp,CYGARC_JMPBUF_FP[r6]
st.w ep,CYGARC_JMPBUF_EP[r6]
st.w lp,CYGARC_JMPBUF_LP[r6]
mov r0,r10
jmp [lp]
 
// hal_longjmp loads state from [arg0] and returns arg1
 
.globl _hal_longjmp
_hal_longjmp:
ld.w CYGARC_JMPBUF_SP[r6],sp
ld.w CYGARC_JMPBUF_GP[r6],gp
ld.w CYGARC_JMPBUF_TP[r6],tp
ld.w CYGARC_JMPBUF_R1[r6],r1
ld.w CYGARC_JMPBUF_R2[r6],r2
ld.w CYGARC_JMPBUF_R4[r6],r4
ld.w CYGARC_JMPBUF_R5[r6],r5
ld.w CYGARC_JMPBUF_R20[r6],r20
ld.w CYGARC_JMPBUF_R21[r6],r21
ld.w CYGARC_JMPBUF_R22[r6],r22
ld.w CYGARC_JMPBUF_R23[r6],r23
ld.w CYGARC_JMPBUF_R24[r6],r24
ld.w CYGARC_JMPBUF_R25[r6],r25
ld.w CYGARC_JMPBUF_R26[r6],r26
ld.w CYGARC_JMPBUF_R27[r6],r27
ld.w CYGARC_JMPBUF_R28[r6],r28
ld.w CYGARC_JMPBUF_FP[r6],fp
ld.w CYGARC_JMPBUF_EP[r6],ep
ld.w CYGARC_JMPBUF_LP[r6],lp
mov r7,r10
jmp [lp]
 
// ------------------------------------------------------------------------------
// end of context.S
 
/v850/v2_0/src/hal_diag.c
0,0 → 1,452
/*=============================================================================
//
// hal_diag.c
//
// HAL diagnostic output code
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg, gthomas
// Contributors:nickg, gthomas, jlarmour
// Date: 2001-03-21
// Purpose: HAL diagnostic output
// Description: Implementations of HAL diagnostic output support.
//
//####DESCRIPTIONEND####
//
//===========================================================================*/
 
#include <pkgconf/hal.h>
 
#if CYGINT_HAL_V850_DIAG_ONCHIP_SERIAL0
 
#include <pkgconf/system.h>
#include CYGBLD_HAL_PLATFORM_H
 
#include <cyg/infra/cyg_type.h> // base types
#include <cyg/infra/cyg_ass.h> // assertion macros
 
#include <cyg/hal/hal_arch.h> // basic machine info
#include <cyg/hal/hal_intr.h> // interrupt macros
#include <cyg/hal/hal_io.h> // IO macros
#include <cyg/hal/hal_diag.h>
 
#include <cyg/hal/hal_stub.h> // target_register_t
#include <cyg/hal/hal_if.h> // Calling interface definitions
#include <cyg/hal/hal_misc.h> // Helper functions
#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED
 
#include <cyg/hal/v850_common.h> // hardware registers, etc.
 
 
#define BAUD_COUNT ((CYGHWR_HAL_V85X_CPU_FREQ/2)/CYGHWR_HAL_V85X_V850_DIAG_BAUD)
#define BAUD_DIVISOR 1
 
/*---------------------------------------------------------------------------*/
// V850
 
void
init_serial_channel(void* base)
{
volatile unsigned char *mode = (volatile unsigned char *)V850_REG_ASIM0;
volatile unsigned char *brgc = (volatile unsigned char *)V850_REG_BRGC0;
volatile unsigned char *brgm0 = (volatile unsigned char *)V850_REG_BRGMC00;
#ifdef V850_REG_BRGMC01
volatile unsigned char *brgm1 = (volatile unsigned char *)V850_REG_BRGMC01;
#endif
volatile unsigned char *rxstat = (volatile unsigned char *)V850_REG_SRIC0;
volatile unsigned char *rxerr = (volatile unsigned char *)V850_REG_SERIC0;
volatile unsigned char *txstat = (volatile unsigned char *)V850_REG_STIC0;
int count = BAUD_COUNT;
int divisor = BAUD_DIVISOR;
 
while (count > 0xFF) {
count >>= 1;
divisor++;
}
 
*mode = 0xC8;
*brgc = count;
*brgm0 = divisor & 0x07;
#ifdef V850_REG_BRGMC01
*brgm1 = divisor >> 3;
#endif
*rxstat = 0x47;
*rxerr = 0;
*txstat = 0x47;
}
 
// Actually send character down the wire
void
cyg_hal_plf_serial_putc(void* __ch_data, cyg_uint8 c)
{
volatile unsigned char *TxDATA = (volatile unsigned char *)V850_REG_TXS0;
volatile unsigned char *TxSTAT = (volatile unsigned char *)V850_REG_STIC0;
int timeout = 0xFFFF;
 
CYGARC_HAL_SAVE_GP();
 
// Send character
*TxDATA = (unsigned char)c;
// Wait for Tx not busy
while ((*TxSTAT & 0x80) == 0x00) {
if (--timeout == 0)
break;
}
*TxSTAT &= ~0x80;
 
CYGARC_HAL_RESTORE_GP();
}
 
static cyg_bool
cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch)
{
volatile unsigned char *RxDATA = (volatile unsigned char *)V850_REG_RXB0;
volatile unsigned char *RxSTAT = (volatile unsigned char *)V850_REG_SRIC0;
 
if ((*RxSTAT & 0x80) == 0x00)
return false;
 
*ch = (char)*RxDATA;
*RxSTAT &= ~0x80;
return true;
}
 
cyg_uint8
cyg_hal_plf_serial_getc(void* __ch_data)
{
cyg_uint8 ch;
CYGARC_HAL_SAVE_GP();
 
while(!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch));
 
CYGARC_HAL_RESTORE_GP();
return ch;
}
 
static void
cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf,
cyg_uint32 __len)
{
CYGARC_HAL_SAVE_GP();
 
while(__len-- > 0)
cyg_hal_plf_serial_putc(__ch_data, *__buf++);
 
CYGARC_HAL_RESTORE_GP();
}
 
static void
cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len)
{
CYGARC_HAL_SAVE_GP();
 
while(__len-- > 0)
*__buf++ = cyg_hal_plf_serial_getc(__ch_data);
 
CYGARC_HAL_RESTORE_GP();
}
 
static cyg_int32 msec_timeout = 1000;
 
cyg_bool
cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch)
{
int delay_count = msec_timeout * 10; // delay in .1 ms steps
cyg_bool res;
CYGARC_HAL_SAVE_GP();
 
for(;;) {
res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch);
if (res || 0 == delay_count--)
break;
CYGACC_CALL_IF_DELAY_US(100);
}
 
CYGARC_HAL_RESTORE_GP();
return res;
}
 
static int
cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...)
{
static int irq_state = 0;
int ret = 0;
CYGARC_HAL_SAVE_GP();
 
switch (__func) {
case __COMMCTL_IRQ_ENABLE:
HAL_INTERRUPT_UNMASK(CYGNUM_HAL_VECTOR_INTCSI1);
irq_state = 1;
break;
case __COMMCTL_IRQ_DISABLE:
ret = irq_state;
irq_state = 0;
HAL_INTERRUPT_MASK(CYGNUM_HAL_VECTOR_INTCSI1);
break;
case __COMMCTL_DBG_ISR_VECTOR:
ret = CYGNUM_HAL_VECTOR_INTCSI1;
break;
case __COMMCTL_SET_TIMEOUT:
{
va_list ap;
 
va_start(ap, __func);
 
ret = msec_timeout;
msec_timeout = va_arg(ap, cyg_uint32);
 
va_end(ap);
}
default:
break;
}
CYGARC_HAL_RESTORE_GP();
return ret;
}
 
static int
cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc,
CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
{
volatile unsigned char *RxDATA = (volatile unsigned char *)V850_REG_RXB0;
cyg_uint8 c;
int res = 0;
CYGARC_HAL_SAVE_GP();
 
c = (char)*RxDATA;
*__ctrlc = 0;
if( cyg_hal_is_break( &c , 1 ) )
*__ctrlc = 1;
 
cyg_drv_interrupt_acknowledge(CYGNUM_HAL_VECTOR_INTCSI1);
 
res = CYG_ISR_HANDLED;
 
CYGARC_HAL_RESTORE_GP();
return res;
}
 
static void
cyg_hal_plf_serial_init(void)
{
hal_virtual_comm_table_t* comm;
int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
 
// Disable interrupts.
HAL_INTERRUPT_MASK(CYGNUM_HAL_VECTOR_INTCSI1);
 
// Init channels
init_serial_channel((cyg_uint8*)0);
 
// Setup procs in the vector table
 
// Set channel 0
CYGACC_CALL_IF_SET_CONSOLE_COMM(0);
comm = CYGACC_CALL_IF_CONSOLE_PROCS();
CYGACC_COMM_IF_CH_DATA_SET(*comm, 0);
CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write);
CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read);
CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc);
CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc);
CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control);
CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr);
CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout);
// Restore original console
CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
}
 
__externC void cyg_hal_plf_ice_diag_init();
 
void
cyg_hal_plf_comms_init(void)
{
static int initialized = 0;
 
if (initialized)
return;
 
initialized = 1;
 
cyg_hal_plf_serial_init();
 
#ifdef CYGDBG_HAL_V85X_V850_ICE_DIAG
cyg_hal_plf_ice_diag_init();
#endif
}
 
//=============================================================================
// Compatibility with older stubs
//=============================================================================
 
#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
 
// Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e.
// totally stand-alone) system.
 
//#ifdef CYGSEM_HAL_ROM_MONITOR
//#define CYG_HAL_STARTUP_ROM
//#undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
//#endif
 
#if (defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)) \
&& !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
#define HAL_DIAG_USES_HARDWARE
#else
#if !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
#define HAL_DIAG_USES_HARDWARE
#endif
#endif
 
void hal_diag_init(void)
{
init_serial_channel(0);
}
 
#ifdef HAL_DIAG_USES_HARDWARE
 
void hal_diag_write_char(char c)
{
CYG_INTERRUPT_STATE old;
HAL_DISABLE_INTERRUPTS(old);
cyg_hal_plf_serial_putc(0, c);
HAL_RESTORE_INTERRUPTS(old);
}
 
void hal_diag_read_char(char *c)
{
*c = cyg_hal_plf_serial_getc(0);
}
 
#else // HAL_DIAG relies on GDB
 
void
hal_diag_read_char(char *c)
{
*c = cyg_hal_plf_serial_getc(0);
}
 
void
hal_diag_write_char(char c)
{
static char line[100];
static int pos = 0;
 
// No need to send CRs
if( c == '\r' ) return;
 
line[pos++] = c;
 
if( c == '\n' || pos == sizeof(line) )
{
CYG_INTERRUPT_STATE old;
 
// Disable interrupts. This prevents GDB trying to interrupt us
// while we are in the middle of sending a packet. The serial
// receive interrupt will be seen when we re-enable interrupts
// later.
#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old);
#else
HAL_DISABLE_INTERRUPTS(old);
#endif
 
while(1)
{
static char hex[] = "0123456789ABCDEF";
cyg_uint8 csum = 0;
int i;
char c1;
cyg_hal_plf_serial_putc(0, '$');
cyg_hal_plf_serial_putc(0, 'O');
csum += 'O';
for( i = 0; i < pos; i++ )
{
char ch = line[i];
char h = hex[(ch>>4)&0xF];
char l = hex[ch&0xF];
cyg_hal_plf_serial_putc(0, h);
cyg_hal_plf_serial_putc(0, l);
csum += h;
csum += l;
}
cyg_hal_plf_serial_putc(0, '#');
cyg_hal_plf_serial_putc(0, hex[(csum>>4)&0xF]);
cyg_hal_plf_serial_putc(0, hex[csum&0xF]);
 
// Wait for the ACK character '+' from GDB here and handle
// receiving a ^C instead. This is the reason for this clause
// being a loop.
c1 = cyg_hal_plf_serial_getc(0);
 
if( c1 == '+' )
break; // a good acknowledge
 
#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) && \
defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT)
cyg_drv_interrupt_acknowledge(CYGNUM_HAL_VECTOR_INTCSI1);
if( c1 == 3 ) {
// Ctrl-C: breakpoint.
cyg_hal_gdb_interrupt (__builtin_return_address(0));
break;
}
#endif
// otherwise, loop round again
}
pos = 0;
 
// And re-enable interrupts
#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old);
#else
HAL_RESTORE_INTERRUPTS(old);
#endif
}
}
#endif // USE HARDWARE
 
#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
 
#endif // #if CYGINT_HAL_V850_DIAG_ONCHIP_SERIAL0
 
/*---------------------------------------------------------------------------*/
/* End of hal_diag.c */
/v850/v2_0/src/v85x_v850.ld
0,0 → 1,153
//=============================================================================
//
// MLT linker script for NEC
// adapted from packages/hal/arm/pid/v1_1/src/pid.ld
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
 
#include <pkgconf/system.h>
 
STARTUP(vectors.o)
// Enter at reset_vector in non-RAM startups so they are more representative
// of actual execution when loaded over ICE
#ifdef CYG_HAL_STARTUP_RAM
ENTRY(start)
#else
ENTRY(reset_vector)
#endif
#ifdef EXTRAS
INPUT(extras.o)
#endif
#if (__GNUC__ >= 3)
GROUP(libtarget.a libgcc.a libsupc++.a)
#else
GROUP(libtarget.a libgcc.a)
#endif
 
#define ALIGN_LMA 4
#define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
#define LMA_EQ_VMA
#define FORCE_OUTPUT . = .
 
#define SECTIONS_BEGIN \
/* Debug information */ \
.debug_aranges 0 : { *(.debug_aranges) } \
.debug_pubnames 0 : { *(.debug_pubnames) } \
.debug_info 0 : { *(.debug_info) } \
.debug_abbrev 0 : { *(.debug_abbrev) } \
.debug_line 0 : { *(.debug_line) } \
.debug_frame 0 : { *(.debug_frame) } \
.debug_str 0 : { *(.debug_str) } \
.debug_loc 0 : { *(.debug_loc) } \
.debug_macinfo 0 : { *(.debug_macinfo) }
 
#define SECTION_rom_vectors(_region_, _vma_, _lma_) \
.rom_vectors _vma_ : _lma_ \
{ FORCE_OUTPUT; KEEP (*(.vectors)) } \
> _region_
 
#define SECTION_ram_vectors(_region_, _vma_, _lma_) \
.ram_vectors _vma_ : _lma_ \
{ ___ram_vectors_start = ABSOLUTE(.); \
FORCE_OUTPUT; KEEP (*(.ram_vectors)) \
___ram_vectors_end = ABSOLUTE(.); \
} > _region_ \
___ram_vectors_loadaddr = LOADADDR(.ram_vectors);
 
#define SECTION_text(_region_, _vma_, _lma_) \
.text _vma_ : _lma_ \
{ stext = ABSOLUTE(.); \
PROVIDE (__stext = ABSOLUTE(.)); \
*(.text*) *(.gnu.warning) *(.gnu.linkonce*) *(.init) \
*(.glue_7) *(.glue_7t) \
} > _region_ \
etext = .; PROVIDE (__etext = .);
 
#define SECTION_fini(_region_, _vma_, _lma_) \
.fini _vma_ : _lma_ \
{ FORCE_OUTPUT; *(.fini) } \
> _region_
 
#define SECTION_rodata(_region_, _vma_, _lma_) \
.rodata _vma_ : _lma_ \
{ FORCE_OUTPUT; *(.rodata*) } \
> _region_
 
#define SECTION_rodata1(_region_, _vma_, _lma_) \
.rodata1 _vma_ : _lma_ \
{ FORCE_OUTPUT; *(.rodata1) } \
> _region_
 
#define SECTION_fixup(_region_, _vma_, _lma_) \
.fixup _vma_ : _lma_ \
{ FORCE_OUTPUT; *(.fixup) } \
> _region_
 
#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \
.gcc_except_table _vma_ : _lma_ \
{ FORCE_OUTPUT; *(.gcc_except_table) } \
> _region_
 
#define SECTION_data(_region_, _vma_, _lma_) \
.data _vma_ : _lma_ \
{ ___ram_data_start = ABSOLUTE (.); *(.data*) *(.data1); \
_GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \
_GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \
. = ALIGN (4); \
KEEP(*( SORT (.ecos.table.*))) ; \
___CTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.ctors*))) ___CTOR_END__ = ABSOLUTE (.); \
___DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) ___DTOR_END__ = ABSOLUTE (.); \
*(.eh_frame) \
*(.dynamic) *(.sdata*) *(.sbss*) } \
> _region_ \
___rom_data_start = LOADADDR (.data); \
___ram_data_end = .; PROVIDE (___ram_data_end = .); _edata = .; PROVIDE (edata = .); \
PROVIDE (___rom_data_end = LOADADDR (.data) + SIZEOF(.data));
 
#define SECTION_bss(_region_, _vma_, _lma_) \
.bss _vma_ : _lma_ \
{ ___bss_start = ABSOLUTE (.); \
*(.scommon) *(.dynbss) *(.bss*) *(COMMON) \
___bss_end = ABSOLUTE (.); } \
> _region_
 
#include <cyg/hal/plf_sections.h>
 
#include <pkgconf/hal_v85x.h>
#include <pkgconf/hal_v85x_v850.h>
#include CYGHWR_MEMORY_LAYOUT_LDI
 
// EOF v85x_v850.ld
/v850/v2_0/src/v850_misc.c
0,0 → 1,150
//==========================================================================
//
// v850_misc.c
//
// HAL CPU variant miscellaneous functions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas
// Date: 2000-03-15
// Purpose: HAL miscellaneous functions
// Description: This file contains miscellaneous functions provided by the
// HAL.
//
//####DESCRIPTIONEND####
//
//========================================================================*/
 
#include <pkgconf/hal.h>
 
#include <cyg/infra/cyg_type.h> // Base types
#include <cyg/infra/cyg_ass.h> // assertion macros
 
#include <cyg/hal/hal_intr.h>
#include <cyg/hal/v850_common.h>
 
externC void cyg_hal_platform_hardware_init(void);
 
//
// Interrupt management functions
//
 
static volatile unsigned char *interrupt_control_registers[] = {
CYG_HAL_V85X_INTERRUPT_CONTROL_REGISTERS // Defined in <plf_intr.h>
};
 
#define INT_CONTROL_PENDING 0x80
#define INT_CONTROL_DISABLE 0x40
#define INT_CONTROL_LEVEL(n) n
 
#define INT_CONTROL_DEFAULT INT_CONTROL_DISABLE|INT_CONTROL_LEVEL(7)
 
//
// Mask, i.e. disable, interrupt #vector from occurring
//
void
hal_interrupt_mask(int vector)
{
volatile unsigned char *ctl;
CYG_ASSERT(vector >= CYGNUM_HAL_ISR_MIN, "invalid interrupt vector [< MIN]");
CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX, "invalid interrupt vector [> MAX]");
ctl = interrupt_control_registers[vector-CYGNUM_HAL_ISR_MIN];
CYG_ASSERT((void *)ctl != 0, "invalid interrupt vector [not defined]");
if (ctl ) {
*ctl |= INT_CONTROL_DISABLE;
}
}
 
//
// Unmask, i.e. enable, interrupt #vector
//
void
hal_interrupt_unmask(int vector)
{
volatile unsigned char *ctl;
CYG_ASSERT(vector >= CYGNUM_HAL_ISR_MIN, "invalid interrupt vector [< MIN]");
CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX, "invalid interrupt vector [> MAX]");
ctl = interrupt_control_registers[vector-CYGNUM_HAL_ISR_MIN];
CYG_ASSERT((void *)ctl != 0, "invalid interrupt vector [not defined]");
if (ctl ) {
*ctl &= ~INT_CONTROL_DISABLE;
}
}
 
//
// Acknowledge, i.e. clear, interrupt #vector
//
void
hal_interrupt_acknowledge(int vector)
{
volatile unsigned char *ctl;
CYG_ASSERT(vector >= CYGNUM_HAL_ISR_MIN, "invalid interrupt vector [< MIN]");
CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX, "invalid interrupt vector [> MAX]");
ctl = interrupt_control_registers[vector-CYGNUM_HAL_ISR_MIN];
CYG_ASSERT((void *)ctl != 0, "invalid interrupt vector [not defined]");
if (ctl ) {
*ctl &= ~INT_CONTROL_PENDING;
}
}
 
static void
init_interrupts(void)
{
int i;
volatile unsigned char *ctl;
for (i = CYGNUM_HAL_ISR_MIN; i <= CYGNUM_HAL_ISR_MAX; i++) {
ctl = interrupt_control_registers[i-CYGNUM_HAL_ISR_MIN];
if (ctl) {
*ctl = INT_CONTROL_DEFAULT;
}
}
}
 
//
// Initialize the hardware. This may involve platform specific code.
//
void
cyg_hal_hardware_init(void)
{
init_interrupts();
cyg_hal_platform_hardware_init();
}
 
/*------------------------------------------------------------------------*/
/* End of v850_misc.c */
/ceb_v850/v2_0/cdl/hal_v85x_ceb_v850.cdl
0,0 → 1,365
# ====================================================================
#
# hal_v85x_v850_ceb.cdl
#
# V850/CEB board HAL package configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): gthomas, jlarmour
# Original data: bartv, jskov
# Contributors:
# Date: 2000-03-10
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_HAL_V85X_V850_CEB {
display "Cosmo CEB-V850 board"
parent CYGPKG_HAL_V85X
requires CYGPKG_HAL_V85X_V850
define_header hal_v85x_v850_ceb.h
include_dir cyg/hal
description "
The CEB-v850 HAL supports the CEB-V850 evaluation board fitted
with a NEC V850/SA1 or NEC V850/SB1."
 
compile plf_misc.c plf_stub.c
 
implements CYGINT_HAL_DEBUG_GDB_STUBS
implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT
implements CYGINT_HAL_V850_DIAG_ONCHIP_SERIAL0
 
define_proc {
puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_v85x_v850.h>"
puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_v85x_v850_ceb.h>"
 
puts $::cdl_header "#define CYGPRI_KERNEL_TESTS_DHRYSTONE_PASSES 20000"
}
 
cdl_option CYG_HAL_STARTUP {
display "Startup type"
flavor data
legal_values {"RAM" "ROM" "ROMRAM" }
default_value {"RAM"}
no_define
define -file system.h CYG_HAL_STARTUP
description "
When targetting the CEB board it is possible to build
the system for either RAM bootstrap, ROM bootstrap, or ROMRAM
bootstrap. RAM bootstrap generally requires that the board
is equipped with ROMs containing a suitable ROM monitor or
equivalent software that allows GDB to download the eCos
application on to the board. The ROM bootstrap typically
requires that the eCos application be blown into EPROMs or
equivalent technology. ROMRAM bootstrap is similar to ROM
bootstrap, but everything is copied to RAM before execution
starts thus improving performance, but at the cost of an
increased RAM footprint."
}
 
cdl_option CYG_HAL_V85X_STARTUP_FLASH {
display "Build for on-chip FLASH"
active_if {CYG_HAL_STARTUP == "ROM"} || \
{CYG_HAL_STARTUP == "ROMRAM"}
default_value 0
description "
When building for ROM or ROMRAM startup, you can specify
that you actually wish to target the internal FLASH rather
than the external EPROM."
}
 
cdl_component CYGHWR_HAL_V85X_V850_VARIANT {
display "V850 variant"
flavor none
no_define
description "
This component allows you to choose the V850 variant
you have on your board."
 
cdl_option CYGHWR_HAL_V85X_V850_VARIANT_SA1 {
display "SA1"
default_value 1
requires { 0 == CYGHWR_HAL_V85X_V850_VARIANT_SB1 }
implements CYGINT_HAL_V850_VARIANT_SA1
description "
Choose this if you have the V850/SA1."
}
 
cdl_option CYGHWR_HAL_V85X_V850_VARIANT_SB1 {
display "SB1"
default_value 0
requires { 0 == CYGHWR_HAL_V85X_V850_VARIANT_SA1 }
implements CYGINT_HAL_V850_VARIANT_SB1
description "
Choose this if you have the V850/SB1."
}
}
 
cdl_option CYGHWR_HAL_V85X_CPU_FREQ {
display "CPU frequency in Hz"
flavor data
legal_values { 4194304 5000000 8000000 10000000 12580000 16000000 \
17000000 20000000 }
default_value { CYGHWR_HAL_V85X_V850_VARIANT_SA1 ? 17000000 : 16000000 }
description "
This option contains the frequency of the board oscillator
connected to the CPU, in Hertz.
Choose the frequency to match the oscillator on your board.
This may affect thing like serial device, interval clock and
memory access speed settings."
}
 
cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS {
display "Number of communication channels on the board"
flavor data
# calculated { CYGDBG_HAL_V85X_V850_ICE_DIAG ? 2 : 1 }
calculated 1
}
cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
display "Debug serial port"
# active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
flavor data
calculated 0
# description "
# The CEB board has one serial port (channel 0), and a
# communication channel for communicating with an ICE, if support
# has been included (channel 1). This option chooses which port
# will be used to connect to a host running GDB."
}
cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
display "Diagnostic serial port"
# active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
flavor data
calculated 0
# legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
# default_value 0
# description "
# The CEB board has one serial port (channel 0), and a
# communication channel for communicating with an ICE, if support
# has been included (channel 1). This option chooses which port
# will be used for diagnostic output."
}
 
cdl_option CYGHWR_HAL_V85X_V850_DIAG_BAUD {
display "Diagnostic serial port baud rate"
flavor data
legal_values 1200 2400 4800 9600 19200 38400
default_value 38400
description "
This option selects the baud rate used for the diagnostic port."
}
 
# cdl_option CYGDBG_HAL_V85X_V850_ICE_DIAG {
# display "Enable diagnostic output channel via ICE"
# flavor bool
# default_value 0
# parent CYGDBG_HAL_V850_ICE
# description "
# This allows a channel to be made available to output
# diagnostic output via the ICE, talking to a correctly
# configured gdbserv process running on the host.
# To make this channel the default, set
# CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL to channel 1."
# }
 
# Real-time clock/counter specifics
cdl_component CYGNUM_HAL_RTC_CONSTANTS {
display "Real-time clock constants."
flavor none
cdl_option CYGNUM_HAL_RTC_NUMERATOR {
display "Real-time clock numerator"
flavor data
calculated 1000000000
}
cdl_option CYGNUM_HAL_RTC_DENOMINATOR {
display "Real-time clock denominator"
flavor data
calculated 100
}
cdl_option CYGNUM_HAL_RTC_PERIOD {
display "Real-time clock period"
flavor data
calculated { CYGHWR_HAL_V85X_CPU_FREQ / 400 }
}
}
 
cdl_component CYGBLD_GLOBAL_OPTIONS {
display "Global build options"
flavor none
parent CYGPKG_NONE
no_define
description "
Global build options including control over
compiler flags, linker flags and choice of toolchain."
 
 
cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX {
display "Global command prefix"
flavor data
no_define
default_value { "v850-elf" }
description "
This option specifies the command prefix used when
invoking the build tools."
}
 
cdl_option CYGBLD_GLOBAL_CFLAGS {
display "Global compiler flags"
flavor data
no_define
default_value { "-mv850 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" }
description "
This option controls the global compiler flags which
are used to compile all packages by
default. Individual packages may define
options which override these global flags."
}
 
cdl_option CYGBLD_GLOBAL_LDFLAGS {
display "Global linker flags"
flavor data
no_define
default_value { "-g -nostdlib -Wl,--gc-sections -Wl,-static" }
description "
This option controls the global linker flags. Individual
packages may define options which override these global flags."
}
 
cdl_option CYGBLD_BUILD_GDB_STUBS {
display "Build GDB stub ROM image"
default_value 0
requires { CYG_HAL_STARTUP == "ROM" }
requires CYGSEM_HAL_ROM_MONITOR
requires CYGBLD_BUILD_COMMON_GDB_STUBS
requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
requires ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT
requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
no_define
description "
This option enables the building of the GDB stubs for the
board. The common HAL controls takes care of most of the
build process, but the final conversion from ELF image to
binary data is handled by the platform CDL, allowing
relocation of the data if necessary."
 
make -priority 320 {
<PREFIX>/bin/gdb_module.bin : <PREFIX>/bin/gdb_module.img
$(OBJCOPY) -O binary $< $@
}
make -priority 320 {
<PREFIX>/bin/gdb_module.sre : <PREFIX>/bin/gdb_module.img
$(OBJCOPY) -O srec $< $@
}
}
}
 
cdl_component CYGHWR_MEMORY_LAYOUT {
display "Memory layout"
flavor data
no_define
calculated { CYG_HAL_STARTUP == "RAM" ? "v85x_v850_ceb_ram" : \
CYG_HAL_STARTUP == "ROM" ? \
CYG_HAL_V85X_STARTUP_FLASH == 0 ? "v85x_v850_ceb_rom" : "v85x_v850_ceb_flash" : \
CYG_HAL_V85X_STARTUP_FLASH == 0 ? "v85x_v850_ceb_romram" : "v85x_v850_ceb_flashromram" }
 
cdl_option CYGHWR_MEMORY_LAYOUT_LDI {
display "Memory layout linker script fragment"
flavor data
no_define
define -file system.h CYGHWR_MEMORY_LAYOUT_LDI
calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_v85x_v850_ceb_ram.ldi>" : \
CYG_HAL_STARTUP == "ROM" ? \
CYG_HAL_V85X_STARTUP_FLASH == 0 ? "<pkgconf/mlt_v85x_v850_ceb_rom.ldi>" : "<pkgconf/mlt_v85x_v850_ceb_flash.ldi>" : \
CYG_HAL_V85X_STARTUP_FLASH == 0 ? "<pkgconf/mlt_v85x_v850_ceb_romram.ldi>" : "<pkgconf/mlt_v85x_v850_ceb_flashromram.ldi>" }
}
 
cdl_option CYGHWR_MEMORY_LAYOUT_H {
display "Memory layout header file"
flavor data
no_define
define -file system.h CYGHWR_MEMORY_LAYOUT_H
calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_v85x_v850_ceb_ram.h>" : \
CYG_HAL_STARTUP == "ROM" ? \
CYG_HAL_V85X_STARTUP_FLASH == 0 ? "<pkgconf/mlt_v85x_v850_ceb_rom.h>" : "<pkgconf/mlt_v85x_v850_ceb_flash.h>" : \
CYG_HAL_V85X_STARTUP_FLASH == 0 ? "<pkgconf/mlt_v85x_v850_ceb_romram.h>" : "<pkgconf/mlt_v85x_v850_ceb_flashromram.h>" }
}
}
 
cdl_option CYGSEM_HAL_USE_ROM_MONITOR {
display "Work with a ROM monitor"
flavor booldata
legal_values { "Generic" "GDB_stubs" }
default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 }
parent CYGPKG_HAL_ROM_MONITOR
requires { CYG_HAL_STARTUP == "RAM" }
description "
Support can be enabled for three different varieties of ROM monitor.
This support changes various eCos semantics such as the encoding
of diagnostic output, or the overriding of hardware interrupt
vectors.
Firstly there is \"Generic\" support which prevents the HAL
from overriding the hardware vectors that it does not use, to
instead allow an installed ROM monitor to handle them. This is
the most basic support which is likely to be common to most
implementations of ROM monitor.
\"GDB_stubs\" provides support when GDB stubs are included in
the ROM monitor or boot ROM."
}
 
cdl_option CYGSEM_HAL_ROM_MONITOR {
display "Behave as a ROM monitor"
flavor bool
default_value 0
parent CYGPKG_HAL_ROM_MONITOR
requires { CYG_HAL_STARTUP == "ROM" }
description "
Enable this option if this program is to be used as a ROM monitor,
i.e. applications will be loaded into RAM on the board, and this
ROM monitor may process exceptions or interrupts generated from the
application. This enables features such as utilizing a separate
interrupt stack when exceptions are generated."
}
}
/ceb_v850/v2_0/include/plf_intr.h
0,0 → 1,67
#ifndef CYGONCE_HAL_PLF_INTR_H
#define CYGONCE_HAL_PLF_INTR_H
 
//==========================================================================
//
// plf_intr.h
//
// NEC/V85x Interrupt and clock support
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 2001-03-21
// Purpose: Define Interrupt support
// Description: The macros defined here provide the HAL APIs for handling
// interrupts and the clock for platforms of the NEC V85x
// architecture.
//
// Usage:
// #include <cyg/hal/plf_intr.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
// Nothing to do here. Handled by default variant code.
 
//--------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_PLF_INTR_H
// End of plf_intr.h
/ceb_v850/v2_0/include/plf_stub.h
0,0 → 1,84
#ifndef CYGONCE_HAL_PLF_STUB_H
#define CYGONCE_HAL_PLF_STUB_H
 
//=============================================================================
//
// plf_stub.h
//
// Platform header for GDB stub support.
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors:jskov, gthomas
// Date: 2000-03-10
// Purpose: Platform HAL stub support for NEC/CEB-V850
// Usage: #include <cyg/hal/plf_stub.h>
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
 
#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM
 
#include <cyg/hal/nec-stub.h> // architecture stub support
 
//----------------------------------------------------------------------------
// Define serial stuff.
externC void cyg_hal_plf_comms_init(void);
 
#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init()
#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud))
#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0
#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT
 
//----------------------------------------------------------------------------
// Stub initializer.
 
extern void hal_plf_stub_init(void);
 
#define HAL_STUB_PLATFORM_INIT() hal_plf_stub_init();
 
#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
//-----------------------------------------------------------------------------
#endif // CYGONCE_HAL_PLF_STUB_H
// End of plf_stub.h
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_flashromram.h
0,0 → 1,20
// eCos memory layout - Fri Jan 26 09:09:49 2001
 
// This is a generated file - do not edit
 
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
 
#endif
#define CYGMEM_REGION_rom (0)
#define CYGMEM_REGION_rom_SIZE (0x80000)
#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
#define CYGMEM_REGION_ram (0xfc0000)
#define CYGMEM_REGION_ram_SIZE (0x3c000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0xffc000 - (size_t) CYG_LABEL_NAME (__heap1))
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_flashromram.ldi
0,0 → 1,28
// eCos memory layout - Fri Jan 26 09:09:49 2001
 
// This is a generated file - do not edit
 
#include <cyg/infra/cyg_type.inc>
 
MEMORY
{
rom : ORIGIN = 0, LENGTH = 0x80000
ram : ORIGIN = 0xfc0000, LENGTH = 0x3c000
}
 
SECTIONS
{
SECTIONS_BEGIN
SECTION_rom_vectors (ram, 0xfc0000, AT (0))
SECTION_ram_vectors (ram, ALIGN (0x4), FOLLOWING (.rom_vectors))
SECTION_text (ram, ALIGN (0x4), FOLLOWING (.ram_vectors))
SECTION_fini (ram, ALIGN (0x4), FOLLOWING (.text))
SECTION_rodata (ram, ALIGN (0x4), FOLLOWING (.fini))
SECTION_rodata1 (ram, ALIGN (0x4), FOLLOWING (.rodata))
SECTION_fixup (ram, ALIGN (0x4), FOLLOWING (.rodata1))
SECTION_gcc_except_table (ram, ALIGN (0x4), FOLLOWING (.fixup))
SECTION_data (ram, ALIGN (0x4), FOLLOWING (.gcc_except_table))
SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
SECTIONS_END
}
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_flash.h
0,0 → 1,20
// eCos memory layout - Fri Jan 26 09:43:36 2001
 
// This is a generated file - do not edit
 
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
 
#endif
#define CYGMEM_REGION_rom (0)
#define CYGMEM_REGION_rom_SIZE (0x80000)
#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
#define CYGMEM_REGION_ram (0xfc0000)
#define CYGMEM_REGION_ram_SIZE (0x3c000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0xffc000 - (size_t) CYG_LABEL_NAME (__heap1))
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_rom.h
0,0 → 1,20
// eCos memory layout - Fri Jan 26 09:44:26 2001
 
// This is a generated file - do not edit
 
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
 
#endif
#define CYGMEM_REGION_rom (0x100000)
#define CYGMEM_REGION_rom_SIZE (0x80000)
#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
#define CYGMEM_REGION_ram (0xfc0000)
#define CYGMEM_REGION_ram_SIZE (0x3c000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0xffc000 - (size_t) CYG_LABEL_NAME (__heap1))
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_romram.h
0,0 → 1,20
// eCos memory layout - Tue Jan 23 18:50:05 2001
 
// This is a generated file - do not edit
 
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
 
#endif
#define CYGMEM_REGION_rom (0x100000)
#define CYGMEM_REGION_rom_SIZE (0x80000)
#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
#define CYGMEM_REGION_ram (0xfc0000)
#define CYGMEM_REGION_ram_SIZE (0x3c000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0xffc000 - (size_t) CYG_LABEL_NAME (__heap1))
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_flash.ldi
0,0 → 1,28
// eCos memory layout - Fri Jan 26 09:43:36 2001
 
// This is a generated file - do not edit
 
#include <cyg/infra/cyg_type.inc>
 
MEMORY
{
rom : ORIGIN = 0, LENGTH = 0x80000
ram : ORIGIN = 0xfc0000, LENGTH = 0x3c000
}
 
SECTIONS
{
SECTIONS_BEGIN
SECTION_rom_vectors (rom, 0, LMA_EQ_VMA)
SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_ram_vectors (ram, 0xfc0000, FOLLOWING (.gcc_except_table))
SECTION_data (ram, ALIGN (0x4), FOLLOWING (.ram_vectors))
SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
SECTIONS_END
}
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_rom.ldi
0,0 → 1,28
// eCos memory layout - Fri Jan 26 09:44:26 2001
 
// This is a generated file - do not edit
 
#include <cyg/infra/cyg_type.inc>
 
MEMORY
{
rom : ORIGIN = 0x100000, LENGTH = 0x80000
ram : ORIGIN = 0xfc0000, LENGTH = 0x3c000
}
 
SECTIONS
{
SECTIONS_BEGIN
SECTION_rom_vectors (rom, 0x100000, LMA_EQ_VMA)
SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA)
SECTION_ram_vectors (ram, 0xfc0000, FOLLOWING (.gcc_except_table))
SECTION_data (ram, ALIGN (0x4), FOLLOWING (.ram_vectors))
SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
SECTIONS_END
}
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_romram.ldi
0,0 → 1,28
// eCos memory layout - Tue Jan 23 18:50:05 2001
 
// This is a generated file - do not edit
 
#include <cyg/infra/cyg_type.inc>
 
MEMORY
{
rom : ORIGIN = 0x100000, LENGTH = 0x80000
ram : ORIGIN = 0xfc0000, LENGTH = 0x3c000
}
 
SECTIONS
{
SECTIONS_BEGIN
SECTION_rom_vectors (ram, 0xfc0000, AT (0x100000))
SECTION_ram_vectors (ram, ALIGN (0x4), FOLLOWING (.rom_vectors))
SECTION_text (ram, ALIGN (0x4), FOLLOWING (.ram_vectors))
SECTION_fini (ram, ALIGN (0x4), FOLLOWING (.text))
SECTION_rodata (ram, ALIGN (0x4), FOLLOWING (.fini))
SECTION_rodata1 (ram, ALIGN (0x4), FOLLOWING (.rodata))
SECTION_fixup (ram, ALIGN (0x4), FOLLOWING (.rodata1))
SECTION_gcc_except_table (ram, ALIGN (0x4), FOLLOWING (.fixup))
SECTION_data (ram, ALIGN (0x4), FOLLOWING (.gcc_except_table))
SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
SECTIONS_END
}
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_ram.h
0,0 → 1,22
// eCos memory layout - Fri Jan 26 09:07:19 2001
 
// This is a generated file - do not edit
 
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
 
#endif
#define CYGMEM_REGION_ram (0xfc0000)
#define CYGMEM_REGION_ram_SIZE (0x3c000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__reserved) [];
#endif
#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (__reserved))
#define CYGMEM_SECTION_reserved_SIZE (0x4000)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0xffc000 - (size_t) CYG_LABEL_NAME (__heap1))
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_flashromram.mlt
0,0 → 1,14
version 0
region rom 0 80000 1 !
region ram fc0000 3c000 0 !
section rom_vectors 0 1 1 1 1 1 1 1 fc0000 0 ram_vectors ram_vectors !
section ram_vectors 0 4 1 1 0 1 0 1 text text !
section text 0 4 1 1 0 1 0 1 fini fini !
section fini 0 4 1 1 0 1 0 1 rodata rodata !
section rodata 0 4 1 1 0 1 0 1 rodata1 rodata1 !
section rodata1 0 4 1 1 0 1 0 1 fixup fixup !
section fixup 0 4 1 1 0 1 0 1 gcc_except_table gcc_except_table !
section gcc_except_table 0 4 1 1 0 1 0 1 data data !
section data 0 4 1 1 0 1 0 0 bss !
section bss 0 4 0 1 0 1 0 1 heap1 heap1 !
section heap1 0 8 0 0 0 0 0 0 !
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_ram.ldi
0,0 → 1,27
// eCos memory layout - Fri Jan 26 09:07:19 2001
 
// This is a generated file - do not edit
 
#include <cyg/infra/cyg_type.inc>
 
MEMORY
{
ram : ORIGIN = 0xfc0000, LENGTH = 0x3c000
}
 
SECTIONS
{
SECTIONS_BEGIN
CYG_LABEL_DEFN(__reserved) = 0xfc0000; . = CYG_LABEL_DEFN(__reserved) + 0x4000;
SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_ram_vectors (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA)
SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
SECTIONS_END
}
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_flash.mlt
0,0 → 1,14
version 0
region rom 0 80000 1 !
region ram fc0000 3c000 0 !
section rom_vectors 0 1 0 1 1 1 1 1 0 0 text text !
section text 0 4 0 1 0 1 0 1 fini fini !
section fini 0 4 0 1 0 1 0 1 rodata rodata !
section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 !
section rodata1 0 4 0 1 0 1 0 1 fixup fixup !
section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
section gcc_except_table 0 4 0 1 0 0 0 1 ram_vectors !
section ram_vectors 0 1 1 1 1 1 0 1 fc0000 data data !
section data 0 4 1 1 0 1 0 0 bss !
section bss 0 4 0 1 0 1 0 1 heap1 heap1 !
section heap1 0 8 0 0 0 0 0 0 !
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_rom.mlt
0,0 → 1,14
version 0
region rom 100000 80000 1 !
region ram fc0000 3c000 0 !
section rom_vectors 0 1 0 1 1 1 1 1 100000 100000 text text !
section text 0 4 0 1 0 1 0 1 fini fini !
section fini 0 4 0 1 0 1 0 1 rodata rodata !
section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 !
section rodata1 0 4 0 1 0 1 0 1 fixup fixup !
section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
section gcc_except_table 0 4 0 1 0 0 0 1 ram_vectors !
section ram_vectors 0 1 1 1 1 1 0 1 fc0000 data data !
section data 0 4 1 1 0 1 0 0 bss !
section bss 0 4 0 1 0 1 0 1 heap1 heap1 !
section heap1 0 8 0 0 0 0 0 0 !
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_romram.mlt
0,0 → 1,14
version 0
region rom 100000 80000 1 !
region ram fc0000 3c000 0 !
section rom_vectors 0 1 1 1 1 1 1 1 fc0000 100000 ram_vectors ram_vectors !
section ram_vectors 0 4 1 1 0 1 0 1 text text !
section text 0 4 1 1 0 1 0 1 fini fini !
section fini 0 4 1 1 0 1 0 1 rodata rodata !
section rodata 0 4 1 1 0 1 0 1 rodata1 rodata1 !
section rodata1 0 4 1 1 0 1 0 1 fixup fixup !
section fixup 0 4 1 1 0 1 0 1 gcc_except_table gcc_except_table !
section gcc_except_table 0 4 1 1 0 1 0 1 data data !
section data 0 4 1 1 0 1 0 0 bss !
section bss 0 4 0 1 0 1 0 1 heap1 heap1 !
section heap1 0 8 0 0 0 0 0 0 !
/ceb_v850/v2_0/include/pkgconf/mlt_v85x_v850_ceb_ram.mlt
0,0 → 1,12
version 0
region ram fc0000 3c000 0 !
section reserved 4000 1 0 0 1 1 1 1 fc0000 fc0000 text text !
section text 0 4 0 1 0 1 0 1 fini fini !
section fini 0 4 0 1 0 1 0 1 rodata rodata !
section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 !
section rodata1 0 4 0 1 0 1 0 1 fixup fixup !
section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
section gcc_except_table 0 4 0 1 0 1 0 1 data data !
section data 0 4 0 1 0 1 0 1 bss bss !
section bss 0 4 0 1 0 1 0 1 heap1 heap1 !
section heap1 0 8 0 0 0 0 0 0 !
/ceb_v850/v2_0/include/plf_cache.h
0,0 → 1,66
#ifndef CYGONCE_PLF_CACHE_H
#define CYGONCE_PLF_CACHE_H
 
//=============================================================================
//
// plf_cache.h
//
// HAL cache control API
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg,jlarmour
// Date: 2001-03-21
// Purpose: Cache control API
// Description: The macros defined here provide the HAL APIs for handling
// cache control operations.
// Usage:
// #include <cyg/hal/plf_cache.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
// Nothing to do here
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_PLF_CACHE_H
// End of plf_cache.h
 
/ceb_v850/v2_0/include/hal_diag.h
0,0 → 1,67
#ifndef CYGONCE_HAL_HAL_DIAG_H
#define CYGONCE_HAL_HAL_DIAG_H
 
/*=============================================================================
//
// hal_diag.h
//
// HAL Support for Kernel Diagnostic Routines
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg, gthomas,jlarmour
// Date: 2001-03-21
// Purpose: HAL Support for Kernel Diagnostic Routines
// Description: Diagnostic routines for use during kernel development.
// Usage: #include <cyg/hal/hal_diag.h>
//
//####DESCRIPTIONEND####
//
//===========================================================================*/
 
/*---------------------------------------------------------------------------*/
 
#include <cyg/hal/hal_if.h>
 
#define HAL_DIAG_INIT() hal_if_diag_init()
#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_)
#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_)
 
/*---------------------------------------------------------------------------*/
/* end of hal_diag.h */
#endif /* CYGONCE_HAL_HAL_DIAG_H */
/ceb_v850/v2_0/include/hal_platform_setup.h
0,0 → 1,190
#ifndef CYGONCE_HAL_PLATFORM_SETUP_H
#define CYGONCE_HAL_PLATFORM_SETUP_H
 
/*=============================================================================
//
// hal_platform_setup.h
//
// Platform specific support for HAL (assembly code)
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas, jlarmour
// Date: 2000-03-10
// Purpose: NEC CEB/V850 platform specific support routines
// Description:
// Usage: #include <cyg/hal/hal_platform_setup.h>
//
//####DESCRIPTIONEND####
//
//===========================================================================*/
 
#include <pkgconf/system.h> // System-wide configuration info
#include <pkgconf/hal.h> // Architecture independent configuration
#include <cyg/hal/v850_common.h>
#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration
 
.macro lea addr,reg
movhi hi(\addr),r0,\reg
movea lo(\addr),\reg,\reg
.endm
.macro PLATFORM_SETUP1
#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
movhi hi(V850_REGS),r0,r6
 
// set bus control signals
mov 0x01,r1
st.b r1,lo(V850_REG_SYC)[r6]
 
// Internal RAM, internal ROM and I/O - no wait states, regardless
// of the setting of DWC
// External RAM is 70ns, External ROM is 120ns. Therefore...
#if CYGHWR_HAL_V85X_CPU_FREQ < 14285714
// External RAM - 0 wait states
movea 0x3F00,r0,r1
#elif CYGHWR_HAL_V85X_CPU_FREQ < 28571428
// External RAM - 1 wait state
movea 0x7F00,r0,r1
#elif CYGHWR_HAL_V85X_CPU_FREQ < 42857142
// External RAM - 2 wait states
movea 0xBF00,r0,r1
#else
// External RAM - 3 wait states
movea 0xFF00,r0,r1
#endif
#if CYGHWR_HAL_V85X_CPU_FREQ < 8333333
// External ROM - 0 wait states
ori 0x00FC,r1,r1
#elif CYGHWR_HAL_V85X_CPU_FREQ < 16666667
// External ROM - 1 wait states
ori 0x00FD,r1,r1
#elif CYGHWR_HAL_V85X_CPU_FREQ < 25000000
// External ROM - 2 wait states
ori 0x00FE,r1,r1
#else
// External ROM - 3 wait states
ori 0x00FF,r1,r1
#endif
st.h r1,lo(V850_REG_DWC)[r6]
 
// Internal RAM, ROM, I/O - always 0 idle regardless of the setting
// of BCC
// External RAM - 0 idle
// External ROM - 0 idle
movea 0x2AA8,r0,r1
st.h r1,lo(V850_REG_BCC)[r6]
 
// No INTs on rising edge
mov 0x00,r1
st.b r1,lo(V850_REG_EGP0)[r6]
 
// enable INTP0 (serial) IRQ only, set for falling edge
mov 0x01,r1
st.b r1,lo(V850_REG_EGN0)[r6]
 
// Port 1 mode: set serial DSR, RXD and CTS as inputs, and others
// as outputs
movea 0x2C,r0,r1
st.b r1,lo(V850_REG_PM1)[r6]
 
// Port 3 mode: SW2 read port: set to all input
movea 0xFF,r0,r1
st.b r1,lo(V850_REG_PM3)[r6]
 
// Set serial port control inputs (DSR, RXD, CTS) to 1
// FIXME Why? Also I don't get why the top two bits are set.
movea 0xEC,r0,r1
st.b r1,lo(V850_REG_P1)[r6]
 
// Enable all outputs for 7-segment LED
mov 0x00,r1
st.b r1,lo(V850_REG_PM10)[r6]
 
// Set LED to 0
mov 0x00,r1
st.b r1,lo(V850_REG_P10)[r6]
 
// Init serial port 0 baud rate to divide clock down to 9600 baud
// by setting baud count here
// This may seem unnecessary, but setting up the serial allows
// us to do diag output before HAL diag is initialized. The values
// are clock dependent however, but this is only for debug so we
// don't care.
movea 0xDD,r0,r1
st.b r1,lo(V850_REG_BRGC0)[r6]
 
// and divisor here
mov 0x03,r1
st.b r1,lo(V850_REG_BRGMC00)[r6]
 
// set serial 0 to enable tx/rx and 8-N-1
movea 0xC8,r0,r1
st.b r1,lo(V850_REG_ASIM0)[r6]
 
// disable reception of serial interrupts, and set serial interrupt
// priority to level 7 (lowest)
movea 0x47,r0,r1
st.b r1,lo(V850_REG_STIC0)[r6]
 
// Memory expansion mode - set to 4MB
// We could probably set this to 256K (MM==0x4), but there seems
// no advantage
mov 0x07,r1
st.b r1,lo(V850_REG_MM)[r6]
 
// Setting the PCC register is tricky - it is a "specific register"
// We set the CPU clock to full speed
stsr PSW,r7
ori CYGARC_PSW_NP,r7,r8
ldsr r8,PSW
mov 0x00,r1
st.b r1,lo(V850_REG_PRCMD)[r6]
st.b r1,lo(V850_REG_PCC)[r6]
ldsr r7,PSW
nop
nop
nop
nop
nop
#endif
.endm
 
/*---------------------------------------------------------------------------*/
/* end of hal_platform_setup.h */
#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */
/ceb_v850/v2_0/include/plf_io.h
0,0 → 1,63
#ifndef CYGONCE_PLF_IO_H
#define CYGONCE_PLF_IO_H
 
//=============================================================================
//
// plf_io.h
//
// Platform specific IO support
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 2001-01-12
// Purpose: NEC platform specific IO support, e.g. for PCI support
// Description:
// Usage: #include <cyg/hal/hal_io.h>
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
//-----------------------------------------------------------------------------
 
// Nothing yet
 
//-----------------------------------------------------------------------------
// end of plf_io.h
#endif // CYGONCE_PLF_IO_H
/ceb_v850/v2_0/include/plf_sections.h
0,0 → 1,73
//==========================================================================
//
// plf_sections.h
//
// V85x layout definitions - hardwired sections
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas, jlarmour
// Date: 2000-05-24
// Purpose: Hardwired layout definitions
// Description: Used only in linker scripts
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
 
#if CYGINT_HAL_V850_VARIANT_SA1
 
#define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); \
PROVIDE(_hal_vsr_table = 0x00FC0260); \
PROVIDE(__allow_nmi = 0x00FC02F8); \
PROVIDE(_hal_virtual_vector_table = 0x00FC0300);
 
#elif CYGINT_HAL_V850_VARIANT_SB1
 
#define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); \
PROVIDE(_hal_vsr_table = 0x00FC0340); \
PROVIDE(__allow_nmi = 0x00FC0410); \
PROVIDE(_hal_virtual_vector_table = 0x00FC0440);
 
#else
# error No v850 variant defined
#endif
 
// EOF plf_sections.h
/ceb_v850/v2_0/ChangeLog
0,0 → 1,280
2003-04-10 Nick Garnett <nickg@balti.calivar.com>
 
* include/pkgconf/mlt_v85x_v850_ceb_ram.ldi:
Added SECTION_ram_vectors().
 
2002-05-28 Jonathan Larmour <jlarmour@redhat.com>
 
* include/hal_platform_setup.h: Correctly calculate wait states based
on external RAM/ROM timing.
 
2002-04-24 Jesper Skov <jskov@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: CYGPRI_KERNEL_TESTS_DHRYSTONE_PASSES
defined.
 
2001-10-25 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl (CYGBLD_GLOBAL_CFLAGS): Always use
-mv850 just in case we're using tools that don't do that by default.
 
2001-06-18 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl (CYGHWR_MEMORY_LAYOUT_H): Fix name for
flash startup.
* include/pkgconf/mlt_v85x_v850_ceb_flash.h:
* include/pkgconf/mlt_v85x_v850_ceb_flash.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_flash.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_flashromram.h:
* include/pkgconf/mlt_v85x_v850_ceb_flashromram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_flashromram.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_ram.h:
* include/pkgconf/mlt_v85x_v850_ceb_ram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_ram.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_rom.h:
* include/pkgconf/mlt_v85x_v850_ceb_rom.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_rom.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_romram.h:
* include/pkgconf/mlt_v85x_v850_ceb_romram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_romram.mlt:
Resize RAM to 0x3c000 long (i.e. top of RAM is 0xffc000).
This avoids problems with variable sizes of internal RAM.
 
2001-05-21 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: Change tools back to v850-elf now.
 
2001-05-09 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: Change default tools to v850e-elf, and
compile with -mv850 flag
 
2001-04-24 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: Embryonic attempt at diag output via
ICE failed, but checked in for posterity anyway.
* src/v850flash.S: Use standard Cosmo flash image
* images/v850flash.img: Regenerate
* images/v850flash.hex: Regenerate
* images/v850sa1/gdb_module.*: Regenerate
* images/v850sb1/16mhz/gdb_module.*: Regenerate
* images/v850sb1/8mhz/gdb_module.*: Regenerate
 
2001-03-21 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: Support choice between V850/SA1 and
V850/SB1, and adjust descriptions accordingly.
Support ROMRAM startup.
Support booting from FLASH.
Use generic V850 diag driver.
Allow setting of CPU frequency.
Add extra baud rates.
Build SREC GDB stub images as well as binary images.
 
* include/hal_diag.h: We only support virtual vectors now.
 
* include/hal_platform_setup.h: Comment better.
Support different wait states for different CPU speeds.
 
* include/plf_cache.h: Just empty now - defaults are in variant HAL.
* include/plf_intr.h: Ditto.
* include/plf_io.h: Ditto.
* include/plf_sections.h: Support V850/SB1 differences, and
add __allow_nmi as per recent arch HAL vectors.S change.
 
* src/plf_misc.c: Update register names with new versions defined
in variant HAL.
 
* src/plf_stub.c: Remove unnecessary includes. Add some comments.
* include/v850_regs.h: Remove. Content moved to v850 HAL.
 
* src/hal_diag.c: Remove. Consolidated into v850 HAL.
 
* src/v850flash.S: Sample image to program into flash for EPROM
startup.
 
* include/pkgconf/mlt_v85x_v850_ceb_flash.h:
* include/pkgconf/mlt_v85x_v850_ceb_flash.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_flash.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_flashromram.h:
* include/pkgconf/mlt_v85x_v850_ceb_flashromram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_flashromram.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_romram.h:
* include/pkgconf/mlt_v85x_v850_ceb_romram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_romram.mlt:
Create.
 
* include/pkgconf/mlt_v85x_v850_ceb_ram.h:
* include/pkgconf/mlt_v85x_v850_ceb_ram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_ram.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_rom.h:
* include/pkgconf/mlt_v85x_v850_ceb_rom.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_rom.mlt:
Support new ram_vectors section, and fix ram region size (don't
allow the use of I/O space).
 
2001-03-08 Jesper Skov <jskov@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: Removed
CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED which is now the
default.
 
2001-02-08 Jesper Skov <jskov@redhat.com>
 
* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
 
2001-01-31 Jesper Skov <jskov@redhat.com>
 
* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
with CYGSEM_HAL_DIAG_MANGLER_None
* cdl/hal_v85x_ceb_v850.cdl: Same.
* src/hal_diag.c: Get rid of CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
checks.
 
2001-01-26 Jonathan Larmour <jlarmour@redhat.com>
 
* include/plf_stub.h (HAL_STUB_PLATFORM_RESET): Move to arch HAL
hal_intr.h
(HAL_STUB_PLATFORM_RESET_ENTRY): Ditto
 
2000-10-20 Jonathan Larmour <jlarmour@redhat.com>
 
* include/pkgconf/mlt_v85x_v850_ceb_ram.mlt:
* include/pkgconf/mlt_v85x_v850_ceb_rom.mlt:
Add heap1 section
 
* include/pkgconf/mlt_v85x_v850_ceb_ram.h:
* include/pkgconf/mlt_v85x_v850_ceb_rom.h:
* include/pkgconf/mlt_v85x_v850_ceb_ram.ldi:
* include/pkgconf/mlt_v85x_v850_ceb_rom.ldi:
Regenerated
 
2000-06-30 Jesper Skov <jskov@redhat.com>
 
* src/hal_diag.c: calling i/f macro changes.
 
2000-06-27 Jesper Skov <jskov@redhat.com>
 
* src/plf_misc.c: Fix compiler warnings.
 
* src/plf_stub.c:
* src/hal_diag.c:
* include/plf_stub.h:
* include/plf_intr.h:
* include/hal_diag.h:
Moved Ctrl-c handling to driver code. Use new comms procs
semantics.
 
2000-06-17 Gary Thomas <gthomas@redhat.com>
 
* include/plf_intr.h:
* include/plf_stub.h:
* include/hal_diag.h:
* include/plf_sections.h:
* src/hal_diag.c:
* src/plf_stub.c:
* src/plf_misc.c:
* cdl/hal_v85x_ceb_v850.cdl: Support new virtual vector ROM mode.
 
2000-05-25 John Dallaway <jld@redhat.com>
 
* cdl/hal_v85x_ceb_v850.cdl: Tidy display strings.
 
2000-05-25 Gary Thomas <gthomas@redhat.com>
 
* include/plf_intr.h: Interrupt mappings now are in this file.
 
2000-05-24 Gary Thomas <gthomas@redhat.com>
 
* include/plf_sections.h:
* include/v850_regs.h: New file(s).
 
2000-05-03 Gary Thomas <gthomas@redhat.com>
 
* src/hal_diag.c (hal_diag_write_char): Work around which fixes ^C
handling - GCC function __builtin_return_address() doesn't work.
 
2000-04-25 John Dallaway <jld@cygnus.co.uk>
 
* cdl/hal_nec_ceb_v850.cdl: Parent this package under the
V85X architecture package.
 
2000-04-14 Gary Thomas <gthomas@redhat.com>
 
* src/plf_stub.c (hal_plf_stub_init): Use watchdog timer to
emulate a breakpoint since this hardware doesn't have one.
 
2000-04-11 Gary Thomas <gthomas@redhat.com>
 
* src/plf_stub.c (hal_plf_get_char): Use LED for "interesting"
display during GDB I/O.
 
* src/hal_diag.c (hal_diag_write_char): Disable interrupts
while sending character - necessary because there is no way to
determine that a character has been sent other than to see that
there is an interrupt pending.
 
* cdl/hal_nec_ceb_v850.cdl: Add implementation of "GDB protocol
suppressed" functionality.
 
2000-03-30 Gary Thomas <gthomas@redhat.com>
 
* src/hal_diag.c (hal_diag_write_char): GDB break support only
present if GDB stubs in place.
 
2000-03-27 Gary Thomas <gthomas@redhat.com>
 
* src/plf_stub.c:
* include/plf_stub.h: Adding GDB break support.
 
* include/plf_intr.h: Remove garbage left over from cut&paste.
 
* include/plf_cache.h: Add missing INVALIDATE macros.
 
2000-03-21 Gary Thomas <gthomas@redhat.com>
 
* src/hal_diag.c: Remove ROM startup messages.
 
* include/pkgconf/mlt_nec_v850_ceb_rom.mlt:
* include/pkgconf/mlt_nec_v850_ceb_rom.ldi:
* include/pkgconf/mlt_nec_v850_ceb_rom.h: Use proper RAM layout.
 
* include/plf_stub.h (HAL_STUB_PLATFORM_RESET): Add board reset.
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/ceb_v850/v2_0/src/plf_stub.c
0,0 → 1,75
//=============================================================================
//
// plf_stub.c
//
// Platform specific code for GDB stub support.
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg, jskov (based on the old tx39 hal_stub.c)
// Contributors:nickg, jskov, gthomas
// Date: 2000-03-10
// Purpose: Platform specific code for GDB stub support.
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
 
#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
#include <cyg/hal/hal_stub.h>
#include <cyg/hal/v850_common.h>
 
//-----------------------------------------------------------------------------
// Stub init
 
void hal_plf_stub_init(void)
{
// Set up watchdog timer since we have to use it to emulate a breakpoint
volatile unsigned char *wdcs = (volatile unsigned char *)V850_REG_WDCS;
volatile unsigned char *wdtm = (volatile unsigned char *)V850_REG_WDTM;
 
*wdcs = 0x07; // lowest possible overhead - 246.7ms for 17MHz V850/SA1
// 209.7ms for 20MHz SB1
*wdtm = 0x90; // Start watchdog
}
 
#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
//-----------------------------------------------------------------------------
// End of plf_stub.c
/ceb_v850/v2_0/src/v850flash.S
0,0 → 1,78
/*=============================================================================
//
// v850flash.S
//
// CEB v850 flash boot code
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 2001-03-21
// Purpose: Loader image to program into V850 internal flash to allow
// programming of eCos ROM startup applications into the EPROM.
// Description: Compile with:
// v850-elf-gcc -o v850flash.img v850flash.S -Ttext=0 -nostartfiles
//
//####DESCRIPTIONEND####
//
//===========================================================================*/
 
.text
.org 0
.globl _start // dummy _start to keep linker happy
_start:
mov 7,r1
st.b r1,0xFFFFF04C[r0]
mov 1,r1
st.b r1,0xFFFFF064[r0]
 
jr 0x0FFFF4 // jump to 0x100000
jr 0x0FFFF2 // jump to 0x100002
.org 0x20
.rept 0x3E
jr 0xFFFC0000 // jump to symmetric location in RAM
nop
nop
nop
nop
nop
nop
.endr
 
// EOF v850flash.S
/ceb_v850/v2_0/src/plf_misc.c
0,0 → 1,330
//==========================================================================
//
// plf_misc.c
//
// HAL platform miscellaneous functions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg, gthomas, jlarmour
// Date: 2000-03-10
// Purpose: HAL miscellaneous functions
// Description: This file contains miscellaneous functions provided by the
// HAL.
//
//####DESCRIPTIONEND####
//
//========================================================================*/
 
#include <pkgconf/hal.h>
 
#include <cyg/infra/cyg_type.h> // Base types
#include <cyg/infra/cyg_trac.h> // tracing macros
#include <cyg/infra/cyg_ass.h> // assertion macros
 
#include <cyg/hal/hal_arch.h> // architectural definitions
 
#include <cyg/hal/hal_intr.h> // Interrupt handling
#include <cyg/hal/v850_common.h> // Hardware definitions
 
#include <cyg/hal/hal_if.h> // ROM monitor interfaces
 
#include <cyg/infra/diag.h> // diag_printf
 
extern void show_hex4(unsigned long val);
extern void show_hex1(unsigned long val);
extern void show_8bit_reg(void *addr);
extern void show_led(int p);
 
void
cyg_hal_platform_hardware_init(void)
{
hal_if_init(); // Initialize GDB[ROM]/eCos interfaces
show_led(' ');
show_led(' ');
}
 
void
show_hex4(unsigned long val)
{
show_hex1(val>>24);
show_hex1(val>>16);
show_hex1(val>>8);
show_hex1(val);
}
 
void
show_hex1(unsigned long val)
{
static char *hex = "0123456789ABCDEF";
show_led(hex[(val & 0xF0) >> 4]);
show_led(hex[val & 0x0F]);
}
 
void
show_8bit_reg(void *addr)
{
unsigned char *reg = (unsigned char *)addr;
unsigned char val = *reg;
show_led(' ');
show_hex4((unsigned long)reg);
show_led('=');
show_hex1((unsigned long)val);
show_led('/');
}
 
#define SEG_0 0x00
#define SEG_A 0x01
#define SEG_B 0x02
#define SEG_C 0x04
#define SEG_D 0x08
#define SEG_E 0x10
#define SEG_F 0x20
#define SEG_G 0x40
#define SEG_H 0x80
#define LED(a,b,c,d,e,f,g,h) SEG_##a|SEG_##b|SEG_##c|SEG_##d|SEG_##e|SEG_##f|SEG_##g|SEG_##h
 
static unsigned char led_bits[] = {
LED(H,0,0,0,0,0,0,0), // 0x20
0x30, // 0x21 !
0x00, // 0x22 @
0x00, // 0x23
0x00, // 0x24
0x00, // 0x25
0x00, // 0x26
0x00, // 0x27
0x00, // 0x28
0x00, // 0x29
0x00, // 0x2A
0x00, // 0x2B
0x00, // 0x2C
0x00, // 0x2D
0x00, // 0x2E
LED(E,G,B,0,0,0,0,0), // 0x2F
LED(A,B,C,D,E,F,0,0), // 0x30
LED(0,B,C,0,0,0,0,0), // 0x31
LED(A,B,G,E,D,0,0,0), // 0x32
LED(A,B,G,C,D,0,0,0), // 0x33
LED(F,G,B,C,0,0,0,0), // 0x34
LED(A,F,G,C,D,0,0,0), // 0x35
LED(A,F,G,C,D,E,0,0), // 0x36
LED(A,B,C,0,0,0,0,0), // 0x37
LED(A,B,C,D,E,F,G,0), // 0x38
LED(A,F,G,B,C,0,0,0), // 0x39
LED(0,0,0,0,0,0,0,0), // 0x3A
LED(0,0,0,0,0,0,0,0), // 0x3B
LED(0,0,0,0,0,0,0,0), // 0x3C
LED(D,G,0,0,0,0,0,0), // 0x3D - =
LED(0,0,0,0,0,0,0,0), // 0x3E
LED(0,0,0,0,0,0,0,0), // 0x3F
LED(0,0,0,0,0,0,0,0), // 0x40
LED(A,F,G,B,E,C,0,0), // 0x41 - A
LED(F,G,E,D,C,0,0,0), // 0x42 - B
LED(A,F,E,D,0,0,0,0), // 0x43 - C
LED(B,G,E,D,C,0,0,0), // 0x44 - D
LED(A,F,G,E,D,0,0,0), // 0x45 - E
LED(A,F,G,E,0,0,0,0), // 0x46 - F
LED(0,0,0,0,0,0,0,0), // 0x47
LED(0,0,0,0,0,0,0,0), // 0x48
LED(0,0,0,0,0,0,0,0), // 0x49
LED(0,0,0,0,0,0,0,0), // 0x4A
LED(0,0,0,0,0,0,0,0), // 0x4B
LED(0,0,0,0,0,0,0,0), // 0x4C
LED(0,0,0,0,0,0,0,0), // 0x4D
LED(0,0,0,0,0,0,0,0), // 0x4E
LED(0,0,0,0,0,0,0,0), // 0x4F
LED(0,0,0,0,0,0,0,0), // 0x50
LED(0,0,0,0,0,0,0,0), // 0x51
LED(0,0,0,0,0,0,0,0), // 0x52
LED(0,0,0,0,0,0,0,0), // 0x53
LED(0,0,0,0,0,0,0,0), // 0x54
LED(0,0,0,0,0,0,0,0), // 0x55
LED(0,0,0,0,0,0,0,0), // 0x56
LED(0,0,0,0,0,0,0,0), // 0x57
LED(0,0,0,0,0,0,0,0), // 0x58
LED(0,0,0,0,0,0,0,0), // 0x59
LED(0,0,0,0,0,0,0,0), // 0x5A
LED(0,0,0,0,0,0,0,0), // 0x5B
LED(0,0,0,0,0,0,0,0), // 0x5C
LED(0,0,0,0,0,0,0,0), // 0x5D
LED(0,0,0,0,0,0,0,0), // 0x5E
LED(0,0,0,0,0,0,0,0), // 0x5F
LED(0,0,0,0,0,0,0,0), // 0x60
LED(0,0,0,0,0,0,0,0), // 0x61
LED(0,0,0,0,0,0,0,0), // 0x62
LED(0,0,0,0,0,0,0,0), // 0x63
LED(0,0,0,0,0,0,0,0), // 0x64
LED(0,0,0,0,0,0,0,0), // 0x65
LED(0,0,0,0,0,0,0,0), // 0x66
LED(0,0,0,0,0,0,0,0), // 0x67
LED(0,0,0,0,0,0,0,0), // 0x68
LED(0,0,0,0,0,0,0,0), // 0x69
LED(0,0,0,0,0,0,0,0), // 0x6A
LED(0,0,0,0,0,0,0,0), // 0x6B
LED(0,0,0,0,0,0,0,0), // 0x6C
LED(0,0,0,0,0,0,0,0), // 0x6D
LED(0,0,0,0,0,0,0,0), // 0x6E
LED(0,0,0,0,0,0,0,0), // 0x6F
LED(0,0,0,0,0,0,0,0), // 0x70
LED(0,0,0,0,0,0,0,0), // 0x71
LED(0,0,0,0,0,0,0,0), // 0x72
LED(0,0,0,0,0,0,0,0), // 0x73
LED(0,0,0,0,0,0,0,0), // 0x74
LED(0,0,0,0,0,0,0,0), // 0x75
LED(0,0,0,0,0,0,0,0), // 0x76
LED(0,0,0,0,0,0,0,0), // 0x77
LED(0,0,0,0,0,0,0,0), // 0x78
LED(0,0,0,0,0,0,0,0), // 0x79
LED(0,0,0,0,0,0,0,0), // 0x7A
LED(0,0,0,0,0,0,0,0), // 0x7B
LED(0,0,0,0,0,0,0,0), // 0x7C
LED(0,0,0,0,0,0,0,0), // 0x7D
LED(A,0,0,0,0,0,0,0), // 0x7E - ~
LED(0,0,0,0,0,0,0,0), // 0x7F
};
 
#define DELAY 10000
 
void
show_led(int p)
{
volatile unsigned char *led = (volatile unsigned char *)0xFFFFF014;
int j;
for (j = 0; j < DELAY; j++) {
*led = led_bits[p-0x20];
}
for (j = 0; j < DELAY*3; j++) {
*led = 0;
}
}
 
void
FAIL(char *m)
{
static char *fail_reason;
fail_reason = m;
#if 0
while (1) {
show_led('~');
show_hex4(m);
show_led('/');
}
#else
diag_printf("FAIL: %s\n", m);
#endif
}
 
void
ALERT(char *m)
{
static char *alert_reason;
alert_reason = m;
#if 0
show_led('~');
show_led('~');
show_hex4(m);
show_led('/');
#else
diag_printf("ALERT: %s\n", m);
#endif
}
 
//
// Clock support, using 16 bit timer TM1
//
 
CYG_WORD32 cyg_hal_clock_period;
 
void
hal_clock_initialize(cyg_int32 period)
{
volatile unsigned char *tmc = (volatile unsigned char *)V850_REG_TMC1;
volatile unsigned char *crc = (volatile unsigned char *)V850_REG_CRC1;
volatile unsigned char *prm = (volatile unsigned char *)V850_REG_PRM10;
volatile unsigned short *cmp0 = (volatile unsigned short *)V850_REG_CR10;
volatile unsigned short *cmp1 = (volatile unsigned short *)V850_REG_CR11;
*tmc = 0x00; // Halt timer
*crc = 0x00; // Select simple compare mode
*prm = 0x01; // System clock / 4
*cmp0 = period;
*cmp1 = period;
*tmc = 0x0C; // Continuous, reset mode (interval timer)
cyg_hal_clock_period = period;
}
 
void
hal_clock_reset(int vector, cyg_uint32 period)
{
hal_clock_initialize(period);
}
 
//
// Return the number of clock "ticks" since last interrupt
//
cyg_uint32 hal_clock_read(void)
{
volatile unsigned short *timer = (volatile unsigned short *)V850_REG_TM1;
return (cyg_uint32)*timer;
}
 
 
extern void _hal_thread_load_context(HAL_SavedRegisters **to)
CYGBLD_ATTRIB_NORET;
extern void _hal_thread_switch_context(HAL_SavedRegisters **to, HAL_SavedRegisters **from);
 
void hal_thread_load_context(CYG_ADDRESS to)
{
HAL_SavedRegisters **new_context = (HAL_SavedRegisters **)to;
#if 0
diag_printf("Load context: %x\n", *new_context);
show_regs(*new_context);
#endif
_hal_thread_load_context(new_context);
}
 
void hal_thread_switch_context(CYG_ADDRESS to, CYG_ADDRESS from)
{
HAL_SavedRegisters **old_context = (HAL_SavedRegisters **)from;
HAL_SavedRegisters **new_context = (HAL_SavedRegisters **)to;
#if 0
diag_printf("Switch context - old: %x, new: %x\n", *old_context, *new_context);
show_regs(*new_context);
#endif
_hal_thread_switch_context(new_context, old_context);
}
 
/arch/v2_0/cdl/hal_v85x.cdl
0,0 → 1,107
# ====================================================================
#
# hal_v85x.cdl
#
# NEC architectural HAL package configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): gthomas
# Contributors: jlarmour
# Date: 2001-03-21
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_HAL_V85X {
display "NEC V85x architecture"
parent CYGPKG_HAL
hardware
include_dir cyg/hal
define_header hal_v85x.h
description "
The NEC V85x architecture HAL package provides generic support
for this processor architecture. It is also necessary to
select a CPU variant and a specific target platform HAL
package."
 
cdl_interface CYGINT_HAL_V85X_VARIANT {
display "Number of variant implementations in this configuration"
no_define
requires 1 == CYGINT_HAL_V85X_VARIANT
}
 
compile hal_misc.c
 
make -priority 1 {
<PREFIX>/include/cyg/hal/nec_offsets.inc : <PACKAGE>/src/hal_mk_defs.c
$(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,nec_offsets.tmp -o hal_mk_defs.tmp -S $<
fgrep .equ hal_mk_defs.tmp | sed s/#// > $@
@echo $@ ": \\" > $(notdir $@).deps
@tail +2 nec_offsets.tmp >> $(notdir $@).deps
@echo >> $(notdir $@).deps
@rm nec_offsets.tmp hal_mk_defs.tmp
}
 
make {
<PREFIX>/lib/vectors.o : <PACKAGE>/src/vectors.S
$(CC) -Wp,-MD,vectors.tmp $(INCLUDE_PATH) $(CFLAGS) -c -o $@ $<
@echo $@ ": \\" > $(notdir $@).deps
@tail +2 vectors.tmp >> $(notdir $@).deps
@echo >> $(notdir $@).deps
@rm vectors.tmp
}
 
cdl_option CYGSEM_HAL_V85X_INLINE_INTERRUPT_FUNCTIONS {
display "In-line interrupt functions"
flavor bool
default_value 1
description "
This option allows for the HAL interrupt functions,
e.g. HAL_ENABLE_INTERRUPTS() to be coded as either in-line
assembly code or real functions. The primary motivations
for the latter would be debugging, tracing, etc."
}
 
cdl_interface CYGINT_HAL_V85X_ICE_DEBUG {
display "Debugging via ICE support"
description "
This interface is enabled when the underlying variant or platform
supports ICE debugging."
}
}
/arch/v2_0/include/hal_io.h
0,0 → 1,147
#ifndef CYGONCE_HAL_HAL_IO_H
#define CYGONCE_HAL_HAL_IO_H
 
//=============================================================================
//
// hal_io.h
//
// HAL device IO register support.
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg
// Date: 1998-02-17
// Purpose: Define IO register support
// Description: The macros defined here provide the HAL APIs for handling
// device IO control registers.
//
// Usage:
// #include <cyg/hal/hal_io.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <cyg/infra/cyg_type.h>
 
#include <cyg/hal/plf_io.h>
 
//-----------------------------------------------------------------------------
// IO Register address.
// This type is for recording the address of an IO register.
 
typedef volatile CYG_ADDRWORD HAL_IO_REGISTER;
 
//-----------------------------------------------------------------------------
// BYTE Register access.
// Individual and vectorized access to 8 bit registers.
 
#define HAL_READ_UINT8( _register_, _value_ ) \
((_value_) = *((volatile CYG_BYTE *)(_register_)))
 
#define HAL_WRITE_UINT8( _register_, _value_ ) \
(*((volatile CYG_BYTE *)(_register_)) = (_value_))
 
#define HAL_READ_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \
{ \
cyg_count32 _i_,_j_; \
for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \
(_buf_)[_i_] = ((volatile CYG_BYTE *)(_register_))[_j_]; \
}
 
#define HAL_WRITE_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \
{ \
cyg_count32 _i_,_j_; \
for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \
((volatile CYG_BYTE *)(_register_))[_j_] = (_buf_)[_i_]; \
}
 
 
//-----------------------------------------------------------------------------
// 16 bit access.
// Individual and vectorized access to 16 bit registers.
#define HAL_READ_UINT16( _register_, _value_ ) \
((_value_) = *((volatile CYG_WORD16 *)(_register_)))
 
#define HAL_WRITE_UINT16( _register_, _value_ ) \
(*((volatile CYG_WORD16 *)(_register_)) = (_value_))
 
#define HAL_READ_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \
{ \
cyg_count32 _i_,_j_; \
for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \
(_buf_)[_i_] = ((volatile CYG_WORD16 *)(_register_))[_j_]; \
}
 
#define HAL_WRITE_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \
{ \
cyg_count32 _i_,_j_; \
for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \
((volatile CYG_WORD16 *)(_register_))[_j_] = (_buf_)[_i_]; \
}
 
//-----------------------------------------------------------------------------
// 32 bit access.
// Individual and vectorized access to 32 bit registers.
#define HAL_READ_UINT32( _register_, _value_ ) \
((_value_) = *((volatile CYG_WORD32 *)(_register_)))
 
#define HAL_WRITE_UINT32( _register_, _value_ ) \
(*((volatile CYG_WORD32 *)(_register_)) = (_value_))
 
#define HAL_READ_UINT32_VECTOR( _register_, _buf_, _count_, _step_ ) \
{ \
cyg_count32 _i_,_j_; \
for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \
(_buf_)[_i_] = ((volatile CYG_WORD32 *)(_register_))[_j_]; \
}
 
#define HAL_WRITE_UINT32_VECTOR( _register_, _buf_, _count_, _step_ ) \
{ \
cyg_count32 _i_,_j_; \
for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \
((volatile CYG_WORD32 *)(_register_))[_j_] = (_buf_)[_i_]; \
}
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_HAL_IO_H
// End of hal_io.h
/arch/v2_0/include/basetype.h
0,0 → 1,73
#ifndef CYGONCE_HAL_BASETYPE_H
#define CYGONCE_HAL_BASETYPE_H
 
//=============================================================================
//
// basetype.h
//
// Standard types for this architecture.
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg, gthomas, jlarmour
// Date: 2001-03-21
// Purpose: Define architecture base types.
// Usage: Included by <cyg/infra/cyg_types.h>, do not use directly
//
//####DESCRIPTIONEND####
//
 
//-----------------------------------------------------------------------------
// Characterize the architecture
 
#define CYG_BYTEORDER CYG_LSBFIRST // Little endian
 
//-----------------------------------------------------------------------------
// NEC usually uses labels with undersores.
 
#define CYG_LABEL_DEFN(_name_) _##_name_
 
//-----------------------------------------------------------------------------
// Define the standard variable sizes
 
// The NEC architecture uses the default definitions of the base types,
// so we do not need to define any here.
 
//-----------------------------------------------------------------------------
#endif // CYGONCE_HAL_BASETYPE_H
// End of basetype.h
/arch/v2_0/include/hal_intr.h
0,0 → 1,284
#ifndef CYGONCE_HAL_HAL_INTR_H
#define CYGONCE_HAL_HAL_INTR_H
 
//==========================================================================
//
// hal_intr.h
//
// HAL Interrupt and clock support
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg, jskov,
// gthomas, jlarmour
// Date: 1999-02-16
// Purpose: Define Interrupt support
// Description: The macros defined here provide the HAL APIs for handling
// interrupts and the clock.
//
// Usage:
// #include <cyg/hal/hal_intr.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
#include <pkgconf/hal_v85x.h>
 
#include <cyg/infra/cyg_type.h>
#include <cyg/hal/hal_io.h>
 
#include <cyg/hal/var_intr.h>
 
//--------------------------------------------------------------------------
// Static data used by HAL
 
// ISR tables
externC CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT];
externC CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT];
externC CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT];
 
// VSR table
externC CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT];
 
//--------------------------------------------------------------------------
// Default ISR
// The #define is used to test whether this routine exists, and to allow
// us to call it.
 
externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);
 
#define HAL_DEFAULT_ISR hal_default_isr
 
//--------------------------------------------------------------------------
// Interrupt state storage
 
typedef cyg_uint32 CYG_INTERRUPT_STATE;
 
//--------------------------------------------------------------------------
// Interrupt control macros
 
externC cyg_uint32 hal_disable_interrupts(void);
externC void hal_enable_interrupts(void);
externC void hal_restore_interrupts(cyg_uint32);
externC cyg_uint32 hal_query_interrupts(void);
 
#ifdef CYGSEM_HAL_NEC_INLINE_INTERRUPT_FUNCTIONS
#define HAL_DISABLE_INTERRUPTS(_old_) \
CYG_MACRO_START \
asm volatile ( \
"stsr PSW,%0;" \
"di" \
: "=r"(_old_)); \
CYG_MACRO_END
 
#define HAL_ENABLE_INTERRUPTS() \
CYG_MACRO_START \
asm volatile ( \
"ei" \
: ); \
CYG_MACRO_END
 
#define HAL_RESTORE_INTERRUPTS(_old_) \
CYG_MACRO_START \
asm volatile ( \
"ldsr %0,PSW" \
: \
: "r" (_old_)); \
CYG_MACRO_END
#else
#define HAL_DISABLE_INTERRUPTS(_old_) _old_ = hal_disable_interrupts()
#define HAL_ENABLE_INTERRUPTS() hal_enable_interrupts()
#define HAL_RESTORE_INTERRUPTS(_old_) hal_restore_interrupts(_old_)
#endif
 
#define HAL_QUERY_INTERRUPTS( _state_ ) _state_ = hal_query_interrupts()
 
//--------------------------------------------------------------------------
// Routine to execute DSRs using separate interrupt stack
 
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
externC void hal_interrupt_stack_call_pending_DSRs(void);
#define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \
hal_interrupt_stack_call_pending_DSRs()
 
// these are offered solely for stack usage testing
// if they are not defined, then there is no interrupt stack.
#define HAL_INTERRUPT_STACK_BASE cyg_interrupt_stack_base
#define HAL_INTERRUPT_STACK_TOP cyg_interrupt_stack
// use them to declare these extern however you want:
// extern char HAL_INTERRUPT_STACK_BASE[];
// extern char HAL_INTERRUPT_STACK_TOP[];
// is recommended
#endif
 
//--------------------------------------------------------------------------
// Vector translation.
// For chained interrupts we only have a single vector though which all
// are passed. For unchained interrupts we have a vector per interrupt.
// Note: this hardware does not have/support chained interrupts.
 
//--------------------------------------------------------------------------
// Vector translation.
// For chained interrupts we only have a single vector though which all
// are passed. For unchained interrupts we have a vector per interrupt.
 
#ifndef HAL_TRANSLATE_VECTOR
#if defined(CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN)
#define HAL_TRANSLATE_VECTOR(_vector_,_index_) (_index_) = 0
#else
#define HAL_TRANSLATE_VECTOR(_vector_,_index_) (_index_) = (_vector_-CYGNUM_HAL_ISR_MIN)
#endif
#endif
 
#ifndef HAL_TRANSLATE_VECTOR
#define HAL_TRANSLATE_VECTOR(_vector_,_index_) (_index_) = (_vector_-CYGNUM_HAL_ISR_MIN)
#endif
 
//--------------------------------------------------------------------------
// Interrupt and VSR attachment macros
 
#define HAL_INTERRUPT_IN_USE( _vector_, _state_) \
CYG_MACRO_START \
cyg_uint32 _index_; \
HAL_TRANSLATE_VECTOR ((_vector_), _index_); \
\
if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)HAL_DEFAULT_ISR ) \
(_state_) = 0; \
else \
(_state_) = 1; \
CYG_MACRO_END
 
#define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \
{ \
cyg_uint32 _index_; \
HAL_TRANSLATE_VECTOR( _vector_, _index_ ); \
\
if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)HAL_DEFAULT_ISR ) \
{ \
hal_interrupt_handlers[_index_] = (CYG_ADDRESS)_isr_; \
hal_interrupt_data[_index_] = (CYG_ADDRWORD)_data_; \
hal_interrupt_objects[_index_] = (CYG_ADDRESS)_object_; \
} \
}
 
#define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \
{ \
cyg_uint32 _index_; \
HAL_TRANSLATE_VECTOR( _vector_, _index_ ); \
\
if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)_isr_ ) \
{ \
hal_interrupt_handlers[_index_] = (CYG_ADDRESS)HAL_DEFAULT_ISR; \
hal_interrupt_data[_index_] = 0; \
hal_interrupt_objects[_index_] = 0; \
} \
}
 
#define HAL_VSR_GET( _vector_, _pvsr_ ) \
*(_pvsr_) = (void (*)())hal_vsr_table[_vector_];
 
#define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) CYG_MACRO_START \
if( _poldvsr_ != NULL) \
*(CYG_ADDRESS *)_poldvsr_ = (CYG_ADDRESS)hal_vsr_table[_vector_]; \
hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \
CYG_MACRO_END
 
// This is an ugly name, but what it means is: grab the VSR back to eCos
// internal handling, or if you like, the default handler. But if
// cooperating with GDB and CygMon, the default behaviour is to pass most
// exceptions to CygMon. This macro undoes that so that eCos handles the
// exception. So use it with care.
 
externC void __default_exception_vsr(void);
externC void __default_interrupt_vsr(void);
 
#define HAL_VSR_SET_TO_ECOS_HANDLER( _vector_, _poldvsr_ ) CYG_MACRO_START \
HAL_VSR_SET( _vector_, _vector_ == CYGNUM_HAL_VECTOR_INTERRUPT \
? (CYG_ADDRESS)__default_interrupt_vsr \
: (CYG_ADDRESS)__default_exception_vsr, \
_poldvsr_ ); \
CYG_MACRO_END
 
//--------------------------------------------------------------------------
// Interrupt controller access
 
externC void hal_interrupt_mask(int);
externC void hal_interrupt_unmask(int);
externC void hal_interrupt_acknowledge(int);
 
#define HAL_INTERRUPT_MASK( _vector_ ) hal_interrupt_mask(_vector_)
#define HAL_INTERRUPT_UNMASK( _vector_ ) hal_interrupt_unmask(_vector_)
#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) hal_interrupt_acknowledge(_vector_)
 
#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )
#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ )
 
//--------------------------------------------------------------------------
// Clock control.
 
externC CYG_WORD32 cyg_hal_clock_period;
externC void hal_clock_initialize(cyg_int32);
externC void hal_clock_reset(int, cyg_uint32);
externC cyg_uint32 hal_clock_read(void);
 
#define HAL_CLOCK_INITIALIZE( _period_ ) hal_clock_initialize(_period_)
#define HAL_CLOCK_RESET( _vector_, _period_ ) hal_clock_reset(_vector_,_period_)
#define HAL_CLOCK_READ( _pvalue_ ) *(_pvalue_) = hal_clock_read()
 
#if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY) && \
!defined(HAL_CLOCK_LATENCY)
#define HAL_CLOCK_LATENCY( _pvalue_ ) HAL_CLOCK_READ(_pvalue_)
#endif
 
//--------------------------------------------------------------------------
// Reset.
 
#ifndef HAL_PLATFORM_RESET
extern void hal_reset_board(void);
#define HAL_PLATFORM_RESET() hal_reset_board()
#define HAL_PLATFORM_RESET_ENTRY 0x00000000
#endif
 
//--------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_HAL_INTR_H
// End of hal_intr.h
/arch/v2_0/include/nec-stub.h
0,0 → 1,118
#ifndef CYGONCE_HAL_NEC_STUB_H
#define CYGONCE_HAL_NEC_STUB_H
//========================================================================
//
// nec-stub.h
//
// NEC-specific definitions for generic stub
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Red Hat, nickg
// Contributors: Red Hat, nickg
// Date: 1998-06-08
// Purpose:
// Description: NEC-specific definitions for generic stub
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
 
#ifdef __cplusplus
extern "C" {
#endif
 
#define NUMREGS 66
#define REGSIZE(X) 4
typedef unsigned long target_register_t;
 
enum regnames {
R0, R1, SP, R3, R4, R5, R6, R7,
R8, R9 , R10, R11, R12, R13, R14, R15,
R16, R17, R18, R19, R20, R21, R22, R23,
R24, R25, R26, R27, R28, R29, R30, R31,
EIPC, EIPSW, FEPC, FEPSW, ECR, PSW, SR6, SR7,
SR8, SR9 , SR10, SR11, SR12, SR13, SR14, SR15,
SR16, SR17, SR18, SR19, SR20, SR21, SR22, SR23,
SR24, SR25, SR26, SR27, SR28, SR29, SR30, SR31,
PC, FP
};
 
typedef enum regnames regnames_t;
 
/* Given a trap value TRAP, return the corresponding signal. */
extern int __computeSignal (unsigned int trap_number);
 
/* Return the SPARC trap number corresponding to the last-taken trap. */
extern int __get_trap_number (void);
 
/* Return the currently-saved value corresponding to register REG. */
extern target_register_t get_register (regnames_t reg);
 
/* Store VALUE in the register corresponding to WHICH. */
extern void put_register (regnames_t which, target_register_t value);
 
/* Set the currently-saved pc register value to PC. This also updates NPC
as needed. */
extern void set_pc (target_register_t pc);
 
/* Set things up so that the next user resume will execute one instruction.
This may be done by setting breakpoints or setting a single step flag
in the saved user registers, for example. */
void __single_step (void);
 
/* Clear the single-step state. */
void __clear_single_step (void);
 
/* If the breakpoint we hit is in the breakpoint() instruction, return a
non-zero value. */
extern int __is_breakpoint_function (void);
 
/* Skip the current instruction. */
extern void __skipinst (void);
 
extern void __install_breakpoints (void);
 
extern void __clear_breakpoints (void);
 
#ifdef __cplusplus
} /* extern "C" */
#endif
 
#endif // ifndef CYGONCE_HAL_NEC_STUB_H
/arch/v2_0/include/hal_arch.h
0,0 → 1,284
#ifndef CYGONCE_HAL_HAL_ARCH_H
#define CYGONCE_HAL_HAL_ARCH_H
 
//==========================================================================
//
// hal_arch.h
//
// Architecture specific abstractions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg,gthomas
// Contributors: nickg,jlarmour
// Date: 2001-03-21
// Purpose: Define architecture abstractions
// Usage: #include <cyg/hal/hal_arch.h>
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
#include <cyg/infra/cyg_type.h>
 
#include <cyg/hal/var_arch.h>
 
//--------------------------------------------------------------------------
// Processor saved states:
 
#define CYG_HAL_NEC_REG CYG_WORD32
#define CYG_HAL_NEC_REG_SIZE 4
 
typedef struct
{
// These are common to all saved states
CYG_HAL_NEC_REG d[32]; /* Data regs */
CYG_ADDRWORD pc; /* Program Counter */
CYG_ADDRWORD psw; /* Status Reg */
// These are only saved for exceptions and interrupts
CYG_ADDRWORD cause; /* Exception cause register */
CYG_ADDRWORD vector; /* Exception/interrupt number */
} HAL_SavedRegisters;
 
//
// Processor state register
//
#define CYGARC_PSW_ID 0x20 // Interrupt disable
#define CYGARC_PSW_EP 0x40 // Exception in progress
#define CYGARC_PSW_NP 0x80 // NMI in progress
 
//--------------------------------------------------------------------------
// Exception handling function.
// This function is defined by the kernel according to this prototype. It is
// invoked from the HAL to deal with any CPU exceptions that the HAL does
// not want to deal with itself. It usually invokes the kernel's exception
// delivery mechanism.
 
externC void cyg_hal_deliver_exception( CYG_WORD code, CYG_ADDRWORD data );
 
//--------------------------------------------------------------------------
// Bit manipulation macros
 
externC cyg_uint32 hal_lsbit_index(cyg_uint32 mask);
externC cyg_uint32 hal_msbit_index(cyg_uint32 mask);
 
#define HAL_LSBIT_INDEX(index, mask) index = hal_lsbit_index(mask);
 
#define HAL_MSBIT_INDEX(index, mask) index = hal_msbit_index(mask);
 
//--------------------------------------------------------------------------
// Context Initialization
 
#define CYG_HAL_NEC_INIT_PSW 0x00000000
 
// Initialize the context of a thread.
// Arguments:
// _sparg_ name of variable containing current sp, will be written with new sp
// _thread_ thread object address, passed as argument to entry point
// _entry_ entry point address.
// _id_ bit pattern used in initializing registers, for debugging.
#define HAL_THREAD_INIT_CONTEXT( _sparg_, _thread_, _entry_, _id_ ) \
{ \
register CYG_WORD _sp_ = ((CYG_WORD)_sparg_)-56; \
register HAL_SavedRegisters *_regs_; \
int _i_; \
_sp_ = _sp_ & 0xFFFFFFF0; \
_regs_ = (HAL_SavedRegisters *)(((_sp_) - sizeof(HAL_SavedRegisters))&0xFFFFFFF0); \
for( _i_ = 0; _i_ < 32; _i_++ ) (_regs_)->d[_i_] = (_id_)|_i_; \
(_regs_)->d[03] = (CYG_HAL_NEC_REG)(_sp_); /* SP = top of stack */ \
(_regs_)->d[04] = (CYG_HAL_NEC_REG)(_sp_); /* GP = top of stack */ \
(_regs_)->d[29] = (CYG_HAL_NEC_REG)(_sp_); /* FP = top of stack */ \
(_regs_)->d[06] = (CYG_HAL_NEC_REG)(_thread_); /* R6 = arg1 = thread ptr */ \
(_regs_)->d[31] = (CYG_HAL_NEC_REG)(_entry_); /* RA(d[31]) = entry point*/ \
(_regs_)->pc = (CYG_WORD)(_entry_); /* PC = entry point */ \
(_regs_)->psw = CYG_HAL_NEC_INIT_PSW; \
_sparg_ = (CYG_ADDRESS)_regs_; \
}
 
//--------------------------------------------------------------------------
// Context switch macros.
// The arguments are pointers to locations where the stack pointer
// of the current thread is to be stored, and from where the sp of the
// next thread is to be fetched.
 
externC void hal_thread_switch_context( CYG_ADDRESS to, CYG_ADDRESS from );
externC void hal_thread_load_context( CYG_ADDRESS to )
__attribute__ ((noreturn));
 
#define HAL_THREAD_SWITCH_CONTEXT(_fspptr_,_tspptr_) \
hal_thread_switch_context( (CYG_ADDRESS)_tspptr_, \
(CYG_ADDRESS)_fspptr_);
 
#define HAL_THREAD_LOAD_CONTEXT(_tspptr_) \
hal_thread_load_context( (CYG_ADDRESS)_tspptr_ );
 
//--------------------------------------------------------------------------
// Execution reorder barrier.
// When optimizing the compiler can reorder code. In multithreaded systems
// where the order of actions is vital, this can sometimes cause problems.
// This macro may be inserted into places where reordering should not happen.
// The "memory" keyword is potentially unnecessary, but it is harmless to
// keep it.
 
#define HAL_REORDER_BARRIER() asm volatile ( "" : : : "memory" )
 
//--------------------------------------------------------------------------
// Breakpoint support
// HAL_BREAKPOINT() is a code sequence that will cause a breakpoint to
// happen if executed.
// HAL_BREAKINST is the value of the breakpoint instruction and
// HAL_BREAKINST_SIZE is its size in bytes.
 
#define HAL_BREAKPOINT(_label_) \
asm volatile (" .globl _" #_label_ ";" \
"_"#_label_":" \
" br _"#_label_ \
);
 
#define HAL_BREAKINST 0x0585
#define HAL_BREAKINST_SIZE 2
 
//--------------------------------------------------------------------------
// Thread register state manipulation for GDB support.
 
// Default to a 32 bit register size for GDB register dumps.
#ifndef CYG_HAL_GDB_REG
#define CYG_HAL_GDB_REG CYG_WORD32
#endif
 
// Translate a stack pointer as saved by the thread context macros above into
// a pointer to a HAL_SavedRegisters structure.
#define HAL_THREAD_GET_SAVED_REGISTERS( _sp_, _regs_ ) \
(_regs_) = (HAL_SavedRegisters *)(_sp_)
 
 
//--------------------------------------------------------------------------
// HAL setjmp
 
typedef struct {
cyg_uint32 sp;
cyg_uint32 gp;
cyg_uint32 tp;
cyg_uint32 r1,r2,r4,r5;
cyg_uint32 r20, r21, r22, r23;
cyg_uint32 r24, r25, r26, r27, r28;
cyg_uint32 fp;
cyg_uint32 ep;
cyg_uint32 lp;
} hal_jmp_buf_t;
 
#define CYGARC_JMP_BUF_SIZE (sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32))
 
typedef cyg_uint32 hal_jmp_buf[ CYGARC_JMP_BUF_SIZE ];
 
externC int hal_setjmp(hal_jmp_buf env);
externC void hal_longjmp(hal_jmp_buf env, int val);
 
//-------------------------------------------------------------------------
// Idle thread code.
// This macro is called in the idle thread loop, and gives the HAL the
// chance to insert code. Typical idle thread behaviour might be to halt the
// processor.
 
externC void hal_idle_thread_action(cyg_uint32 loop_count);
 
#define HAL_IDLE_THREAD_ACTION(_count_) hal_idle_thread_action(_count_)
 
//--------------------------------------------------------------------------
// Hardware specific test exit code. This is defined here simply to make
// setting a breakpoint on this function viable.
//
#define CYGHWR_TEST_PROGRAM_EXIT() \
{ \
static volatile int ctr; \
while (1) ctr++; \
}
 
//--------------------------------------------------------------------------
// Minimal and sensible stack sizes: the intention is that applications
// will use these to provide a stack size in the first instance prior to
// proper analysis. Idle thread stack should be this big.
 
// THESE ARE NOT INTENDED TO BE MICROMETRICALLY ACCURATE FIGURES.
// THEY ARE HOWEVER ENOUGH TO START PROGRAMMING.
// YOU MUST MAKE YOUR STACKS LARGER IF YOU HAVE LARGE "AUTO" VARIABLES!
 
// This is not a config option because it should not be adjusted except
// under "enough rope" sort of disclaimers.
 
// Typical case stack frame size: return link + 4 pushed registers + some locals.
#define CYGNUM_HAL_STACK_FRAME_SIZE (48)
 
// Stack needed for a context switch:
#define CYGNUM_HAL_STACK_CONTEXT_SIZE (((32+12)*CYG_HAL_NEC_REG_SIZE)+(32*4))
 
 
// Interrupt + call to ISR, interrupt_end() and the DSR
#define CYGNUM_HAL_STACK_INTERRUPT_SIZE (4+2*CYGNUM_HAL_STACK_CONTEXT_SIZE)
 
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
 
// An interrupt stack which is large enough for all possible interrupt
// conditions (and only used for that purpose) exists. "User" stacks
// can be much smaller
 
#define CYGNUM_HAL_STACK_SIZE_MINIMUM (CYGNUM_HAL_STACK_CONTEXT_SIZE+ \
CYGNUM_HAL_STACK_INTERRUPT_SIZE*2+ \
CYGNUM_HAL_STACK_FRAME_SIZE*8)
#define CYGNUM_HAL_STACK_SIZE_TYPICAL (CYGNUM_HAL_STACK_SIZE_MINIMUM+1024)
 
#else // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
 
// No separate interrupt stack exists. Make sure all threads contain
// a stack sufficiently large.
 
#define CYGNUM_HAL_STACK_SIZE_MINIMUM (4096)
#define CYGNUM_HAL_STACK_SIZE_TYPICAL (4096)
 
#endif
 
//--------------------------------------------------------------------------
// Macros for switching context between two eCos instances (jump from
// code in ROM to code in RAM or vice versa).
#define CYGARC_HAL_SAVE_GP()
#define CYGARC_HAL_RESTORE_GP()
 
//--------------------------------------------------------------------------
#endif // CYGONCE_HAL_HAL_ARCH_H
// End of hal_arch.h
/arch/v2_0/include/hal_cache.h
0,0 → 1,68
#ifndef CYGONCE_HAL_CACHE_H
#define CYGONCE_HAL_CACHE_H
 
//=============================================================================
//
// hal_cache.h
//
// HAL cache control API
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg
// Contributors: nickg
// Date: 1998-02-17
// Purpose: Cache control API
// Description: The macros defined here provide the HAL APIs for handling
// cache control operations.
// Usage:
// #include <cyg/hal/hal_cache.h>
// ...
//
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
#include <cyg/infra/cyg_type.h>
 
#include <cyg/hal/var_cache.h>
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_CACHE_H
// End of hal_cache.h
/arch/v2_0/ChangeLog
0,0 → 1,253
2001-11-26 Jesper Skov <jskov@redhat.com>
 
* src/hal_misc.c (hal_msbit_index): Fixed.
 
2001-04-24 Jonathan Larmour <jlarmour@redhat.com>
 
* src/vectors.S: Support daft platforms like the CEB which have
default on-chip flash that vector NMI to 2 insns after reset.
Also place hal_v85x_ice_syscall_info in fixed location, only
for ROM/ROMRAM builds.
 
2001-03-28 Jonathan Larmour <jlarmour@redhat.com>
 
* src/vectors.S: Overhaul...
Make interrupt processing path faster, especially by implementing
CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
Add ROMRAM startup support
Pass in correct argument to exception_handler
Call DSRs with parameter flushback area
Add __allow_nmi as a somewhat kludgy means of determining
whether NMIs should be ignored - important if the board resets
and the vector tables are temporarily inconsistent.
Initialize __vsr_table statically.
Add some generic elements of ICE debugging support
 
* src/v85x.ld: Remove - redundant.
 
* src/hal_mk_defs.c (main): Update to reflect new vector names
(to match official NEC docs)
 
* src/hal_misc.c (exception_handler): Remove cygmon cruft.
(hal_arch_default_isr): Report spurious interrupts.
(hal_idle_thread_action): use halt instruction
 
* include/hal_arch.h: Remove obsolete comment reference to arch.inc.
 
* include/basetype.h: No need to include <pkgconf/hal.h>
* include/hal_io.h: Ditto.
* include/nec-stub.h: Similarly for <pkgconf/system.h>
 
* cdl/hal_v85x.cdl: Move CYGHWR_HAL_V85X_CPU_FREQ into platforms
(and make Hz, not MHz).
Add generic ICE debugging interface.
Description tidies.
 
2001-01-26 Jonathan Larmour <jlarmour@redhat.com>
 
* include/hal_intr.h: Move HAL_STUB_PLATFORM_RESET and
HAL_STUB_PLATFORM_RESET_ENTRY here from platform stub headers.
Also rename to HAL_PLATFORM_RESET and HAL_PLATFORM_RESET_ENTRY
 
* src/vectors.S (_hal_reset_board): Renamed from hal_plf_reset_board
 
2001-01-18 Nick Garnett <nickg@cygnus.co.uk>
 
* src/vectors.S: Added underscore to reference to
cyg_scheduler_sched_lock, since CYGBLD_ATTRIB_ASM_ALIAS() now adds
one automatically.
 
2000-10-20 Jesper Skov <jskov@redhat.com>
 
* src/hal_misc.c: Update __mem_fault_handler declaration.
 
2000-10-16 Jonathan Larmour <jlarmour@redhat.com>
 
* include/hal_arch.h (CYGARC_JMP_BUF_SIZE): Define hal_jmp_buf in
terms of this.
 
2000-10-09 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (start): Need to handle ^C for all applications.
 
2000-09-13 Jonathan Larmour <jlarmour@redhat.com>
 
* src/vectors.S: When calling C functions, ensure there is 16 bytes
space for the parameter flushback area (as per the calling convention)
on the stack
 
2000-09-07 Jonathan Larmour <jlarmour@redhat.com>
 
* include/basetype.h: Don't need special alignment after all - it was
a bug elsewhere.
 
2000-09-06 Gary Thomas <gthomas@redhat.com>
 
* include/basetype.h: Need special alignment to match the way
the compiler/linker actually do things.
 
* cdl/hal_v85x.cdl: Improve variant handling and specification.
 
2000-08-30 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (start): Allow programs to field NMI exceptions.
 
2000-07-24 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* include/basetype.h: Removed definition of CYG_LABEL_NAME().
 
* src/v85x.ld: Switched to new table definition mechanism.
 
2000-07-21 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (_hal_plf_reset_board): Needs to be defined in all
configurations.
 
2000-06-27 Jesper Skov <jskov@redhat.com>
 
* src/vectors.S:
* src/hal_mk_defs.c:
Fix compiler warnings.
 
* src/hal_misc.c (hal_default_isr): Let common version do the
checks.
 
2000-06-15 Gary Thomas <gthomas@redhat.com>
 
* src/hal_mk_defs.c:
* src/vectors.S:
* src/hal_misc.c (hal_default_isr): Update for new debug
vector support.
 
* include/hal_intr.h:
* src/vectors.S (do_interrupt): Proper handling of chained
interrupts.
 
2000-06-12 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (return_from_exception_or_interrupt): Revert
reorg change (05-26) which broke GDB breakpoints.
 
2000-06-08 Jesper Skov <jskov@redhat.com>
 
* include/hal_arch.h (CYGARC_HAL_SAVE_GP, CYGARC_HAL_RESTORE_GP):
Added.
 
2000-05-26 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S: Slight reorg of trap vectors (more readable).
 
2000-05-25 John Dallaway <jld@redhat.com>
 
* cdl/hal_v85x.cdl: Tidy display strings.
 
2000-05-25 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S: Handle different chips (number of interrupt
sources differs, exception table is altered, etc).
 
* include/hal_intr.h: Actual interrupt layout now defined by
variant/platform since these differ depending on the chip.
 
2000-05-03 Gary Thomas <gthomas@redhat.com>
 
* include/hal_arch.h: New breakpoint instruction ("br *").
 
2000-04-14 Gary Thomas <gthomas@redhat.com>
 
* src/hal_misc.c (exception_handler): Proper handling of nested
[watchdog] interrupts - don't corrupt GDB registers.
 
* src/hal_mk_defs.c: Add some symbols required for NMI handling.
 
* src/vectors.S (return_from_exception_or_interrupt):
Properly handle different cases for exception, NMI and ISR.
 
* include/hal_intr.h (HAL_TRANSLATE_VECTOR): Ignore interrupt
chaining - doesn't happen on this hardware.
 
2000-04-11 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (exception): Handle NMI. In particular, need to
have appropriate bits set so they clear and also get the state
from the proper save registers.
(exception): Register save was wrong - ROM only.
 
2000-03-31 Gary Thomas <gthomas@redhat.com>
 
* src/hal_mk_defs.c: Add definition for 'ep' register.
 
* include/hal_intr.h:
* cdl/hal_nec.cdl: Add config option to choose between inline and
real functions for interrupt macros.
 
* src/vectors.S: Tune up - use SLD/SST for smaller, faster code
in context load/save routines. Also remove IRQ trace/debug code.
 
2000-03-30 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (do_interrupt): Can't use R13 across function calls.
This caused instability when turning on kernel instrumentation.
 
* include/hal_intr.h: Use out-of-line code for interrupt functions
for tracing/testing.
 
* src/vectors.S: Working support for separate interrupt stack.
Some debug/trace code left in.
 
* src/hal_mk_defs.c:
* include/hal_arch.h: Documented API does not match actual GCC
register usage. Need to save R1/R2/R4/R5 for setjmp/longjmp.
 
2000-03-27 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (do_interrupt): Pass regs to ISR & DSR.
 
* include/basetype.h: Endian-ness was incorrect.
 
* include/hal_arch.h:
* src/hal_mk_defs.c: Complete setjmp/longjmp support.
 
* src/vectors.S: Add interrupt stack.
 
2000-03-21 Gary Thomas <gthomas@redhat.com>
 
* src/vectors.S (_hal_plf_reset_board): Add board reset function.
 
* include/hal_arch.h (CYGHWR_TEST_PROGRAM_EXIT): Define RESET for ROM
based programs.
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/arch/v2_0/src/hal_misc.c
0,0 → 1,232
/*==========================================================================
//
// hal_misc.c
//
// HAL miscellaneous functions
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): nickg, gthomas
// Contributors: nickg, gthomas, jlarmour
// Date: 2001-03-21
// Purpose: HAL miscellaneous functions
// Description: This file contains miscellaneous functions provided by the
// HAL.
//
//####DESCRIPTIONEND####
//
//=========================================================================*/
 
#include <pkgconf/hal.h>
#include <pkgconf/hal_v85x.h>
#ifdef CYGPKG_KERNEL
#include <pkgconf/kernel.h>
#endif
 
#include <cyg/infra/cyg_type.h>
#include <cyg/infra/cyg_trac.h> // tracing macros
#include <cyg/infra/cyg_ass.h> // assertion macros
#include <cyg/infra/diag.h>
 
#include <cyg/hal/hal_arch.h> // HAL header
#include <cyg/hal/hal_intr.h> // HAL header
 
/*------------------------------------------------------------------------*/
/* First level C exception handler. */
 
externC void __handle_exception (void);
 
externC HAL_SavedRegisters *_hal_registers;
externC void* volatile __mem_fault_handler;
 
void
exception_handler(HAL_SavedRegisters *regs)
{
#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
// diag_printf("Exception! Frame: %x\n", regs);
// show_regs(regs);
static int gdb_active;
if (gdb_active == 0) {
gdb_active = 1;
_hal_registers = regs;
__handle_exception();
gdb_active = 0;
}
 
#elif defined(CYGPKG_KERNEL_EXCEPTIONS)
 
// We should decode the vector and pass a more appropriate
// value as the second argument. For now we simply pass a
// pointer to the saved registers. We should also divert
// breakpoint and other debug vectors into the debug stubs.
 
cyg_hal_deliver_exception( regs->vector, (CYG_ADDRWORD)regs );
 
#else
 
CYG_FAIL("Exception!!!");
#endif
return;
}
 
/*------------------------------------------------------------------------*/
/* C++ support - run initial constructors */
 
#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
cyg_bool cyg_hal_stop_constructors;
#endif
 
typedef void (*pfunc) (void);
extern pfunc __CTOR_LIST__[];
extern pfunc __CTOR_END__[];
 
void
cyg_hal_invoke_constructors (void)
{
 
#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
static pfunc *p = &__CTOR_END__[-1];
cyg_hal_stop_constructors = 0;
for (; p >= __CTOR_LIST__; p--) {
(*p) ();
if (cyg_hal_stop_constructors) {
p--;
break;
}
}
#else
pfunc *p;
 
for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--) {
(*p) ();
}
#endif
}
 
/*------------------------------------------------------------------------*/
/* default ISR */
 
#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
externC cyg_uint32
hal_arch_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
CYG_TRACE1(true, "Interrupt: %d", vector);
 
diag_printf("Spurious Interrupt!!! - vector: %d, data: %x\n", vector,
data);
CYG_FAIL("Spurious Interrupt!!!");
return 0;
}
#else
externC cyg_uint32
hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
{
CYG_TRACE1(true, "Interrupt: %d", vector);
 
#ifndef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
#ifdef CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT
#ifdef CYGDBG_HAL_CTRLC_ISR
// then see if it is an incoming character interrupt and break
// into the stub ROM if the char is a ^C.
if ( CYGDBG_HAL_CTRLC_ISR( vector, data ) )
return 1; // interrupt handled
#endif
#endif
#endif
 
diag_printf("Spurious Interrupt!!! - vector: %d, data: %x\n", vector,
data);
CYG_FAIL("Spurious Interrupt!!!");
return 0;
}
#endif
 
/*------------------------------------------------------------------------*/
/* Idle thread action */
 
void
hal_idle_thread_action( cyg_uint32 count )
{
// power saving instruction
asm("halt");
}
 
/*-------------------------------------------------------------------------*/
/* Misc functions */
 
cyg_uint32
hal_lsbit_index(cyg_uint32 mask)
{
int i;
for (i = 0; i < 32; i++) {
if (mask & (1<<i)) return ((cyg_uint32)i);
}
return ((cyg_uint32)-1);
}
 
cyg_uint32
hal_msbit_index(cyg_uint32 mask)
{
int i;
for (i = 31; i >= 0; i--) {
if (mask & (1<<i)) return ((cyg_uint32)i);
}
return ((cyg_uint32)-1);
}
 
void
show_regs(HAL_SavedRegisters *regs)
{
int i;
diag_printf("Regs\n");
for (i = 0; i < 32; i++) {
if ((i % 8) == 0) {
diag_printf("R%2d: ", i);
}
diag_printf("0x%08x ", regs->d[i]);
if ((i % 8) == 7) {
diag_printf("\n");
}
}
diag_printf("PC = %x, PSW = %x\n", regs->pc, regs->psw);
}
 
/*------------------------------------------------------------------------*/
// EOF hal_misc.c
/arch/v2_0/src/vectors.S
0,0 → 1,652
// #========================================================================
// #
// # vectors.S
// #
// # NEC/V85x exception/interrupt vectors
// #
// #========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
// #========================================================================
// ######DESCRIPTIONBEGIN####
// #
// # Author(s): gthomas, jlarmour
// # Contributors: gthomas, jlarmour
// # Date: 2001-03-21
// # Purpose: NEC/V85x exception vectors
// # Description: This file defines the code placed into the exception
// # vectors. It also contains the first level default VSRs
// # that save and restore state for both exceptions and
// # interrupts.
// #
// #####DESCRIPTIONEND####
// #
// #========================================================================
 
#include <pkgconf/system.h>
#include <pkgconf/hal.h>
#include <pkgconf/hal_v85x.h>
#ifdef CYGPKG_KERNEL
#include <pkgconf/kernel.h>
#else
# undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
# undef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
#endif
#include <cyg/hal/hal_platform_setup.h>
#include CYGHWR_MEMORY_LAYOUT_H
 
#include <cyg/hal/nec_offsets.inc>
 
// Two different macros in case we ever decide to differentiate
// between exceptions and interrupts.
.macro EXCEPTION
.org reset_vector+(0x0010*VECTOR)
addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp
st.w r8,CYGARC_REG_R8[sp]
movea VECTOR,r0,r8
jr exception
.set VECTOR, VECTOR+1
.endm
 
.macro INTERRUPT
.org reset_vector+(0x0010*VECTOR)
addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp
st.w r8,CYGARC_REG_R8[sp]
movea VECTOR,r0,r8
jr exception
.set VECTOR, VECTOR+1
.endm
 
#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
.section ".vectors","ax"
.globl reset_vector
reset_vector:
//
// These are the hardware exception vectors.
//
__ROM_vsr:
// start of ROM
mov r0,sp // needed for platforms that have NMI 2 insns after reset
// This jump works even for ROMRAM because it is PC relative
jr start
 
.set VECTOR, 1
.rept CYGNUM_HAL_EXCEPTION_COUNT-1
EXCEPTION
.endr
.set VECTOR, CYGNUM_HAL_ISR_MIN
.rept CYGNUM_HAL_ISR_COUNT
INTERRUPT
.endr
#endif
.text
.globl start
start:
#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
// Before anything else, *carefully* check if this was actually an NMI
// The assumption is that the stack pointer can only be 0 on reset
// as set above at __ROM_vsr
cmp r0,sp
be 1f
addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp
movea 1,r0,r8
jr exception
1:
#endif
// Perform hardware initialization
PLATFORM_SETUP1
 
// Copy everything to the proper VMA base and jump to it.
#if defined(CYG_HAL_STARTUP_ROMRAM)
lea CYGMEM_REGION_rom,r6
lea CYGMEM_REGION_ram,r7
lea ___rom_data_end,r8 // Assume end of .data == end of ROM
1: ld.w 0[r6],r1
st.w r1,0[r7]
addi 4,r6,r6
addi 4,r7,r7
cmp r6,r8
bne 1b
// now jump to RAM
lea ___romram_jump_vector,r1
jmp [r1]
 
___romram_jump_vector:
#elif defined( CYG_HAL_STARTUP_ROM )
// Relocate [copy] data from ROM to RAM
lea ___rom_data_start,r6
lea ___ram_data_start,r7
lea ___ram_data_end,r8
1: ld.w 0[r6],r1
st.w r1,0[r7]
addi 4,r6,r6
addi 4,r7,r7
cmp r7,r8
bne 1b
 
// Initialize RAM vectors
lea ___ram_vectors_loadaddr,r6
lea ___ram_vectors_start,r7
lea ___ram_vectors_end,r8
1: ld.w 0[r6],r1
st.w r1,0[r7]
addi 4,r6,r6
addi 4,r7,r7
cmp r7,r8
bne 1b
#endif
// Initialize stack
lea __startup_stack-16,r1
mov r1,sp
 
// Clear BSS
lea ___bss_start,r6
lea ___bss_end,r7
1: st.w r0,0[r6]
addi 4,r6,r6
cmp r6,r7
bne 1b
 
#if defined(CYG_HAL_STARTUP_RAM)
// Set up VSR pointers into this application/image
lea _hal_vsr_table+(CYGNUM_HAL_ISR_MIN*4),r6
movea CYGNUM_HAL_ISR_COUNT,r0,r7
lea do_interrupt,r8
10: st.w r8,0[r6]
addi 4,r6,r6
addi -1,r7,r7
bne 10b
#endif
 
// Initialize hardware
jarl _cyg_hal_hardware_init,r31
 
#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
# ifdef CYG_HAL_STARTUP_RAM
// Need to handle exceptions as well
lea _hal_vsr_table,r6
movea CYGNUM_HAL_EXCEPTION_COUNT,r0,r7
lea do_exception,r8
10: st.w r8,0[r6]
addi 4,r6,r6
addi -1,r7,r7
bne 10b
# endif
jarl _initialize_stub,r31
#else // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
// All programs need to provide for NMI handlers
lea _hal_vsr_table+4,r6
lea do_exception,r8
st.w r8,0[r6] // NMI pin
#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
// we can process NMIs now
lea __allow_nmi,r1
addi 1,r0,r2
st.w r2,0[r1]
#endif
#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \
|| defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT)
.extern hal_ctrlc_isr_init
jarl _hal_ctrlc_isr_init,r31
#endif
// Run through static constructors
jarl _cyg_hal_invoke_constructors,r31
 
// Ready to start the eCos kernel
jarl _cyg_start,r31
 
// If we get here, something is _very_ wrong
_start_hang:
br _start_hang
#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
// Handle exception
exception:
// save exception context
st.w ep,CYGARC_REG_EP[sp]
mov sp,ep
sst.w r8,CYGARC_REG_VECTOR[ep]
sst.w r1,CYGARC_REG_R1[ep]
addi CYGARC_EXCEPTION_FRAME_SIZE,ep,r1
sst.w r2,CYGARC_REG_R2[ep]
sst.w r1,CYGARC_REG_SP[ep]
sst.w r4,CYGARC_REG_R4[ep]
sst.w r5,CYGARC_REG_R5[ep]
sst.w r6,CYGARC_REG_R6[ep]
sst.w r7,CYGARC_REG_R7[ep]
// sst.w r8,CYGARC_REG_R8[ep]
sst.w r9,CYGARC_REG_R9[ep]
sst.w r10,CYGARC_REG_R10[ep]
sst.w r11,CYGARC_REG_R11[ep]
sst.w r12,CYGARC_REG_R12[ep]
sst.w r13,CYGARC_REG_R13[ep]
sst.w r14,CYGARC_REG_R14[ep]
sst.w r15,CYGARC_REG_R15[ep]
sst.w r16,CYGARC_REG_R16[ep]
sst.w r17,CYGARC_REG_R17[ep]
sst.w r18,CYGARC_REG_R18[ep]
sst.w r19,CYGARC_REG_R19[ep]
#ifndef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
sst.w r20,CYGARC_REG_R20[ep]
sst.w r21,CYGARC_REG_R21[ep]
sst.w r22,CYGARC_REG_R22[ep]
sst.w r23,CYGARC_REG_R23[ep]
sst.w r24,CYGARC_REG_R24[ep]
sst.w r25,CYGARC_REG_R25[ep]
sst.w r26,CYGARC_REG_R26[ep]
sst.w r27,CYGARC_REG_R27[ep]
sst.w r28,CYGARC_REG_R28[ep]
#endif
sst.w r29,CYGARC_REG_R29[ep] // NB frame pointer
sst.w lp,CYGARC_REG_LP[ep]
cmp CYGNUM_HAL_VECTOR_TRAP00,r8 // NMI?
bge 05f
stsr FEPC,r6 // saved state differs
stsr FEPSW,r7
lea __allow_nmi,r1 // is the system ready for NMIs?
tst1 0, 0[r1]
bne 10f
// if not processing NMIs, allow restore
sst.w r6,CYGARC_REG_PC[ep]
sst.w r7,CYGARC_REG_PSW[ep]
// Reenable exception processing
stsr PSW,r6
andi ~(CYGARC_PSW_EP|CYGARC_PSW_NP),r6,r6
ldsr r6,PSW
lea return_from_exception_or_interrupt,r1
jmp [r1]
 
05: stsr EIPC,r6
stsr EIPSW,r7
cmp CYGNUM_HAL_VECTOR_ILGOP,r8 // Illegal opcode?
bne 10f
addi -4,r6,r6 // yes, adjust PC
10: sst.w r6,CYGARC_REG_PC[ep]
sst.w r7,CYGARC_REG_PSW[ep]
stsr ECR,r6
sst.w r6,CYGARC_REG_CAUSE[ep]
// Reenable exception processing
stsr PSW,r6
andi ~(CYGARC_PSW_EP|CYGARC_PSW_NP),r6,r6
ldsr r6,PSW
shl 2,r8
lea _hal_vsr_table,r1
add r1,r8
ld.w 0[r8],r1
jmp [r1]
#endif
do_exception:
// pass in saved registers
mov sp,r6
// leave space for the parameter flush back area (as per calling
// conventions)
addi -16,sp,sp
jarl _exception_handler,r31
 
return_from_exception_or_interrupt:
// save sp, but remove space for the parameter flush back area
// (as per calling conventions) at the same time
addi 16,sp,ep
sld.w CYGARC_REG_PSW[ep],r7
sld.w CYGARC_REG_R1[ep],r1
sld.w CYGARC_REG_PC[ep],r6
sld.w CYGARC_REG_R2[ep],r2
// disable interrupts while restoring context
ld.w CYGARC_REG_VECTOR[ep],r4
stsr PSW,r8
cmp CYGNUM_HAL_VECTOR_TRAP00,r4
bge 10f
ori CYGARC_PSW_NP,r8,r8 // returning from NMI
ori CYGARC_PSW_ID,r8,r8 // disable interrupt
ldsr r8,PSW
ldsr r7,FEPSW
ldsr r6,FEPC
br 30f
10: cmp CYGNUM_HAL_ISR_MIN,r4 // exception or interrupt
bge 20f
ori CYGARC_PSW_EP,r8,r8 // returning from exception
20: ori CYGARC_PSW_ID,r8,r8 // disable interrupt
ldsr r8,PSW
ldsr r7,EIPSW // Avoid pipeline bubbles
ldsr r6,EIPC
30: sld.w CYGARC_REG_R4[ep],r4
sld.w CYGARC_REG_R5[ep],r5
sld.w CYGARC_REG_R6[ep],r6
sld.w CYGARC_REG_R7[ep],r7
sld.w CYGARC_REG_R8[ep],r8
sld.w CYGARC_REG_R9[ep],r9
sld.w CYGARC_REG_R10[ep],r10
sld.w CYGARC_REG_R11[ep],r11
sld.w CYGARC_REG_R12[ep],r12
sld.w CYGARC_REG_R13[ep],r13
sld.w CYGARC_REG_R14[ep],r14
sld.w CYGARC_REG_R15[ep],r15
sld.w CYGARC_REG_R16[ep],r16
sld.w CYGARC_REG_R17[ep],r17
sld.w CYGARC_REG_R18[ep],r18
sld.w CYGARC_REG_R19[ep],r19
#ifndef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
sld.w CYGARC_REG_R20[ep],r20
sld.w CYGARC_REG_R21[ep],r21
sld.w CYGARC_REG_R22[ep],r22
sld.w CYGARC_REG_R23[ep],r23
sld.w CYGARC_REG_R24[ep],r24
sld.w CYGARC_REG_R25[ep],r25
sld.w CYGARC_REG_R26[ep],r26
sld.w CYGARC_REG_R27[ep],r27
sld.w CYGARC_REG_R28[ep],r28
#endif
sld.w CYGARC_REG_R29[ep],r29 // NB frame pointer
sld.w CYGARC_REG_LP[ep],lp
sld.w CYGARC_REG_SP[ep],sp
sld.w CYGARC_REG_EP[ep],ep
reti
// Handle interrupt - these are typically vectored into user code
do_interrupt:
mov sp,ep // save pointer to regs frame
// leave space for the parameter flush back area (as per calling
// conventions)
addi -16,sp,sp
 
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
// Switch to interrupt stack
lea irq_level,r6 // current number of nested interrupts
ld.w 0[r6],r7
addi 1,r7,r8
st.w r8,0[r6]
cmp 0,r7 // if was zero, switch stacks
bne 10f
mov sp,r1 // save old stack pointer
lea __interrupt_stack-20,r2
mov r2,sp
st.w r1,16[sp]
10:
#endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
 
// The entire CPU state is now stashed on the stack,
// increment the scheduler lock and handle the interrupt
 
#ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
.extern _cyg_scheduler_sched_lock
lea _cyg_scheduler_sched_lock,r7
ld.w 0[r7],r8
addi 1,r8,r8
st.w r8,0[r7]
#endif
 
#if defined(CYGPKG_KERNEL_INSTRUMENT) && \
defined(CYGDBG_KERNEL_INSTRUMENT_INTR)
lea RAISE_INTR,r6 // arg0 = type = INTR,RAISE
ld.w CYGARC_REG_VECTOR[ep],r7 // args = vector
mov r0,r8 // arg2 = 0
jarl _cyg_instrument,r31
#endif
 
#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \
|| defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT)
// If we are supporting Ctrl-C interrupts from GDB, we must squirrel
// away a pointer to the save interrupt state here so that we can
// plant a breakpoint at some later time.
.extern _hal_saved_interrupt_state
lea _hal_saved_interrupt_state,r8
st.w ep,0[r8]
#endif
 
#ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN
mov r0,r8 // vector # (overloaded by kernel)
#else
ld.w CYGARC_REG_VECTOR[ep],r6 // vector #
addi -CYGNUM_HAL_ISR_MIN,r6,r8
shl 2,r8
#endif
lea _hal_interrupt_objects,r1
add r8,r1
ld.w 0[r1],r29 // save object handle
lea _hal_interrupt_data,r1
add r8,r1
ld.w 0[r1],r7 // handler data
lea _hal_interrupt_handlers,r1
add r8,r1
mov ep,r8 // pointer to saved registers
ld.w 0[r1],r1 // handler routine
#ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN
ld.w CYGARC_REG_VECTOR[ep],r6 // vector #
#endif
jarl call_via_r1,r31
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
// If we are returning from the last nested interrupt, move back
// to the thread stack. interrupt_end() must be called on the
// thread stack since it potentially causes a context switch.
lea irq_level,r6
ld.w 0[r6],r7
addi -1,r7,r8
st.w r8,0[r6]
cmp 0,r8
bne 10f
ld.w 16[sp],sp // Restore non-interrupt stack at last interrupt
// this is offset 16 because of parameter
// flush back area
10:
#endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
 
#ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
// The return value from the handler (in r10) will indicate whether a
// DSR is to be posted. Pass this together with a pointer to the
// interrupt object we have just used to the interrupt tidy up routine.
 
mov r10,r6 // interrupt handler return code
mov r29,r7 // object handle
mov ep,r8 // register frame
jarl _interrupt_end,r31 // post any bottom layer handle
#endif
br return_from_exception_or_interrupt
 
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
.globl _hal_interrupt_stack_call_pending_DSRs
_hal_interrupt_stack_call_pending_DSRs:
stsr PSW,r9
di // disable interrupts while changing stack
// Switch to interrupt stack
lea irq_level,r6 // current number of nested interrupts
mov 1,r7 // note: this can never be non-zero at this point
st.w r7,0[r6]
mov sp,r1 // save old stack pointer
lea __interrupt_stack-32,r8 // 32 for 16-byte parameter flush back
// plus 12 bytes for following reg saves
// plus 4 bytes to preserve alignment
mov r8,sp
st.w r1,16[sp]
st.w r9,20[sp]
st.w lp,24[sp]
ei
jarl _cyg_interrupt_call_pending_DSRs,lp
di
ld.w 24[sp],lp // restore state
ld.w 20[sp],r6
ld.w 16[sp],sp
lea irq_level,r7
st.w r0,0[r7]
ldsr r6,PSW
jmp [lp]
#endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
//
// Indirect subroutine call, via R1
 
call_via_r1:
jmp [r1]
//
// Reset the board
//
.globl _hal_reset_board
_hal_reset_board:
di // Turn off interrupts
// Don't process NMIs
lea __allow_nmi,r1
st.w r0,0[r1]
jmp [r0] // Restart machine
 
#if !defined(CYGSEM_HAL_NEC_INLINE_INTERRUPT_FUNCTIONS)
.globl _hal_disable_interrupts
_hal_disable_interrupts:
stsr PSW,r10
di
jmp [lp]
 
.globl _hal_enable_interrupts
_hal_enable_interrupts:
stsr PSW,r6
ei
jmp [lp]
 
.globl _hal_restore_interrupts
_hal_restore_interrupts:
ldsr r6,PSW
jmp [lp]
#endif
// -------------------------------------------------------------------------
.section ".ram_vectors","awx",@progbits
 
#if defined(CYG_HAL_STARTUP_ROM)
// Trap jump table - used by builtin ROM
__vsr_table:
.rept CYGNUM_HAL_VSR_COUNT
.word 0x00000794,0,0,0 // jr 0x0100xx0, nop, nop, nop
.endr
__vsr_table_end:
#endif
 
#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
_hal_vsr_table:
.rept CYGNUM_HAL_EXCEPTION_COUNT
.word do_exception
.endr
.rept CYGNUM_HAL_ISR_COUNT
.word do_interrupt
.endr
 
// Flag to indicate whether NMIs are allowed
// Without this, if we do a soft reset (using hal_plf_reset_board above)
// we may process NMIs like the watchdog timeout before the system can
// accept them
__allow_nmi:
.word 0
.balign 64
_hal_virtual_vector_table:
.rept CYGNUM_CALL_IF_TABLE_SIZE
.word 0
.endr
 
#if CYGINT_HAL_V85X_ICE_DEBUG
.globl _hal_v85x_ice_syscall_info
_hal_v85x_ice_syscall_info:
.rept 48
.long 0
.endr
#endif // if CYGINT_HAL_V85X_ICE_DEBUG
#endif // if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
.data
// Initial stack
.rept 1024
.byte 0
.endr
__startup_stack:
 
#ifndef CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
#define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096
#endif
#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
.balign 16
.global _cyg_interrupt_stack_base
_cyg_interrupt_stack_base:
__interrupt_stack_base:
.rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
.byte 0
.endr
.balign 16
.global _cyg_interrupt_stack
_cyg_interrupt_stack:
__interrupt_stack:
irq_level:
.long 0
#endif
 
// Interrupt vector tables.
// These tables contain the isr, data and object pointers used to deliver
// interrupts to user code.
 
.extern _hal_default_isr
 
.globl _hal_interrupt_handlers
_hal_interrupt_handlers:
.rept CYGNUM_HAL_ISR_COUNT
.long _hal_default_isr
.endr
 
.globl _hal_interrupt_data
_hal_interrupt_data:
.rept CYGNUM_HAL_ISR_COUNT
.long 0
.endr
 
.globl _hal_interrupt_objects
_hal_interrupt_objects:
.rept CYGNUM_HAL_ISR_COUNT
.long 0
.endr
 
// -------------------------------------------------------------------------
// EOF vectors.S
/arch/v2_0/src/hal_mk_defs.c
0,0 → 1,177
//==========================================================================
//
// hal_mk_defs.c
//
// HAL (architecture) "make defs" program
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas, jskov, jlarmour
// Date: 2000-02-21
// Purpose: V850 architecture dependent definition generator
// Description: This file contains code that can be compiled by the target
// compiler and used to generate machine specific definitions
// suitable for use in assembly code.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
 
#include <cyg/hal/hal_arch.h> // HAL header
#include <cyg/hal/hal_intr.h> // HAL header
#ifdef CYGPKG_KERNEL
# include <pkgconf/kernel.h>
# include <cyg/kernel/instrmnt.h>
#endif
#include <cyg/hal/hal_if.h>
 
/*
* This program is used to generate definitions needed by
* assembly language modules.
*
* This technique was first used in the OSF Mach kernel code:
* generate asm statements containing #defines,
* compile this file to assembler, and then extract the
* #defines from the assembly-language output.
*/
 
#define DEFINE(sym, val) \
asm volatile("\n\t.equ\t" #sym ",%0" : : "i" (val))
 
int
main(void)
{
// setjmp/longjmp buffer
DEFINE(CYGARC_JMPBUF_SP, offsetof(hal_jmp_buf_t, sp));
DEFINE(CYGARC_JMPBUF_GP, offsetof(hal_jmp_buf_t, gp));
DEFINE(CYGARC_JMPBUF_TP, offsetof(hal_jmp_buf_t, tp));
DEFINE(CYGARC_JMPBUF_R1, offsetof(hal_jmp_buf_t, r1));
DEFINE(CYGARC_JMPBUF_R2, offsetof(hal_jmp_buf_t, r2));
DEFINE(CYGARC_JMPBUF_R4, offsetof(hal_jmp_buf_t, r4));
DEFINE(CYGARC_JMPBUF_R5, offsetof(hal_jmp_buf_t, r5));
DEFINE(CYGARC_JMPBUF_R20, offsetof(hal_jmp_buf_t, r20));
DEFINE(CYGARC_JMPBUF_R21, offsetof(hal_jmp_buf_t, r21));
DEFINE(CYGARC_JMPBUF_R22, offsetof(hal_jmp_buf_t, r22));
DEFINE(CYGARC_JMPBUF_R23, offsetof(hal_jmp_buf_t, r23));
DEFINE(CYGARC_JMPBUF_R24, offsetof(hal_jmp_buf_t, r24));
DEFINE(CYGARC_JMPBUF_R25, offsetof(hal_jmp_buf_t, r25));
DEFINE(CYGARC_JMPBUF_R26, offsetof(hal_jmp_buf_t, r26));
DEFINE(CYGARC_JMPBUF_R27, offsetof(hal_jmp_buf_t, r27));
DEFINE(CYGARC_JMPBUF_R28, offsetof(hal_jmp_buf_t, r28));
DEFINE(CYGARC_JMPBUF_FP, offsetof(hal_jmp_buf_t, fp));
DEFINE(CYGARC_JMPBUF_EP, offsetof(hal_jmp_buf_t, ep));
DEFINE(CYGARC_JMPBUF_LP, offsetof(hal_jmp_buf_t, lp));
 
DEFINE(CYGARC_JMPBUF_SIZE, sizeof(hal_jmp_buf_t));
 
// Exception/interrupt/context save buffer
DEFINE(CYGARC_REG_R1, offsetof(HAL_SavedRegisters, d[1]));
DEFINE(CYGARC_REG_R2, offsetof(HAL_SavedRegisters, d[2]));
DEFINE(CYGARC_REG_R3, offsetof(HAL_SavedRegisters, d[3]));
DEFINE(CYGARC_REG_SP, offsetof(HAL_SavedRegisters, d[3]));
DEFINE(CYGARC_REG_R4, offsetof(HAL_SavedRegisters, d[4]));
DEFINE(CYGARC_REG_R5, offsetof(HAL_SavedRegisters, d[5]));
DEFINE(CYGARC_REG_R6, offsetof(HAL_SavedRegisters, d[6]));
DEFINE(CYGARC_REG_R7, offsetof(HAL_SavedRegisters, d[7]));
DEFINE(CYGARC_REG_R8, offsetof(HAL_SavedRegisters, d[8]));
DEFINE(CYGARC_REG_R9, offsetof(HAL_SavedRegisters, d[9]));
DEFINE(CYGARC_REG_R10, offsetof(HAL_SavedRegisters, d[10]));
DEFINE(CYGARC_REG_R11, offsetof(HAL_SavedRegisters, d[11]));
DEFINE(CYGARC_REG_R12, offsetof(HAL_SavedRegisters, d[12]));
DEFINE(CYGARC_REG_R13, offsetof(HAL_SavedRegisters, d[13]));
DEFINE(CYGARC_REG_R14, offsetof(HAL_SavedRegisters, d[14]));
DEFINE(CYGARC_REG_R15, offsetof(HAL_SavedRegisters, d[15]));
DEFINE(CYGARC_REG_R16, offsetof(HAL_SavedRegisters, d[16]));
DEFINE(CYGARC_REG_R17, offsetof(HAL_SavedRegisters, d[17]));
DEFINE(CYGARC_REG_R18, offsetof(HAL_SavedRegisters, d[18]));
DEFINE(CYGARC_REG_R19, offsetof(HAL_SavedRegisters, d[19]));
DEFINE(CYGARC_REG_R20, offsetof(HAL_SavedRegisters, d[20]));
DEFINE(CYGARC_REG_R21, offsetof(HAL_SavedRegisters, d[21]));
DEFINE(CYGARC_REG_R22, offsetof(HAL_SavedRegisters, d[22]));
DEFINE(CYGARC_REG_R23, offsetof(HAL_SavedRegisters, d[23]));
DEFINE(CYGARC_REG_R24, offsetof(HAL_SavedRegisters, d[24]));
DEFINE(CYGARC_REG_R25, offsetof(HAL_SavedRegisters, d[25]));
DEFINE(CYGARC_REG_R26, offsetof(HAL_SavedRegisters, d[26]));
DEFINE(CYGARC_REG_R27, offsetof(HAL_SavedRegisters, d[27]));
DEFINE(CYGARC_REG_R28, offsetof(HAL_SavedRegisters, d[28]));
DEFINE(CYGARC_REG_R29, offsetof(HAL_SavedRegisters, d[29]));
DEFINE(CYGARC_REG_R30, offsetof(HAL_SavedRegisters, d[30]));
DEFINE(CYGARC_REG_R31, offsetof(HAL_SavedRegisters, d[31]));
DEFINE(CYGARC_REG_EP, offsetof(HAL_SavedRegisters, d[30]));
DEFINE(CYGARC_REG_LP, offsetof(HAL_SavedRegisters, d[31]));
DEFINE(CYGARC_REG_PSW, offsetof(HAL_SavedRegisters, psw));
DEFINE(CYGARC_REG_PC, offsetof(HAL_SavedRegisters, pc));
 
// Below only saved on exceptions/interrupts
DEFINE(CYGARC_REG_CAUSE, offsetof(HAL_SavedRegisters, cause));
DEFINE(CYGARC_REG_VECTOR, offsetof(HAL_SavedRegisters, vector));
 
DEFINE(CYGARC_EXCEPTION_FRAME_SIZE, sizeof(HAL_SavedRegisters));
 
// Some other exception related definitions
DEFINE(CYGNUM_HAL_ISR_MIN, CYGNUM_HAL_ISR_MIN);
DEFINE(CYGNUM_HAL_ISR_COUNT, CYGNUM_HAL_ISR_COUNT);
DEFINE(CYGNUM_HAL_VSR_MAX, CYGNUM_HAL_VSR_MAX);
DEFINE(CYGNUM_HAL_VSR_COUNT, CYGNUM_HAL_VSR_COUNT);
DEFINE(CYGNUM_HAL_EXCEPTION_COUNT, CYGNUM_HAL_EXCEPTION_COUNT);
DEFINE(CYGNUM_HAL_VECTOR_INTWDT, CYGNUM_HAL_VECTOR_INTWDT);
DEFINE(CYGNUM_HAL_VECTOR_TRAP00, CYGNUM_HAL_VECTOR_TRAP00);
DEFINE(CYGNUM_HAL_VECTOR_TRAP10, CYGNUM_HAL_VECTOR_TRAP10);
DEFINE(CYGNUM_HAL_VECTOR_ILGOP, CYGNUM_HAL_VECTOR_ILGOP);
DEFINE(CYGARC_PSW_ID, CYGARC_PSW_ID);
DEFINE(CYGARC_PSW_EP, CYGARC_PSW_EP);
DEFINE(CYGARC_PSW_NP, CYGARC_PSW_NP);
 
#ifdef CYGPKG_KERNEL
DEFINE(RAISE_INTR, CYG_INSTRUMENT_CLASS_INTR|CYG_INSTRUMENT_EVENT_INTR_RAISE);
#endif
 
#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT)
DEFINE(CYGNUM_CALL_IF_TABLE_SIZE, CYGNUM_CALL_IF_TABLE_SIZE);
#endif
 
// Variant definitions - want these to be included instead.
 
return 0;
}
 
//--------------------------------------------------------------------------
// EOF hal_mk_defs.c

powered by: WebSVN 2.1.0

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