162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * uctx.h: Sparc64 {set,get}context() register state layouts.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __SPARC64_UCTX_H
962306a36Sopenharmony_ci#define __SPARC64_UCTX_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define MC_TSTATE	0
1262306a36Sopenharmony_ci#define MC_PC		1
1362306a36Sopenharmony_ci#define MC_NPC		2
1462306a36Sopenharmony_ci#define MC_Y		3
1562306a36Sopenharmony_ci#define MC_G1		4
1662306a36Sopenharmony_ci#define MC_G2		5
1762306a36Sopenharmony_ci#define MC_G3		6
1862306a36Sopenharmony_ci#define MC_G4		7
1962306a36Sopenharmony_ci#define MC_G5		8
2062306a36Sopenharmony_ci#define MC_G6		9
2162306a36Sopenharmony_ci#define MC_G7		10
2262306a36Sopenharmony_ci#define MC_O0		11
2362306a36Sopenharmony_ci#define MC_O1		12
2462306a36Sopenharmony_ci#define MC_O2		13
2562306a36Sopenharmony_ci#define MC_O3		14
2662306a36Sopenharmony_ci#define MC_O4		15
2762306a36Sopenharmony_ci#define MC_O5		16
2862306a36Sopenharmony_ci#define MC_O6		17
2962306a36Sopenharmony_ci#define MC_O7		18
3062306a36Sopenharmony_ci#define MC_NGREG	19
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_citypedef unsigned long mc_greg_t;
3362306a36Sopenharmony_citypedef mc_greg_t mc_gregset_t[MC_NGREG];
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define MC_MAXFPQ	16
3662306a36Sopenharmony_cistruct mc_fq {
3762306a36Sopenharmony_ci	unsigned long	*mcfq_addr;
3862306a36Sopenharmony_ci	unsigned int	mcfq_insn;
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct mc_fpu {
4262306a36Sopenharmony_ci	union {
4362306a36Sopenharmony_ci		unsigned int	sregs[32];
4462306a36Sopenharmony_ci		unsigned long	dregs[32];
4562306a36Sopenharmony_ci		long double	qregs[16];
4662306a36Sopenharmony_ci	} mcfpu_fregs;
4762306a36Sopenharmony_ci	unsigned long	mcfpu_fsr;
4862306a36Sopenharmony_ci	unsigned long	mcfpu_fprs;
4962306a36Sopenharmony_ci	unsigned long	mcfpu_gsr;
5062306a36Sopenharmony_ci	struct mc_fq	*mcfpu_fq;
5162306a36Sopenharmony_ci	unsigned char	mcfpu_qcnt;
5262306a36Sopenharmony_ci	unsigned char	mcfpu_qentsz;
5362306a36Sopenharmony_ci	unsigned char	mcfpu_enab;
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_citypedef struct mc_fpu mc_fpu_t;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_citypedef struct {
5862306a36Sopenharmony_ci	mc_gregset_t	mc_gregs;
5962306a36Sopenharmony_ci	mc_greg_t	mc_fp;
6062306a36Sopenharmony_ci	mc_greg_t	mc_i7;
6162306a36Sopenharmony_ci	mc_fpu_t	mc_fpregs;
6262306a36Sopenharmony_ci} mcontext_t;
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_cistruct ucontext {
6562306a36Sopenharmony_ci	struct ucontext		*uc_link;
6662306a36Sopenharmony_ci	unsigned long		uc_flags;
6762306a36Sopenharmony_ci	sigset_t		uc_sigmask;
6862306a36Sopenharmony_ci	mcontext_t		uc_mcontext;
6962306a36Sopenharmony_ci};
7062306a36Sopenharmony_citypedef struct ucontext ucontext_t;
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci#endif /* __SPARC64_UCTX_H */
73