Subversion Repositories HelenOS

Rev

Rev 2128 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2128 Rev 2465
Line 1... Line 1...
1
/*
1
/*
2
 * Copyright (c) 2005 Martin Decky
2
 * Copyright (c) 2007 Pavel Jancik
3
 * All rights reserved.
3
 * All rights reserved.
4
 *
4
 *
5
 * Redistribution and use in source and binary forms, with or without
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
6
 * modification, are permitted provided that the following conditions
7
 * are met:
7
 * are met:
Line 28... Line 28...
28
 
28
 
29
/** @addtogroup libcarm32
29
/** @addtogroup libcarm32
30
 * @{
30
 * @{
31
 */
31
 */
32
/** @file
32
/** @file
33
  * @ingroup libcarm32 
33
 *  @brief Syscall routine.
34
 */
34
 */
35
 
35
 
36
#include <libc.h>
36
#include <libc.h>
37
 
37
 
-
 
38
 
-
 
39
/** Syscall routine.
-
 
40
 *
-
 
41
 *  Stores p1-p4, id to r0-r4 registers and calls <code>swi</code>
-
 
42
 *  instruction. Returned value is read from r0 register.
-
 
43
 *
-
 
44
 *  @param p1 Parameter 1.
-
 
45
 *  @param p2 Parameter 2.
-
 
46
 *  @param p3 Parameter 3.
-
 
47
 *  @param p4 Parameter 4.
-
 
48
 *  @param id Number of syscall.
-
 
49
 *
-
 
50
 *  @return Syscall return value.
-
 
51
 */
38
sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3,
52
sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3,
39
    const sysarg_t p4, const syscall_t id)
53
    const sysarg_t p4, const syscall_t id)
40
{
54
{
-
 
55
    register sysarg_t __arm_reg_r0 asm("r0") = p1;
-
 
56
    register sysarg_t __arm_reg_r1 asm("r1") = p2;
-
 
57
    register sysarg_t __arm_reg_r2 asm("r2") = p3;
-
 
58
    register sysarg_t __arm_reg_r3 asm("r3") = p4;
-
 
59
    register sysarg_t __arm_reg_r4 asm("r4") = id;
-
 
60
 
41
    /* TODO */
61
    asm volatile ( "swi"
-
 
62
        : "=r" (__arm_reg_r0)
-
 
63
        : "r"  (__arm_reg_r0),
-
 
64
          "r"  (__arm_reg_r1),
-
 
65
          "r"  (__arm_reg_r2),
-
 
66
          "r"  (__arm_reg_r3),
-
 
67
          "r"  (__arm_reg_r4)
-
 
68
    );
-
 
69
 
42
    return 0;
70
    return __arm_reg_r0;
43
}
71
}
44
 
72
 
45
/** @}
73
/** @}
46
 */
74
 */