1b020632eSMartin Schwidefsky #ifndef __S390_VDSO_H__ 2b020632eSMartin Schwidefsky #define __S390_VDSO_H__ 3b020632eSMartin Schwidefsky 4b020632eSMartin Schwidefsky #ifdef __KERNEL__ 5b020632eSMartin Schwidefsky 6b020632eSMartin Schwidefsky /* Default link addresses for the vDSOs */ 7b020632eSMartin Schwidefsky #define VDSO32_LBASE 0 8b020632eSMartin Schwidefsky #define VDSO64_LBASE 0 9b020632eSMartin Schwidefsky 1013c6680aSMartin Schwidefsky #define VDSO_VERSION_STRING LINUX_2.6.29 11b020632eSMartin Schwidefsky 12b020632eSMartin Schwidefsky #ifndef __ASSEMBLY__ 13b020632eSMartin Schwidefsky 14b020632eSMartin Schwidefsky /* 15c742b31cSMartin Schwidefsky * Note about the vdso_data and vdso_per_cpu_data structures: 16b020632eSMartin Schwidefsky * 17c742b31cSMartin Schwidefsky * NEVER USE THEM IN USERSPACE CODE DIRECTLY. The layout of the 18b020632eSMartin Schwidefsky * structure is supposed to be known only to the function in the vdso 19b020632eSMartin Schwidefsky * itself and may change without notice. 20b020632eSMartin Schwidefsky */ 21b020632eSMartin Schwidefsky 22b020632eSMartin Schwidefsky struct vdso_data { 23b020632eSMartin Schwidefsky __u64 tb_update_count; /* Timebase atomicity ctr 0x00 */ 24b020632eSMartin Schwidefsky __u64 xtime_tod_stamp; /* TOD clock for xtime 0x08 */ 25b020632eSMartin Schwidefsky __u64 xtime_clock_sec; /* Kernel time 0x10 */ 26b020632eSMartin Schwidefsky __u64 xtime_clock_nsec; /* 0x18 */ 27b020632eSMartin Schwidefsky __u64 wtom_clock_sec; /* Wall to monotonic clock 0x20 */ 28b020632eSMartin Schwidefsky __u64 wtom_clock_nsec; /* 0x28 */ 29b020632eSMartin Schwidefsky __u32 tz_minuteswest; /* Minutes west of Greenwich 0x30 */ 30b020632eSMartin Schwidefsky __u32 tz_dsttime; /* Type of dst correction 0x34 */ 31c742b31cSMartin Schwidefsky __u32 ectg_available; 32c742b31cSMartin Schwidefsky }; 33c742b31cSMartin Schwidefsky 34c742b31cSMartin Schwidefsky struct vdso_per_cpu_data { 35c742b31cSMartin Schwidefsky __u64 ectg_timer_base; 36c742b31cSMartin Schwidefsky __u64 ectg_user_time; 37b020632eSMartin Schwidefsky }; 38b020632eSMartin Schwidefsky 39b020632eSMartin Schwidefsky extern struct vdso_data *vdso_data; 40b020632eSMartin Schwidefsky 41c742b31cSMartin Schwidefsky #ifdef CONFIG_64BIT 42c742b31cSMartin Schwidefsky int vdso_alloc_per_cpu(int cpu, struct _lowcore *lowcore); 43c742b31cSMartin Schwidefsky void vdso_free_per_cpu(int cpu, struct _lowcore *lowcore); 44c742b31cSMartin Schwidefsky #endif 45c742b31cSMartin Schwidefsky 46b020632eSMartin Schwidefsky #endif /* __ASSEMBLY__ */ 47b020632eSMartin Schwidefsky 48b020632eSMartin Schwidefsky #endif /* __KERNEL__ */ 49b020632eSMartin Schwidefsky 50b020632eSMartin Schwidefsky #endif /* __S390_VDSO_H__ */ 51