Linux Audio

Check our new training course

Loading...
v4.6
 
  1/*
  2 * Copyright (C) 2011 Texas Instruments Incorporated
  3 * Author: Mark Salter <msalter@redhat.com>
  4 *
  5 * This program is free software; you can redistribute it and/or modify
  6 * it under the terms of the GNU General Public License as published by
  7 * the Free Software Foundation; either version 2 of the License, or
  8 * (at your option) any later version.
  9 */
 10
 11#ifndef __ASM_C6X_SYSCALL_H
 12#define __ASM_C6X_SYSCALL_H
 13
 
 14#include <linux/err.h>
 15#include <linux/sched.h>
 16
 17static inline int syscall_get_nr(struct task_struct *task,
 18				 struct pt_regs *regs)
 19{
 20	return regs->b0;
 21}
 22
 23static inline void syscall_rollback(struct task_struct *task,
 24				    struct pt_regs *regs)
 25{
 26	/* do nothing */
 27}
 28
 29static inline long syscall_get_error(struct task_struct *task,
 30				     struct pt_regs *regs)
 31{
 32	return IS_ERR_VALUE(regs->a4) ? regs->a4 : 0;
 33}
 34
 35static inline long syscall_get_return_value(struct task_struct *task,
 36					    struct pt_regs *regs)
 37{
 38	return regs->a4;
 39}
 40
 41static inline void syscall_set_return_value(struct task_struct *task,
 42					    struct pt_regs *regs,
 43					    int error, long val)
 44{
 45	regs->a4 = error ?: val;
 46}
 47
 48static inline void syscall_get_arguments(struct task_struct *task,
 49					 struct pt_regs *regs, unsigned int i,
 50					 unsigned int n, unsigned long *args)
 51{
 52	switch (i) {
 53	case 0:
 54		if (!n--)
 55			break;
 56		*args++ = regs->a4;
 57	case 1:
 58		if (!n--)
 59			break;
 60		*args++ = regs->b4;
 61	case 2:
 62		if (!n--)
 63			break;
 64		*args++ = regs->a6;
 65	case 3:
 66		if (!n--)
 67			break;
 68		*args++ = regs->b6;
 69	case 4:
 70		if (!n--)
 71			break;
 72		*args++ = regs->a8;
 73	case 5:
 74		if (!n--)
 75			break;
 76		*args++ = regs->b8;
 77	case 6:
 78		if (!n--)
 79			break;
 80	default:
 81		BUG();
 82	}
 83}
 84
 85static inline void syscall_set_arguments(struct task_struct *task,
 86					 struct pt_regs *regs,
 87					 unsigned int i, unsigned int n,
 88					 const unsigned long *args)
 89{
 90	switch (i) {
 91	case 0:
 92		if (!n--)
 93			break;
 94		regs->a4 = *args++;
 95	case 1:
 96		if (!n--)
 97			break;
 98		regs->b4 = *args++;
 99	case 2:
100		if (!n--)
101			break;
102		regs->a6 = *args++;
103	case 3:
104		if (!n--)
105			break;
106		regs->b6 = *args++;
107	case 4:
108		if (!n--)
109			break;
110		regs->a8 = *args++;
111	case 5:
112		if (!n--)
113			break;
114		regs->a9 = *args++;
115	case 6:
116		if (!n)
117			break;
118	default:
119		BUG();
120	}
121}
122
123#endif /* __ASM_C6X_SYSCALLS_H */
v5.9
 1/* SPDX-License-Identifier: GPL-2.0-or-later */
 2/*
 3 * Copyright (C) 2011 Texas Instruments Incorporated
 4 * Author: Mark Salter <msalter@redhat.com>
 
 
 
 
 
 5 */
 6
 7#ifndef __ASM_C6X_SYSCALL_H
 8#define __ASM_C6X_SYSCALL_H
 9
10#include <uapi/linux/audit.h>
11#include <linux/err.h>
12#include <linux/sched.h>
13
14static inline int syscall_get_nr(struct task_struct *task,
15				 struct pt_regs *regs)
16{
17	return regs->b0;
18}
19
20static inline void syscall_rollback(struct task_struct *task,
21				    struct pt_regs *regs)
22{
23	/* do nothing */
24}
25
26static inline long syscall_get_error(struct task_struct *task,
27				     struct pt_regs *regs)
28{
29	return IS_ERR_VALUE(regs->a4) ? regs->a4 : 0;
30}
31
32static inline long syscall_get_return_value(struct task_struct *task,
33					    struct pt_regs *regs)
34{
35	return regs->a4;
36}
37
38static inline void syscall_set_return_value(struct task_struct *task,
39					    struct pt_regs *regs,
40					    int error, long val)
41{
42	regs->a4 = error ?: val;
43}
44
45static inline void syscall_get_arguments(struct task_struct *task,
46					 struct pt_regs *regs,
47					 unsigned long *args)
48{
49	*args++ = regs->a4;
50	*args++ = regs->b4;
51	*args++ = regs->a6;
52	*args++ = regs->b6;
53	*args++ = regs->a8;
54	*args   = regs->b8;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55}
56
57static inline void syscall_set_arguments(struct task_struct *task,
58					 struct pt_regs *regs,
 
59					 const unsigned long *args)
60{
61	regs->a4 = *args++;
62	regs->b4 = *args++;
63	regs->a6 = *args++;
64	regs->b6 = *args++;
65	regs->a8 = *args++;
66	regs->a9 = *args;
67}
68
69static inline int syscall_get_arch(struct task_struct *task)
70{
71	return IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)
72		? AUDIT_ARCH_C6XBE : AUDIT_ARCH_C6X;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73}
74
75#endif /* __ASM_C6X_SYSCALLS_H */