Ignore:
Timestamp:
Jun 27, 2017, 10:53:32 AM (7 years ago)
Author:
ertl-honda
Message:

3.1.0を反映

Location:
asp3_wo_tecs/trunk/arch
Files:
4 added
28 edited

Legend:

Unmodified
Added
Removed
  • asp3_wo_tecs/trunk/arch/arm_gcc/MANIFEST

    r302 r306  
    11PACKAGE asp3_arch_arm_gcc
    2 VERSION 3.0.0
     2VERSION 3.1.0
    33
    44MANIFEST
    55
    66doc/arm_design.txt
     7doc/arm_user.txt
    78doc/gic_design.txt
    89
     
    1112common/arm.h
    1213common/arm_insn.h
    13 common/core.tf
    1414common/core_asm.inc
    1515common/core_cfg1_out.h
    16 common/core_check.tf
    17 common/core_def.csv
     16common/core_check.trb
    1817common/core_kernel.h
     18common/core_kernel.trb
    1919common/core_kernel_impl.c
    2020common/core_kernel_impl.h
    21 common/core_offset.tf
     21common/core_offset.trb
    2222common/core_rename.def
    2323common/core_rename.h
     
    2525common/core_stddef.h
    2626common/core_support.S
     27common/core_sym.def
     28common/core_syssvc.h
    2729common/core_test.h
    2830common/core_unrename.h
     
    3032common/gic_kernel_impl.h
    3133common/gic_support.S
     34common/pl310.c
     35common/pl310.h
    3236common/sp804.h
    3337common/start.S
    34 common/uart_pl011.c
     38common/tUartPL011.c
     39common/tUartPL011.cdl
    3540common/uart_pl011.h
    3641
    3742INCLUDE mpcore/MANIFEST
     43INCLUDE rza1/MANIFEST
     44
    3845INCLUDE ../../target/ct11mpcore_gcc/MANIFEST
     46INCLUDE ../../target/gr_peach_gcc/MANIFEST
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/Makefile.core

    r304 r306  
    22#               Makefileのコア依存部(ARM用)
    33#
    4 #  $Id: Makefile.core 484 2016-01-03 15:13:38Z ertl-hiro $
     4#  $Id: Makefile.core 572 2016-02-01 14:40:09Z ertl-hiro $
    55#
    66
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/arm.h

    r305 r306  
    5252 *  の責任を負わない.
    5353 *
    54  *  $Id: arm.h 523 2016-01-14 11:01:04Z ertl-hiro $
     54 *  $Id: arm.h 694 2016-03-23 13:17:48Z ertl-hiro $
    5555 */
    5656
     
    127127#define CP15_SCTLR_VECTOR               UINT_C(0x00002000)
    128128#define CP15_SCTLR_ICACHE               UINT_C(0x00001000)
     129#define CP15_SCTLR_BP                   UINT_C(0x00000800)
    129130#define CP15_SCTLR_DCACHE               UINT_C(0x00000004)
    130131#define CP15_SCTLR_MMU                  UINT_C(0x00000001)
     
    308309
    309310/*
     311 *  分岐予測をイネーブル
     312 */
     313Inline void
     314arm_enable_bp(void)
     315{
     316        uint32_t        reg;
     317
     318        CP15_READ_SCTLR(reg);
     319        reg |= CP15_SCTLR_BP;
     320        CP15_WRITE_SCTLR(reg);
     321}
     322
     323/*
     324 *  分岐予測をディスエーブル
     325 */
     326Inline void
     327arm_disable_bp(void)
     328{
     329        uint32_t        reg;
     330
     331        CP15_READ_SCTLR(reg);
     332        reg &= ~CP15_SCTLR_BP;
     333        CP15_WRITE_SCTLR(reg);
     334}
     335
     336/*
    310337 *  プロセッサ番号の取得
    311338 *
     
    413440
    414441/*
     442 *  分岐予測の無効化
     443 */
     444Inline void
     445arm_invalidate_bp(void)
     446{
     447        CP15_INVALIDATE_BP();
     448        data_sync_barrier();
     449        inst_sync_barrier();
     450}
     451
     452/*
    415453 *  TLBの無効化
    416454 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/arm_insn.h

    r304 r306  
    5252 *  の責任を負わない.
    5353 *
    54  *  $Id: arm_insn.h 547 2016-01-16 06:26:08Z ertl-hiro $
     54 *  $Id: arm_insn.h 694 2016-03-23 13:17:48Z ertl-hiro $
    5555 */
    5656
     
    245245#define CP15_INVALIDATE_ICACHE() \
    246246                                                                Asm("mcr p15, 0, %0, c7, c5, 0"::"r"(0))
     247
     248/* 分岐予測å
     249¨ä½“の無効化 */
     250#define CP15_INVALIDATE_BP()    Asm("mcr p15, 0, %0, c7, c5, 6"::"r"(0))
    247251
    248252/* データキャッシュå
     
    435439}
    436440
     441/*
     442 *  CP15のセキュリティ拡張レジスタ操作マクロ(ARMv7のみ)
     443 */
     444#if __TARGET_ARCH_ARM == 7
     445
     446/* ベクタベースアドレスレジスタ */
     447#define CP15_READ_VBAR(reg)             Asm("mrc p15, 0, %0, c12, c0, 0":"=r"(reg))
     448#define CP15_WRITE_VBAR(reg)    Asm("mcr p15, 0, %0, c12, c0, 0"::"r"(reg))
     449
     450#endif /* __TARGET_ARCH_ARM == 7 */
    437451#endif /* TOPPERS_ARM_INSN_H */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_asm.inc

    r302 r306  
    33 *      Toyohashi Open Platform for Embedded Real-Time Systems
    44 *
    5  *  Copyright (C) 2011-2014 by Embedded and Real-Time Systems Laboratory
     5 *  Copyright (C) 2011-2016 by Embedded and Real-Time Systems Laboratory
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
     
    5050 *  の責任を負わない.
    5151 *
    52  *  $Id: core_asm.inc 349 2015-07-25 05:25:27Z ertl-hiro $
     52 *  $Id: core_asm.inc 714 2016-03-31 05:52:19Z ertl-hiro $
    5353 */
    5454
     
    8282#define BSS_END                 __end_bss
    8383
     84/*
     85 *  データメモリバリア
     86 */
     87        .macro  asm_data_memory_barrier reg1
     88#ifdef ASM_DATA_MEMORY_BARRIER
     89        ASM_DATA_MEMORY_BARRIER(reg1)
     90#elif __TARGET_ARCH_ARM <= 6
     91        mov             \reg1, #0
     92        mcr             p15, 0, \reg1, c7, c10, 5
     93#else /* __TARGET_ARCH_ARM <= 6 */
     94        dmb
     95#endif
     96        .endm
     97
     98/*
     99 *  データ同期バリア
     100 */
     101        .macro  asm_data_sync_barrier reg1
     102#ifdef ASM_DATA_SYNC_BARRIER
     103        ASM_DATA_SYNC_BARRIER(reg1)
     104#elif __TARGET_ARCH_ARM <= 6
     105        mov             \reg1, #0
     106        mcr             p15, 0, \reg1, c7, c10, 4
     107#else /* __TARGET_ARCH_ARM <= 6 */
     108        dsb
     109#endif
     110        .endm
     111
     112/*
     113 *  命令同期バリア
     114 */
     115        .macro  asm_inst_sync_barrier reg1
     116#ifdef ASM_INST_SYNC_BARRIER
     117        ASM_INST_SYNC_BARRIER(reg1)
     118#elif __TARGET_ARCH_ARM <= 6
     119        mov             \reg1, #0
     120        mcr             p15, 0, \reg1, c7, c5, 4
     121#else /* __TARGET_ARCH_ARM <= 6 */
     122        isb
     123#endif
     124        .endm
     125
    84126#endif /* TOPPERS_CORE_ASM_INC */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_check.trb

    r305 r306  
    33#               ãƒ‘ス3の生成スクリプトのコア依存部(ARM用)
    44#
    5 #  $Id: core_check.trb 588 2016-02-05 12:54:58Z ertl-hiro $
     5#  $Id: core_check.trb 730 2016-04-03 02:04:52Z ertl-hiro $
    66#
    77
    8 # 
     8#
    99#  ターゲット非依存部のインクルード
    10 # 
     10#
    1111IncludeTrb("kernel/kernel_check.trb")
    1212
     
    2727    error_wrong_id("E_PAR", params, :inthdr, :inhno, "not aligned")
    2828  end
    29   if $CHECK_FUNC_NONNULL == 1 && inthdr == 0
     29  if $CHECK_FUNC_NONNULL && inthdr == 0
    3030    error_wrong_id("E_PAR", params, :inthdr, :inhno, "null")
    3131  end
     
    4747    error_wrong_id("E_PAR", params, :exchdr, :excno, "not aligned")
    4848  end
    49   if $CHECK_FUNC_NONNULL == 1 && exchdr == 0
     49  if $CHECK_FUNC_NONNULL && exchdr == 0
    5050    error_wrong_id("E_PAR", params, :exchdr, :excno, "null")
    5151  end
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_kernel.h

    r302 r306  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2004-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2004-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: core_kernel.h 454 2015-08-16 03:18:46Z ertl-hiro $
     55 *  $Id: core_kernel.h 718 2016-04-01 15:05:01Z ertl-hiro $
    5656 */
    5757
     
    109109        uint32_t        r3;
    110110        uint32_t        r4;
     111        uint32_t        r5;
    111112        uint32_t        r12;
    112113        uint32_t        lr;
     
    125126        uint32_t        r3;
    126127        uint32_t        r4;
     128        uint32_t        r5;
    127129        uint32_t        r12;
    128130        uint32_t        lr;
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_kernel.trb

    r304 r306  
    5353#   ã®è²¬ä»»ã‚’負わない.
    5454#
    55 #   $Id: core_kernel.trb 572 2016-02-01 14:40:09Z ertl-hiro $
     55#   $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
    5656#
    5757
     
    9696#  割込み要求ライン設定テーブル
    9797#
    98 if $USE_INTCFG_TABLE == 1
     98if $USE_INTCFG_TABLE
    9999  $kernelCfgC.comment_header("Interrupt Configuration Table")
    100100
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_kernel_impl.h

    r304 r306  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2006-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: core_kernel_impl.h 546 2016-01-16 06:00:09Z ertl-hiro $
     55 *  $Id: core_kernel_impl.h 664 2016-02-29 16:32:29Z ertl-hiro $
    5656 */
    5757
     
    7979#endif /* __thumb__ */
    8080#define CHECK_FUNC_NONNULL                      /* 関数の非NULLチェック */
    81 #define CHECK_STACK_ALIGN       4               /* スタック領域のアライン単位 */
     81#define CHECK_STACK_ALIGN       8               /* スタック領域のアライン単位 */
    8282#define CHECK_STACK_NONNULL                     /* スタック領域の非NULLチェック */
    8383#define CHECK_MPF_ALIGN         4               /* 固定長メモリプール領域のアライン単位 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_rename.def

    r302 r306  
    4242irc_end_exc
    4343
     44# pl310.c
     45pl310_initialize
     46pl310_disable
     47pl310_invalidate_all
     48pl310_clean_and_invalidate_all
     49
    4450# target_kernel_impl.c
    4551arm_tnum_memory_area
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_rename.h

    r304 r306  
    5858
    5959/*
     60 *  pl310.c
     61 */
     62#define pl310_initialize                        _kernel_pl310_initialize
     63#define pl310_disable                           _kernel_pl310_disable
     64#define pl310_invalidate_all            _kernel_pl310_invalidate_all
     65#define pl310_clean_and_invalidate_all  _kernel_pl310_clean_and_invalidate_all
     66
     67/*
    6068 *  target_kernel_impl.c
    6169 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_sil.h

    r302 r306  
    55 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    66 *                              Toyohashi Univ. of Technology, JAPAN
    7  *  Copyright (C) 2004-2014 by Embedded and Real-Time Systems Laboratory
     7 *  Copyright (C) 2004-2016 by Embedded and Real-Time Systems Laboratory
    88 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    99 *
     
    5252 *  の責任を負わない.
    5353 *
    54  *  $Id: core_sil.h 352 2015-07-25 06:36:42Z ertl-hiro $
     54 *  $Id: core_sil.h 714 2016-03-31 05:52:19Z ertl-hiro $
    5555 */
    5656
     
    155155#define SIL_UNL_INT()   (TOPPERS_set_fiq_irq(TOPPERS_fiq_irq_mask))
    156156
    157 /*
    158  *  微少時間å¾
    159 ã¡
    160  */
    161 Inline void
    162 sil_dly_nse(ulong_t dlytim) throw()
    163 {
    164         register uint32_t r0 asm("r0") = (uint32_t) dlytim;
    165         Asm("bl _sil_dly_nse" : "=g"(r0) : "0"(r0) : "lr","cc");
    166 }
    167 
    168157#endif /* TOPPERS_MACRO_ONLY */
    169158#endif /* TOPPERS_CORE_SIL_H */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_support.S

    r302 r306  
    66 *  Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2006-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: core_support.S 459 2015-08-29 13:03:42Z ertl-hiro $
     55 *  $Id: core_support.S 733 2016-04-03 09:10:54Z ertl-hiro $
    5656 */
    5757
     
    7272 *  例外ベクタ
    7373 */
    74         ASECTION(vector)
     74        ASECTION(.vector)
     75        AALIGN(5)
    7576        AGLOBAL(vector_table)
    7677ALABEL(vector_table)
     
    122123‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹ï¼Ž
    123124         */
    124         push    {lr}                                    /* 戻り番地を保存 */
     125        push    {r12,lr}                                /* 戻り番地を保存,r12はダミー */
    125126#ifdef TOPPERS_SUPPORT_OVRHDR
    126127        bl              ovrtimer_stop
     
    139140        bl              ovrtimer_start
    140141#endif /* TOPPERS_SUPPORT_OVRHDR */
    141         pop             {lr}                                    /* 戻り番地を復帰 */
     142        pop             {r12,lr}                                /* 戻り番地を復帰 */
    142143        bx              lr
    143144
     
    325326         */
    326327        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    327         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     328        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    328329
    329330        /*
     
    339340         */
    340341        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    341         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     342        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    342343        push    {r1}                                    /* spsrをスタックに保存 */
    343344#else /* __TARGET_ARCH_ARM < 6 */
     
    354355         */
    355356        cps             #CPSR_SVC_MODE
    356         stmfd   sp!, {r0-r4,r12,lr}
     357        stmfd   sp!, {r0-r5,r12,lr}
    357358#endif /* __TARGET_ARCH_ARM < 6 */
     359
     360        /*
     361         *  スタックポインタの調整
     362         */
     363        and             r1, sp, #4
     364        sub             sp, sp, r1
     365        push    {r0,r1}                                 /* r0はスペース確保のため */
    358366
    359367        /*
     
    378386         *  非タスクコンテキスト用のスタックに切り換える.
    379387         */
    380         mov             r1, sp                                  /* この時点のスタックポインタをr1に */
     388        mov             r3, sp                                  /* この時点のスタックポインタをr3に */
    381389        ldr             r2, =istkpt                             /* 非タスクコンテキスト用のスタックに */
    382390        ldr             sp, [r2]
    383         push    {r1}                                    /* 切換え前のスタックポインタを保存 */
    384 
     391        push    {r0,r3}                                 /* 切換え前のスタックポインタを保存 */
     392                                                                        /* r0はスペース確保のため */
    385393ALABEL(irq_handler_1)
    386394        /*
     
    388396         */
    389397        bl              irc_begin_int
    390         cmp             r4, #TNUM_INHNO                 /* スプリアス割込みなら */
    391         bhs             irq_handler_2                   /*  irq_handler_2に分岐 */
    392 
     398#if TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6
     399        cmp             r4, #TNUM_INHNO                 /* TNUM_INHNOの値によってはエラーになる */
     400#else /* TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6 */
     401        movw    r3, #TNUM_INHNO
     402        cmp             r4, r3                 
     403#endif /* TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6 */
     404        bhs             irq_handler_2                   /* スプリアス割込みなら */
     405                                                                        /*  irq_handler_2に分岐 */
    393406        /*
    394407         *  CPUロック解除状æ
     
    447460ALABEL(irq_handler_2)
    448461        bl              irc_end_int
    449 #endif /* OMIT_IRQ_HANDLER */
    450462
    451463        /*
     
    462474         *  タスク用のスタックに戻す.
    463475         */
    464         pop             {r1}
    465         mov     sp, r1
     476        pop             {r0,r3}
     477        mov     sp, r3
    466478
    467479        /*
     
    469481要か判定する.
    470482         */
    471 ALABEL(ret_int_1)
    472483        ldr             r0, =p_runtsk                   /* p_runtsk → r0 */
    473484        ldr             r0, [r0]
     
    482493        tst             r0, r0                                  /* p_runtskがNULLならdispatcher_0へ */
    483494        beq             dispatcher_0
    484         stmfd   sp!, {r5-r11}                   /* 非スクラッチレジスタの保存 */
     495        stmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの保存 */
    485496        str             sp, [r0,#TCB_sp]                /* スタックポインタを保存 */
    486497        adr             r1, ret_int_r                   /* 実行再開番地を保存 */
     
    492503         *  コンテキストを復帰する.
    493504         */
    494         ldmfd   sp!, {r5-r11}                   /* 非スクラッチレジスタの復帰 */
     505        ldmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの復帰 */
    495506
    496507#ifdef TOPPERS_SUPPORT_OVRHDR
     
    516527#endif /* TOPPERS_SUPPORT_OVRHDR */
    517528ALABEL(irq_handler_3)
     529        pop             {r0,r1}                                 /* スタックポインタの調整 */
     530        add             sp, sp, r1
    518531#if __TARGET_ARCH_ARM < 6
    519532        ldmfd   sp!, {r0}                               /* 戻りå
    520533ˆã®cpsrをspsrに設定 */
    521534        msr             spsr_cxsf, r0
    522         ldmfd   sp!, {r0-r4,r12,lr,pc}^ /* コンテキストの復帰 */
     535        ldmfd   sp!, {r0-r5,r12,lr,pc}^ /* コンテキストの復帰 */
    523536                                                                        /* ^付きなので,spsr → cpsr */
    524537#else /* __TARGET_ARCH_ARM < 6 */
    525         ldmfd   sp!, {r0-r4,r12,lr}
     538        ldmfd   sp!, {r0-r5,r12,lr}
    526539        rfefd   sp!
    527540#endif /* __TARGET_ARCH_ARM < 6 */
     
    536549        b               irq_handler_3
    537550#endif /* TOPPERS_SUPPORT_OVRHDR */
     551#endif /* OMIT_IRQ_HANDLER */
    538552
    539553/*
     
    560574         */
    561575        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    562         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     576        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    563577
    564578        /*
     
    573587         */
    574588        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    575         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     589        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    576590        push    {r1}                                    /* spsrをスタックに保存 */
    577591#else /* __TARGET_ARCH_ARM < 6 */
     
    587601         */
    588602        cps             #CPSR_SVC_MODE
    589         stmfd   sp!, {r0-r4,r12,lr}
     603        stmfd   sp!, {r0-r5,r12,lr}
    590604#endif /* __TARGET_ARCH_ARM < 6 */
    591605        mov             r4, #EXCNO_UNDEF
     
    609623         */
    610624        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    611         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     625        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    612626
    613627        /*
     
    620634         *  戻り番地とspsrを保存する.
    621635         */
    622         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     636        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    623637        push    {r1}                                    /* spsrをスタックに保存 */
    624638#else /* __TARGET_ARCH_ARM < 6 */
     
    634648         */
    635649        cps             #CPSR_SVC_MODE                  /* 不要と思われる */
    636         stmfd   sp!, {r0-r4,r12,lr}
     650        stmfd   sp!, {r0-r5,r12,lr}
    637651#endif /* __TARGET_ARCH_ARM < 6 */
    638652        mov             r4, #EXCNO_SVC
     
    657671         */
    658672        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    659         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     673        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    660674
    661675        /*
     
    670684         */
    671685        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    672         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     686        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    673687        push    {r1}                                    /* spsrをスタックに保存 */
    674688#else /* __TARGET_ARCH_ARM < 6 */
     
    684698         */
    685699        cps             #CPSR_SVC_MODE
    686         stmfd   sp!, {r0-r4,r12,lr}
     700        stmfd   sp!, {r0-r5,r12,lr}
    687701#endif /* __TARGET_ARCH_ARM < 6 */
    688702        mov             r4, #EXCNO_PABORT
     
    720734         */
    721735        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    722         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     736        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    723737
    724738        /*
     
    733747         */
    734748        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    735         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     749        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    736750        push    {r1}                                    /* spsrをスタックに保存 */
    737751#else /* __TARGET_ARCH_ARM < 6 */
     
    747761         */
    748762        cps             #CPSR_SVC_MODE
    749         stmfd   sp!, {r0-r4,r12,lr}
     763        stmfd   sp!, {r0-r5,r12,lr}
    750764#endif /* __TARGET_ARCH_ARM < 6 */
    751765        mov             r4, #EXCNO_DABORT
     
    766780        ldr             sp, =istkpt
    767781        ldr             sp, [sp]
    768         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     782        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    769783
    770784        /*
     
    779793         */
    780794        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    781         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     795        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    782796        push    {r1}                                    /* spsrをスタックに保存 */
    783797#else /* __TARGET_ARCH_ARM < 6 */
     
    786800         *  クポインタを初期化する.
    787801         */
    788         cpsid   if,#CPSR_SVC_MODE
     802        cpsid   if, #CPSR_SVC_MODE
    789803        ldr             sp, =istkpt
    790804        ldr             sp, [sp]
     
    802816         */
    803817        cps             #CPSR_SVC_MODE
    804         stmfd   sp!, {r0-r4,r12,lr}
     818        stmfd   sp!, {r0-r5,r12,lr}
    805819#endif /* __TARGET_ARCH_ARM < 6 */
    806820
     
    833847         */
    834848        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    835         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     849        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    836850
    837851        /*
     
    846860         */
    847861        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    848         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     862        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    849863        push    {r1}                                    /* spsrをスタックに保存 */
    850864#else /* __TARGET_ARCH_ARM < 6 */
     
    860874         */
    861875        cps             #CPSR_SVC_MODE
    862         stmfd   sp!, {r0-r4,r12,lr}
     876        stmfd   sp!, {r0-r5,r12,lr}
    863877#endif /* __TARGET_ARCH_ARM < 6 */
    864878        mov             r4, #EXCNO_FIQ
     
    875889 * 【この時点のレジスタ状æ
    876890‹ã€‘
    877  *  r0:CPU例外ハンドラ番号
     891 *  r4:CPU例外ハンドラ番号
    878892 */
    879893ALABEL(exc_handler_1)
     
    889903        ldr             r3, [r2]
    890904        push    {r3}                                    /* 例外ネストカウントを保存 */
    891         mov             r12, sp                                 /* CPU例外のæƒ
     905        mov             r5, sp                                  /* CPU例外のæƒ
    892906報を記憶している領域の */
    893                                                                         /*                              å
    894 ˆé ­ç•ªåœ°ã‚’r12に保存 */
     907                                                                        /*                                å
     908ˆé ­ç•ªåœ°ã‚’r5に保存 */
     909        /*
     910         *  スタックポインタの調整
     911         */
     912        and             r1, sp, #4
     913        sub             sp, sp, r1
     914        push    {r0,r1}                                 /* r0はスペース確保のため */
     915
    895916        /*
    896917         *  カーネル管理外のCPU例外か判定する
     
    905926         *  のいずれかがセットされているなら,これ該当する.
    906927         */
    907         ldr             r1, [r12,#T_EXCINF_cpsr]        /* 例外フレームからcpsrを取得 */
     928        ldr             r1, [r5,#T_EXCINF_cpsr]         /* 例外フレームからcpsrを取得 */
    908929        ands    r1, r1, #CPSR_FIQ_IRQ_BIT
    909930        bne             nk_exc_handler_1                /* カーネル管理外のCPU例外の処理へ */
     
    915936         *  r3:excpt_nest_countの値
    916937         *  r4:CPU例外ハンドラ番号
    917          *  r12:CPU例外のæƒ
     938         *  r5:CPU例外のæƒ
    918939報を記憶している領域のå
    919940ˆé ­ç•ªåœ°
     
    932953         *  オーバランタイマを停止する.
    933954         */
    934         push    {r12}
    935955        bl              ovrtimer_stop
    936         pop             {r12}
    937956#endif /* TOPPERS_SUPPORT_OVRHDR */
    938957
     
    943962        ldr             r2, =istkpt                             /* 非タスクコンテキスト用のスタックに */
    944963        ldr             sp, [r2]
    945         push    {r3}                                    /* 切換え前のスタックポインタを保存 */
    946 
     964        push    {r0,r3}                                 /* 切換え前のスタックポインタを保存 */
     965                                                                        /* r0はスペース確保のため */
    947966ALABEL(exc_handler_2)
    948967        /*
     
    950969‹ã€‘
    951970         *  r4:CPU例外ハンドラ番号
    952          *  r12:CPU例外のæƒ
     971         *  r5:CPU例外のæƒ
    953972報を記憶している領域のå
    954973ˆé ­ç•ªåœ°
     
    9821001         */
    9831002#ifdef LOG_EXC_ENTER
    984         push    {r12}
    9851003        mov             r0, r4                                  /* CPU例外番号をパラメータに渡す */
    9861004        bl              log_exc_enter
    987         pop             {r12}
    9881005#endif /* LOG_EXC_ENTER */
    9891006
     
    9931010        ldr             r2, =exc_table                  /* CPU例外ハンドラテーブルの読込み */
    9941011        ldr             r3, [r2,r4,lsl #2]              /* CPU例外ハンドラの番地 → r3 */
    995         mov             r0, r12                                 /* CPU例外のæƒ
     1012        mov             r0, r5                                  /* CPU例外のæƒ
    9961013報を記憶している領域の */
    9971014                                                                        /*              å
     
    10351052        ldr             r3, [r2]
    10361053        subs    r3, r3, #1
    1037         str             r3, [r2]
     1054        str             r3, [r2]                                /* 戻りå
     1055ˆãŒéžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
     1056        bne             exc_handler_3                   /*                              exc_handler_3に分岐 */
    10381057
    10391058        /*
    10401059         *  タスク用のスタックに戻す.
    10411060         */
    1042         popeq   {r1}                                    /* 戻りå
    1043 ˆãŒã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
    1044         moveq   sp, r1                                  /*               ã‚¿ã‚¹ã‚¯ç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯ã«æˆ»ã™ */
     1061        pop             {r0,r3}
     1062        mov             sp, r3
     1063
     1064        /*
     1065         *  ディスパッチがå¿
     1066要か判定する.
     1067         */
     1068        ldr             r0, =p_runtsk                   /* p_runtsk → r0 */
     1069        ldr             r0, [r0]
     1070        ldr             r1, =p_schedtsk                 /* p_schedtsk → r1 */
     1071        ldr             r1, [r1]
     1072        teq             r0, r1                                  /* p_runtskとp_schedtskが同じなら */
     1073        beq             exc_handler_4                   /*                                exc_handler_4へ */
     1074
     1075        /*
     1076         *  コンテキストを保存する.
     1077         */
     1078        tst             r0, r0                                  /* p_runtskがNULLならdispatcher_0へ */
     1079        beq             dispatcher_0
     1080        stmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの保存 */
     1081        str             sp, [r0,#TCB_sp]                /* スタックポインタを保存 */
     1082        adr             r1, ret_exc_r                   /* 実行再開番地を保存 */
     1083        str             r1, [r0,#TCB_pc]
     1084        b               dispatcher                              /* r0にはp_runtskが格納されている */
     1085
     1086ALABEL(ret_exc_r)
     1087        /*
     1088         *  コンテキストを復帰する.
     1089         */
     1090        ldmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの復帰 */
     1091
     1092#ifdef TOPPERS_SUPPORT_OVRHDR
     1093        /*
     1094         *  オーバランタイマを動作開始する.
     1095         */
     1096        bl              ovrtimer_start
     1097#endif /* TOPPERS_SUPPORT_OVRHDR */
     1098
     1099        /*
     1100         *  CPU例外処理からのリターン
     1101         *
     1102         *  CPU例外処理からのリターンにより,CPUロック解除状æ
     1103‹ã«é·ç§»ã™ã‚‹ã‚ˆ
     1104         *  うにするå¿
     1105要があるが,ARMはCPSRのビットによってCPUロック状æ
     1106‹ã‚’
     1107         *  表しているため,CPSRをå
     1108ƒã«æˆ»ã—てリターンすればよい.
     1109         */
     1110#ifndef TOPPERS_SUPPORT_OVRHDR
     1111ALABEL(exc_handler_4)
     1112#endif /* TOPPERS_SUPPORT_OVRHDR */
     1113ALABEL(exc_handler_3)
     1114        pop             {r0,r1}                                 /* スタックポインタの調整 */
     1115        add             sp, sp, r1
    10451116        add             sp, sp, #8                              /* スタック上のæƒ
    10461117報を捨てる */
    1047         beq             ret_int_1                               /* ret_int_1に分岐 */
    1048 
    1049         /*
    1050          *  CPU例外処理からのリターン(irq_handler_3と同じ処理å†
    1051 å®¹ï¼‰
    1052          */
    10531118#if __TARGET_ARCH_ARM < 6
    10541119        ldmfd   sp!, {r0}                               /* 戻りå
    10551120ˆã®cpsrをspsrに設定 */
    10561121        msr             spsr_cxsf, r0
    1057         ldmfd   sp!, {r0-r4,r12,lr,pc}^ /* コンテキストの復帰 */
     1122        ldmfd   sp!, {r0-r5,r12,lr,pc}^ /* コンテキストの復帰 */
    10581123                                                                        /* ^付きなので,spsr → cpsr */
    10591124#else /* __TARGET_ARCH_ARM < 6 */
    1060         ldmfd   sp!, {r0-r4,r12,lr}
     1125        ldmfd   sp!, {r0-r5,r12,lr}
    10611126        rfefd   sp!
    10621127#endif /* __TARGET_ARCH_ARM < 6 */
     1128
     1129#ifdef TOPPERS_SUPPORT_OVRHDR
     1130ALABEL(exc_handler_4)
     1131        /*
     1132         *  オーバランタイマを動作開始する.
     1133         */
     1134        tst             r0, r0                                  /* p_runtskがNULLでない場合 */
     1135        blne    ovrtimer_start
     1136        b               exc_handler_3
     1137#endif /* TOPPERS_SUPPORT_OVRHDR */
    10631138
    10641139/*
     
    10741149         *  r3:excpt_nest_countの値
    10751150         *  r4:CPU例外ハンドラ番号
    1076          *  r12:CPU例外のæƒ
     1151         *  r5:CPU例外のæƒ
    10771152報を記憶している領域のå
    10781153ˆé ­ç•ªåœ°
     
    10931168        ldr             r2, =istkpt                             /* 非タスクコンテキスト用のスタックに */
    10941169        ldr             sp, [r2]
    1095         push    {r3}                                    /* 切換え前のスタックポインタを保存 */
    1096 
     1170        push    {r0,r3}                                 /* 切換え前のスタックポインタを保存 */
     1171                                                                        /* r0はスペース確保のため */
    10971172ALABEL(nk_exc_handler_2)
    10981173        /*
     
    11091184        ldr             r2, =exc_table                  /* CPU例外ハンドラテーブルの読込み */
    11101185        ldr             r3, [r2,r4,lsl #2]              /* CPU例外ハンドラの番地 → r3 */
    1111         mov             r0, r12                                 /* CPU例外のæƒ
     1186        mov             r0, r5                                  /* CPU例外のæƒ
    11121187報を記憶している領域の */
    11131188                                                                        /*              å
     
    11231198        ldr             r3, [r2]
    11241199        subs    r3, r3, #1
    1125         str             r3, [r2]
     1200        str             r3, [r2]                                /* 戻りå
     1201ˆãŒéžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
     1202        bne             exc_handler_3                   /*                              exc_handler_3に分岐 */
    11261203
    11271204        /*
    11281205         *  タスク用のスタックに戻す.
    11291206         */
    1130         popeq   {r1}                                    /* 戻りå
    1131 ˆãŒã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
    1132         moveq   sp, r1                                  /*               ã‚¿ã‚¹ã‚¯ç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯ã«æˆ»ã™ */
    1133         add             sp, sp, #8                              /* スタック上のæƒ
    1134 å ±ã‚’捨てる */
    1135 
    1136         /*
    1137          *  CPU例外処理からのリターン(irq_handler_3と同じ処理å†
    1138 å®¹ï¼‰
    1139          */
    1140 #if __TARGET_ARCH_ARM < 6
    1141         ldmfd   sp!, {r0}                               /* 戻りå
    1142 ˆã®cpsrをspsrに設定 */
    1143         msr             spsr_cxsf, r0
    1144         ldmfd   sp!, {r0-r4,r12,lr,pc}^ /* コンテキストの復帰 */
    1145                                                                         /* ^付きなので,spsr → cpsr */
    1146 #else /* __TARGET_ARCH_ARM < 6 */
    1147         ldmfd   sp!, {r0-r4,r12,lr}
    1148         rfefd   sp!
    1149 #endif /* __TARGET_ARCH_ARM < 6 */
    1150 
    1151 /*
    1152  *  微少時間å¾
    1153 ã¡
    1154  */
    1155         ATEXT
    1156         AALIGN(2)
    1157         AGLOBAL(_sil_dly_nse)
    1158 ALABEL(_sil_dly_nse)
    1159         subs    r0, r0, #SIL_DLY_TIM1
    1160         bxls    lr
    1161 ALABEL(_sil_dly_nse1)
    1162         subs    r0, r0, #SIL_DLY_TIM2
    1163         bhi             _sil_dly_nse1
    1164         bx              lr
     1207        pop             {r0,r3}
     1208        mov             sp, r3
     1209        b               exc_handler_3
    11651210
    11661211/*
     
    11861231
    11871232#endif /* __thumb__ */
     1233
     1234/*
     1235 *  微少時間å¾
     1236ち
     1237 *
     1238 *  キャッシュラインのどの場所にあるかのよって実行時間が変わるため,大
     1239 *  きめの単位でアラインしている.
     1240 */
     1241        ATEXT
     1242        AALIGN(8)
     1243        AGLOBAL(sil_dly_nse)
     1244ALABEL(sil_dly_nse)
     1245        mov             r1, #0
     1246        mcr             p15, 0, r1, c7, c5, 6           /* 分岐予測å
     1247¨ä½“の無効化 */
     1248        asm_inst_sync_barrier r3
     1249        subs    r0, r0, #SIL_DLY_TIM1
     1250        bxls    lr
     1251ALABEL(sil_dly_nse1)
     1252        mcr             p15, 0, r1, c7, c5, 6           /* 分岐予測å
     1253¨ä½“の無効化 */
     1254        asm_inst_sync_barrier r3
     1255        subs    r0, r0, #SIL_DLY_TIM2
     1256        bhi             sil_dly_nse1
     1257        bx              lr
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_sym.def

    r304 r306  
    11TARGET_ARCH_ARM,__TARGET_ARCH_ARM
    2 USE_INTCFG_TABLE,1,,defined(USE_INTCFG_TABLE)
     2USE_INTCFG_TABLE,true,bool,defined(USE_INTCFG_TABLE)
    33sizeof_TCB,sizeof(TCB)
    44offsetof_TCB_p_tinib,"offsetof(TCB,p_tinib)"
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_unrename.h

    r304 r306  
    5959
    6060/*
     61 *  pl310.c
     62 */
     63#undef pl310_initialize
     64#undef pl310_disable
     65#undef pl310_invalidate_all
     66#undef pl310_clean_and_invalidate_all
     67
     68/*
    6169 *  target_kernel_impl.c
    6270 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_kernel_impl.c

    r305 r306  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    65 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     
    5150 *  の責任を負わない.
    5251 *
    53  *  $Id: gic_kernel_impl.c 522 2016-01-14 06:56:53Z ertl-hiro $
     52 *  $Id: gic_kernel_impl.c 714 2016-03-31 05:52:19Z ertl-hiro $
    5453 */
    5554
     
    138137         *  すべての割込みをグループ1(IRQ)に設定
    139138         */
    140         for (i = 0; i < GIC_TNUM_INTNO / 32; i++) {
     139        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
    141140                sil_wrw_mem(GICD_IGROUPR(i), 0xffffffffU);
    142141        }
     
    146145         *  すべての割込みを禁止
    147146         */
    148         for (i = 0; i < GIC_TNUM_INTNO / 32; i++) {
     147        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
    149148                sil_wrw_mem(GICD_ICENABLER(i), 0xffffffffU);
    150149        }
     
    153152         *  すべての割込みペンディングをクリア
    154153         */
    155         for (i = 0; i < GIC_TNUM_INTNO / 32; i++) {
     154        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
    156155                sil_wrw_mem(GICD_ICPENDR(i), 0xffffffffU);
    157156        }
     
    161160ˆåº¦ã«è¨­å®š
    162161         */
    163         for (i = 0; i < GIC_TNUM_INTNO / 4; i++){
     162        for (i = 0; i < (GIC_TNUM_INTNO + 3) / 4; i++){
    164163                sil_wrw_mem(GICD_IPRIORITYR(i), 0xffffffffU);
    165164        }
     
    169168±æœ‰ãƒšãƒªãƒ•ã‚§ãƒ©ãƒ«å‰²è¾¼ã¿ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’プロセッサ0に設定
    170169         */
    171         for (i = GIC_INTNO_SPI0 / 4; i < GIC_TNUM_INTNO / 4; i++) {
     170        for (i = GIC_INTNO_SPI0 / 4; i < (GIC_TNUM_INTNO + 3) / 4; i++) {
    172171                sil_wrw_mem(GICD_ITARGETSR(i), 0x01010101U);
    173172        }
     
    176175         *  すべてのペリフェラル割込みをレベルトリガに設定
    177176         */
    178         for (i = GIC_INTNO_PPI0 / 16; i < GIC_TNUM_INTNO / 16; i++) {
     177        for (i = GIC_INTNO_PPI0 / 16; i < (GIC_TNUM_INTNO + 15) / 16; i++) {
    179178#ifdef GIC_ARM11MPCORE
    180179                sil_wrw_mem(GICD_ICFGR(i), 0x55555555U);
     
    198197        sil_wrw_mem(GICD_CTLR, GICD_CTLR_DISABLE);
    199198}
     199
     200#ifndef OMIT_GIC_INITIALIZE_INTERRUPT
    200201
    201202/*
     
    273274        }
    274275}
     276
     277#endif /* OMIT_GIC_INITIALIZE_INTERRUPT */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_kernel_impl.h

    r305 r306  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    65 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     
    5150 *  の責任を負わない.
    5251 *
    53  *  $Id: gic_kernel_impl.h 535 2016-01-16 00:42:29Z ertl-hiro $
     52 *  $Id: gic_kernel_impl.h 714 2016-03-31 05:52:19Z ertl-hiro $
    5453 */
    5554
     
    176175#define GICD_TYPER                      GIC_REG(GICD_BASE, 0x004)
    177176#define GICD_IIDR                       GIC_REG(GICD_BASE, 0x008)
    178 #define GICD_IGROUPR(n)         GIC_REG(GICD_BASE, 0x080 + n * 4)
    179 #define GICD_ISENABLER(n)       GIC_REG(GICD_BASE, 0x100 + n * 4)
    180 #define GICD_ICENABLER(n)       GIC_REG(GICD_BASE, 0x180 + n * 4)
    181 #define GICD_ISPENDR(n)         GIC_REG(GICD_BASE, 0x200 + n * 4)
    182 #define GICD_ICPENDR(n)         GIC_REG(GICD_BASE, 0x280 + n * 4)
    183 #define GICD_ISACTIVER(n)       GIC_REG(GICD_BASE, 0x300 + n * 4)
    184 #define GICD_ICACTIVER(n)       GIC_REG(GICD_BASE, 0x380 + n * 4)
    185 #define GICD_IPRIORITYR(n)      GIC_REG(GICD_BASE, 0x400 + n * 4)
    186 #define GICD_ITARGETSR(n)       GIC_REG(GICD_BASE, 0x800 + n * 4)
    187 #define GICD_ICFGR(n)           GIC_REG(GICD_BASE, 0xc00 + n * 4)
    188 #define GICD_NSCAR(n)           GIC_REG(GICD_BASE, 0xe00 + n * 4)
     177#define GICD_IGROUPR(n)         GIC_REG(GICD_BASE, 0x080 + (n) * 4)
     178#define GICD_ISENABLER(n)       GIC_REG(GICD_BASE, 0x100 + (n) * 4)
     179#define GICD_ICENABLER(n)       GIC_REG(GICD_BASE, 0x180 + (n) * 4)
     180#define GICD_ISPENDR(n)         GIC_REG(GICD_BASE, 0x200 + (n) * 4)
     181#define GICD_ICPENDR(n)         GIC_REG(GICD_BASE, 0x280 + (n) * 4)
     182#define GICD_ISACTIVER(n)       GIC_REG(GICD_BASE, 0x300 + (n) * 4)
     183#define GICD_ICACTIVER(n)       GIC_REG(GICD_BASE, 0x380 + (n) * 4)
     184#define GICD_IPRIORITYR(n)      GIC_REG(GICD_BASE, 0x400 + (n) * 4)
     185#define GICD_ITARGETSR(n)       GIC_REG(GICD_BASE, 0x800 + (n) * 4)
     186#define GICD_ICFGR(n)           GIC_REG(GICD_BASE, 0xc00 + (n) * 4)
     187#define GICD_NSCAR(n)           GIC_REG(GICD_BASE, 0xe00 + (n) * 4)
    189188#define GICD_SGIR                       GIC_REG(GICD_BASE, 0xf00)
    190 #define GICD_CPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf10 + n * 4)
    191 #define GICD_SPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf20 + n * 4)
     189#define GICD_CPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf10 + (n) * 4)
     190#define GICD_SPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf20 + (n) * 4)
    192191
    193192/*
     
    200199 *  割込みコンフィギュレーションレジスタ(GICD_ICFGRn)の設定値
    201200 *
    202  *  第1ビットは,ARM11 MPCoreでは割込みの通知å
    203 ˆãƒ—ロセッサを設定するため
    204  *  に使用されているが,GICv1およびGICv2では予約ビットとなっている.
     201 *  第1ビットは,ARM11 MPCoreおよびGICの早い時期の実è£
     202では割込みの通知
     203 *  å
     204ˆãƒ—ロセッサを設定するために使用されている.
    205205 */
    206206#define GICD_ICFGRn_LEVEL       UINT_C(0x00)
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_support.S

    r305 r306  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    65 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
     
    5352 *  の責任を負わない.
    5453 *
    55  *  $Id: gic_support.S 522 2016-01-14 06:56:53Z ertl-hiro $
     54 *  $Id: gic_support.S 718 2016-04-01 15:05:01Z ertl-hiro $
    5655 */
    5756
     
    7978報(割込み発生前の割込み
    8079 *  優å
    81 ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタックに保存する.
     80ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタックのå
     81ˆé ­ã«ä¿å­˜ã™ã‚‹ï¼Ž
    8282 */
    8383        ATEXT
     
    104104        str             r0, [r1]                        /* 新しい割込み優å
    105105ˆåº¦ãƒžã‚¹ã‚¯ã‚’セットする */
    106 //      DATA_SYNC_BARRIER                       /* 割込み優å
     106        asm_data_sync_barrier r0        /* 割込み優å
    107107ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾
    108108つ */
    109 #if __TARGET_ARCH_ARM == 6
    110         mov             r0, #0
    111         mcr             p15, 0, r0, c7, c10, 4
    112 #elif __TARGET_ARCH_ARM == 7
    113         dsb
    114 #endif /* __TARGET_ARCH_ARM == 7 */
    115         push    {r2}                            /* irc_end_intで用いるæƒ
     109        str             r2, [sp]                        /* irc_end_intで用いるæƒ
    116110報を保存 */
    117111
     
    141135ƒã«æˆ»ã™ï¼Ž
    142136         */
    143         pop             {r2}                            /* irc_begin_intで保存したæƒ
     137        ldr             r2, [sp]                        /* irc_begin_intで保存したæƒ
    144138報を復帰 */
    145139        ldr             r1, =GICC_PMR           /* 割込み優å
     
    178172報(CPU例外発生前の割込み優å
    179173ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタッ
    180  *      クに保存する.
     174 *      クのå
     175ˆé ­ã«ä¿å­˜ã™ã‚‹ï¼Ž
    181176 */
    182177        ATEXT
     
    191186ˆåº¦ã‚’取得 */
    192187        ldr             r2, [r1]
    193         push    {r2}                            /* irc_end_excで用いるæƒ
     188        str             r2, [sp]                        /* irc_end_excで用いるæƒ
    194189報を保存 */
    195190        bx              lr
     
    207202ƒã«æˆ»ã™ï¼Ž
    208203         */
    209         pop             {r2}                            /* irc_begin_excで保存したæƒ
     204        ldr             r2, [sp]                        /* irc_begin_excで保存したæƒ
    210205報を復帰 */
    211206        ldr             r1, =GICC_PMR           /* 割込み優å
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/uart_pl011.h

    r302 r306  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2006-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: uart_pl011.h 359 2015-07-26 10:27:20Z ertl-hiro $
     55 *  $Id: uart_pl011.h 509 2016-01-12 06:06:14Z ertl-hiro $
    5656 */
    5757
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/arm_design.txt

    r302 r306  
    33                ARMコア依存部 設計メモ
    44
    5                 対応バージョン: Release 3.B.0
    6                 最終更新: 2015å¹´8月18日
    7 
     5                対応バージョン: Release 3.1.0
     6                最終更新: 2016å¹´5月14日
     7
     8----------------------------------------------------------------------
     9 TOPPERS/ASP Kernel
     10     Toyohashi Open Platform for Embedded Real-Time Systems/
     11     Advanced Standard Profile Kernel
     12
     13 Copyright (C) 2014-2016 by Embedded and Real-Time Systems Laboratory
     14             Graduate School of Information Science, Nagoya Univ., JAPAN
     15 
     16 ä¸Šè¨˜è‘—作権è€
     17は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     18 ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
     19 å¤‰ãƒ»å†é
     20å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
     21 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     22     æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
     23     ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
     24 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     25     ç”¨ã§ãã‚‹å½¢ã§å†é
     26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
     27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
     28     è€
     29マニュアルなど)に,上記の著作権表示,この利用条件および下記
     30     ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
     31 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     32     ç”¨ã§ããªã„形で再é
     33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
     34     ã¨ï¼Ž
     35   (a) 再é
     36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
     37マニュアルなど)に,上記の著
     38       ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
     39   (b) 再é
     40å¸ƒã®å½¢æ
     41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
     42       å ±å‘Šã™ã‚‹ã“と.
     43 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     44     å®³ã‹ã‚‰ã‚‚,上記著作権è€
     45およびTOPPERSプロジェクトをå
     46è²¬ã™ã‚‹ã“と.
     47     ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
     48     ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
     49およびTOPPERSプロジェクトを
     50     å
     51è²¬ã™ã‚‹ã“と.
     52 
     53 æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
     54お
     55 ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     56 ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
     57 ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
     58 ã®è²¬ä»»ã‚’負わない.
     59 
     60 $Id: arm_design.txt 751 2016-05-14 15:03:06Z ertl-hiro $
    861----------------------------------------------------------------------
    962
     
    55108ARMv7-A,ARMv7-Rに準拠したプロセッサコアを持つターゲットシステム(チッ
    56109プ)にå
    57 ±é€šã«ä½¿ç”¨ã§ãã‚‹éƒ¨åˆ†ã§ã‚る.
     110±é€šã«ä½¿ç”¨ã§ãã‚‹éƒ¨åˆ†ã§ã‚る.ただし,これに該当するすべてのARMコア
     111に対応できているわけではない.新しいチップにポーティングする際には,コ
     112ア依存部に何らかの修正がå¿
     113要になることも多いと思われる.
    58114
    59115ARMコアのプロセッサコア略称を"arm"とする.GNU開発環境向けのARMコア依存
     
    284340ˆã®cpsrをspsrに復帰 */
    285341        msr             spsr_cxsf, r0
    286         ldmfd   sp!, {r0-r4,r12,lr,pc}^         /* 例外処理からの復帰 */
    287 ----------------------------------------
    288 
    289 ã“こで,スクラッチレジスタに加えてr4も復帰しているのは,例外の出å
    290 ¥å£å‡¦
    291 ç†ã§ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ä»¥å¤–に使えるレジスタとして,r4を確保するためであ
    292 ã‚‹ï¼Ž
     342        ldmfd   sp!, {r0-r5,r12,lr,pc}^         /* 例外処理からの復帰 */
     343----------------------------------------
     344
     345ここで,スクラッチレジスタに加えてr4とr5も復帰しているのは,例外の出å
     346¥
     347口処理でスクラッチレジスタ以外に使えるレジスタとして,r4とr5を確保する
     348ためである(実際には,r4だけが使えれば十分であるが,スタックポインタを
     3498バイト境界にアラインするためにr5も保存/復帰している).
    293350
    294351この出口を実行する時点で,スタックは次のようになっているå¿
     
    310367        |       r4       |
    311368        +----------------+ <- sp+0x18
     369        |       r5       |
     370        +----------------+ <- sp+0x1c
    312371        |       r12      |
    313         +----------------+ <- sp+0x1c
     372        +----------------+ <- sp+0x20
    314373        |       lr       |
    315         +----------------+ <- sp+0x20
     374        +----------------+ <- sp+0x24
    316375        |    戻り番地    |
    317         +----------------+
     376        +----------------+ <- sp+0x28
    318377
    319378これに対応する例外のå
     
    325384         */
    326385        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    327         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */  (*1)
     386        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */  (*1)
    328387
    329388        /*
     
    339398         */
    340399        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    341         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */              (*2)
     400        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */              (*2)
    342401        push    {r1}                                    /* spsrをスタックに保存 */
    343402----------------------------------------
     
    346405り,その時点で保存するpcの値は使わない.(*2)で,確保したスペースに戻り
    347406番地を格納する.格納å
    348 ˆã‚’[sp,#0x1c]とするのは,この時点ではspは上の図の
    349 ï¼ˆsp+0x04)を指しており,戻り番地は(sp+0x20)に格納したいためである.
     407ˆã‚’[sp,#0x20]とするのは,この時点ではspは上の図の
     408(sp+0x04)を指しており,戻り番地は(sp+0x24)に格納したいためである.
    350409
    351410例外を受け付けるとIビットをセットするため,例外のå
     
    393452
    394453----------------------------------------
    395         ldmfd   sp!, {r0-r4,r12,lr}
     454        ldmfd   sp!, {r0-r5,r12,lr}
    396455        rfefd   sp!
    397456----------------------------------------
    398457
    399 ã“こで,スクラッチレジスタに加えてr4も復帰しているのは,例外の出å
    400 ¥å£å‡¦
    401 ç†ã§ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ä»¥å¤–に使えるレジスタとして,r4を確保するためであ
    402 ã‚‹ï¼Ž
     458ここで,スクラッチレジスタに加えてr4とr5も復帰しているのは,例外の出å
     459¥
     460口処理でスクラッチレジスタ以外に使えるレジスタとして,r4とr5を確保する
     461ためである(実際には,r4だけが使えれば十分であるが,スタックポインタを
     4628バイト境界にアラインするためにr5も保存/復帰している).
    403463
    404464この出口を実行する時点で,スタックは次のようになっているå¿
     
    418478        |       r4       |
    419479        +----------------+ <- sp+0x14
     480        |       r5       |
     481        +----------------+ <- sp+0x18
    420482        |       r12      |
    421         +----------------+ <- sp+0x18
     483        +----------------+ <- sp+0x1c
    422484        |       lr       |
    423         +----------------+ <- sp+0x1c
     485        +----------------+ <- sp+0x20
    424486        |    戻り番地    |
    425         +----------------+ <- sp+0x20
     487        +----------------+ <- sp+0x24
    426488        |      cpsr      |
    427         +----------------+
     489        +----------------+ <- sp+0x28
    428490
    429491これに対応する例外のå
     
    443505         */
    444506        cps             #CPSR_SVC_MODE
    445         stmfd   sp!, {r0-r4,r12,lr}
     507        stmfd   sp!, {r0-r5,r12,lr}
    446508----------------------------------------
    447509
     
    585647中でå¿
    586648要なæƒ
    587 å ±ï¼ˆä¾‹ãˆã°ï¼Œå‰²è¾¼ã¿ç•ªå·ï¼‰ã¯ï¼Œirc_begin_intでスタック上に保存
    588 ã—ておくå¿
    589 è¦ãŒã‚る.これを可能にするために,irc_begin_intが呼び出された
    590 ã‚‰ï¼Œirc_end_intもå¿
    591 ãšå‘¼ã³å‡ºã•ã‚Œã‚‹ã‚ˆã†ã«ã—ておく.スプリアス割込みの場合
    592 ã«ã‚‚,irc_end_intを呼び出すようにしている.
    593 
     649報(例えば,割込み番号)は,irc_begin_intでスタックのå
     650ˆé ­ã«
     651保存しておくå¿
     652要がある.これに用いるために,スタックのå
     653ˆé ­ã«1ワードの空
     654き領域を設けている.
     655
     656irc_end_intでå¿
     657要なæƒ
     658報が1ワードで不足する場合には,irc_begin_intでスタッ
     659クに積み,irc_end_intでスタックから取り出す.これを可能にするために,
     660irc_begin_intが呼び出されたら,irc_end_intもå¿
     661ず呼び出されるようにして
     662おく.スプリアス割込みの場合にも,irc_end_intを呼び出すようにしている.
    594663サブルーチン(irc_begin_int)の中でスタックに積み増すのは,一般には採用
    595664しないプログラミング技法であるが,irc_begin_intからirc_end_intに渡すæƒ
     
    894963報を記憶している領域のå
    895964ˆé ­ç•ªåœ°ã‚’第1パラメータ,CPU例外ハンド
    896 ãƒ©ç•ªå·ã‚’第2パラメータとして呼び出す.r12に保存されているCPU例外のæƒ
    897 å ±ã‚’
    898 è¨˜æ†¶ã—ている領域のå
    899 ˆé ­ç•ªåœ°ãŒä¿å­˜ã•ã‚Œã‚‹ã‚ˆã†ã«ï¼Œå¿
    900 è¦ã«å¿œã˜ã¦ï¼Œã‚¹ã‚¿ãƒƒã‚¯ã«
    901 ä¿å­˜ã™ã‚‹ï¼Ž
     965ラ番号を第2パラメータとして呼び出す.
    902966
    903967----------------------------------------
     
    919983クに戻す.その後,CPU例外が発生した状況を判断するための追加æƒ
    920984報をスタッ
    921 ã‚¯ä¸Šã‹ã‚‰æ¨ã¦ã‚‹ï¼Žä¾‹å¤–ネストカウントが0になった場合の処理は,割込みハンド
    922 ãƒ©ã®å‡ºå£å‡¦ç†ã¨å
    923 ±é€šã§ã‚るため,ret_int_1に分岐する.
     985ク上から捨てる.例外ネストカウントが0になった場合の処理は,追加æƒ
     986報をス
     987タック上から捨てること以外は,割込みハンドラの出口処理と同様である.
    924988
    925989----------------------------------------
     
    9571021#endif /* TOPPERS_SUPPORT_OVRHDR */
    9581022                }
    959 ----------------------------------------
    960 
    961 ä»¥ä¸Šã®å‡¦ç†ã«ã¯ï¼Œå‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã®å‡ºå£å‡¦ç†ã®ãƒ«ãƒ¼ãƒãƒ³ã‚’流用する.
    962 
    963 ----------------------------------------
    9641023                CPU例外処理からのリターン後に,CPUロック解除状æ
    9651024‹ã«æˆ»ã‚‹ã‚ˆã†ã«æº–備する
     
    9721031----------------------------------------
    9731032
    974 ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ã‚’復帰した後,例外からリターンする.
    975 
    9761033●スタックポインタが不正の場合の対策
    9771034
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/arm_memo.txt

    r302 r306  
    8282        - 物理メモリシステムアーキテクチャ(PMSA)でのレジスタ
    8383        - パフォーマンスモニタレジスタ
     84・その他(備忘録)
    8485
    8586○参考文献
     
    651652・ARMv7-A(VMSA)におけるキャッシュ・分岐予測メンテナンス操作
    652653        - ICIALLIS, ICIALLU, ICIMVAU … 命令キャッシュと分岐予測の無効化
    653         - BPIALLIS, CPIALL, CPIMVA      … 分岐予測の無効化
     654        - BPIALLIS, BPIALL, BPIMVA      … 分岐予測の無効化
    654655        - DCIMVAC, DCISW                        … データ/統合キャッシュの無効化
    655656        - DCCMVAC, DCCSW, DCCMVAU       â€¦ データ/統合キャッシュのクリーン
     
    13221323●パフォーマンスモニタレジスタ
    13231324
     1325○その他(備忘録)
     1326
     1327●スタックのアラインメント
     1328
     1329ARMアーキテクチャ向けプロシージャコール標準(AAPCS)では,すべての外部
     1330インタフェースにおいて,スタックポインタを8バイト境界でアラインするå¿
     1331要
     1332がある。
     1333
    13241334以上
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/arm_vmsa_memo.txt

    r302 r306  
    55                作成è€
    66: 高田広章(名古屋大学)
    7                 最終更新: 2015å¹´8月6日
     7                最終更新: 2016å¹´1月16日
    88
    99○メモの位置づけ
     
    382382±æœ‰ï¼ˆ1)か非å
    383383±æœ‰ï¼ˆ0)か
     384・ビット[0]
     385        ページテーブルウォークがキャッシュできる(1)かできない(0)か
    384386・他のビットは未使用
     387
     388・ARMv5以前は,ビット[4:0]はサポートしておらず,0にすべき(以下の記述よ
     389り判断).
     390
     391参考文献[1]のB4.7.1節より
     392--------------------
     393Prior to VMSAv6, a single TTBR existed. Only bits[31:14] of the
     394Translation Table Base Register are significant, and bits[13:0] should
     395be zero.
     396--------------------
    385397
    386398●TTBR1(Translation Table Base Register 1)… (0, c2, c0, 1)
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/gic_design.txt

    r302 r306  
    33                GIC(ARM Generic Interrupt Controller)依存部 設計メモ
    44
    5                 対応バージョン: Release 3.B.0
    6                 最終更新: 2015å¹´7月24日
    7 
     5                対応バージョン: Release 3.0.0
     6                最終更新: 2016å¹´1月16日
     7
     8----------------------------------------------------------------------
     9 TOPPERS/ASP Kernel
     10     Toyohashi Open Platform for Embedded Real-Time Systems/
     11     Advanced Standard Profile Kernel
     12
     13 Copyright (C) 2014-2016 by Embedded and Real-Time Systems Laboratory
     14             Graduate School of Information Science, Nagoya Univ., JAPAN
     15 
     16 ä¸Šè¨˜è‘—作権è€
     17は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     18 ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
     19 å¤‰ãƒ»å†é
     20å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
     21 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     22     æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
     23     ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
     24 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     25     ç”¨ã§ãã‚‹å½¢ã§å†é
     26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
     27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
     28     è€
     29マニュアルなど)に,上記の著作権表示,この利用条件および下記
     30     ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
     31 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     32     ç”¨ã§ããªã„形で再é
     33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
     34     ã¨ï¼Ž
     35   (a) 再é
     36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
     37マニュアルなど)に,上記の著
     38       ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
     39   (b) 再é
     40å¸ƒã®å½¢æ
     41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
     42       å ±å‘Šã™ã‚‹ã“と.
     43 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     44     å®³ã‹ã‚‰ã‚‚,上記著作権è€
     45およびTOPPERSプロジェクトをå
     46è²¬ã™ã‚‹ã“と.
     47     ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
     48     ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
     49およびTOPPERSプロジェクトを
     50     å
     51è²¬ã™ã‚‹ã“と.
     52 
     53 æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
     54お
     55 ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     56 ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
     57 ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
     58 ã®è²¬ä»»ã‚’負わない.
     59 
     60 $Id: gic_design.txt 533 2016-01-15 23:29:33Z ertl-hiro $
    861----------------------------------------------------------------------
    962
     
    1467        - GIC依存部を構成するファイル
    1568・チップ依存のパラメータ
     69        - アプリケーションから参ç
     70§ã§ãã‚‹ãƒ‘ラメータ
     71        - カーネルå†
     72部で使用するパラメータ
    1673・GICにおける割込みハンドラおよびCPU例外ハンドラの出å
    1774¥å£å‡¦ç†
    1875        - GICにおける割込みハンドラの出å
     76¥å£å‡¦ç†
     77        - GICにおけるCPU例外ハンドラの出å
    1978¥å£å‡¦ç†
    2079
     
    43102GIC依存部は,次の3つのファイルで構成される.
    44103
    45 gic_kernel_impl.h
    46 gic_kernel_impl.c
    47 gic_support.S
     104  arch/arm_gcc/common/
     105        gic_kernel_impl.h       ã‚«ãƒ¼ãƒãƒ«ã®å‰²è¾¼ã¿GIC依存部のヘッダファイル
     106        gic_kernel_impl.c       ã‚«ãƒ¼ãƒãƒ«ã®å‰²è¾¼ã¿GIC依存部
     107        gic_support.S           ã‚«ãƒ¼ãƒãƒ«ã®å‰²è¾¼ã¿GIC依存部のアセンブリ言語部
    48108
    49109○チップ依存のパラメータ
    50110
    51 TMIN_INTPRI
    52 TMAX_INTPRI
    53 
    54 ã‚«ãƒ¼ãƒãƒ«ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã®ãƒ˜ãƒƒãƒ€ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰gic_kernel_impl.hをインク
    55 ãƒ«ãƒ¼ãƒ‰ã™ã‚‹å‰ã«ï¼Œå¿
    56 è¦ã«å¿œã˜ã¦ï¼Œä»¥ä¸‹ã®å®šæ•°ã‚’マクロ定義しておく.
     111●アプリケーションから参ç
     112§ã§ãã‚‹ãƒ‘ラメータ
     113
     114target_kernel.h(または,そこからインクルードされるファイル)で,以下の
     115定数をマクロ定義しておく.
     116
     117(1) TMIN_INTPRI                 å‰²è¾¼ã¿å„ªå
     118ˆåº¦ã®æœ€å°å€¤ï¼ˆæœ€é«˜å€¤ï¼‰
     119(2) TMAX_INTPRI                 å‰²è¾¼ã¿å„ªå
     120ˆåº¦ã®æœ€å¤§å€¤ï¼ˆæœ€ä½Žå€¤ï¼‰
     121
     122TMAX_INTPRIは,-1に定義する.TMAX_INTPRIは,ターゲットチップのGICでサポー
     123トする割込み優å
     124ˆåº¦ã®æ®µæ•°ã«ã‚ˆã‚Šï¼Œ-15,-31,-63,-127,-255のいずれかに定
     125義する.
     126
     127●カーネルå†
     128部で使用するパラメータ
     129
     130target_kernel_impl.h(または,そこからインクルードされるファイル)から
     131gic_kernel_impl.hをインクルードする前に,å¿
     132要に応じて,以下の定数をマク
     133ロ定義しておく.
    57134
    58135(1) GIC_TNUM_INTNO              割込みの数
     
    62139Peripheral Interrupt)の合計数.
    63140
    64 (2) GIC_PRI_LEVEL               å‰²è¾¼ã¿å„ªå
    65 ˆåº¦ã®æ®µæ•°
    66 
    67 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒãƒƒãƒ—のGICがサポートする割込み優å
    68 ˆåº¦ã®æ®µæ•°ï¼Ž16,32,64,128,
    69 256のいずれか.
    70 
    71 (3) GICC_BASE                   CPUインタフェースのベースアドレス
    72 (4) GICD_BASE                   ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ュータのベースアドレス
     141(2) GICC_BASE                   CPUインタフェースのベースアドレス
     142(3) GICD_BASE                   ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ュータのベースアドレス
    73143
    74144GICのCPUインタフェースおよびディストリビュータのベースアドレス.
    75145
    76 (5) TOPPERS_SAFEG_SECURE        セキュアモード(オプション)
     146(4) TOPPERS_SAFEG_SECURE        セキュアモード(オプション)
    77147
    78148セキュアモードでカーネルを動作させ,FIQをカーネル管理の割込みと扱う場合
    79149に,このシンボルをマクロ定義する.
    80150
    81 (6) GIC_ARM11MOCORE             ARM11 MPCoreへの対応(オプション)
     151(5) GIC_ARM11MPCORE             ARM11 MPCoreへの対応(オプション)
    82152
    83153ARM11 MPCoreのDistributed Interrupt Controllerの場合には,このシンボル
     
    284354¥å£å‡¦ç†
    285355
    286 
     356GICにおけるCPU例外ハンドラのå
     357¥å£å‡¦ç†ï¼ˆirc_begin_exc)では,CPU例外発生
     358前の割込み優å
     359ˆåº¦ãƒžã‚¹ã‚¯ã‚’スタックに保存し,CPU例外ハンドラのå
     360¥å£å‡¦ç†
     361(irc_end_exc)で割込み優å
     362ˆåº¦ãƒžã‚¹ã‚¯ã‚’å
     363ƒã«æˆ»ã™ï¼Ž
     364
     365----------------------------------------
     366ALABEL(irc_begin_exc)
     367        /*
     368         *  割込み優å
     369ˆåº¦ãƒžã‚¹ã‚¯ã‚’保存する.
     370         */
     371        ldr             r1, =GICC_PMR           /* 現在の割込み優å
     372ˆåº¦ã‚’取得 */
     373        ldr             r2, [r1]
     374        push    {r2}                            /* irc_end_excで用いるæƒ
     375報を保存 */
     376        bx              lr
     377----------------------------------------
     378ALABEL(irc_end_exc)
     379        /*
     380         *  割込み優å
     381ˆåº¦ãƒžã‚¹ã‚¯ã‚’å
     382ƒã«æˆ»ã™ï¼Ž
     383         */
     384        pop             {r2}                            /* irc_begin_excで保存したæƒ
     385報を復帰 */
     386        ldr             r1, =GICC_PMR           /* 割込み優å
     387ˆåº¦ãƒžã‚¹ã‚¯ã‚’å
     388ƒã«æˆ»ã™ */
     389        str             r2, [r1]
     390        bx              lr
     391----------------------------------------
    287392
    288393以上
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/gic_memo.txt

    r302 r306  
    55                作成è€
    66: 高田広章(名古屋大学)
    7                 最終更新: 2015å¹´7月25日
     7                最終更新: 2016å¹´3月24日
    88
    99○メモの位置づけ
     
    340340        - 各割込みのコンフィギュレーションを2ビットで設定
    341341        - レベルトリガかエッジトリガかを設定
     342                        上位ビットが0:レベルトリガ
     343                        上位ビットが1:エッジトリガ
    342344        - GICv1より前の一部の実è£
    343345では,N-Nモデルか1-Nモデルかもここで設定
    344                         0:N-Nモデル
    345                         1:1-Nモデル
     346                        下位ビットが0:N-Nモデル
     347                        下位ビットが1:1-Nモデル
     348        - GICv1以降では,下位ビットをどのように設定すべきか?
     349                        文献[1]には明記がない
     350                        文献[2]によると,1にすべきとも読める
     351        → GIC_ARM11MPCOREが定義されていれば1,そうでなければ0に初期化する.
    346352
    347353割込みノンセキュアアクセス制御レジスタ(GICD_NSCARn)0xe00〜0xefc … オプション
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/mpcore_memo.txt

    r302 r306  
    55                作成è€
    66: 高田広章(名古屋大学)
    7                 最終更新: 2015å¹´8月9日
     7                最終更新: 2016å¹´1月16日
    88
    99○メモの位置づけ
     
    2222
    2323・参考文献
     24・MPCoreとは?
     25・SCU(Snoop Control Unit)
    2426・ARM CT11MPcore with RealView Emulation Baseboard
    2527        - 用語の整理
     
    5355HBI-0159, HBI-0175, HBI-0176
    5456DUI0351E_realview_platform_baseboard_for_arm11_mpcore_ug.pdf
     57
     58○MPCoreとは?
     59
     60MPCoreとは,ARMコアを1〜4個と,SCU(Snoop Control Unit)など,マルチコ
     61アシステムにå¿
     62要な周辺回路を含むプロセッサアーキテクチャの名称と思われ
     63る.
     64
     65参考文献[1]によると,ARM11 MPCoreとは,1〜4個のMP11 CPU(コア)を載せ,
     66SCU,DIC(Distributed Interrupt Controller),コア毎のプライベートタイ
     67マとプライベートウォッチドッグ,AXIインタフェースなどを含むプロセッサの
     68名称である.MP11 CPUとは,ARM11を拡張したコアのことと思われる.
     69
     70参考文献[2]によると,Cortex-A9 MPCoreとは,1〜4個のCortex-A9プロセッサ
     71(コア)を載せ,SCU,GIC(Generic Interrupt Controller),プライベート
     72ペリフェラル(グローバルタイマ,コア毎のプライベートタイマとウォッチドッ
     73グ),AXIインタフェース(オプション)などを含むプロセッサの名称である.
     74
     75以上より,MPCoreチップ依存部には,SCU,GIC(またはDIC),プライベートペ
     76リフェラルを扱うコードを含めるのが妥当と考えられる.ただし,GIC(および
     77DIC)については,別のARMプロセッサにもå
     78±é€šã§ä½¿ã‚ã‚Œã‚‹ãŸã‚ï¼ŒARMコア依存部
     79に含める.
     80
     81○SCU(Snoop Control Unit)
     82
     83SCUは,各コアが持つL1キャッシュのコヒーレンスを保つための回路である.
     84ARM11 MPCoreでは,SCUがパフォーマンスモニタの機能を持っているが,
     85Cortex-Aシリーズでは,パフォーマンスモニタは独立した機能として用意され
     86ており,SCUはパフォーマンスモニタの機能を持たない.
     87
     88以下では,SCUの制御レジスタについてまとめる.
     89
     90SCU制御レジスタ(MPCORE_SCU_CTRL)… 32ビット
     91!ARM11 MPCoreとCortex-A9 MPCoreで,ビットé
     92ç½®ãŒç•°ãªã‚‹ï¼Ž
     93
     94SCUコンフィギュレーションレジスタ(MPCORE_SCU_CONFIG)… 32ビット
     95
     96SCU CPUパワーステータスレジスタ(MPCORE_SCU_CPUSTAT)… 32ビット
     97!ARM11 MPCoreとCortex-A9 MPCoreで,ビットé
     98ç½®ãŒç•°ãªã‚‹ï¼Ž
     99
     100SCUå
     101¨ç„¡åŠ¹åŒ–レジスタ(MPCORE_SCU_INVALL)… 32ビット
     102        - このレジスタに書き込むことで,タグメモリを無効化できる.
    55103
    56104○ARM CT11MPcore with RealView Emulation Baseboard
     
    133181        - 以下のレジスタのアドレスを決める
    134182                + ARM11 MPCoreのレジスタ
    135                         Snoop Control Unit(SCU)の制御レジスタ
     183                        SCUの制御レジスタ
    136184                + L220キャッシュコントローラのレジスタ
    137185                + ARM11 MPCoreテストチップのレジスタ
     
    167215蔵タイマ([1] 9.2節)
    168216
    169 ARM11 MPCoreは,コア毎に,タイマとウォッチドッグを持つ.ウォッチドッグ
    170 ã¯ï¼Œã‚¿ã‚¤ãƒžã¨ã—て使用することもできる.
     217ARM11 MPCoreは,コア毎に,プライベートタイマとプライベートウォッチドッ
     218グを持つ.ウォッチドッグは,タイマとして使用することもできる.
    171219
    172220●タイマ
  • asp3_wo_tecs/trunk/arch/arm_m_gcc/common/Makefile.core

    r304 r306  
    9595
    9696#
    97 #  オフセットファイル生成のための定義(ToDo)
     97#  オフセットファイル生成のための定義
    9898#
    9999TARGET_OFFSET_TRB = $(COREDIR)/core_offset.trb
  • asp3_wo_tecs/trunk/arch/arm_m_gcc/common/core_check.trb

    r304 r306  
    11# ======================================================================
    2 # 
     2#
    33#   TOPPERS/ASP Kernel
    44#       Toyohashi Open Platform for Embedded Real-Time Systems/
    55#       Advanced Standard Profile Kernel
    6 # 
     6#
    77#   Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    88#                               Toyohashi Univ. of Technology, JAPAN
    99#   Copyright (C) 2005-2014 by Embedded and Real-Time Systems Laboratory
    1010#               Graduate School of Information Science, Nagoya Univ., JAPAN
    11 # 
     11#
    1212#   ä¸Šè¨˜è‘—作権è€
    1313は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     
    4646#       å
    4747è²¬ã™ã‚‹ã“と.
    48 # 
     48#
    4949#   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    5050お
     
    5353#   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    5454#   ã®è²¬ä»»ã‚’負わない.
    55 # 
     55#
    5656#   @(#) $Id: core_check.tf 301 2015-01-07 04:57:01Z ertl-ishikawa $
    5757#
    5858# =====================================================================
    5959
    60 # 
     60#
    6161#               ãƒ‘ス3のプロセッサ依存テンプレート(ARM-M用)
    62 # 
     62#
    6363
    64 # 
     64#
    6565#  パス4のプロセッサ依存テンプレート(ARM-M用)
    66 
    67 def GetStackTskinictxb(key, params)
    68     tinib = SYMBOL("_kernel_tinib_table")
    69     tinib += $sizeof_TINIB * (key - 1)
     66#
     67def GetStackTskinictxb(key, params, tinib)
    7068    bottom = PEEK(tinib + $offsetof_TINIB_TSKINICTXB_stk_bottom, $sizeof_void_ptr)
    7169    size = PEEK(tinib + $offsetof_TINIB_TSKINICTXB_stksz, $sizeof_size_t)
     
    7371end
    7472
    75 # 
     73#
    7674#  ターゲット非依存部のインクルード
    77 # 
     75#
    7876IncludeTrb("kernel/kernel_check.trb")
  • asp3_wo_tecs/trunk/arch/arm_m_gcc/common/core_kernel.trb

    r304 r306  
    11# ======================================================================
    2 # 
     2#
    33#   TOPPERS/ASP Kernel
    44#       Toyohashi Open Platform for Embedded Real-Time Systems/
    55#       Advanced Standard Profile Kernel
    6 # 
     6#
    77#   Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    88#                               Toyohashi Univ. of Technology, JAPAN
    99#   Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
    1010#               Graduate School of Information Science, Nagoya Univ., JAPAN
    11 # 
     11#
    1212#   ä¸Šè¨˜è‘—作権è€
    1313は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     
    4646#       å
    4747è²¬ã™ã‚‹ã“と.
    48 # 
     48#
    4949#   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    5050お
     
    5353#   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    5454#   ã®è²¬ä»»ã‚’負わない.
    55 # 
     55#
    5656#   @(#) $Id: core.tf 322 2015-04-30 13:23:48Z ertl-ishikawa $
    5757#
    5858# =====================================================================
    5959
    60 # 
     60#
    6161#     ãƒ‘ス2のアーキテクチャ依存テンプレート(ARM-M用)
    62 # 
    63 
    64 # 
     62#
     63
     64#
    6565#  有効な割込み番号,割込みハンドラ番号
    66 # 
    67 $INTNO_VALID = Array(15..$TMAX_INTNO.val)
     66#
     67$INTNO_VALID = Array(15..$TMAX_INTNO)
    6868$INHNO_VALID = $INTNO_VALID
    6969
    70 # 
     70#
    7171#  有効なCPU例外番号
    7272#  7,8はエミュレートされた例外
    73 # 
     73#
    7474$EXCNO_VALID = [ 2,3,4,5,6,7,8,11,12,14 ]
    7575
    76 # 
     76#
    7777#  CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
    78 # 
     78#
    7979$INTNO_CREISR_VALID = $INTNO_VALID
    8080$INHNO_CREISR_VALID = $INHNO_VALID
    8181
    82 # 
     82#
    8383#  DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
    84 # 
     84#
    8585$INHNO_DEFINH_VALID = $INHNO_VALID
    8686$EXCNO_DEFEXC_VALID = $EXCNO_VALID
    8787
    88 # 
     88#
    8989#  CFG_INTで使用できる割込み番号と割込み優å
    9090ˆåº¦
     
    9696#  そのため,カーネル管理外の割込みでのみ指定可能.
    9797$INTNO_CFGINT_VALID = $INTNO_VALID
    98 $INTPRI_CFGINT_VALID = Array(-(1 << $TBITW_IPRI.val)..-2)
    99 
    100 # 
     98$INTPRI_CFGINT_VALID = Array(-(1 << $TBITW_IPRI)..-2)
     99
     100#
    101101#  kernel/kernel.tf のターゲット依存部
    102 # 
    103 
    104 # 
     102#
     103
     104#
    105105#  TSKINICTXBの初期化æƒ
    106106報を生成
    107 # 
     107#
    108108def GenerateTskinictxb(key, params)
    109109   return("{" \
     
    114114end
    115115
    116 # 
     116#
    117117#  標準テンプレートファイルのインクルード
    118 # 
     118#
    119119IncludeTrb("kernel/kernel.trb")
    120120
     
    124124 */
    125125
    126 /* 
     126/*
    127127 *  ベクターテーブル
    128  */ 
     128 */
    129129__attribute__ ((section(".vector")))
    130130const FP _kernel_vector_table[] = {
     
    143143$INTNO_VALID.each { |inhno|
    144144    #if $cfgData[:DEF_INH][inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
    145     inh = $cfgData[:DEF_INH].select { |k,v| 
     145    inh = $cfgData[:DEF_INH].select { |k,v|
    146146        (v[:inhno] == inhno) && (v[:inhatr] & $TA_NONKERNEL)
    147147    }
     
    158158$kernelCfgC.add("const FP _kernel_exc_tbl[] = {")
    159159Array(0..14).each { |excno|
    160     exc = $cfgData[:DEF_EXC].select { |k,v| 
     160    exc = $cfgData[:DEF_EXC].select { |k,v|
    161161        (v[:excno] == excno)
    162162    }
     
    170170}
    171171$INTNO_VALID.each { |inhno|
    172     inh = $cfgData[:DEF_INH].select { |k,v| 
     172    inh = $cfgData[:DEF_INH].select { |k,v|
    173173        (v[:inhno] == inhno)
    174174    }
     
    183183$kernelCfgC.add2("};")
    184184
    185 # 
     185#
    186186#  _kernel_bitpat_cfgintの生成
    187 # 
     187#
    188188
    189189bitpat_cfgint_num = 0
     
    199199Array(0..(bitpat_cfgint_num-1)).each { |num|
    200200    Array((num*32)..((num*32)+31)).each { |inhno|
    201         inh = $cfgData[:DEF_INH].select { |k,v| 
     201        inh = $cfgData[:DEF_INH].select { |k,v|
    202202            (v[:inhno] == inhno)
    203203        }
     
    210210$kernelCfgC.add2("};")
    211211
    212 # 
     212#
    213213#  割込み優å
    214214ˆåº¦ãƒ†ãƒ¼ãƒ–ル(å†
    215215部表現)
    216 # 
     216#
    217217$kernelCfgC.add("const uint32_t _kernel_int_iipm_tbl[] = {")
    218218Array(0..14).each { |excno|
     
    220220}
    221221$INTNO_VALID.each { |intno|
    222     int = $cfgData[:CFG_INT].select { |k,v| 
     222    int = $cfgData[:CFG_INT].select { |k,v|
    223223        (v[:intno] == intno)
    224224    }
Note: See TracChangeset for help on using the changeset viewer.