Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
 1/*
 2 * 31-bit switch cpu code
 3 *
 4 * Copyright IBM Corp. 2009
 5 *
 6 */
 7
 8#include <linux/linkage.h>
 9#include <asm/asm-offsets.h>
10#include <asm/ptrace.h>
11
12# smp_switch_to_cpu switches to destination cpu and executes the passed function
13# Parameter: %r2 - function to call
14#	     %r3 - function parameter
15#	     %r4 - stack poiner
16#	     %r5 - current cpu
17#	     %r6 - destination cpu
18
19	.section .text
20ENTRY(smp_switch_to_cpu)
21	stm	%r6,%r15,__SF_GPRS(%r15)
22	lr	%r1,%r15
23	ahi	%r15,-STACK_FRAME_OVERHEAD
24	st	%r1,__SF_BACKCHAIN(%r15)
25	basr	%r13,0
260:	la	%r1,.gprregs_addr-0b(%r13)
27	l	%r1,0(%r1)
28	stm	%r0,%r15,0(%r1)
291:	sigp	%r0,%r6,__SIGP_RESTART	/* start destination CPU */
30	brc	2,1b			/* busy, try again */
312:	sigp	%r0,%r5,__SIGP_STOP	/* stop current CPU */
32	brc	2,2b			/* busy, try again */
333:	j	3b
34
35ENTRY(smp_restart_cpu)
36	basr	%r13,0
370:	la	%r1,.gprregs_addr-0b(%r13)
38	l	%r1,0(%r1)
39	lm	%r0,%r15,0(%r1)
401:	sigp	%r0,%r5,__SIGP_SENSE	/* Wait for calling CPU */
41	brc	10,1b			/* busy, accepted (status 0), running */
42	tmll	%r0,0x40		/* Test if calling CPU is stopped */
43	jz	1b
44	ltr	%r4,%r4			/* New stack ? */
45	jz	1f
46	lr	%r15,%r4
471:	lr	%r14,%r2		/* r14: Function to call */
48	lr	%r2,%r3			/* r2 : Parameter for function*/
49	basr	%r14,%r14		/* Call function */
50
51.gprregs_addr:
52	.long	.gprregs
53
54	.section .data,"aw",@progbits
55.gprregs:
56	.rept	16
57	.long	0
58	.endr