Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 1 | #ifndef __ASM_X86_XSAVE_H |
| 2 | #define __ASM_X86_XSAVE_H |
| 3 | |
H. Peter Anvin | 6152e4b | 2008-07-29 17:23:16 -0700 | [diff] [blame] | 4 | #include <linux/types.h> |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 5 | #include <asm/processor.h> |
Ingo Molnar | 59a36d1 | 2015-04-30 08:53:18 +0200 | [diff] [blame] | 6 | #include <linux/uaccess.h> |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 7 | |
Liu, Jinsong | 56c103e | 2014-02-21 17:39:02 +0000 | [diff] [blame] | 8 | /* Bit 63 of XCR0 is reserved for future expansion */ |
Dave Hansen | d91cab7 | 2015-09-02 16:31:26 -0700 | [diff] [blame] | 9 | #define XFEATURE_MASK_EXTEND (~(XFEATURE_MASK_FPSSE | (1ULL << 63))) |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 10 | |
Ingo Molnar | 677b98b | 2015-04-28 09:40:26 +0200 | [diff] [blame] | 11 | #define XSTATE_CPUID 0x0000000d |
| 12 | |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 13 | #define FXSAVE_SIZE 512 |
| 14 | |
Sheng Yang | 2d5b5a6 | 2010-06-13 17:29:39 +0800 | [diff] [blame] | 15 | #define XSAVE_HDR_SIZE 64 |
| 16 | #define XSAVE_HDR_OFFSET FXSAVE_SIZE |
| 17 | |
| 18 | #define XSAVE_YMM_SIZE 256 |
| 19 | #define XSAVE_YMM_OFFSET (XSAVE_HDR_SIZE + XSAVE_HDR_OFFSET) |
Sheng Yang | 5ee481d | 2010-05-17 17:22:23 +0800 | [diff] [blame] | 20 | |
Yu-cheng Yu | 1499ce2 | 2016-06-17 13:07:16 -0700 | [diff] [blame] | 21 | /* Supervisor features */ |
| 22 | #define XFEATURE_MASK_SUPERVISOR (XFEATURE_MASK_PT) |
| 23 | |
Andy Lutomirski | 2f7fada | 2016-10-04 20:34:32 -0400 | [diff] [blame] | 24 | /* All currently supported features */ |
| 25 | #define XCNTXT_MASK (XFEATURE_MASK_FP | \ |
Yu-cheng Yu | a65050c | 2016-03-09 16:28:54 -0800 | [diff] [blame] | 26 | XFEATURE_MASK_SSE | \ |
yu-cheng yu | 394db20 | 2016-01-06 14:24:54 -0800 | [diff] [blame] | 27 | XFEATURE_MASK_YMM | \ |
| 28 | XFEATURE_MASK_OPMASK | \ |
| 29 | XFEATURE_MASK_ZMM_Hi256 | \ |
Dave Hansen | c8df400 | 2016-02-12 13:02:04 -0800 | [diff] [blame] | 30 | XFEATURE_MASK_Hi16_ZMM | \ |
Andy Lutomirski | 2f7fada | 2016-10-04 20:34:32 -0400 | [diff] [blame] | 31 | XFEATURE_MASK_PKRU | \ |
| 32 | XFEATURE_MASK_BNDREGS | \ |
| 33 | XFEATURE_MASK_BNDCSR) |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 34 | |
Suresh Siddha | b359e8a | 2008-07-29 10:29:20 -0700 | [diff] [blame] | 35 | #ifdef CONFIG_X86_64 |
| 36 | #define REX_PREFIX "0x48, " |
| 37 | #else |
| 38 | #define REX_PREFIX |
| 39 | #endif |
| 40 | |
Ingo Molnar | 614df7f | 2015-04-24 09:20:33 +0200 | [diff] [blame] | 41 | extern u64 xfeatures_mask; |
Suresh Siddha | 5b3efd5 | 2010-02-11 11:50:59 -0800 | [diff] [blame] | 42 | extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS]; |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 43 | |
Kees Cook | 404f6aa | 2016-08-08 16:29:06 -0700 | [diff] [blame] | 44 | extern void __init update_regset_xstate_info(unsigned int size, |
| 45 | u64 xstate_mask); |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 46 | |
Dave Hansen | 0a26537 | 2015-09-02 16:31:24 -0700 | [diff] [blame] | 47 | void fpu__xstate_clear_all_cpu_caps(void); |
Ingo Molnar | c47ada3 | 2015-04-30 17:15:32 +0200 | [diff] [blame] | 48 | void *get_xsave_addr(struct xregs_state *xsave, int xstate); |
Dave Hansen | 04cd027 | 2015-06-07 11:37:00 -0700 | [diff] [blame] | 49 | const void *get_xsave_field_ptr(int xstate_field); |
Yu-cheng Yu | 99aa22d | 2016-05-20 10:47:08 -0700 | [diff] [blame] | 50 | int using_compacted_format(void); |
Ingo Molnar | 56583c9 | 2017-09-23 14:59:51 +0200 | [diff] [blame^] | 51 | int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int offset, unsigned int size); |
| 52 | int copy_xstate_to_user(void __user *ubuf, struct xregs_state *xsave, unsigned int offset, unsigned int size); |
Ingo Molnar | 656f083 | 2017-09-23 14:59:44 +0200 | [diff] [blame] | 53 | int copy_user_to_xstate(const void *kbuf, const void __user *ubuf, |
Yu-cheng Yu | 91c3dba | 2016-06-17 13:07:17 -0700 | [diff] [blame] | 54 | struct xregs_state *xsave); |
Suresh Siddha | dc1e35c | 2008-07-29 10:29:19 -0700 | [diff] [blame] | 55 | #endif |