diff options
Diffstat (limited to 'arch/ppc64/kernel/misc.S')
-rw-r--r-- | arch/ppc64/kernel/misc.S | 1234 |
1 files changed, 1234 insertions, 0 deletions
diff --git a/arch/ppc64/kernel/misc.S b/arch/ppc64/kernel/misc.S new file mode 100644 index 000000000000..90b41f48d21c --- /dev/null +++ b/arch/ppc64/kernel/misc.S | |||
@@ -0,0 +1,1234 @@ | |||
1 | /* | ||
2 | * arch/ppc/kernel/misc.S | ||
3 | * | ||
4 | * | ||
5 | * | ||
6 | * This file contains miscellaneous low-level functions. | ||
7 | * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) | ||
8 | * | ||
9 | * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) | ||
10 | * and Paul Mackerras. | ||
11 | * Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com) | ||
12 | * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or | ||
15 | * modify it under the terms of the GNU General Public License | ||
16 | * as published by the Free Software Foundation; either version | ||
17 | * 2 of the License, or (at your option) any later version. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include <linux/config.h> | ||
22 | #include <linux/sys.h> | ||
23 | #include <asm/unistd.h> | ||
24 | #include <asm/errno.h> | ||
25 | #include <asm/processor.h> | ||
26 | #include <asm/page.h> | ||
27 | #include <asm/cache.h> | ||
28 | #include <asm/ppc_asm.h> | ||
29 | #include <asm/offsets.h> | ||
30 | #include <asm/cputable.h> | ||
31 | |||
32 | .text | ||
33 | |||
34 | /* | ||
35 | * Returns (address we're running at) - (address we were linked at) | ||
36 | * for use before the text and data are mapped to KERNELBASE. | ||
37 | */ | ||
38 | |||
39 | _GLOBAL(reloc_offset) | ||
40 | mflr r0 | ||
41 | bl 1f | ||
42 | 1: mflr r3 | ||
43 | LOADADDR(r4,1b) | ||
44 | sub r3,r4,r3 | ||
45 | mtlr r0 | ||
46 | blr | ||
47 | |||
48 | _GLOBAL(get_msr) | ||
49 | mfmsr r3 | ||
50 | blr | ||
51 | |||
52 | _GLOBAL(get_dar) | ||
53 | mfdar r3 | ||
54 | blr | ||
55 | |||
56 | _GLOBAL(get_srr0) | ||
57 | mfsrr0 r3 | ||
58 | blr | ||
59 | |||
60 | _GLOBAL(get_srr1) | ||
61 | mfsrr1 r3 | ||
62 | blr | ||
63 | |||
64 | _GLOBAL(get_sp) | ||
65 | mr r3,r1 | ||
66 | blr | ||
67 | |||
68 | #ifdef CONFIG_PPC_ISERIES | ||
69 | /* unsigned long local_save_flags(void) */ | ||
70 | _GLOBAL(local_get_flags) | ||
71 | lbz r3,PACAPROCENABLED(r13) | ||
72 | blr | ||
73 | |||
74 | /* unsigned long local_irq_disable(void) */ | ||
75 | _GLOBAL(local_irq_disable) | ||
76 | lbz r3,PACAPROCENABLED(r13) | ||
77 | li r4,0 | ||
78 | stb r4,PACAPROCENABLED(r13) | ||
79 | blr /* Done */ | ||
80 | |||
81 | /* void local_irq_restore(unsigned long flags) */ | ||
82 | _GLOBAL(local_irq_restore) | ||
83 | lbz r5,PACAPROCENABLED(r13) | ||
84 | /* Check if things are setup the way we want _already_. */ | ||
85 | cmpw 0,r3,r5 | ||
86 | beqlr | ||
87 | /* are we enabling interrupts? */ | ||
88 | cmpdi 0,r3,0 | ||
89 | stb r3,PACAPROCENABLED(r13) | ||
90 | beqlr | ||
91 | /* Check pending interrupts */ | ||
92 | /* A decrementer, IPI or PMC interrupt may have occurred | ||
93 | * while we were in the hypervisor (which enables) */ | ||
94 | ld r4,PACALPPACA+LPPACAANYINT(r13) | ||
95 | cmpdi r4,0 | ||
96 | beqlr | ||
97 | |||
98 | /* | ||
99 | * Handle pending interrupts in interrupt context | ||
100 | */ | ||
101 | li r0,0x5555 | ||
102 | sc | ||
103 | blr | ||
104 | #endif /* CONFIG_PPC_ISERIES */ | ||
105 | |||
106 | #ifdef CONFIG_IRQSTACKS | ||
107 | _GLOBAL(call_do_softirq) | ||
108 | mflr r0 | ||
109 | std r0,16(r1) | ||
110 | stdu r1,THREAD_SIZE-112(r3) | ||
111 | mr r1,r3 | ||
112 | bl .__do_softirq | ||
113 | ld r1,0(r1) | ||
114 | ld r0,16(r1) | ||
115 | mtlr r0 | ||
116 | blr | ||
117 | |||
118 | _GLOBAL(call_handle_IRQ_event) | ||
119 | mflr r0 | ||
120 | std r0,16(r1) | ||
121 | stdu r1,THREAD_SIZE-112(r6) | ||
122 | mr r1,r6 | ||
123 | bl .handle_IRQ_event | ||
124 | ld r1,0(r1) | ||
125 | ld r0,16(r1) | ||
126 | mtlr r0 | ||
127 | blr | ||
128 | #endif /* CONFIG_IRQSTACKS */ | ||
129 | |||
130 | /* | ||
131 | * To be called by C code which needs to do some operations with MMU | ||
132 | * disabled. Note that interrupts have to be disabled by the caller | ||
133 | * prior to calling us. The code called _MUST_ be in the RMO of course | ||
134 | * and part of the linear mapping as we don't attempt to translate the | ||
135 | * stack pointer at all. The function is called with the stack switched | ||
136 | * to this CPU emergency stack | ||
137 | * | ||
138 | * prototype is void *call_with_mmu_off(void *func, void *data); | ||
139 | * | ||
140 | * the called function is expected to be of the form | ||
141 | * | ||
142 | * void *called(void *data); | ||
143 | */ | ||
144 | _GLOBAL(call_with_mmu_off) | ||
145 | mflr r0 /* get link, save it on stackframe */ | ||
146 | std r0,16(r1) | ||
147 | mr r1,r5 /* save old stack ptr */ | ||
148 | ld r1,PACAEMERGSP(r13) /* get emerg. stack */ | ||
149 | subi r1,r1,STACK_FRAME_OVERHEAD | ||
150 | std r0,16(r1) /* save link on emerg. stack */ | ||
151 | std r5,0(r1) /* save old stack ptr in backchain */ | ||
152 | ld r3,0(r3) /* get to real function ptr (assume same TOC) */ | ||
153 | bl 2f /* we need LR to return, continue at label 2 */ | ||
154 | |||
155 | ld r0,16(r1) /* we return here from the call, get LR and */ | ||
156 | ld r1,0(r1) /* .. old stack ptr */ | ||
157 | mtspr SPRN_SRR0,r0 /* and get back to virtual mode with these */ | ||
158 | mfmsr r4 | ||
159 | ori r4,r4,MSR_IR|MSR_DR | ||
160 | mtspr SPRN_SRR1,r4 | ||
161 | rfid | ||
162 | |||
163 | 2: mtspr SPRN_SRR0,r3 /* coming from above, enter real mode */ | ||
164 | mr r3,r4 /* get parameter */ | ||
165 | mfmsr r0 | ||
166 | ori r0,r0,MSR_IR|MSR_DR | ||
167 | xori r0,r0,MSR_IR|MSR_DR | ||
168 | mtspr SPRN_SRR1,r0 | ||
169 | rfid | ||
170 | |||
171 | |||
172 | .section ".toc","aw" | ||
173 | PPC64_CACHES: | ||
174 | .tc ppc64_caches[TC],ppc64_caches | ||
175 | .section ".text" | ||
176 | |||
177 | /* | ||
178 | * Write any modified data cache blocks out to memory | ||
179 | * and invalidate the corresponding instruction cache blocks. | ||
180 | * | ||
181 | * flush_icache_range(unsigned long start, unsigned long stop) | ||
182 | * | ||
183 | * flush all bytes from start through stop-1 inclusive | ||
184 | */ | ||
185 | |||
186 | _GLOBAL(__flush_icache_range) | ||
187 | |||
188 | /* | ||
189 | * Flush the data cache to memory | ||
190 | * | ||
191 | * Different systems have different cache line sizes | ||
192 | * and in some cases i-cache and d-cache line sizes differ from | ||
193 | * each other. | ||
194 | */ | ||
195 | ld r10,PPC64_CACHES@toc(r2) | ||
196 | lwz r7,DCACHEL1LINESIZE(r10)/* Get cache line size */ | ||
197 | addi r5,r7,-1 | ||
198 | andc r6,r3,r5 /* round low to line bdy */ | ||
199 | subf r8,r6,r4 /* compute length */ | ||
200 | add r8,r8,r5 /* ensure we get enough */ | ||
201 | lwz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of cache line size */ | ||
202 | srw. r8,r8,r9 /* compute line count */ | ||
203 | beqlr /* nothing to do? */ | ||
204 | mtctr r8 | ||
205 | 1: dcbst 0,r6 | ||
206 | add r6,r6,r7 | ||
207 | bdnz 1b | ||
208 | sync | ||
209 | |||
210 | /* Now invalidate the instruction cache */ | ||
211 | |||
212 | lwz r7,ICACHEL1LINESIZE(r10) /* Get Icache line size */ | ||
213 | addi r5,r7,-1 | ||
214 | andc r6,r3,r5 /* round low to line bdy */ | ||
215 | subf r8,r6,r4 /* compute length */ | ||
216 | add r8,r8,r5 | ||
217 | lwz r9,ICACHEL1LOGLINESIZE(r10) /* Get log-2 of Icache line size */ | ||
218 | srw. r8,r8,r9 /* compute line count */ | ||
219 | beqlr /* nothing to do? */ | ||
220 | mtctr r8 | ||
221 | 2: icbi 0,r6 | ||
222 | add r6,r6,r7 | ||
223 | bdnz 2b | ||
224 | isync | ||
225 | blr | ||
226 | |||
227 | /* | ||
228 | * Like above, but only do the D-cache. | ||
229 | * | ||
230 | * flush_dcache_range(unsigned long start, unsigned long stop) | ||
231 | * | ||
232 | * flush all bytes from start to stop-1 inclusive | ||
233 | */ | ||
234 | _GLOBAL(flush_dcache_range) | ||
235 | |||
236 | /* | ||
237 | * Flush the data cache to memory | ||
238 | * | ||
239 | * Different systems have different cache line sizes | ||
240 | */ | ||
241 | ld r10,PPC64_CACHES@toc(r2) | ||
242 | lwz r7,DCACHEL1LINESIZE(r10) /* Get dcache line size */ | ||
243 | addi r5,r7,-1 | ||
244 | andc r6,r3,r5 /* round low to line bdy */ | ||
245 | subf r8,r6,r4 /* compute length */ | ||
246 | add r8,r8,r5 /* ensure we get enough */ | ||
247 | lwz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of dcache line size */ | ||
248 | srw. r8,r8,r9 /* compute line count */ | ||
249 | beqlr /* nothing to do? */ | ||
250 | mtctr r8 | ||
251 | 0: dcbst 0,r6 | ||
252 | add r6,r6,r7 | ||
253 | bdnz 0b | ||
254 | sync | ||
255 | blr | ||
256 | |||
257 | /* | ||
258 | * Like above, but works on non-mapped physical addresses. | ||
259 | * Use only for non-LPAR setups ! It also assumes real mode | ||
260 | * is cacheable. Used for flushing out the DART before using | ||
261 | * it as uncacheable memory | ||
262 | * | ||
263 | * flush_dcache_phys_range(unsigned long start, unsigned long stop) | ||
264 | * | ||
265 | * flush all bytes from start to stop-1 inclusive | ||
266 | */ | ||
267 | _GLOBAL(flush_dcache_phys_range) | ||
268 | ld r10,PPC64_CACHES@toc(r2) | ||
269 | lwz r7,DCACHEL1LINESIZE(r10) /* Get dcache line size */ | ||
270 | addi r5,r7,-1 | ||
271 | andc r6,r3,r5 /* round low to line bdy */ | ||
272 | subf r8,r6,r4 /* compute length */ | ||
273 | add r8,r8,r5 /* ensure we get enough */ | ||
274 | lwz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of dcache line size */ | ||
275 | srw. r8,r8,r9 /* compute line count */ | ||
276 | beqlr /* nothing to do? */ | ||
277 | mfmsr r5 /* Disable MMU Data Relocation */ | ||
278 | ori r0,r5,MSR_DR | ||
279 | xori r0,r0,MSR_DR | ||
280 | sync | ||
281 | mtmsr r0 | ||
282 | sync | ||
283 | isync | ||
284 | mtctr r8 | ||
285 | 0: dcbst 0,r6 | ||
286 | add r6,r6,r7 | ||
287 | bdnz 0b | ||
288 | sync | ||
289 | isync | ||
290 | mtmsr r5 /* Re-enable MMU Data Relocation */ | ||
291 | sync | ||
292 | isync | ||
293 | blr | ||
294 | |||
295 | _GLOBAL(flush_inval_dcache_range) | ||
296 | ld r10,PPC64_CACHES@toc(r2) | ||
297 | lwz r7,DCACHEL1LINESIZE(r10) /* Get dcache line size */ | ||
298 | addi r5,r7,-1 | ||
299 | andc r6,r3,r5 /* round low to line bdy */ | ||
300 | subf r8,r6,r4 /* compute length */ | ||
301 | add r8,r8,r5 /* ensure we get enough */ | ||
302 | lwz r9,DCACHEL1LOGLINESIZE(r10)/* Get log-2 of dcache line size */ | ||
303 | srw. r8,r8,r9 /* compute line count */ | ||
304 | beqlr /* nothing to do? */ | ||
305 | sync | ||
306 | isync | ||
307 | mtctr r8 | ||
308 | 0: dcbf 0,r6 | ||
309 | add r6,r6,r7 | ||
310 | bdnz 0b | ||
311 | sync | ||
312 | isync | ||
313 | blr | ||
314 | |||
315 | |||
316 | /* | ||
317 | * Flush a particular page from the data cache to RAM. | ||
318 | * Note: this is necessary because the instruction cache does *not* | ||
319 | * snoop from the data cache. | ||
320 | * | ||
321 | * void __flush_dcache_icache(void *page) | ||
322 | */ | ||
323 | _GLOBAL(__flush_dcache_icache) | ||
324 | /* | ||
325 | * Flush the data cache to memory | ||
326 | * | ||
327 | * Different systems have different cache line sizes | ||
328 | */ | ||
329 | |||
330 | /* Flush the dcache */ | ||
331 | ld r7,PPC64_CACHES@toc(r2) | ||
332 | clrrdi r3,r3,12 /* Page align */ | ||
333 | lwz r4,DCACHEL1LINESPERPAGE(r7) /* Get # dcache lines per page */ | ||
334 | lwz r5,DCACHEL1LINESIZE(r7) /* Get dcache line size */ | ||
335 | mr r6,r3 | ||
336 | mtctr r4 | ||
337 | 0: dcbst 0,r6 | ||
338 | add r6,r6,r5 | ||
339 | bdnz 0b | ||
340 | sync | ||
341 | |||
342 | /* Now invalidate the icache */ | ||
343 | |||
344 | lwz r4,ICACHEL1LINESPERPAGE(r7) /* Get # icache lines per page */ | ||
345 | lwz r5,ICACHEL1LINESIZE(r7) /* Get icache line size */ | ||
346 | mtctr r4 | ||
347 | 1: icbi 0,r3 | ||
348 | add r3,r3,r5 | ||
349 | bdnz 1b | ||
350 | isync | ||
351 | blr | ||
352 | |||
353 | /* | ||
354 | * I/O string operations | ||
355 | * | ||
356 | * insb(port, buf, len) | ||
357 | * outsb(port, buf, len) | ||
358 | * insw(port, buf, len) | ||
359 | * outsw(port, buf, len) | ||
360 | * insl(port, buf, len) | ||
361 | * outsl(port, buf, len) | ||
362 | * insw_ns(port, buf, len) | ||
363 | * outsw_ns(port, buf, len) | ||
364 | * insl_ns(port, buf, len) | ||
365 | * outsl_ns(port, buf, len) | ||
366 | * | ||
367 | * The *_ns versions don't do byte-swapping. | ||
368 | */ | ||
369 | _GLOBAL(_insb) | ||
370 | cmpwi 0,r5,0 | ||
371 | mtctr r5 | ||
372 | subi r4,r4,1 | ||
373 | blelr- | ||
374 | 00: lbz r5,0(r3) | ||
375 | eieio | ||
376 | stbu r5,1(r4) | ||
377 | bdnz 00b | ||
378 | twi 0,r5,0 | ||
379 | isync | ||
380 | blr | ||
381 | |||
382 | _GLOBAL(_outsb) | ||
383 | cmpwi 0,r5,0 | ||
384 | mtctr r5 | ||
385 | subi r4,r4,1 | ||
386 | blelr- | ||
387 | 00: lbzu r5,1(r4) | ||
388 | stb r5,0(r3) | ||
389 | bdnz 00b | ||
390 | sync | ||
391 | blr | ||
392 | |||
393 | _GLOBAL(_insw) | ||
394 | cmpwi 0,r5,0 | ||
395 | mtctr r5 | ||
396 | subi r4,r4,2 | ||
397 | blelr- | ||
398 | 00: lhbrx r5,0,r3 | ||
399 | eieio | ||
400 | sthu r5,2(r4) | ||
401 | bdnz 00b | ||
402 | twi 0,r5,0 | ||
403 | isync | ||
404 | blr | ||
405 | |||
406 | _GLOBAL(_outsw) | ||
407 | cmpwi 0,r5,0 | ||
408 | mtctr r5 | ||
409 | subi r4,r4,2 | ||
410 | blelr- | ||
411 | 00: lhzu r5,2(r4) | ||
412 | sthbrx r5,0,r3 | ||
413 | bdnz 00b | ||
414 | sync | ||
415 | blr | ||
416 | |||
417 | _GLOBAL(_insl) | ||
418 | cmpwi 0,r5,0 | ||
419 | mtctr r5 | ||
420 | subi r4,r4,4 | ||
421 | blelr- | ||
422 | 00: lwbrx r5,0,r3 | ||
423 | eieio | ||
424 | stwu r5,4(r4) | ||
425 | bdnz 00b | ||
426 | twi 0,r5,0 | ||
427 | isync | ||
428 | blr | ||
429 | |||
430 | _GLOBAL(_outsl) | ||
431 | cmpwi 0,r5,0 | ||
432 | mtctr r5 | ||
433 | subi r4,r4,4 | ||
434 | blelr- | ||
435 | 00: lwzu r5,4(r4) | ||
436 | stwbrx r5,0,r3 | ||
437 | bdnz 00b | ||
438 | sync | ||
439 | blr | ||
440 | |||
441 | /* _GLOBAL(ide_insw) now in drivers/ide/ide-iops.c */ | ||
442 | _GLOBAL(_insw_ns) | ||
443 | cmpwi 0,r5,0 | ||
444 | mtctr r5 | ||
445 | subi r4,r4,2 | ||
446 | blelr- | ||
447 | 00: lhz r5,0(r3) | ||
448 | eieio | ||
449 | sthu r5,2(r4) | ||
450 | bdnz 00b | ||
451 | twi 0,r5,0 | ||
452 | isync | ||
453 | blr | ||
454 | |||
455 | /* _GLOBAL(ide_outsw) now in drivers/ide/ide-iops.c */ | ||
456 | _GLOBAL(_outsw_ns) | ||
457 | cmpwi 0,r5,0 | ||
458 | mtctr r5 | ||
459 | subi r4,r4,2 | ||
460 | blelr- | ||
461 | 00: lhzu r5,2(r4) | ||
462 | sth r5,0(r3) | ||
463 | bdnz 00b | ||
464 | sync | ||
465 | blr | ||
466 | |||
467 | _GLOBAL(_insl_ns) | ||
468 | cmpwi 0,r5,0 | ||
469 | mtctr r5 | ||
470 | subi r4,r4,4 | ||
471 | blelr- | ||
472 | 00: lwz r5,0(r3) | ||
473 | eieio | ||
474 | stwu r5,4(r4) | ||
475 | bdnz 00b | ||
476 | twi 0,r5,0 | ||
477 | isync | ||
478 | blr | ||
479 | |||
480 | _GLOBAL(_outsl_ns) | ||
481 | cmpwi 0,r5,0 | ||
482 | mtctr r5 | ||
483 | subi r4,r4,4 | ||
484 | blelr- | ||
485 | 00: lwzu r5,4(r4) | ||
486 | stw r5,0(r3) | ||
487 | bdnz 00b | ||
488 | sync | ||
489 | blr | ||
490 | |||
491 | |||
492 | _GLOBAL(cvt_fd) | ||
493 | lfd 0,0(r5) /* load up fpscr value */ | ||
494 | mtfsf 0xff,0 | ||
495 | lfs 0,0(r3) | ||
496 | stfd 0,0(r4) | ||
497 | mffs 0 /* save new fpscr value */ | ||
498 | stfd 0,0(r5) | ||
499 | blr | ||
500 | |||
501 | _GLOBAL(cvt_df) | ||
502 | lfd 0,0(r5) /* load up fpscr value */ | ||
503 | mtfsf 0xff,0 | ||
504 | lfd 0,0(r3) | ||
505 | stfs 0,0(r4) | ||
506 | mffs 0 /* save new fpscr value */ | ||
507 | stfd 0,0(r5) | ||
508 | blr | ||
509 | |||
510 | /* | ||
511 | * identify_cpu and calls setup_cpu | ||
512 | * In: r3 = base of the cpu_specs array | ||
513 | * r4 = address of cur_cpu_spec | ||
514 | * r5 = relocation offset | ||
515 | */ | ||
516 | _GLOBAL(identify_cpu) | ||
517 | mfpvr r7 | ||
518 | 1: | ||
519 | lwz r8,CPU_SPEC_PVR_MASK(r3) | ||
520 | and r8,r8,r7 | ||
521 | lwz r9,CPU_SPEC_PVR_VALUE(r3) | ||
522 | cmplw 0,r9,r8 | ||
523 | beq 1f | ||
524 | addi r3,r3,CPU_SPEC_ENTRY_SIZE | ||
525 | b 1b | ||
526 | 1: | ||
527 | add r0,r3,r5 | ||
528 | std r0,0(r4) | ||
529 | ld r4,CPU_SPEC_SETUP(r3) | ||
530 | sub r4,r4,r5 | ||
531 | ld r4,0(r4) | ||
532 | sub r4,r4,r5 | ||
533 | mtctr r4 | ||
534 | /* Calling convention for cpu setup is r3=offset, r4=cur_cpu_spec */ | ||
535 | mr r4,r3 | ||
536 | mr r3,r5 | ||
537 | bctr | ||
538 | |||
539 | /* | ||
540 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
541 | * and writes nop's over sections of code that don't apply for this cpu. | ||
542 | * r3 = data offset (not changed) | ||
543 | */ | ||
544 | _GLOBAL(do_cpu_ftr_fixups) | ||
545 | /* Get CPU 0 features */ | ||
546 | LOADADDR(r6,cur_cpu_spec) | ||
547 | sub r6,r6,r3 | ||
548 | ld r4,0(r6) | ||
549 | sub r4,r4,r3 | ||
550 | ld r4,CPU_SPEC_FEATURES(r4) | ||
551 | /* Get the fixup table */ | ||
552 | LOADADDR(r6,__start___ftr_fixup) | ||
553 | sub r6,r6,r3 | ||
554 | LOADADDR(r7,__stop___ftr_fixup) | ||
555 | sub r7,r7,r3 | ||
556 | /* Do the fixup */ | ||
557 | 1: cmpld r6,r7 | ||
558 | bgelr | ||
559 | addi r6,r6,32 | ||
560 | ld r8,-32(r6) /* mask */ | ||
561 | and r8,r8,r4 | ||
562 | ld r9,-24(r6) /* value */ | ||
563 | cmpld r8,r9 | ||
564 | beq 1b | ||
565 | ld r8,-16(r6) /* section begin */ | ||
566 | ld r9,-8(r6) /* section end */ | ||
567 | subf. r9,r8,r9 | ||
568 | beq 1b | ||
569 | /* write nops over the section of code */ | ||
570 | /* todo: if large section, add a branch at the start of it */ | ||
571 | srwi r9,r9,2 | ||
572 | mtctr r9 | ||
573 | sub r8,r8,r3 | ||
574 | lis r0,0x60000000@h /* nop */ | ||
575 | 3: stw r0,0(r8) | ||
576 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
577 | beq 2f | ||
578 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
579 | sync | ||
580 | icbi 0,r8 | ||
581 | 2: addi r8,r8,4 | ||
582 | bdnz 3b | ||
583 | sync /* additional sync needed on g4 */ | ||
584 | isync | ||
585 | b 1b | ||
586 | |||
587 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) | ||
588 | /* | ||
589 | * Do an IO access in real mode | ||
590 | */ | ||
591 | _GLOBAL(real_readb) | ||
592 | mfmsr r7 | ||
593 | ori r0,r7,MSR_DR | ||
594 | xori r0,r0,MSR_DR | ||
595 | sync | ||
596 | mtmsrd r0 | ||
597 | sync | ||
598 | isync | ||
599 | mfspr r6,SPRN_HID4 | ||
600 | rldicl r5,r6,32,0 | ||
601 | ori r5,r5,0x100 | ||
602 | rldicl r5,r5,32,0 | ||
603 | sync | ||
604 | mtspr SPRN_HID4,r5 | ||
605 | isync | ||
606 | slbia | ||
607 | isync | ||
608 | lbz r3,0(r3) | ||
609 | sync | ||
610 | mtspr SPRN_HID4,r6 | ||
611 | isync | ||
612 | slbia | ||
613 | isync | ||
614 | mtmsrd r7 | ||
615 | sync | ||
616 | isync | ||
617 | blr | ||
618 | |||
619 | /* | ||
620 | * Do an IO access in real mode | ||
621 | */ | ||
622 | _GLOBAL(real_writeb) | ||
623 | mfmsr r7 | ||
624 | ori r0,r7,MSR_DR | ||
625 | xori r0,r0,MSR_DR | ||
626 | sync | ||
627 | mtmsrd r0 | ||
628 | sync | ||
629 | isync | ||
630 | mfspr r6,SPRN_HID4 | ||
631 | rldicl r5,r6,32,0 | ||
632 | ori r5,r5,0x100 | ||
633 | rldicl r5,r5,32,0 | ||
634 | sync | ||
635 | mtspr SPRN_HID4,r5 | ||
636 | isync | ||
637 | slbia | ||
638 | isync | ||
639 | stb r3,0(r4) | ||
640 | sync | ||
641 | mtspr SPRN_HID4,r6 | ||
642 | isync | ||
643 | slbia | ||
644 | isync | ||
645 | mtmsrd r7 | ||
646 | sync | ||
647 | isync | ||
648 | blr | ||
649 | #endif /* defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) */ | ||
650 | |||
651 | /* | ||
652 | * Create a kernel thread | ||
653 | * kernel_thread(fn, arg, flags) | ||
654 | */ | ||
655 | _GLOBAL(kernel_thread) | ||
656 | std r29,-24(r1) | ||
657 | std r30,-16(r1) | ||
658 | stdu r1,-STACK_FRAME_OVERHEAD(r1) | ||
659 | mr r29,r3 | ||
660 | mr r30,r4 | ||
661 | ori r3,r5,CLONE_VM /* flags */ | ||
662 | oris r3,r3,(CLONE_UNTRACED>>16) | ||
663 | li r4,0 /* new sp (unused) */ | ||
664 | li r0,__NR_clone | ||
665 | sc | ||
666 | cmpdi 0,r3,0 /* parent or child? */ | ||
667 | bne 1f /* return if parent */ | ||
668 | li r0,0 | ||
669 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | ||
670 | ld r2,8(r29) | ||
671 | ld r29,0(r29) | ||
672 | mtlr r29 /* fn addr in lr */ | ||
673 | mr r3,r30 /* load arg and call fn */ | ||
674 | blrl | ||
675 | li r0,__NR_exit /* exit after child exits */ | ||
676 | li r3,0 | ||
677 | sc | ||
678 | 1: addi r1,r1,STACK_FRAME_OVERHEAD | ||
679 | ld r29,-24(r1) | ||
680 | ld r30,-16(r1) | ||
681 | blr | ||
682 | |||
683 | /* Why isn't this a) automatic, b) written in 'C'? */ | ||
684 | .balign 8 | ||
685 | _GLOBAL(sys_call_table32) | ||
686 | .llong .sys_restart_syscall /* 0 */ | ||
687 | .llong .sys_exit | ||
688 | .llong .ppc_fork | ||
689 | .llong .sys_read | ||
690 | .llong .sys_write | ||
691 | .llong .sys32_open /* 5 */ | ||
692 | .llong .sys_close | ||
693 | .llong .sys32_waitpid | ||
694 | .llong .sys32_creat | ||
695 | .llong .sys_link | ||
696 | .llong .sys_unlink /* 10 */ | ||
697 | .llong .sys32_execve | ||
698 | .llong .sys_chdir | ||
699 | .llong .compat_sys_time | ||
700 | .llong .sys_mknod | ||
701 | .llong .sys_chmod /* 15 */ | ||
702 | .llong .sys_lchown | ||
703 | .llong .sys_ni_syscall /* old break syscall */ | ||
704 | .llong .sys_ni_syscall /* old stat syscall */ | ||
705 | .llong .ppc32_lseek | ||
706 | .llong .sys_getpid /* 20 */ | ||
707 | .llong .compat_sys_mount | ||
708 | .llong .sys_oldumount | ||
709 | .llong .sys_setuid | ||
710 | .llong .sys_getuid | ||
711 | .llong .compat_sys_stime /* 25 */ | ||
712 | .llong .sys32_ptrace | ||
713 | .llong .sys_alarm | ||
714 | .llong .sys_ni_syscall /* old fstat syscall */ | ||
715 | .llong .sys32_pause | ||
716 | .llong .compat_sys_utime /* 30 */ | ||
717 | .llong .sys_ni_syscall /* old stty syscall */ | ||
718 | .llong .sys_ni_syscall /* old gtty syscall */ | ||
719 | .llong .sys32_access | ||
720 | .llong .sys32_nice | ||
721 | .llong .sys_ni_syscall /* 35 - old ftime syscall */ | ||
722 | .llong .sys_sync | ||
723 | .llong .sys32_kill | ||
724 | .llong .sys_rename | ||
725 | .llong .sys32_mkdir | ||
726 | .llong .sys_rmdir /* 40 */ | ||
727 | .llong .sys_dup | ||
728 | .llong .sys_pipe | ||
729 | .llong .compat_sys_times | ||
730 | .llong .sys_ni_syscall /* old prof syscall */ | ||
731 | .llong .sys_brk /* 45 */ | ||
732 | .llong .sys_setgid | ||
733 | .llong .sys_getgid | ||
734 | .llong .sys_signal | ||
735 | .llong .sys_geteuid | ||
736 | .llong .sys_getegid /* 50 */ | ||
737 | .llong .sys_acct | ||
738 | .llong .sys_umount | ||
739 | .llong .sys_ni_syscall /* old lock syscall */ | ||
740 | .llong .compat_sys_ioctl | ||
741 | .llong .compat_sys_fcntl /* 55 */ | ||
742 | .llong .sys_ni_syscall /* old mpx syscall */ | ||
743 | .llong .sys32_setpgid | ||
744 | .llong .sys_ni_syscall /* old ulimit syscall */ | ||
745 | .llong .sys32_olduname | ||
746 | .llong .sys32_umask /* 60 */ | ||
747 | .llong .sys_chroot | ||
748 | .llong .sys_ustat | ||
749 | .llong .sys_dup2 | ||
750 | .llong .sys_getppid | ||
751 | .llong .sys_getpgrp /* 65 */ | ||
752 | .llong .sys_setsid | ||
753 | .llong .sys32_sigaction | ||
754 | .llong .sys_sgetmask | ||
755 | .llong .sys32_ssetmask | ||
756 | .llong .sys_setreuid /* 70 */ | ||
757 | .llong .sys_setregid | ||
758 | .llong .ppc32_sigsuspend | ||
759 | .llong .compat_sys_sigpending | ||
760 | .llong .sys32_sethostname | ||
761 | .llong .compat_sys_setrlimit /* 75 */ | ||
762 | .llong .compat_sys_old_getrlimit | ||
763 | .llong .compat_sys_getrusage | ||
764 | .llong .sys32_gettimeofday | ||
765 | .llong .sys32_settimeofday | ||
766 | .llong .sys32_getgroups /* 80 */ | ||
767 | .llong .sys32_setgroups | ||
768 | .llong .sys_ni_syscall /* old select syscall */ | ||
769 | .llong .sys_symlink | ||
770 | .llong .sys_ni_syscall /* old lstat syscall */ | ||
771 | .llong .sys32_readlink /* 85 */ | ||
772 | .llong .sys_uselib | ||
773 | .llong .sys_swapon | ||
774 | .llong .sys_reboot | ||
775 | .llong .old32_readdir | ||
776 | .llong .sys_mmap /* 90 */ | ||
777 | .llong .sys_munmap | ||
778 | .llong .sys_truncate | ||
779 | .llong .sys_ftruncate | ||
780 | .llong .sys_fchmod | ||
781 | .llong .sys_fchown /* 95 */ | ||
782 | .llong .sys32_getpriority | ||
783 | .llong .sys32_setpriority | ||
784 | .llong .sys_ni_syscall /* old profil syscall */ | ||
785 | .llong .compat_sys_statfs | ||
786 | .llong .compat_sys_fstatfs /* 100 */ | ||
787 | .llong .sys_ni_syscall /* old ioperm syscall */ | ||
788 | .llong .compat_sys_socketcall | ||
789 | .llong .sys32_syslog | ||
790 | .llong .compat_sys_setitimer | ||
791 | .llong .compat_sys_getitimer /* 105 */ | ||
792 | .llong .compat_sys_newstat | ||
793 | .llong .compat_sys_newlstat | ||
794 | .llong .compat_sys_newfstat | ||
795 | .llong .sys_uname | ||
796 | .llong .sys_ni_syscall /* 110 old iopl syscall */ | ||
797 | .llong .sys_vhangup | ||
798 | .llong .sys_ni_syscall /* old idle syscall */ | ||
799 | .llong .sys_ni_syscall /* old vm86 syscall */ | ||
800 | .llong .compat_sys_wait4 | ||
801 | .llong .sys_swapoff /* 115 */ | ||
802 | .llong .sys32_sysinfo | ||
803 | .llong .sys32_ipc | ||
804 | .llong .sys_fsync | ||
805 | .llong .ppc32_sigreturn | ||
806 | .llong .ppc_clone /* 120 */ | ||
807 | .llong .sys32_setdomainname | ||
808 | .llong .ppc64_newuname | ||
809 | .llong .sys_ni_syscall /* old modify_ldt syscall */ | ||
810 | .llong .sys32_adjtimex | ||
811 | .llong .sys_mprotect /* 125 */ | ||
812 | .llong .compat_sys_sigprocmask | ||
813 | .llong .sys_ni_syscall /* old create_module syscall */ | ||
814 | .llong .sys_init_module | ||
815 | .llong .sys_delete_module | ||
816 | .llong .sys_ni_syscall /* 130 old get_kernel_syms syscall */ | ||
817 | .llong .sys_quotactl | ||
818 | .llong .sys32_getpgid | ||
819 | .llong .sys_fchdir | ||
820 | .llong .sys_bdflush | ||
821 | .llong .sys32_sysfs /* 135 */ | ||
822 | .llong .ppc64_personality | ||
823 | .llong .sys_ni_syscall /* for afs_syscall */ | ||
824 | .llong .sys_setfsuid | ||
825 | .llong .sys_setfsgid | ||
826 | .llong .sys_llseek /* 140 */ | ||
827 | .llong .sys32_getdents | ||
828 | .llong .ppc32_select | ||
829 | .llong .sys_flock | ||
830 | .llong .sys_msync | ||
831 | .llong .compat_sys_readv /* 145 */ | ||
832 | .llong .compat_sys_writev | ||
833 | .llong .sys32_getsid | ||
834 | .llong .sys_fdatasync | ||
835 | .llong .sys32_sysctl | ||
836 | .llong .sys_mlock /* 150 */ | ||
837 | .llong .sys_munlock | ||
838 | .llong .sys_mlockall | ||
839 | .llong .sys_munlockall | ||
840 | .llong .sys32_sched_setparam | ||
841 | .llong .sys32_sched_getparam /* 155 */ | ||
842 | .llong .sys32_sched_setscheduler | ||
843 | .llong .sys32_sched_getscheduler | ||
844 | .llong .sys_sched_yield | ||
845 | .llong .sys32_sched_get_priority_max | ||
846 | .llong .sys32_sched_get_priority_min /* 160 */ | ||
847 | .llong .sys32_sched_rr_get_interval | ||
848 | .llong .compat_sys_nanosleep | ||
849 | .llong .sys_mremap | ||
850 | .llong .sys_setresuid | ||
851 | .llong .sys_getresuid /* 165 */ | ||
852 | .llong .sys_ni_syscall /* old query_module syscall */ | ||
853 | .llong .sys_poll | ||
854 | .llong .compat_sys_nfsservctl | ||
855 | .llong .sys_setresgid | ||
856 | .llong .sys_getresgid /* 170 */ | ||
857 | .llong .sys32_prctl | ||
858 | .llong .ppc32_rt_sigreturn | ||
859 | .llong .sys32_rt_sigaction | ||
860 | .llong .sys32_rt_sigprocmask | ||
861 | .llong .sys32_rt_sigpending /* 175 */ | ||
862 | .llong .compat_sys_rt_sigtimedwait | ||
863 | .llong .sys32_rt_sigqueueinfo | ||
864 | .llong .ppc32_rt_sigsuspend | ||
865 | .llong .sys32_pread64 | ||
866 | .llong .sys32_pwrite64 /* 180 */ | ||
867 | .llong .sys_chown | ||
868 | .llong .sys_getcwd | ||
869 | .llong .sys_capget | ||
870 | .llong .sys_capset | ||
871 | .llong .sys32_sigaltstack /* 185 */ | ||
872 | .llong .sys32_sendfile | ||
873 | .llong .sys_ni_syscall /* reserved for streams1 */ | ||
874 | .llong .sys_ni_syscall /* reserved for streams2 */ | ||
875 | .llong .ppc_vfork | ||
876 | .llong .compat_sys_getrlimit /* 190 */ | ||
877 | .llong .sys32_readahead | ||
878 | .llong .sys32_mmap2 | ||
879 | .llong .sys32_truncate64 | ||
880 | .llong .sys32_ftruncate64 | ||
881 | .llong .sys_stat64 /* 195 */ | ||
882 | .llong .sys_lstat64 | ||
883 | .llong .sys_fstat64 | ||
884 | .llong .sys32_pciconfig_read | ||
885 | .llong .sys32_pciconfig_write | ||
886 | .llong .sys32_pciconfig_iobase /* 200 - pciconfig_iobase */ | ||
887 | .llong .sys_ni_syscall /* reserved for MacOnLinux */ | ||
888 | .llong .sys_getdents64 | ||
889 | .llong .sys_pivot_root | ||
890 | .llong .compat_sys_fcntl64 | ||
891 | .llong .sys_madvise /* 205 */ | ||
892 | .llong .sys_mincore | ||
893 | .llong .sys_gettid | ||
894 | .llong .sys_tkill | ||
895 | .llong .sys_setxattr | ||
896 | .llong .sys_lsetxattr /* 210 */ | ||
897 | .llong .sys_fsetxattr | ||
898 | .llong .sys_getxattr | ||
899 | .llong .sys_lgetxattr | ||
900 | .llong .sys_fgetxattr | ||
901 | .llong .sys_listxattr /* 215 */ | ||
902 | .llong .sys_llistxattr | ||
903 | .llong .sys_flistxattr | ||
904 | .llong .sys_removexattr | ||
905 | .llong .sys_lremovexattr | ||
906 | .llong .sys_fremovexattr /* 220 */ | ||
907 | .llong .compat_sys_futex | ||
908 | .llong .compat_sys_sched_setaffinity | ||
909 | .llong .compat_sys_sched_getaffinity | ||
910 | .llong .sys_ni_syscall | ||
911 | .llong .sys_ni_syscall /* 225 - reserved for tux */ | ||
912 | .llong .sys32_sendfile64 | ||
913 | .llong .compat_sys_io_setup | ||
914 | .llong .sys_io_destroy | ||
915 | .llong .compat_sys_io_getevents | ||
916 | .llong .compat_sys_io_submit | ||
917 | .llong .sys_io_cancel | ||
918 | .llong .sys_set_tid_address | ||
919 | .llong .ppc32_fadvise64 | ||
920 | .llong .sys_exit_group | ||
921 | .llong .ppc32_lookup_dcookie /* 235 */ | ||
922 | .llong .sys_epoll_create | ||
923 | .llong .sys_epoll_ctl | ||
924 | .llong .sys_epoll_wait | ||
925 | .llong .sys_remap_file_pages | ||
926 | .llong .ppc32_timer_create /* 240 */ | ||
927 | .llong .compat_sys_timer_settime | ||
928 | .llong .compat_sys_timer_gettime | ||
929 | .llong .sys_timer_getoverrun | ||
930 | .llong .sys_timer_delete | ||
931 | .llong .compat_sys_clock_settime /* 245 */ | ||
932 | .llong .compat_sys_clock_gettime | ||
933 | .llong .compat_sys_clock_getres | ||
934 | .llong .compat_sys_clock_nanosleep | ||
935 | .llong .ppc32_swapcontext | ||
936 | .llong .sys32_tgkill /* 250 */ | ||
937 | .llong .sys32_utimes | ||
938 | .llong .compat_sys_statfs64 | ||
939 | .llong .compat_sys_fstatfs64 | ||
940 | .llong .ppc32_fadvise64_64 /* 32bit only fadvise64_64 */ | ||
941 | .llong .ppc_rtas /* 255 */ | ||
942 | .llong .sys_ni_syscall /* 256 reserved for sys_debug_setcontext */ | ||
943 | .llong .sys_ni_syscall /* 257 reserved for vserver */ | ||
944 | .llong .sys_ni_syscall /* 258 reserved for new sys_remap_file_pages */ | ||
945 | .llong .compat_sys_mbind | ||
946 | .llong .compat_sys_get_mempolicy /* 260 */ | ||
947 | .llong .compat_sys_set_mempolicy | ||
948 | .llong .compat_sys_mq_open | ||
949 | .llong .sys_mq_unlink | ||
950 | .llong .compat_sys_mq_timedsend | ||
951 | .llong .compat_sys_mq_timedreceive /* 265 */ | ||
952 | .llong .compat_sys_mq_notify | ||
953 | .llong .compat_sys_mq_getsetattr | ||
954 | .llong .sys_ni_syscall /* 268 reserved for sys_kexec_load */ | ||
955 | .llong .sys32_add_key | ||
956 | .llong .sys32_request_key | ||
957 | .llong .compat_sys_keyctl | ||
958 | .llong .compat_sys_waitid | ||
959 | |||
960 | .balign 8 | ||
961 | _GLOBAL(sys_call_table) | ||
962 | .llong .sys_restart_syscall /* 0 */ | ||
963 | .llong .sys_exit | ||
964 | .llong .ppc_fork | ||
965 | .llong .sys_read | ||
966 | .llong .sys_write | ||
967 | .llong .sys_open /* 5 */ | ||
968 | .llong .sys_close | ||
969 | .llong .sys_waitpid | ||
970 | .llong .sys_creat | ||
971 | .llong .sys_link | ||
972 | .llong .sys_unlink /* 10 */ | ||
973 | .llong .sys_execve | ||
974 | .llong .sys_chdir | ||
975 | .llong .sys64_time | ||
976 | .llong .sys_mknod | ||
977 | .llong .sys_chmod /* 15 */ | ||
978 | .llong .sys_lchown | ||
979 | .llong .sys_ni_syscall /* old break syscall */ | ||
980 | .llong .sys_ni_syscall /* old stat syscall */ | ||
981 | .llong .sys_lseek | ||
982 | .llong .sys_getpid /* 20 */ | ||
983 | .llong .sys_mount | ||
984 | .llong .sys_ni_syscall /* old umount syscall */ | ||
985 | .llong .sys_setuid | ||
986 | .llong .sys_getuid | ||
987 | .llong .sys_stime /* 25 */ | ||
988 | .llong .sys_ptrace | ||
989 | .llong .sys_alarm | ||
990 | .llong .sys_ni_syscall /* old fstat syscall */ | ||
991 | .llong .sys_pause | ||
992 | .llong .sys_utime /* 30 */ | ||
993 | .llong .sys_ni_syscall /* old stty syscall */ | ||
994 | .llong .sys_ni_syscall /* old gtty syscall */ | ||
995 | .llong .sys_access | ||
996 | .llong .sys_nice | ||
997 | .llong .sys_ni_syscall /* 35 - old ftime syscall */ | ||
998 | .llong .sys_sync | ||
999 | .llong .sys_kill | ||
1000 | .llong .sys_rename | ||
1001 | .llong .sys_mkdir | ||
1002 | .llong .sys_rmdir /* 40 */ | ||
1003 | .llong .sys_dup | ||
1004 | .llong .sys_pipe | ||
1005 | .llong .sys_times | ||
1006 | .llong .sys_ni_syscall /* old prof syscall */ | ||
1007 | .llong .sys_brk /* 45 */ | ||
1008 | .llong .sys_setgid | ||
1009 | .llong .sys_getgid | ||
1010 | .llong .sys_signal | ||
1011 | .llong .sys_geteuid | ||
1012 | .llong .sys_getegid /* 50 */ | ||
1013 | .llong .sys_acct | ||
1014 | .llong .sys_umount | ||
1015 | .llong .sys_ni_syscall /* old lock syscall */ | ||
1016 | .llong .sys_ioctl | ||
1017 | .llong .sys_fcntl /* 55 */ | ||
1018 | .llong .sys_ni_syscall /* old mpx syscall */ | ||
1019 | .llong .sys_setpgid | ||
1020 | .llong .sys_ni_syscall /* old ulimit syscall */ | ||
1021 | .llong .sys_ni_syscall /* old uname syscall */ | ||
1022 | .llong .sys_umask /* 60 */ | ||
1023 | .llong .sys_chroot | ||
1024 | .llong .sys_ustat | ||
1025 | .llong .sys_dup2 | ||
1026 | .llong .sys_getppid | ||
1027 | .llong .sys_getpgrp /* 65 */ | ||
1028 | .llong .sys_setsid | ||
1029 | .llong .sys_ni_syscall | ||
1030 | .llong .sys_sgetmask | ||
1031 | .llong .sys_ssetmask | ||
1032 | .llong .sys_setreuid /* 70 */ | ||
1033 | .llong .sys_setregid | ||
1034 | .llong .sys_ni_syscall | ||
1035 | .llong .sys_ni_syscall | ||
1036 | .llong .sys_sethostname | ||
1037 | .llong .sys_setrlimit /* 75 */ | ||
1038 | .llong .sys_ni_syscall /* old getrlimit syscall */ | ||
1039 | .llong .sys_getrusage | ||
1040 | .llong .sys_gettimeofday | ||
1041 | .llong .sys_settimeofday | ||
1042 | .llong .sys_getgroups /* 80 */ | ||
1043 | .llong .sys_setgroups | ||
1044 | .llong .sys_ni_syscall /* old select syscall */ | ||
1045 | .llong .sys_symlink | ||
1046 | .llong .sys_ni_syscall /* old lstat syscall */ | ||
1047 | .llong .sys_readlink /* 85 */ | ||
1048 | .llong .sys_uselib | ||
1049 | .llong .sys_swapon | ||
1050 | .llong .sys_reboot | ||
1051 | .llong .sys_ni_syscall /* old readdir syscall */ | ||
1052 | .llong .sys_mmap /* 90 */ | ||
1053 | .llong .sys_munmap | ||
1054 | .llong .sys_truncate | ||
1055 | .llong .sys_ftruncate | ||
1056 | .llong .sys_fchmod | ||
1057 | .llong .sys_fchown /* 95 */ | ||
1058 | .llong .sys_getpriority | ||
1059 | .llong .sys_setpriority | ||
1060 | .llong .sys_ni_syscall /* old profil syscall holder */ | ||
1061 | .llong .sys_statfs | ||
1062 | .llong .sys_fstatfs /* 100 */ | ||
1063 | .llong .sys_ni_syscall /* old ioperm syscall */ | ||
1064 | .llong .sys_socketcall | ||
1065 | .llong .sys_syslog | ||
1066 | .llong .sys_setitimer | ||
1067 | .llong .sys_getitimer /* 105 */ | ||
1068 | .llong .sys_newstat | ||
1069 | .llong .sys_newlstat | ||
1070 | .llong .sys_newfstat | ||
1071 | .llong .sys_ni_syscall /* old uname syscall */ | ||
1072 | .llong .sys_ni_syscall /* 110 old iopl syscall */ | ||
1073 | .llong .sys_vhangup | ||
1074 | .llong .sys_ni_syscall /* old idle syscall */ | ||
1075 | .llong .sys_ni_syscall /* old vm86 syscall */ | ||
1076 | .llong .sys_wait4 | ||
1077 | .llong .sys_swapoff /* 115 */ | ||
1078 | .llong .sys_sysinfo | ||
1079 | .llong .sys_ipc | ||
1080 | .llong .sys_fsync | ||
1081 | .llong .sys_ni_syscall | ||
1082 | .llong .ppc_clone /* 120 */ | ||
1083 | .llong .sys_setdomainname | ||
1084 | .llong .ppc64_newuname | ||
1085 | .llong .sys_ni_syscall /* old modify_ldt syscall */ | ||
1086 | .llong .sys_adjtimex | ||
1087 | .llong .sys_mprotect /* 125 */ | ||
1088 | .llong .sys_ni_syscall | ||
1089 | .llong .sys_ni_syscall /* old create_module syscall */ | ||
1090 | .llong .sys_init_module | ||
1091 | .llong .sys_delete_module | ||
1092 | .llong .sys_ni_syscall /* 130 old get_kernel_syms syscall */ | ||
1093 | .llong .sys_quotactl | ||
1094 | .llong .sys_getpgid | ||
1095 | .llong .sys_fchdir | ||
1096 | .llong .sys_bdflush | ||
1097 | .llong .sys_sysfs /* 135 */ | ||
1098 | .llong .ppc64_personality | ||
1099 | .llong .sys_ni_syscall /* for afs_syscall */ | ||
1100 | .llong .sys_setfsuid | ||
1101 | .llong .sys_setfsgid | ||
1102 | .llong .sys_llseek /* 140 */ | ||
1103 | .llong .sys_getdents | ||
1104 | .llong .sys_select | ||
1105 | .llong .sys_flock | ||
1106 | .llong .sys_msync | ||
1107 | .llong .sys_readv /* 145 */ | ||
1108 | .llong .sys_writev | ||
1109 | .llong .sys_getsid | ||
1110 | .llong .sys_fdatasync | ||
1111 | .llong .sys_sysctl | ||
1112 | .llong .sys_mlock /* 150 */ | ||
1113 | .llong .sys_munlock | ||
1114 | .llong .sys_mlockall | ||
1115 | .llong .sys_munlockall | ||
1116 | .llong .sys_sched_setparam | ||
1117 | .llong .sys_sched_getparam /* 155 */ | ||
1118 | .llong .sys_sched_setscheduler | ||
1119 | .llong .sys_sched_getscheduler | ||
1120 | .llong .sys_sched_yield | ||
1121 | .llong .sys_sched_get_priority_max | ||
1122 | .llong .sys_sched_get_priority_min /* 160 */ | ||
1123 | .llong .sys_sched_rr_get_interval | ||
1124 | .llong .sys_nanosleep | ||
1125 | .llong .sys_mremap | ||
1126 | .llong .sys_setresuid | ||
1127 | .llong .sys_getresuid /* 165 */ | ||
1128 | .llong .sys_ni_syscall /* old query_module syscall */ | ||
1129 | .llong .sys_poll | ||
1130 | .llong .sys_nfsservctl | ||
1131 | .llong .sys_setresgid | ||
1132 | .llong .sys_getresgid /* 170 */ | ||
1133 | .llong .sys_prctl | ||
1134 | .llong .ppc64_rt_sigreturn | ||
1135 | .llong .sys_rt_sigaction | ||
1136 | .llong .sys_rt_sigprocmask | ||
1137 | .llong .sys_rt_sigpending /* 175 */ | ||
1138 | .llong .sys_rt_sigtimedwait | ||
1139 | .llong .sys_rt_sigqueueinfo | ||
1140 | .llong .ppc64_rt_sigsuspend | ||
1141 | .llong .sys_pread64 | ||
1142 | .llong .sys_pwrite64 /* 180 */ | ||
1143 | .llong .sys_chown | ||
1144 | .llong .sys_getcwd | ||
1145 | .llong .sys_capget | ||
1146 | .llong .sys_capset | ||
1147 | .llong .sys_sigaltstack /* 185 */ | ||
1148 | .llong .sys_sendfile64 | ||
1149 | .llong .sys_ni_syscall /* reserved for streams1 */ | ||
1150 | .llong .sys_ni_syscall /* reserved for streams2 */ | ||
1151 | .llong .ppc_vfork | ||
1152 | .llong .sys_getrlimit /* 190 */ | ||
1153 | .llong .sys_readahead | ||
1154 | .llong .sys_ni_syscall /* 32bit only mmap2 */ | ||
1155 | .llong .sys_ni_syscall /* 32bit only truncate64 */ | ||
1156 | .llong .sys_ni_syscall /* 32bit only ftruncate64 */ | ||
1157 | .llong .sys_ni_syscall /* 195 - 32bit only stat64 */ | ||
1158 | .llong .sys_ni_syscall /* 32bit only lstat64 */ | ||
1159 | .llong .sys_ni_syscall /* 32bit only fstat64 */ | ||
1160 | .llong .sys_ni_syscall /* 32bit only pciconfig_read */ | ||
1161 | .llong .sys_ni_syscall /* 32bit only pciconfig_write */ | ||
1162 | .llong .sys_ni_syscall /* 32bit only pciconfig_iobase */ | ||
1163 | .llong .sys_ni_syscall /* reserved for MacOnLinux */ | ||
1164 | .llong .sys_getdents64 | ||
1165 | .llong .sys_pivot_root | ||
1166 | .llong .sys_ni_syscall /* 32bit only fcntl64 */ | ||
1167 | .llong .sys_madvise /* 205 */ | ||
1168 | .llong .sys_mincore | ||
1169 | .llong .sys_gettid | ||
1170 | .llong .sys_tkill | ||
1171 | .llong .sys_setxattr | ||
1172 | .llong .sys_lsetxattr /* 210 */ | ||
1173 | .llong .sys_fsetxattr | ||
1174 | .llong .sys_getxattr | ||
1175 | .llong .sys_lgetxattr | ||
1176 | .llong .sys_fgetxattr | ||
1177 | .llong .sys_listxattr /* 215 */ | ||
1178 | .llong .sys_llistxattr | ||
1179 | .llong .sys_flistxattr | ||
1180 | .llong .sys_removexattr | ||
1181 | .llong .sys_lremovexattr | ||
1182 | .llong .sys_fremovexattr /* 220 */ | ||
1183 | .llong .sys_futex | ||
1184 | .llong .sys_sched_setaffinity | ||
1185 | .llong .sys_sched_getaffinity | ||
1186 | .llong .sys_ni_syscall | ||
1187 | .llong .sys_ni_syscall /* 225 - reserved for tux */ | ||
1188 | .llong .sys_ni_syscall /* 32bit only sendfile64 */ | ||
1189 | .llong .sys_io_setup | ||
1190 | .llong .sys_io_destroy | ||
1191 | .llong .sys_io_getevents | ||
1192 | .llong .sys_io_submit /* 230 */ | ||
1193 | .llong .sys_io_cancel | ||
1194 | .llong .sys_set_tid_address | ||
1195 | .llong .sys_fadvise64 | ||
1196 | .llong .sys_exit_group | ||
1197 | .llong .sys_lookup_dcookie /* 235 */ | ||
1198 | .llong .sys_epoll_create | ||
1199 | .llong .sys_epoll_ctl | ||
1200 | .llong .sys_epoll_wait | ||
1201 | .llong .sys_remap_file_pages | ||
1202 | .llong .sys_timer_create /* 240 */ | ||
1203 | .llong .sys_timer_settime | ||
1204 | .llong .sys_timer_gettime | ||
1205 | .llong .sys_timer_getoverrun | ||
1206 | .llong .sys_timer_delete | ||
1207 | .llong .sys_clock_settime /* 245 */ | ||
1208 | .llong .sys_clock_gettime | ||
1209 | .llong .sys_clock_getres | ||
1210 | .llong .sys_clock_nanosleep | ||
1211 | .llong .ppc64_swapcontext | ||
1212 | .llong .sys_tgkill /* 250 */ | ||
1213 | .llong .sys_utimes | ||
1214 | .llong .sys_statfs64 | ||
1215 | .llong .sys_fstatfs64 | ||
1216 | .llong .sys_ni_syscall /* 32bit only fadvise64_64 */ | ||
1217 | .llong .ppc_rtas /* 255 */ | ||
1218 | .llong .sys_ni_syscall /* 256 reserved for sys_debug_setcontext */ | ||
1219 | .llong .sys_ni_syscall /* 257 reserved for vserver */ | ||
1220 | .llong .sys_ni_syscall /* 258 reserved for new sys_remap_file_pages */ | ||
1221 | .llong .sys_mbind | ||
1222 | .llong .sys_get_mempolicy /* 260 */ | ||
1223 | .llong .sys_set_mempolicy | ||
1224 | .llong .sys_mq_open | ||
1225 | .llong .sys_mq_unlink | ||
1226 | .llong .sys_mq_timedsend | ||
1227 | .llong .sys_mq_timedreceive /* 265 */ | ||
1228 | .llong .sys_mq_notify | ||
1229 | .llong .sys_mq_getsetattr | ||
1230 | .llong .sys_ni_syscall /* 268 reserved for sys_kexec_load */ | ||
1231 | .llong .sys_add_key | ||
1232 | .llong .sys_request_key /* 270 */ | ||
1233 | .llong .sys_keyctl | ||
1234 | .llong .sys_waitid | ||