linux-old/arch/ppc64/kernel/sys32.S
<<
>>
Prefs
   1/* 
   2 * sys32.S: I-cache tricks for 32-bit compatability layer simple
   3 *          conversions.
   4 *
   5 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
   6 * Copyright (C) 1998 Jakub Jelinek   (jj@ultra.linux.cz)
   7 * Copyright (C) 2000 Ken Aaker (kdaaker@rchland.vnet.ibm.com)
   8 * For PPC ABI convention is parms in Regs 3-10.
   9 * The router in entry.S clears the high 32 bits in the first
  10 * 4 arguments (R3-R6).
  11 *
  12 *      This program is free software; you can redistribute it and/or
  13 *      modify it under the terms of the GNU General Public License
  14 *      as published by the Free Software Foundation; either version
  15 *      2 of the License, or (at your option) any later version.
  16 */
  17
  18#include "ppc_asm.h"
  19#include <asm/errno.h>
  20#include <asm/processor.h>
  21
  22        .text
  23
  24_GLOBAL(sys32_mmap)
  25        clrldi          r7, r7, 32      /* int fd parm */
  26        clrldi          r8, r8, 32      /* off_t offset parm */
  27        b               .sys_mmap
  28
  29_GLOBAL(sys32_lseek)
  30        extsw           r4,r4           /* sign extend off_t offset parm */
  31        b               .sys_lseek
  32
  33_GLOBAL(sys32_sendto)
  34        clrldi          r7, r7, 32      /* struct sockaddr *addr parm */
  35        clrldi          r8, r8, 32      /* int addr_len parm */
  36        b               .sys_sendto
  37
  38_GLOBAL(sys32_recvfrom)
  39        clrldi          r7, r7, 32      /* struct sockaddr *addr parm */
  40        clrldi          r8, r8, 32      /* int *addr_len parm */
  41        b               .sys_recvfrom
  42
  43_GLOBAL(sys32_getsockopt)
  44        clrldi          r7, r7, 32      /* int *optlen parm */
  45        b               .sys_getsockopt
  46
  47_GLOBAL(sys32_bdflush)
  48        extsw           r4,r4           /* sign extend long data parm */
  49        b               .sys_bdflush
  50
  51_GLOBAL(ppc32_mmap2)
  52        clrldi          r7, r7, 32      /* unsigned long fd parm */
  53        clrldi          r8, r8, 32      /* unsigned long pgoff */
  54        b               .sys32_mmap2
  55
  56_GLOBAL(sys32_socketcall)       /* r3=call, r4=args */
  57        cmpwi           r3, 1
  58        blt-            .do_einval
  59        cmpwi           r3, 17
  60        bgt-            .do_einval
  61        subi            r3, r3, 1       /* index into socketcall_table vectors and jmp */
  62        sldi            r3, r3, 3       /* each entry is 8 bytes */
  63        LOADADDR(r10,.socketcall_table_begin)
  64        ldx             r10, r10, r3
  65        mtctr           r10
  66        bctr
  67
  68/* Socket function vectored fix ups for 32 bit */
  69_STATIC(do_sys_socket) /* sys_socket(int, int, int) */
  70        mr              r10,r4
  71        lwa             r3,0(r10)
  72        lwa             r4,4(r10)
  73        lwa             r5,8(r10)
  74        b               .sys_socket
  75
  76_STATIC(do_sys_bind) /* sys_bind(int fd, struct sockaddr *, int) */
  77        mr              r10,r4
  78        lwa             r3,0(r10)
  79        lwz             r4,4(r10)
  80        lwa             r5,8(r10)
  81        b               .sys_bind
  82
  83_STATIC(do_sys_connect) /* sys_connect(int, struct sockaddr *, int) */
  84        mr              r10,r4
  85        lwa             r3,0(r10)
  86        lwz             r4,4(r10)
  87        lwa             r5,8(r10)
  88        b               .sys_connect
  89
  90_STATIC(do_sys_listen) /* sys_listen(int, int) */
  91        mr              r10,r4
  92        lwa             r3,0(r10)
  93        lwa             r4,4(r10)
  94        b               .sys_listen
  95
  96_STATIC(do_sys_accept) /* sys_accept(int, struct sockaddr *, int *) */
  97        mr              r10,r4
  98        lwa             r3,0(r10)
  99        lwz             r4,4(r10)
 100        lwz             r5,8(r10)
 101        b               .sys_accept
 102
 103_STATIC(do_sys_getsockname) /* sys_getsockname(int, struct sockaddr *, int *) */
 104        mr              r10,r4
 105        lwa             r3,0(r10)
 106        lwz             r4,4(r10)
 107        lwz             r5,8(r10)
 108        b               .sys_getsockname
 109
 110_STATIC(do_sys_getpeername) /* sys_getpeername(int, struct sockaddr *, int *) */
 111        mr              r10,r4
 112        lwa             r3,0(r10)
 113        lwz             r4,4(r10)
 114        lwz             r5,8(r10)
 115        b               .sys_getpeername
 116
 117_STATIC(do_sys_socketpair) /* sys_socketpair(int, int, int, int *) */
 118        mr              r10,r4
 119        lwa             r3,0(r10)
 120        lwa             r4,4(r10)
 121        lwa             r5,8(r10)
 122        lwz             r6,12(r10)
 123        b               .sys_socketpair
 124
 125_STATIC(do_sys_send) /* sys_send(int, void *, size_t, unsigned int) */
 126        mr              r10,r4
 127        lwa             r3,0(r10)
 128        lwz             r4,4(r10)
 129        lwz             r5,8(r10)
 130        lwz             r6,12(r10)
 131        b               .sys_send
 132
 133_STATIC(do_sys_recv) /* sys_recv(int, void *, size_t, unsigned int) */
 134        mr              r10,r4
 135        lwa             r3,0(r10)
 136        lwz             r4,4(r10)
 137        lwz             r5,8(r10)
 138        lwz             r6,12(r10)
 139        b               .sys_recv
 140
 141_STATIC(do_sys_sendto) /* sys32_sendto(int, u32, __kernel_size_t32, unsigned int, u32, int) */
 142        mr              r10,r4
 143        lwa             r3,0(r10)
 144        lwz             r4,4(r10)
 145        lwz             r5,8(r10)
 146        lwz             r6,12(r10)
 147        lwz             r7,16(r10)
 148        lwa             r8,20(r10)
 149        b               .sys32_sendto
 150
 151_STATIC(do_sys_recvfrom) /* sys32_recvfrom(int, u32, __kernel_size_t32, unsigned int, u32, u32) */
 152        mr              r10,r4
 153        lwa             r3,0(r10)
 154        lwz             r4,4(r10)
 155        lwz             r5,8(r10)
 156        lwz             r6,12(r10)
 157        lwz             r7,16(r10)
 158        lwz             r8,20(r10)
 159        b               .sys32_recvfrom
 160
 161_STATIC(do_sys_shutdown) /* sys_shutdown(int, int) */
 162        mr              r10,r4
 163        lwa             r3,0(r10)
 164        lwa             r4,4(r10)
 165        b               .sys_shutdown
 166
 167_STATIC(do_sys_setsockopt) /* sys32_setsockopt(int, int, int, char *, int) */
 168        mr              r10,r4
 169        lwa             r3,0(r10)
 170        lwa             r4,4(r10)
 171        lwa             r5,8(r10)
 172        lwz             r6,12(r10)
 173        lwa             r7,16(r10)
 174        b               .sys32_setsockopt
 175
 176_STATIC(do_sys_getsockopt) /* sys32_getsockopt(int, int, int, u32, u32) */
 177        mr              r10,r4
 178        lwa             r3,0(r10)
 179        lwa             r4,4(r10)
 180        lwa             r5,8(r10)
 181        lwz             r6,12(r10)
 182        lwz             r7,16(r10)
 183        b               .sys32_getsockopt
 184
 185_STATIC(do_sys_sendmsg) /* sys32_sendmsg(int, struct msghdr32 *, unsigned int) */
 186        mr              r10,r4
 187        lwa             r3,0(r10)
 188        lwz             r4,4(r10)
 189        lwa             r5,8(r10)
 190        b               .sys32_sendmsg
 191
 192_STATIC(do_sys_recvmsg) /* sys32_recvmsg(int, struct msghdr32 *, unsigned int) */
 193        mr              r10,r4
 194        lwa             r3,0(r10)
 195        lwz             r4,4(r10)
 196        lwa             r5,8(r10)
 197        b               .sys32_recvmsg
 198
 199_STATIC(do_einval)
 200        li      r3,-EINVAL
 201        b       .ret_from_syscall_1
 202_STATIC(do_efault)
 203        li      r3,-EFAULT
 204        b       .ret_from_syscall_1
 205
 206        .data
 207        .align  8
 208_GLOBAL(socketcall_table_begin)
 209        .llong          .do_sys_socket
 210        .llong          .do_sys_bind
 211        .llong          .do_sys_connect
 212        .llong          .do_sys_listen
 213        .llong          .do_sys_accept
 214        .llong          .do_sys_getsockname
 215        .llong          .do_sys_getpeername
 216        .llong          .do_sys_socketpair
 217        .llong          .do_sys_send
 218        .llong          .do_sys_recv
 219        .llong          .do_sys_sendto
 220        .llong          .do_sys_recvfrom
 221        .llong          .do_sys_shutdown
 222        .llong          .do_sys_setsockopt
 223        .llong          .do_sys_getsockopt
 224        .llong          .do_sys_sendmsg
 225        .llong          .do_sys_recvmsg
 226_GLOBAL(socketcall_table_end)
 227        .section        __ex_table,"a"
 228        .align          3
 229        .llong          .socketcall_table_begin
 230        .llong          0
 231        .llong          .socketcall_table_end
 232        .llong          .do_efault
 233        .previous
 234
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.