File indexing completed on 2025-05-11 08:24:24
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #include <rtems/asm.h>
0037 #include <rtems/score/percpu.h>
0038
0039 .text
0040 .globl _ISR_Handler
0041 .align 2
0042
0043 _ISR_Handler:
0044
0045 lwi r3, r0, _Per_CPU_Information + 16
0046 addik r3, r3, 1
0047 swi r3, r0, _Per_CPU_Information + 16
0048
0049
0050 lwi r4, r0, _Per_CPU_Information
0051 rsubk r3, r4, r1
0052 blei r3, switch_to_interrupt_stack
0053
0054
0055 lwi r4, r0, _Per_CPU_Information + 4
0056 rsubk r3, r4, r1
0057 bgei r3, switch_to_interrupt_stack
0058
0059 bri on_interrupt_stack
0060
0061 switch_to_interrupt_stack:
0062 add r4, r0, r1
0063 lwi r1, r0, _Per_CPU_Information + 4
0064 addik r1, r1, -(CPU_INTERRUPT_FRAME_SIZE)
0065 swi r4, r1, 0
0066
0067 on_interrupt_stack:
0068
0069 lwi r3, r0, _Per_CPU_Information + 8
0070 addik r3, r3, 1
0071 swi r3, r0, _Per_CPU_Information + 8
0072
0073 bralid r15, bsp_interrupt_dispatch
0074 nop
0075
0076
0077 lwi r3, r0, _Per_CPU_Information + 8
0078 addik r3, r3, -1
0079 swi r3, r0, _Per_CPU_Information + 8
0080
0081
0082 bgti r3, after_stack_switch
0083
0084
0085 lwi r1, r1, 0
0086
0087 after_stack_switch:
0088
0089 lwi r3, r0, _Per_CPU_Information + 16
0090 addik r3, r3, -1
0091 swi r3, r0, _Per_CPU_Information + 16
0092
0093
0094 bnei r3, quick_exit
0095
0096
0097 lwi r3, r0, _Per_CPU_Information + 20
0098 beqi r3, quick_exit
0099
0100
0101 bralid r15, _Thread_Dispatch
0102 nop
0103
0104
0105 quick_exit:
0106
0107
0108 lwi r3, r1, MICROBLAZE_INTERRUPT_FRAME_MSR
0109 mts rmsr, r3
0110 lwi r3, r1, MICROBLAZE_INTERRUPT_FRAME_R3
0111 lwi r4, r1, MICROBLAZE_INTERRUPT_FRAME_R4
0112 lwi r5, r1, MICROBLAZE_INTERRUPT_FRAME_R5
0113 lwi r6, r1, MICROBLAZE_INTERRUPT_FRAME_R6
0114 lwi r7, r1, MICROBLAZE_INTERRUPT_FRAME_R7
0115 lwi r8, r1, MICROBLAZE_INTERRUPT_FRAME_R8
0116 lwi r9, r1, MICROBLAZE_INTERRUPT_FRAME_R9
0117 lwi r10, r1, MICROBLAZE_INTERRUPT_FRAME_R10
0118 lwi r11, r1, MICROBLAZE_INTERRUPT_FRAME_R11
0119 lwi r12, r1, MICROBLAZE_INTERRUPT_FRAME_R12
0120 lwi r14, r1, MICROBLAZE_INTERRUPT_FRAME_R14
0121 lwi r15, r1, MICROBLAZE_INTERRUPT_FRAME_R15
0122 lwi r18, r1, MICROBLAZE_INTERRUPT_FRAME_R18
0123
0124
0125 addik r1, r1, CPU_INTERRUPT_FRAME_SIZE
0126
0127 rtid r14, 0
0128 nop