Changeset c922ec6c in rtems


Ignore:
Timestamp:
Dec 11, 2007, 11:03:29 PM (12 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.9, master
Children:
5c5d438
Parents:
1c62f169
Message:

2007-12-11 Joel Sherrill <joel.sherrill@…>

  • thumb_isr.c: Style.
Location:
cpukit/score/cpu/arm/thumb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpukit/score/cpu/arm/thumb/ChangeLog

    r1c62f169 rc922ec6c  
     12007-12-11      Joel Sherrill <joel.sherrill@OARcorp.com>
     2
     3        * thumb_isr.c: Style.
     4
    152007-11-26      Ray Xu <rayx.cn@gmail.com>
    26
  • cpukit/score/cpu/arm/thumb/thumb_isr.c

    r1c62f169 rc922ec6c  
    11/*
    2  *  The thumb mode do not support multi-level ISR, only disable and enable
     2 *  Thumb mode does not support multi-level ISR, only disable and enable.
    33 *
    44 *  The license and distribution terms for this file may be
     
    1717 *  _CPU_ISR_Get_level_Thumb - returns the current interrupt level
    1818 */
    19 uint32_t        _CPU_ISR_Get_level_Thumb(void)       __attribute__ ((naked));
    20 uint32_t    _CPU_ISR_Disable_Thumb(void )        __attribute__ ((naked));
    21 void    _CPU_ISR_Enable_Thumb(int  _level )  __attribute__ ((naked));
    22 void    _CPU_ISR_Flash_Thumb(int _level )    __attribute__ ((naked));
    23 void    _CPU_ISR_Set_level_Thumb(int  new_level )  __attribute__ ((naked));
     19uint32_t _CPU_ISR_Get_level_Thumb(void)       __attribute__ ((naked));
     20uint32_t _CPU_ISR_Disable_Thumb(void )        __attribute__ ((naked));
     21void     _CPU_ISR_Enable_Thumb(int  _level )  __attribute__ ((naked));
     22void     _CPU_ISR_Flash_Thumb(int _level )    __attribute__ ((naked));
     23void     _CPU_ISR_Set_level_Thumb(int  new_level )  __attribute__ ((naked));
    2424
    2525/*
     
    3333 */
    3434
    35 
    3635#define str(x) #x
    3736#define xstr(x) str(x)
     
    4140 * Switch to ARM mode Veneer,ugly but safe
    4241 */
    43 #define TO_ARM_MODE(x)          \
    44         asm volatile (                  \
    45         ".code  16                      \n" \
    46         L(x) "_thumb:           \n" \
    47         ".align 2                       \n" \
    48         "push {lr}                      \n" \
    49         "adr %0, "L(x) "_arm \n" \
    50         "bl " L(x)"             \n" \
    51         "pop    {pc}            \n" \
    52         ".balign 4                      \n" \
    53         L(x) ":                     \n" \
    54         "bx     %0                      \n" \
    55         "nop                            \n" \
    56         ".pool                          \n" \
    57         ".code  32                      \n" \
    58         L(x) "_arm:                     \n" \
     42#define TO_ARM_MODE(x) \
     43    asm volatile ( \
     44        ".code  16           \n" \
     45        L(x) "_thumb:        \n" \
     46        ".align 2            \n" \
     47        "push {lr}           \n" \
     48        "adr %0, "L(x) "_arm \n" \
     49        "bl " L(x)"          \n" \
     50        "pop    {pc}         \n" \
     51        ".balign 4           \n" \
     52        L(x) ":              \n" \
     53        "bx     %0           \n" \
     54        "nop                 \n" \
     55        ".pool               \n" \
     56        ".code  32           \n" \
     57        L(x) "_arm:          \n" \
    5958    : "=&r" (reg))
    6059
     
    6564
    6665uint32_t _CPU_ISR_Disable_Thumb(void )
    67   {
    68     int reg=0;
    69     TO_ARM_MODE(disable);
    70     asm volatile ( \
    71                 ".code  32                              \n" \
    72                 "STMDB sp!, {r1}                \n" \
    73                 "MRS    r0, CPSR                \n" \
    74                 "DISABLE_ARM:                   \n" \
    75                 "ORR  r1, r0, #0xc0     \n"     \
    76                 "MSR  CPSR, r1          \n" \
    77                 "pop  {r1}                              \n" \
    78                 "BX LR                                  \n" \
    79                 ".code  16                              \n"     );
    80  }
     66{
     67  int reg=0;
     68
     69  TO_ARM_MODE(disable);
     70  asm volatile(
     71      ".code  32             \n"
     72      "STMDB sp!, {r1}       \n"
     73      "MRS    r0, CPSR       \n"
     74      "DISABLE_ARM:          \n"
     75      "ORR  r1, r0, #0xc0    \n"
     76      "MSR  CPSR, r1         \n"
     77      "pop  {r1}             \n"
     78      "BX LR                 \n"
     79      ".code  16             \n"
     80  );
     81}
    8182
    8283/*
    83  *  Enable interrupts to the previous level (returned by _CPU_ISR_Disable_Thumb).
     84 *  Enable interrupts to the previous level (returned by
     85 *  _CPU_ISR_Disable_Thumb).
    8486 *  This indicates the end of an RTEMS critical section.  The parameter
    8587 *  _level is not modified. I do not think _level is useful in this
     
    8789
    8890void _CPU_ISR_Enable_Thumb(int  _level )
    89   {
    90         int reg=0;
    91         TO_ARM_MODE(enable);
    92         asm volatile ( \
    93                         ".code  32                      \n"     \
    94                         "ENABLE_ARM:            \n" \
    95                         "MSR    CPSR, %0        \n"     \
    96                         /* Return back to thumb.*/      \
    97                         "BX     R14             \n" \
    98                         ".code  16                      \n" \
    99                         : : "r"(_level));
    100   }
     91{
     92  int reg=0;
     93
     94  TO_ARM_MODE(enable);
     95  asm volatile(
     96      ".code  32              \n"
     97      "ENABLE_ARM:            \n"
     98      "MSR    CPSR, %0        \n"
     99      /* Return back to thumb.*/
     100      "BX     R14             \n"
     101      ".code  16              \n"
     102      : : "r"(_level)
     103  );
     104}
    101105
    102106/*
     
    104108 *  disabling them again.  This is used to divide long RTEMS critical
    105109 *  sections into two or more parts.  The parameter _level is not
    106  * modified.
     110 *  modified.
    107111 */
    108112void _CPU_ISR_Flash_Thumb(int _level )
    109   {
    110     int reg=0;
    111     TO_ARM_MODE(flash);
    112     asm volatile ( \
    113                         ".code  32                      \n" \
    114                         "FLASH_ARM:             \n" \
    115                         "MRS %0, CPSR           \n"     \
    116                         "BIC %0, %0, #0xC0      \n"     \
    117                         /* enable the irq*/             \
    118                         "MSR    CPSR_c, %0              \n"     \
    119                         "ORR    %0, %0, #0xc0   \n" \
    120                         "MSR    CPSR_c, %0              \n" \
    121                         "BX     R14                     \n" \
    122                         ".code  16                              \n" \
    123                         :"=&r"(reg) : "r" (_level));
    124   }
     113{
     114  int reg=0;
     115
     116  TO_ARM_MODE(flash);
     117  asm volatile(
     118      ".code  32              \n"
     119      "FLASH_ARM:             \n"
     120      "MRS %0, CPSR           \n"
     121      "BIC %0, %0, #0xC0      \n"
     122      /* enable the irq*/
     123      "MSR    CPSR_c, %0      \n"
     124      "ORR    %0, %0, #0xc0   \n"
     125      "MSR    CPSR_c, %0      \n"
     126      "BX     R14             \n"
     127      ".code  16              \n"
     128      :"=&r"(reg) : "r" (_level)
     129  );
     130}
    125131
    126132/*
     
    138144 */
    139145
    140 void _CPU_ISR_Set_level_Thumb(int  new_level )
    141   {
    142    int reg = 0; /* to avoid warning */          \
    143    TO_ARM_MODE(SetISR);                         \
    144    asm volatile (\
    145                         ".code  32                      \n" \
    146                         "SET_LEVEL_ARM:         \n" \
    147                         "MRS  %0, CPSR          \n" \
    148                         "BIC  %0, %0, #0xC0 \n" \
    149                         "MSR  CPSR_c, %0        \n" \
    150                         "BX   lr                        \n" \
    151                         ".code  16                      \n" \
    152                         : "=r" (reg)            \
    153                         : "0" (reg));
     146void _CPU_ISR_Set_level_Thumb(int new_level)
     147{
     148  int reg = 0; /* to avoid warning */
     149  TO_ARM_MODE(SetISR);
     150  asm volatile (\
     151      ".code  32          \n" \
     152      "SET_LEVEL_ARM:     \n" \
     153      "MRS  %0, CPSR      \n" \
     154      "BIC  %0, %0, #0xC0 \n" \
     155      "MSR  CPSR_c, %0        \n" \
     156      "BX   lr                        \n" \
     157      ".code  16                      \n" \
     158      : "=r" (reg)            \
     159      : "0" (reg));
    154160 }
    155161
     
    159165    TO_ARM_MODE(GetISR); \
    160166    asm volatile (\
    161                         ".code  32                      \n"     \
    162                         "GET_ISR_ARM:           \n" \
    163                         "MRS  r0, cpsr          \n" \
    164                         "AND  r0, r0, #0xC0 \n" \
    165                         "EOR    r0, r0, #0xC0 \n" \
    166                         "BX LR                          \n" \
    167                         ".code  16                      \n" \
    168                         ".thumb_func            \n"  );
     167                        ".code  32                      \n"     \
     168                        "GET_ISR_ARM:           \n" \
     169                        "MRS  r0, cpsr          \n" \
     170                        "AND  r0, r0, #0xC0 \n" \
     171                        "EOR    r0, r0, #0xC0 \n" \
     172                        "BX LR                          \n" \
     173                        ".code  16                      \n" \
     174                        ".thumb_func            \n"  );
    169175}
    170176
Note: See TracChangeset for help on using the changeset viewer.