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 "ppc_asm.h" 29 30 .text 31 32/* 33 * Returns (address we're running at) - (address we were linked at) 34 * for use before the text and data are mapped to KERNELBASE. 35 */ 36 37_GLOBAL(reloc_offset) 38 mflr r0 39 bl 1f 401: mflr r3 41 LOADADDR(r4,1b) 42 sub r3,r4,r3 43 mtlr r0 44 blr 45 46_GLOBAL(get_msr) 47 mfmsr r3 48 blr 49 50_GLOBAL(get_dar) 51 mfdar r3 52 blr 53 54_GLOBAL(get_srr0) 55 mfsrr0 r3 56 blr 57 58_GLOBAL(get_srr1) 59 mfsrr1 r3 60 blr 61 62_GLOBAL(get_sp) 63 mr r3,r1 64 blr 65 66#ifdef CONFIG_PPC_ISERIES 67/* unsigned long __no_use_save_flags(void) */ 68_GLOBAL(__no_use_save_flags) 69 mfspr r4,SPRG3 70 lbz r3,PACAPROCENABLED(r4) 71 blr 72 73/* void __no_use_restore_flags(unsigned long flags) */ 74_GLOBAL(__no_use_restore_flags) 75/* 76 * Just set/clear the MSR_EE bit through restore/flags but do not 77 * change anything else. This is needed by the RT system and makes 78 * sense anyway. 79 * -- Cort 80 */ 81 mfspr r6,SPRG3 82 lbz r5,PACAPROCENABLED(r6) 83 /* Check if things are setup the way we want _already_. */ 84 cmpw 0,r3,r5 85 beqlr 86 /* are we enabling interrupts? */ 87 cmpi 0,r3,0 88 stb r3,PACAPROCENABLED(r6) 89 beqlr 90 /* Check pending interrupts */ 91 CHECKANYINT(r4,r5) 92 beqlr 93 94 /* 95 * Handle pending interrupts in interrupt context 96 */ 97 li r0,0x5555 98 sc 99 blr 100 101_GLOBAL(__no_use_cli) 102 mfspr r5,SPRG3 103 lbz r3,PACAPROCENABLED(r5) 104 li r4,0 105 stb r4,PACAPROCENABLED(r5) 106 blr /* Done */ 107 108_GLOBAL(__no_use_sti) 109 mfspr r6,SPRG3 110 li r3,1 111 stb r3,PACAPROCENABLED(r6) 112 113 /* Check for pending interrupts 114 * A decrementer, IPI or PMC interrupt may have occurred 115 * while we were in the hypervisor (which enables) 116 */ 117 CHECKANYINT(r4,r5) 118 beqlr 119 120 /* 121 * Handle pending interrupts in interrupt context 122 */ 123 li r0,0x5555 124 sc 125 blr 126#endif 127/* 128 * Flush instruction cache. 129 */ 130_GLOBAL(flush_instruction_cache) 131 132/* 133 * This is called by kgdb code 134 * and should probably go away 135 * to be replaced by invalidating 136 * the cache lines that are actually 137 * modified 138 */ 139 /* use invalidate-all bit in HID0 140 * - is this consistent across all 64-bit cpus? -- paulus */ 141 mfspr r3,HID0 142 ori r3,r3,HID0_ICFI 143 mtspr HID0,r3 144 sync 145 isync 146 blr 147 148/* 149 * Write any modified data cache blocks out to memory 150 * and invalidate the corresponding instruction cache blocks. 151 * 152 * flush_icache_range(unsigned long start, unsigned long stop) 153 * 154 * flush all bytes from start through stop-1 inclusive 155 */ 156 157_GLOBAL(flush_icache_range) 158 159/* 160 * Flush the data cache to memory 161 * 162 * Different systems have different cache line sizes 163 * and in some cases i-cache and d-cache line sizes differ from 164 * each other. 165 */ 166 LOADADDR(r10,naca) /* Get Naca address */ 167 ld r10,0(r10) 168 lhz r7,DCACHEL1LINESIZE(r10) /* Get cache line size */ 169 addi r5,r7,-1 170 andc r6,r3,r5 /* round low to line bdy */ 171 subf r8,r6,r4 /* compute length */ 172 add r8,r8,r5 /* ensure we get enough */ 173 lhz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of cache line size */ 174 srw. r8,r8,r9 /* compute line count */ 175 beqlr /* nothing to do? */ 176 mtctr r8 1771: dcbst 0,r6 178 add r6,r6,r7 179 bdnz 1b 180 sync 181 182/* Now invalidate the instruction cache */ 183 184 lhz r7,ICACHEL1LINESIZE(r10) /* Get Icache line size */ 185 addi r5,r7,-1 186 andc r6,r3,r5 /* round low to line bdy */ 187 subf r8,r6,r4 /* compute length */ 188 add r8,r8,r5 189 lhz r9,ICACHEL1LOGLINESIZE(r10) /* Get log-2 of Icache line size */ 190 srw. r8,r8,r9 /* compute line count */ 191 beqlr /* nothing to do? */ 192 mtctr r8 1932: icbi 0,r6 194 add r6,r6,r7 195 bdnz 2b 196 isync 197 blr 198 199/* 200 * Like above, but only do the D-cache. 201 * 202 * flush_dcache_range(unsigned long start, unsigned long stop) 203 * 204 * flush all bytes from start to stop-1 inclusive 205 */ 206_GLOBAL(flush_dcache_range) 207 208/* 209 * Flush the data cache to memory 210 * 211 * Different systems have different cache line sizes 212 */ 213 LOADADDR(r10,naca) /* Get Naca address */ 214 ld r10,0(r10) 215 lhz r7,DCACHEL1LINESIZE(r10) /* Get dcache line size */ 216 addi r5,r7,-1 217 andc r6,r3,r5 /* round low to line bdy */ 218 subf r8,r6,r4 /* compute length */ 219 add r8,r8,r5 /* ensure we get enough */ 220 lhz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of dcache line size */ 221 srw. r8,r8,r9 /* compute line count */ 222 beqlr /* nothing to do? */ 223 mtctr r8 2240: dcbst 0,r6 225 add r6,r6,r7 226 bdnz 0b 227 sync 228 blr 229 230/* 231 * Flush a particular page from the data cache to RAM. 232 * Note: this is necessary because the instruction cache does *not* 233 * snoop from the data cache. 234 * 235 * void __flush_dcache_icache(void *page) 236 */ 237_GLOBAL(__flush_dcache_icache) 238/* 239 * Flush the data cache to memory 240 * 241 * Different systems have different cache line sizes 242 */ 243 244/* Flush the dcache */ 245 LOADADDR(r7,naca) 246 ld r7,0(r7) 247 clrrdi r3,r3,12 /* Page align */ 248 lhz r4,DCACHEL1LINESPERPAGE(r7) /* Get # dcache lines per page */ 249 lhz r5,DCACHEL1LINESIZE(r7) /* Get dcache line size */ 250 mr r6,r3 251 mtctr r4 2520: dcbst 0,r6 253 add r6,r6,r5 254 bdnz 0b 255 sync 256 257/* Now invalidate the icache */ 258 259 lhz r4,ICACHEL1LINESPERPAGE(r7) /* Get # icache lines per page */ 260 lhz r5,ICACHEL1LINESIZE(r7) /* Get icache line size */ 261 mtctr r4 2621: icbi 0,r3 263 add r3,r3,r5 264 bdnz 1b 265 isync 266 blr 267 268/* 269 * Copy a whole page. Assumes a 4096B page size. 270 */ 271_GLOBAL(copy_page) 272 clrrdi r3,r3,12 /* Page align */ 273 clrrdi r4,r4,12 /* Page align */ 274 li r5,256 275 mtctr r5 276 addi r3,r3,-8 277 addi r4,r4,-8 278 2791: ld r6,8(r4) 280 ldu r7,16(r4) 281 std r6,8(r3) 282 stdu r7,16(r3) 283 bdnz+ 1b 284 blr 285 286/* 287 * I/O string operations 288 * 289 * insb(port, buf, len) 290 * outsb(port, buf, len) 291 * insw(port, buf, len) 292 * outsw(port, buf, len) 293 * insl(port, buf, len) 294 * outsl(port, buf, len) 295 * insw_ns(port, buf, len) 296 * outsw_ns(port, buf, len) 297 * insl_ns(port, buf, len) 298 * outsl_ns(port, buf, len) 299 * 300 * The *_ns versions don't do byte-swapping. 301 */ 302_GLOBAL(_insb) 303 cmpwi 0,r5,0 304 mtctr r5 305 subi r4,r4,1 306 blelr- 30700: lbz r5,0(r3) 308 eieio 309 stbu r5,1(r4) 310 bdnz 00b 311 blr 312 313_GLOBAL(_outsb) 314 cmpwi 0,r5,0 315 mtctr r5 316 subi r4,r4,1 317 blelr- 31800: lbzu r5,1(r4) 319 stb r5,0(r3) 320 eieio 321 bdnz 00b 322 blr 323 324_GLOBAL(_insw) 325 cmpwi 0,r5,0 326 mtctr r5 327 subi r4,r4,2 328 blelr- 32900: lhbrx r5,0,r3 330 eieio 331 sthu r5,2(r4) 332 bdnz 00b 333 blr 334 335_GLOBAL(_outsw) 336 cmpwi 0,r5,0 337 mtctr r5 338 subi r4,r4,2 339 blelr- 34000: lhzu r5,2(r4) 341 eieio 342 sthbrx r5,0,r3 343 bdnz 00b 344 blr 345 346_GLOBAL(_insl) 347 cmpwi 0,r5,0 348 mtctr r5 349 subi r4,r4,4 350 blelr- 35100: lwbrx r5,0,r3 352 eieio 353 stwu r5,4(r4) 354 bdnz 00b 355 blr 356 357_GLOBAL(_outsl) 358 cmpwi 0,r5,0 359 mtctr r5 360 subi r4,r4,4 361 blelr- 36200: lwzu r5,4(r4) 363 stwbrx r5,0,r3 364 eieio 365 bdnz 00b 366 blr 367 368_GLOBAL(ide_insw) 369_GLOBAL(_insw_ns) 370 cmpwi 0,r5,0 371 mtctr r5 372 subi r4,r4,2 373 blelr- 37400: lhz r5,0(r3) 375 eieio 376 sthu r5,2(r4) 377 bdnz 00b 378 blr 379 380_GLOBAL(ide_outsw) 381_GLOBAL(_outsw_ns) 382 cmpwi 0,r5,0 383 mtctr r5 384 subi r4,r4,2 385 blelr- 38600: lhzu r5,2(r4) 387 sth r5,0(r3) 388 eieio 389 bdnz 00b 390 blr 391 392_GLOBAL(_insl_ns) 393 cmpwi 0,r5,0 394 mtctr r5 395 subi r4,r4,4 396 blelr- 39700: lwz r5,0(r3) 398 eieio 399 stwu r5,4(r4) 400 bdnz 00b 401 blr 402 403_GLOBAL(_outsl_ns) 404 cmpwi 0,r5,0 405 mtctr r5 406 subi r4,r4,4 407 blelr- 40800: lwzu r5,4(r4) 409 stw r5,0(r3) 410 eieio 411 bdnz 00b 412 blr 413 414/* 415 * Extended precision shifts 416 * 417 * R3/R4 has 64 bit value 418 * R5 has shift count 419 * result in R3/R4 420 * 421 * ashrdi3: XXXYYY/ZZZAAA -> SSSXXX/YYYZZZ 422 * ashldi3: XXXYYY/ZZZAAA -> YYYZZZ/AAA000 423 * lshrdi3: XXXYYY/ZZZAAA -> 000XXX/YYYZZZ 424 */ 425/* MIKEC: These may no longer be needed...what does gcc expect ? */ 426 427_GLOBAL(__ashrdi3) 428 li r6,32 429 sub r6,r6,r5 430 slw r7,r3,r6 /* isolate YYY */ 431 srw r4,r4,r5 /* isolate ZZZ */ 432 or r4,r4,r7 /* YYYZZZ */ 433 sraw r3,r3,r5 /* SSSXXX */ 434 blr 435 436_GLOBAL(__ashldi3) 437 li r6,32 438 sub r6,r6,r5 439 srw r7,r4,r6 /* isolate ZZZ */ 440 slw r4,r4,r5 /* AAA000 */ 441 slw r3,r3,r5 /* YYY--- */ 442 or r3,r3,r7 /* YYYZZZ */ 443 blr 444 445_GLOBAL(__lshrdi3) 446 li r6,32 447 sub r6,r6,r5 448 slw r7,r3,r6 /* isolate YYY */ 449 srw r4,r4,r5 /* isolate ZZZ */ 450 or r4,r4,r7 /* YYYZZZ */ 451 srw r3,r3,r5 /* 000XXX */ 452 blr 453 454_GLOBAL(abs) 455 cmpi 0,r3,0 456 bge 10f 457 neg r3,r3 45810: blr 459 460_GLOBAL(_get_SP) 461 mr r3,r1 /* Close enough */ 462 blr 463 464_GLOBAL(_get_PVR) 465 mfspr r3,PVR 466 blr 467 468_GLOBAL(_get_PIR) 469 mfspr r3,PIR 470 blr 471 472_GLOBAL(_get_HID0) 473 mfspr r3,HID0 474 blr 475 476_GLOBAL(cvt_fd) 477 lfd 0,-4(r5) /* load up fpscr value */ 478 mtfsf 0xff,0 479 lfs 0,0(r3) 480 stfd 0,0(r4) 481 mffs 0 /* save new fpscr value */ 482 stfd 0,-4(r5) 483 blr 484 485_GLOBAL(cvt_df) 486 lfd 0,-4(r5) /* load up fpscr value */ 487 mtfsf 0xff,0 488 lfd 0,0(r3) 489 stfs 0,0(r4) 490 mffs 0 /* save new fpscr value */ 491 stfd 0,-4(r5) 492 blr 493 494/* 495 * Create a kernel thread 496 * kernel_thread(fn, arg, flags) 497 */ 498_GLOBAL(kernel_thread) 499 mr r6,r3 /* function */ 500 ori r3,r5,CLONE_VM /* flags */ 501 li r0,__NR_clone 502 sc 503 cmpi 0,r3,0 /* parent or child? */ 504 bnelr /* return if parent */ 505 506 li r0,0 /* clear out p->thread.regs */ 507 std r0,THREAD+PT_REGS(r13) /* since we don't have user ctx */ 508 li r0,RUN_FLAG /* Run light on */ 509 std r0,THREAD+THREAD_FLAGS(r13) 510 511 ld r2,8(r6) 512 ld r6,0(r6) 513 mtlr r6 /* fn addr in lr */ 514 mr r3,r4 /* load arg and call fn */ 515 blrl 516 li r0,__NR_exit /* exit after child exits */ 517 li r3,0 518 sc 519 520#ifdef CONFIG_BINFMT_ELF32 521/* Why isn't this a) automatic, b) written in 'C'? */ 522 .balign 8 523_GLOBAL(sys_call_table32) 524 .llong .sys_ni_syscall /* 0 - old "setup()" system call */ 525 .llong .sys32_exit 526 .llong .sys32_fork 527 .llong .sys_read 528 .llong .sys_write 529 .llong .sys32_open /* 5 */ 530 .llong .sys_close 531 .llong .sys32_waitpid 532 .llong .sys32_creat 533 .llong .sys_link 534 .llong .sys_unlink /* 10 */ 535 .llong .sys32_execve 536 .llong .sys_chdir 537 .llong .sys32_time 538 .llong .sys32_mknod 539 .llong .sys32_chmod /* 15 */ 540 .llong .sys_lchown 541 .llong .sys_ni_syscall /* old break syscall holder */ 542 .llong .sys32_stat 543 .llong .sys32_lseek 544 .llong .sys_getpid /* 20 */ 545 .llong .sys32_mount 546 .llong .sys_oldumount 547 .llong .sys_setuid 548 .llong .sys_getuid 549 .llong .ppc64_sys32_stime /* 25 */ 550 .llong .sys32_ptrace 551 .llong .sys_alarm 552 .llong .sys32_fstat 553 .llong .sys32_pause 554 .llong .sys32_utime /* 30 */ 555 .llong .sys_ni_syscall /* old stty syscall holder */ 556 .llong .sys_ni_syscall /* old gtty syscall holder */ 557 .llong .sys32_access 558 .llong .sys32_nice 559 .llong .sys_ni_syscall /* 35 */ /* old ftime syscall holder */ 560 .llong .sys_sync 561 .llong .sys32_kill 562 .llong .sys_rename 563 .llong .sys32_mkdir 564 .llong .sys_rmdir /* 40 */ 565 .llong .sys_dup 566 .llong .sys_pipe 567 .llong .sys32_times 568 .llong .sys_ni_syscall /* old prof syscall holder */ 569 .llong .sys_brk /* 45 */ 570 .llong .sys_setgid 571 .llong .sys_getgid 572 .llong .sys_signal 573 .llong .sys_geteuid 574 .llong .sys_getegid /* 50 */ 575 .llong .sys_acct 576 .llong .sys32_umount /* recycled never used phys() */ 577 .llong .sys_ni_syscall /* old lock syscall holder */ 578 .llong .sys32_ioctl 579 .llong .sys32_fcntl /* 55 */ 580 .llong .sys_ni_syscall /* old mpx syscall holder */ 581 .llong .sys32_setpgid 582 .llong .sys_ni_syscall /* old ulimit syscall holder */ 583 .llong .sys_olduname 584 .llong .sys32_umask /* 60 */ 585 .llong .sys_chroot 586 .llong .sys_ustat 587 .llong .sys_dup2 588 .llong .sys_getppid 589 .llong .sys_getpgrp /* 65 */ 590 .llong .sys_setsid 591 .llong .sys32_sigaction 592 .llong .sys_sgetmask 593 .llong .sys32_ssetmask 594 .llong .sys_setreuid /* 70 */ 595 .llong .sys_setregid 596 .llong .sys_sigsuspend 597 .llong .sys32_sigpending 598 .llong .sys32_sethostname 599 .llong .sys32_setrlimit /* 75 */ 600 .llong .sys32_old_getrlimit 601 .llong .sys32_getrusage 602 .llong .sys32_gettimeofday 603 .llong .sys32_settimeofday 604 .llong .sys32_getgroups /* 80 */ 605 .llong .sys32_setgroups 606 .llong .ppc32_select 607 .llong .sys_symlink 608 .llong .sys32_lstat 609 .llong .sys32_readlink /* 85 */ 610 .llong .sys_uselib 611 .llong .sys32_swapon 612 .llong .sys32_reboot 613 .llong .old32_readdir 614 .llong .sys32_mmap /* 90 */ 615 .llong .sys_munmap 616 .llong .sys_truncate 617 .llong .sys_ftruncate 618 .llong .sys_fchmod 619 .llong .sys_fchown /* 95 */ 620 .llong .sys32_getpriority 621 .llong .sys32_setpriority 622 .llong .sys_ni_syscall /* old profil syscall holder */ 623 .llong .sys32_statfs 624 .llong .sys32_fstatfs /* 100 */ 625 .llong .sys32_ioperm 626 .llong .sys32_socketcall 627 .llong .sys32_syslog 628 .llong .sys32_setitimer 629 .llong .sys32_getitimer /* 105 */ 630 .llong .sys32_newstat 631 .llong .sys32_newlstat 632 .llong .sys32_newfstat 633 .llong .sys_uname 634 .llong .sys32_iopl /* 110 */ 635 .llong .sys_vhangup 636 .llong .sys_ni_syscall /* old 'idle' syscall */ 637 .llong .sys32_vm86 638 .llong .sys32_wait4 639 .llong .sys_swapoff /* 115 */ 640 .llong .sys32_sysinfo 641 .llong .sys32_ipc 642 .llong .sys_fsync 643 .llong .ppc32_sigreturn 644 .llong .sys32_clone /* 120 */ 645 .llong .sys32_setdomainname 646 .llong .ppc64_newuname 647 .llong .sys32_modify_ldt 648 .llong .sys32_adjtimex 649 .llong .sys_mprotect /* 125 */ 650 .llong .sys32_sigprocmask 651 .llong .sys32_create_module 652 .llong .sys32_init_module 653 .llong .sys32_delete_module 654 .llong .sys32_get_kernel_syms /* 130 */ 655 .llong .sys32_quotactl 656 .llong .sys32_getpgid 657 .llong .sys_fchdir 658 .llong .sys32_bdflush 659 .llong .sys32_sysfs /* 135 */ 660 .llong .sys32_personality 661 .llong .sys_ni_syscall /* for afs_syscall */ 662 .llong .sys_setfsuid 663 .llong .sys_setfsgid 664 .llong .sys_llseek /* 140 */ 665 .llong .sys32_getdents 666 .llong .ppc32_select 667 .llong .sys_flock 668 .llong .sys32_msync 669 .llong .sys32_readv /* 145 */ 670 .llong .sys32_writev 671 .llong .sys32_getsid 672 .llong .sys_fdatasync 673 .llong .sys32_sysctl 674 .llong .sys_mlock /* 150 */ 675 .llong .sys_munlock 676 .llong .sys32_mlockall 677 .llong .sys_munlockall 678 .llong .sys32_sched_setparam 679 .llong .sys32_sched_getparam /* 155 */ 680 .llong .sys32_sched_setscheduler 681 .llong .sys32_sched_getscheduler 682 .llong .sys_sched_yield 683 .llong .sys32_sched_get_priority_max 684 .llong .sys32_sched_get_priority_min /* 160 */ 685 .llong .sys32_sched_rr_get_interval 686 .llong .sys32_nanosleep 687 .llong .sys32_mremap 688 .llong .sys_setresuid 689 .llong .sys_getresuid /* 165 */ 690 .llong .sys32_query_module 691 .llong .sys_poll 692 .llong .sys32_nfsservctl 693 .llong .sys_setresgid 694 .llong .sys_getresgid /* 170 */ 695 .llong .sys32_prctl 696 .llong .ppc32_rt_sigreturn 697 .llong .sys32_rt_sigaction 698 .llong .sys32_rt_sigprocmask 699 .llong .sys32_rt_sigpending /* 175 */ 700 .llong .sys32_rt_sigtimedwait 701 .llong .sys32_rt_sigqueueinfo 702 .llong .sys32_rt_sigsuspend 703 .llong .sys32_pread 704 .llong .sys32_pwrite /* 180 */ 705 .llong .sys_chown 706 .llong .sys_getcwd 707 .llong .sys_capget 708 .llong .sys_capset 709 .llong .sys32_sigaltstack /* 185 */ 710 .llong .sys32_sendfile 711 .llong .sys_ni_syscall /* streams1 */ 712 .llong .sys_ni_syscall /* streams2 */ 713 .llong .sys32_vfork 714 .llong .sys32_getrlimit /* 190 */ 715 .llong .sys_ni_syscall /* 191 */ /* Unused */ 716 .llong .sys_ni_syscall /* 192 - reserved - mmap2 */ 717 .llong .sys32_truncate64 /* 193 - truncate64 */ 718 .llong .sys32_ftruncate64 /* 194 - ftruncate64 */ 719 .llong .sys_stat64 /* 195 - stat64 */ 720 .llong .sys_lstat64 /* 196 - lstat64 */ 721 .llong .sys_fstat64 /* 197 - fstat64 */ 722 .llong .sys32_pciconfig_read /* 198 */ 723 .llong .sys32_pciconfig_write /* 199 */ 724 .llong .sys_pciconfig_iobase /* 200 */ 725 .llong .sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ 726 .llong .sys_getdents64 /* 202 */ 727 .llong .sys_pivot_root /* 203 */ 728 .llong .sys32_fcntl64 /* 204 */ 729 .llong .sys_madvise /* 205 */ 730 .llong .sys_mincore /* 206 */ 731 .llong .sys_gettid /* 207 */ 732 .llong .sys_perfmonctl /* Put this here for now ... */ 733 .rept NR_syscalls-222 734 .llong .sys_ni_syscall 735 .endr 736#endif 737 .balign 8 738_GLOBAL(sys_call_table) 739 .llong .sys_ni_syscall /* 0 - old "setup()" system call */ 740 .llong .sys_exit 741 .llong .sys_fork 742 .llong .sys_read 743 .llong .sys_write 744 .llong .sys_open /* 5 */ 745 .llong .sys_close 746 .llong .sys_waitpid 747 .llong .sys_creat 748 .llong .sys_link 749 .llong .sys_unlink /* 10 */ 750 .llong .sys_execve 751 .llong .sys_chdir 752 .llong .sys64_time 753 .llong .sys_mknod 754 .llong .sys_chmod /* 15 */ 755 .llong .sys_lchown 756 .llong .sys_ni_syscall /* old break syscall holder */ 757 .llong .sys_stat 758 .llong .sys_lseek 759 .llong .sys_getpid /* 20 */ 760 .llong .sys_mount 761 .llong .sys_oldumount 762 .llong .sys_setuid 763 .llong .sys_getuid 764 .llong .ppc64_sys_stime /* 25 */ 765 .llong .sys_ptrace 766 .llong .sys_alarm 767 .llong .sys_fstat 768 .llong .sys_pause 769 .llong .sys_utime /* 30 */ 770 .llong .sys_ni_syscall /* old stty syscall holder */ 771 .llong .sys_ni_syscall /* old gtty syscall holder */ 772 .llong .sys_access 773 .llong .sys_nice 774 .llong .sys_ni_syscall /* 35 */ /* old ftime syscall holder */ 775 .llong .sys_sync 776 .llong .sys_kill 777 .llong .sys_rename 778 .llong .sys_mkdir 779 .llong .sys_rmdir /* 40 */ 780 .llong .sys_dup 781 .llong .sys_pipe 782 .llong .sys_times 783 .llong .sys_ni_syscall /* old prof syscall holder */ 784 .llong .sys_brk /* 45 */ 785 .llong .sys_setgid 786 .llong .sys_getgid 787 .llong .sys_signal 788 .llong .sys_geteuid 789 .llong .sys_getegid /* 50 */ 790 .llong .sys_acct 791 .llong .sys_umount /* recycled never used phys() */ 792 .llong .sys_ni_syscall /* old lock syscall holder */ 793 .llong .sys_ioctl 794 .llong .sys_fcntl /* 55 */ 795 .llong .sys_ni_syscall /* old mpx syscall holder */ 796 .llong .sys_setpgid 797 .llong .sys_ni_syscall /* old ulimit syscall holder */ 798 .llong .sys_olduname 799 .llong .sys_umask /* 60 */ 800 .llong .sys_chroot 801 .llong .sys_ustat 802 .llong .sys_dup2 803 .llong .sys_getppid 804 .llong .sys_getpgrp /* 65 */ 805 .llong .sys_setsid 806 .llong .sys_sigaction 807 .llong .sys_sgetmask 808 .llong .sys_ssetmask 809 .llong .sys_setreuid /* 70 */ 810 .llong .sys_setregid 811 .llong .sys_sigsuspend 812 .llong .sys_sigpending 813 .llong .sys_sethostname 814 .llong .sys_setrlimit /* 75 */ 815 .llong .sys_old_getrlimit 816 .llong .sys_getrusage 817 .llong .sys_gettimeofday 818 .llong .sys_settimeofday 819 .llong .sys_getgroups /* 80 */ 820 .llong .sys_setgroups 821 .llong .sys_select 822 .llong .sys_symlink 823 .llong .sys_lstat 824 .llong .sys_readlink /* 85 */ 825 .llong .sys_uselib 826 .llong .sys_swapon 827 .llong .sys_reboot 828 .llong .old_readdir 829 .llong .sys_mmap /* 90 */ 830 .llong .sys_munmap 831 .llong .sys_truncate 832 .llong .sys_ftruncate 833 .llong .sys_fchmod 834 .llong .sys_fchown /* 95 */ 835 .llong .sys_getpriority 836 .llong .sys_setpriority 837 .llong .sys_ni_syscall /* old profil syscall holder */ 838 .llong .sys_statfs 839 .llong .sys_fstatfs /* 100 */ 840 .llong .sys_ioperm 841 .llong .sys_socketcall 842 .llong .sys_syslog 843 .llong .sys_setitimer 844 .llong .sys_getitimer /* 105 */ 845 .llong .sys_newstat 846 .llong .sys_newlstat 847 .llong .sys_newfstat 848 .llong .sys_uname 849 .llong .sys_iopl /* 110 */ 850 .llong .sys_vhangup 851 .llong .sys_ni_syscall /* old 'idle' syscall */ 852 .llong .sys_vm86 853 .llong .sys_wait4 854 .llong .sys_swapoff /* 115 */ 855 .llong .sys_sysinfo 856 .llong .sys_ipc 857 .llong .sys_fsync 858 .llong .ppc64_sigreturn 859 .llong .sys_clone /* 120 */ 860 .llong .sys_setdomainname 861 .llong .ppc64_newuname 862 .llong .sys_modify_ldt 863 .llong .sys_adjtimex 864 .llong .sys_mprotect /* 125 */ 865 .llong .sys_sigprocmask 866 .llong .sys_create_module 867 .llong .sys_init_module 868 .llong .sys_delete_module 869 .llong .sys_get_kernel_syms /* 130 */ 870 .llong .sys_quotactl 871 .llong .sys_getpgid 872 .llong .sys_fchdir 873 .llong .sys_bdflush 874 .llong .sys_sysfs /* 135 */ 875 .llong .sys_personality 876 .llong .sys_ni_syscall /* for afs_syscall */ 877 .llong .sys_setfsuid 878 .llong .sys_setfsgid 879 .llong .sys_llseek /* 140 */ 880 .llong .sys_getdents 881 .llong .sys_select 882 .llong .sys_flock 883 .llong .sys_msync 884 .llong .sys_readv /* 145 */ 885 .llong .sys_writev 886 .llong .sys_getsid 887 .llong .sys_fdatasync 888 .llong .sys_sysctl 889 .llong .sys_mlock /* 150 */ 890 .llong .sys_munlock 891 .llong .sys_mlockall 892 .llong .sys_munlockall 893 .llong .sys_sched_setparam 894 .llong .sys_sched_getparam /* 155 */ 895 .llong .sys_sched_setscheduler 896 .llong .sys_sched_getscheduler 897 .llong .sys_sched_yield 898 .llong .sys_sched_get_priority_max 899 .llong .sys_sched_get_priority_min /* 160 */ 900 .llong .sys_sched_rr_get_interval 901 .llong .sys_nanosleep 902 .llong .sys_mremap 903 .llong .sys_setresuid 904 .llong .sys_getresuid /* 165 */ 905 .llong .sys_query_module 906 .llong .sys_poll 907 .llong .sys_nfsservctl 908 .llong .sys_setresgid 909 .llong .sys_getresgid /* 170 */ 910 .llong .sys_prctl 911 .llong .ppc64_rt_sigreturn 912 .llong .sys_rt_sigaction 913 .llong .sys_rt_sigprocmask 914 .llong .sys_rt_sigpending /* 175 */ 915 .llong .sys_rt_sigtimedwait 916 .llong .sys_rt_sigqueueinfo 917 .llong .sys_rt_sigsuspend 918 .llong .sys_pread 919 .llong .sys_pwrite /* 180 */ 920 .llong .sys_chown 921 .llong .sys_getcwd 922 .llong .sys_capget 923 .llong .sys_capset 924 .llong .sys_sigaltstack /* 185 */ 925 .llong .sys_sendfile 926 .llong .sys_ni_syscall /* streams1 */ 927 .llong .sys_ni_syscall /* streams2 */ 928 .llong .sys_vfork 929 .llong .sys_getrlimit /* 190 */ 930 .llong .sys_ni_syscall /* 191 */ /* Unused */ 931 .llong .sys_ni_syscall /* 192 - reserved - mmap2 */ 932 .llong .sys_ni_syscall /* 193 - reserved - truncate64 */ 933 .llong .sys_ni_syscall /* 194 - reserved - ftruncate64 */ 934 .llong .sys_ni_syscall /* 195 - reserved - stat64 */ 935 .llong .sys_ni_syscall /* 196 - reserved - lstat64 */ 936 .llong .sys_ni_syscall /* 197 - reserved - fstat64 */ 937 .llong .sys_pciconfig_read /* 198 */ 938 .llong .sys_pciconfig_write /* 199 */ 939 .llong .sys_pciconfig_iobase /* 200 */ 940 .llong .sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ 941 .llong .sys_getdents64 /* 202 */ 942 .llong .sys_pivot_root /* 203 */ 943 .llong .sys_ni_syscall /* 204 */ 944 .llong .sys_madvise /* 205 */ 945 .llong .sys_mincore /* 206 */ 946 .llong .sys_gettid /* 207 */ 947 .llong .sys_perfmonctl /* Put this here for now ... */ 948 .rept NR_syscalls-222 949 .llong .sys_ni_syscall 950 .endr 951