0001
0002 #ifndef __ASM_X86_XSAVE_H
0003 #define __ASM_X86_XSAVE_H
0004
0005 #include <linux/uaccess.h>
0006 #include <linux/types.h>
0007
0008 #include <asm/processor.h>
0009 #include <asm/fpu/api.h>
0010 #include <asm/user.h>
0011
0012
0013 #define XFEATURE_MASK_EXTEND (~(XFEATURE_MASK_FPSSE | (1ULL << 63)))
0014
0015 #define XSTATE_CPUID 0x0000000d
0016
0017 #define TILE_CPUID 0x0000001d
0018
0019 #define FXSAVE_SIZE 512
0020
0021 #define XSAVE_HDR_SIZE 64
0022 #define XSAVE_HDR_OFFSET FXSAVE_SIZE
0023
0024 #define XSAVE_YMM_SIZE 256
0025 #define XSAVE_YMM_OFFSET (XSAVE_HDR_SIZE + XSAVE_HDR_OFFSET)
0026
0027 #define XSAVE_ALIGNMENT 64
0028
0029
0030 #define XFEATURE_MASK_USER_SUPPORTED (XFEATURE_MASK_FP | \
0031 XFEATURE_MASK_SSE | \
0032 XFEATURE_MASK_YMM | \
0033 XFEATURE_MASK_OPMASK | \
0034 XFEATURE_MASK_ZMM_Hi256 | \
0035 XFEATURE_MASK_Hi16_ZMM | \
0036 XFEATURE_MASK_PKRU | \
0037 XFEATURE_MASK_BNDREGS | \
0038 XFEATURE_MASK_BNDCSR | \
0039 XFEATURE_MASK_XTILE)
0040
0041
0042
0043
0044
0045
0046 #define XFEATURE_MASK_USER_RESTORE \
0047 (XFEATURE_MASK_USER_SUPPORTED & ~XFEATURE_MASK_PKRU)
0048
0049
0050 #define XFEATURE_MASK_USER_DYNAMIC XFEATURE_MASK_XTILE_DATA
0051
0052
0053 #define XFEATURE_MASK_SUPERVISOR_SUPPORTED (XFEATURE_MASK_PASID)
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074 #define XFEATURE_MASK_INDEPENDENT (XFEATURE_MASK_LBR)
0075
0076
0077
0078
0079
0080 #define XFEATURE_MASK_SUPERVISOR_UNSUPPORTED (XFEATURE_MASK_PT)
0081
0082
0083 #define XFEATURE_MASK_SUPERVISOR_ALL (XFEATURE_MASK_SUPERVISOR_SUPPORTED | \
0084 XFEATURE_MASK_INDEPENDENT | \
0085 XFEATURE_MASK_SUPERVISOR_UNSUPPORTED)
0086
0087
0088
0089
0090
0091
0092 #define XFEATURE_MASK_FPSTATE (XFEATURE_MASK_USER_RESTORE | \
0093 XFEATURE_MASK_SUPERVISOR_SUPPORTED)
0094
0095
0096
0097
0098
0099 #define XFEATURE_MASK_SIGFRAME_INITOPT (XFEATURE_MASK_XTILE | \
0100 XFEATURE_MASK_USER_DYNAMIC)
0101
0102 extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
0103
0104 extern void __init update_regset_xstate_info(unsigned int size,
0105 u64 xstate_mask);
0106
0107 int xfeature_size(int xfeature_nr);
0108
0109 void xsaves(struct xregs_state *xsave, u64 mask);
0110 void xrstors(struct xregs_state *xsave, u64 mask);
0111
0112 int xfd_enable_feature(u64 xfd_err);
0113
0114 #ifdef CONFIG_X86_64
0115 DECLARE_STATIC_KEY_FALSE(__fpu_state_size_dynamic);
0116 #endif
0117
0118 #ifdef CONFIG_X86_64
0119 DECLARE_STATIC_KEY_FALSE(__fpu_state_size_dynamic);
0120
0121 static __always_inline __pure bool fpu_state_size_dynamic(void)
0122 {
0123 return static_branch_unlikely(&__fpu_state_size_dynamic);
0124 }
0125 #else
0126 static __always_inline __pure bool fpu_state_size_dynamic(void)
0127 {
0128 return false;
0129 }
0130 #endif
0131
0132 #endif