1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- * Copyright (c) 2020, Shenzhen Academy of Aerospace Technology
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2020-10-16 Dystopia the first version
- */
- #define SPARC_PSR_PIL_MASK 0x00000F00
- #define SPARC_PSR_ET_MASK 0x00000020
- /*
- * rt_base_t rt_hw_interrupt_disable();
- */
- .globl rt_hw_interrupt_disable
- rt_hw_interrupt_disable:
- mov %psr, %o0
- or %o0, SPARC_PSR_PIL_MASK, %o1
- mov %o1, %psr
- nop
- nop
- nop
- retl
- nop
- /*
- * void rt_hw_interrupt_enable(rt_base_t level);
- */
- .globl rt_hw_interrupt_enable
- rt_hw_interrupt_enable:
- mov %o0, %psr
- nop
- nop
- nop
- retl
- nop
- /*
- * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);
- * o0 --> from
- * o1 --> to
- */
- .globl rt_hw_context_switch
- rt_hw_context_switch:
- ta 2
- retl
- nop
-
- /*
- * void rt_hw_context_switch_to(rt_uint32 to);
- * o0 --> to
- */
- .globl rt_hw_context_switch_to
- rt_hw_context_switch_to:
- mov %o0, %o1
- ta 3
- retl
- nop
-
- /*
- * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to);
- */
- .globl rt_thread_switch_interrupt_flag
- .globl rt_interrupt_from_thread
- .globl rt_interrupt_to_thread
- .globl rt_hw_context_switch_interrupt
- rt_hw_context_switch_interrupt:
- set rt_thread_switch_interrupt_flag, %o2
- ld [%o2], %o3
- cmp %o3, 1
- be _reswitch
- nop
- mov 1, %o3
- st %o3, [%o2]
- set rt_interrupt_from_thread, %o2
- st %o0, [%o2]
- _reswitch:
- set rt_interrupt_to_thread, %o2
- st %o1, [%o2]
- retl
- nop
|