xref: /openbmc/linux/arch/xtensa/platforms/iss/include/platform/simcall-iss.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1  /* SPDX-License-Identifier: GPL-2.0 */
2  /* Copyright (C) 2021 Cadence Design Systems Inc. */
3  
4  #ifndef _XTENSA_PLATFORM_ISS_SIMCALL_ISS_H
5  #define _XTENSA_PLATFORM_ISS_SIMCALL_ISS_H
6  
7  /*
8   *  System call like services offered by the simulator host.
9   */
10  
11  #define SYS_nop		0	/* unused */
12  #define SYS_exit	1	/*x*/
13  #define SYS_fork	2
14  #define SYS_read	3	/*x*/
15  #define SYS_write	4	/*x*/
16  #define SYS_open	5	/*x*/
17  #define SYS_close	6	/*x*/
18  #define SYS_rename	7	/*x 38 - waitpid */
19  #define SYS_creat	8	/*x*/
20  #define SYS_link	9	/*x (not implemented on WIN32) */
21  #define SYS_unlink	10	/*x*/
22  #define SYS_execv	11	/* n/a - execve */
23  #define SYS_execve	12	/* 11 - chdir */
24  #define SYS_pipe	13	/* 42 - time */
25  #define SYS_stat	14	/* 106 - mknod */
26  #define SYS_chmod	15
27  #define SYS_chown	16	/* 202 - lchown */
28  #define SYS_utime	17	/* 30 - break */
29  #define SYS_wait	18	/* n/a - oldstat */
30  #define SYS_lseek	19	/*x*/
31  #define SYS_getpid	20
32  #define SYS_isatty	21	/* n/a - mount */
33  #define SYS_fstat	22	/* 108 - oldumount */
34  #define SYS_time	23	/* 13 - setuid */
35  #define SYS_gettimeofday 24	/*x 78 - getuid (not implemented on WIN32) */
36  #define SYS_times	25	/*X 43 - stime (Xtensa-specific implementation) */
37  #define SYS_socket      26
38  #define SYS_sendto      27
39  #define SYS_recvfrom    28
40  #define SYS_select_one  29      /* not compatible select, one file descriptor at the time */
41  #define SYS_bind        30
42  #define SYS_ioctl	31
43  
44  #define SYS_iss_argc	1000	/* returns value of argc */
45  #define SYS_iss_argv_size 1001	/* bytes needed for argv & arg strings */
46  #define SYS_iss_set_argv 1002	/* saves argv & arg strings at given addr */
47  
48  /*
49   * SYS_select_one specifiers
50   */
51  
52  #define  XTISS_SELECT_ONE_READ    1
53  #define  XTISS_SELECT_ONE_WRITE   2
54  #define  XTISS_SELECT_ONE_EXCEPT  3
55  
56  static int errno;
57  
__simc(int a,int b,int c,int d)58  static inline int __simc(int a, int b, int c, int d)
59  {
60  	register int a1 asm("a2") = a;
61  	register int b1 asm("a3") = b;
62  	register int c1 asm("a4") = c;
63  	register int d1 asm("a5") = d;
64  	__asm__ __volatile__ (
65  			"simcall\n"
66  			: "+r"(a1), "+r"(b1)
67  			: "r"(c1), "r"(d1)
68  			: "memory");
69  	errno = b1;
70  	return a1;
71  }
72  
73  #endif /* _XTENSA_PLATFORM_ISS_SIMCALL_ISS_H */
74