162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Author: Hanlu Li <lihanlu@loongson.cn>
462306a36Sopenharmony_ci *         Huacai Chen <chenhuacai@loongson.cn>
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci#ifndef _UAPI_ASM_PTRACE_H
962306a36Sopenharmony_ci#define _UAPI_ASM_PTRACE_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifndef __KERNEL__
1462306a36Sopenharmony_ci#include <stdint.h>
1562306a36Sopenharmony_ci#endif
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/*
1862306a36Sopenharmony_ci * For PTRACE_{POKE,PEEK}USR. 0 - 31 are GPRs,
1962306a36Sopenharmony_ci * 32 is syscall's original ARG0, 33 is PC, 34 is BADVADDR.
2062306a36Sopenharmony_ci */
2162306a36Sopenharmony_ci#define GPR_BASE	0
2262306a36Sopenharmony_ci#define GPR_NUM		32
2362306a36Sopenharmony_ci#define GPR_END		(GPR_BASE + GPR_NUM - 1)
2462306a36Sopenharmony_ci#define ARG0		(GPR_END + 1)
2562306a36Sopenharmony_ci#define PC		(GPR_END + 2)
2662306a36Sopenharmony_ci#define BADVADDR	(GPR_END + 3)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define NUM_FPU_REGS	32
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct user_pt_regs {
3162306a36Sopenharmony_ci	/* Main processor registers. */
3262306a36Sopenharmony_ci	unsigned long regs[32];
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	/* Original syscall arg0. */
3562306a36Sopenharmony_ci	unsigned long orig_a0;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	/* Special CSR registers. */
3862306a36Sopenharmony_ci	unsigned long csr_era;
3962306a36Sopenharmony_ci	unsigned long csr_badv;
4062306a36Sopenharmony_ci	unsigned long reserved[10];
4162306a36Sopenharmony_ci} __attribute__((aligned(8)));
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistruct user_fp_state {
4462306a36Sopenharmony_ci	uint64_t fpr[32];
4562306a36Sopenharmony_ci	uint64_t fcc;
4662306a36Sopenharmony_ci	uint32_t fcsr;
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistruct user_lsx_state {
5062306a36Sopenharmony_ci	/* 32 registers, 128 bits width per register. */
5162306a36Sopenharmony_ci	uint64_t vregs[32*2];
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cistruct user_lasx_state {
5562306a36Sopenharmony_ci	/* 32 registers, 256 bits width per register. */
5662306a36Sopenharmony_ci	uint64_t vregs[32*4];
5762306a36Sopenharmony_ci};
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistruct user_lbt_state {
6062306a36Sopenharmony_ci	uint64_t scr[4];
6162306a36Sopenharmony_ci	uint32_t eflags;
6262306a36Sopenharmony_ci	uint32_t ftop;
6362306a36Sopenharmony_ci};
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cistruct user_watch_state {
6662306a36Sopenharmony_ci	uint64_t dbg_info;
6762306a36Sopenharmony_ci	struct {
6862306a36Sopenharmony_ci		uint64_t    addr;
6962306a36Sopenharmony_ci		uint64_t    mask;
7062306a36Sopenharmony_ci		uint32_t    ctrl;
7162306a36Sopenharmony_ci		uint32_t    pad;
7262306a36Sopenharmony_ci	} dbg_regs[8];
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci#define PTRACE_SYSEMU			0x1f
7662306a36Sopenharmony_ci#define PTRACE_SYSEMU_SINGLESTEP	0x20
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci#endif /* _UAPI_ASM_PTRACE_H */
79