1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  linux/include/asm-arm/fpstate.h
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  Copyright (C) 1995 Russell King
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This program is free software; you can redistribute it and/or modify
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * it under the terms of the GNU General Public License version 2 as
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * published by the Free Software Foundation.
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __ASM_ARM_FPSTATE_H
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __ASM_ARM_FPSTATE_H
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __ASSEMBLY__
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * VFP storage area has:
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  - FPEXC, FPSCR, FPINST and FPINST2.
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  - 16 double precision data registers
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  - an implementation-dependant word of state for FLDMX/FSTMX
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  FPEXC will always be non-zero once the VFP has been used in this process.
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct vfp_hard_struct {
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u64 fpregs[16];
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if __LINUX_ARM_ARCH__ < 6
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 fpmx_state;
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 fpexc;
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 fpscr;
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	/*
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 * VFP implementation specific state
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 */
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 fpinst;
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 fpinst2;
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruunion vfp_state {
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct vfp_hard_struct	hard;
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void vfp_flush_thread(union vfp_state *);
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void vfp_release_thread(union vfp_state *);
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define FP_HARD_SIZE 35
48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct fp_hard_struct {
50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int save[FP_HARD_SIZE];		/* as yet undefined */
51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define FP_SOFT_SIZE 35
54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct fp_soft_struct {
56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int save[FP_SOFT_SIZE];		/* undefined information */
57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IWMMXT_SIZE	0x98
60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct iwmmxt_struct {
62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)];
63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruunion fp_state {
66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct fp_hard_struct	hard;
67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct fp_soft_struct	soft;
68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_IWMMXT
69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct iwmmxt_struct	iwmmxt;
70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define FP_SIZE (sizeof(union fp_state) / sizeof(int))
74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct crunch_state {
76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int	mvdx[16][2];
77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int	mvax[4][3];
78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int	dspsc[2];
79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CRUNCH_SIZE	sizeof(struct crunch_state)
82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
86