Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:25

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  * Copyright (c) 2011 embedded brains GmbH & Co. KG
0005  *
0006  * Copyright (c) 2006 Kolja Waschk (rtemsdev/ixo.de)
0007  *
0008  * Derived from no_cpu/cpu_asm.S, copyright (c) 1989-1999,
0009  *   On-Line Applications Research Corporation (OAR).
0010  *
0011  * Redistribution and use in source and binary forms, with or without
0012  * modification, are permitted provided that the following conditions
0013  * are met:
0014  * 1. Redistributions of source code must retain the above copyright
0015  *    notice, this list of conditions and the following disclaimer.
0016  * 2. Redistributions in binary form must reproduce the above copyright
0017  *    notice, this list of conditions and the following disclaimer in the
0018  *    documentation and/or other materials provided with the distribution.
0019  *
0020  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0021  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0022  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0023  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0024  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0025  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0026  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0027  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0028  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0029  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0030  * POSSIBILITY OF SUCH DAMAGE.
0031  */
0032 
0033 #ifdef HAVE_CONFIG_H
0034 #include "config.h"
0035 #endif
0036 
0037 #include <rtems/score/percpu.h>
0038 #include <rtems/score/nios2-utility.h>
0039 
0040     .extern _Per_CPU_Information
0041 
0042     .globl  _CPU_Context_switch
0043     .globl  _CPU_Context_restore
0044 
0045 _CPU_Context_switch:
0046 
0047     ldw r9, %gprel(_Per_CPU_Information + PER_CPU_ISR_DISPATCH_DISABLE)(gp)
0048     rdctl   r8, status
0049     stw r16, NIOS2_CONTEXT_OFFSET_R16(r4)
0050     stw r17, NIOS2_CONTEXT_OFFSET_R17(r4)
0051     stw r18, NIOS2_CONTEXT_OFFSET_R18(r4)
0052     stw r19, NIOS2_CONTEXT_OFFSET_R19(r4)
0053     stw r20, NIOS2_CONTEXT_OFFSET_R20(r4)
0054     stw r21, NIOS2_CONTEXT_OFFSET_R21(r4)
0055     stw r22, NIOS2_CONTEXT_OFFSET_R22(r4)
0056     stw r23, NIOS2_CONTEXT_OFFSET_R23(r4)
0057     stw fp, NIOS2_CONTEXT_OFFSET_FP(r4)
0058     stw r8, NIOS2_CONTEXT_OFFSET_STATUS(r4)
0059     stw sp, NIOS2_CONTEXT_OFFSET_SP(r4)
0060     stw ra, NIOS2_CONTEXT_OFFSET_RA(r4)
0061     stw r9, NIOS2_CONTEXT_OFFSET_ISR_DISPATCH_DISABLE(r4)
0062 
0063 restore:
0064 
0065     ldw r10, NIOS2_CONTEXT_OFFSET_ISR_DISPATCH_DISABLE(r5)
0066     ldw r16, NIOS2_CONTEXT_OFFSET_R16(r5)
0067     ldw r17, NIOS2_CONTEXT_OFFSET_R17(r5)
0068     ldw r18, NIOS2_CONTEXT_OFFSET_R18(r5)
0069     ldw r19, NIOS2_CONTEXT_OFFSET_R19(r5)
0070     ldw r20, NIOS2_CONTEXT_OFFSET_R20(r5)
0071     ldw r21, NIOS2_CONTEXT_OFFSET_R21(r5)
0072     ldw r22, NIOS2_CONTEXT_OFFSET_R22(r5)
0073     ldw r23, NIOS2_CONTEXT_OFFSET_R23(r5)
0074     ldw fp, NIOS2_CONTEXT_OFFSET_FP(r5)
0075     stw r10, %gprel(_Per_CPU_Information + PER_CPU_ISR_DISPATCH_DISABLE)(gp)
0076     ldw r11, NIOS2_CONTEXT_OFFSET_STATUS(r5)
0077     ldw sp, NIOS2_CONTEXT_OFFSET_SP(r5)
0078     ldw ra, NIOS2_CONTEXT_OFFSET_RA(r5)
0079     wrctl   status, r11
0080 
0081     ret
0082 
0083 _CPU_Context_restore:
0084 
0085     mov r5, r4
0086     br  restore