Subversion Repositories freemyipod

Rev

Rev 14 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 14 Rev 15
Line 24... Line 24...
24
.section .icode.contextswitch, "ax", %progbits
24
.section .icode.contextswitch, "ax", %progbits
25
.align 2
25
.align 2
26
.global context_switch
26
.global context_switch
27
.type context_switch, %function
27
.type context_switch, %function
28
context_switch:
28
context_switch:
-
 
29
	mrs	r1, cpsr
-
 
30
	orr	r0, r1, #0xc0
-
 
31
	msr	cpsr_c, r0
29
	ldr	r0, =current_thread
32
	ldr	r0, =current_thread
30
	ldr	r0, [r0]
33
	ldr	r0, [r0]
31
	stmia	r0!, {r0-r14}
34
	stmia	r0!, {r0-r14}
32
	str	lr, [r0], #4
35
	str	lr, [r0], #4
33
	mrs	r1, cpsr
-
 
34
	str	r1, [r0]
36
	str	r1, [r0]
-
 
37
	msr	cpsr_c, #0xd2
35
	adr	lr, resume_thread
38
	adr	lr, resume_thread
-
 
39
	mov	r0, #-1
36
	b	scheduler_switch
40
	b	scheduler_switch
37
.size context_switch, .-context_switch
41
.size context_switch, .-context_switch
38
 
42
 
39
.global irq_handler
43
.global irq_handler
40
.type irq_handler, %function
44
.type irq_handler, %function
Line 57... Line 61...
57
@ fallthrough
61
@ fallthrough
58
 
62
 
59
.global resume_thread
63
.global resume_thread
60
.type resume_thread, %function
64
.type resume_thread, %function
61
resume_thread:
65
resume_thread:
62
	ldr	r0, =current_thread
66
	ldr	lr, =current_thread
63
	ldr	r0, [r0]
67
	ldr	lr, [lr]
64
	ldr	r1, [r0,#0x40]
-
 
65
	orr	r2, r1, #0xc0
-
 
66
	msr	cpsr_c, r2
68
	mov	r0, lr
67
	ldr	sp, [r0,#0x34]
69
	ldr	r1, [lr,#0x40]
68
	ldr	lr, [r0,#0x38]
70
	ldr	lr, [lr,#0x3c]
69
	msr	cpsr_c, #0xd2
-
 
70
	msr	spsr_all, r1
71
	msr	spsr_all, r1
71
	ldr	lr, [r0,#0x3c]
72
	orr	r1, r1, #0xc0
-
 
73
	msr	cpsr_c, r1
72
	ldmia	r0, {r0-r12}
74
	ldmia	r0, {r0-r14}
-
 
75
	msr	cpsr_c, #0xd2
73
	movs	pc, lr
76
	movs	pc, lr
74
.size irq_handler, .-irq_handler
77
.size irq_handler, .-irq_handler
75
.size resume_thread, .-resume_thread
78
.size resume_thread, .-resume_thread
76
 
79
 
77
.global enter_critical_section
80
.global enter_critical_section
78
.type enter_critical_section, %function
81
.type enter_critical_section, %function
79
enter_critical_section:
82
enter_critical_section:
80
	mrs	r0, cpsr
83
	mrs	r0, cpsr
-
 
84
	orr	r1, r0, #0xc0
81
	msr	cpsr_c, #0xd3
85
	msr	cpsr_c, r1
82
	mov	pc, lr
86
	mov	pc, lr
83
.size enter_critical_section, .-enter_critical_section
87
.size enter_critical_section, .-enter_critical_section
84
 
88
 
85
.global leave_critical_section
89
.global leave_critical_section
86
.type leave_critical_section, %function
90
.type leave_critical_section, %function