~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/include/asm/vdso_datapage.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 #ifndef _VDSO_DATAPAGE_H
  3 #define _VDSO_DATAPAGE_H
  4 #ifdef __KERNEL__
  5 
  6 /*
  7  * Copyright (C) 2002 Peter Bergner <bergner@vnet.ibm.com>, IBM
  8  * Copyright (C) 2005 Benjamin Herrenschmidy <benh@kernel.crashing.org>,
  9  *                    IBM Corp.
 10  */
 11 
 12 
 13 /*
 14  * Note about this structure:
 15  *
 16  * This structure was historically called systemcfg and exposed to
 17  * userland via /proc/ppc64/systemcfg. Unfortunately, this became an
 18  * ABI issue as some proprietary software started relying on being able
 19  * to mmap() it, thus we have to keep the base layout at least for a
 20  * few kernel versions.
 21  *
 22  * However, since ppc32 doesn't suffer from this backward handicap,
 23  * a simpler version of the data structure is used there with only the
 24  * fields actually used by the vDSO.
 25  *
 26  */
 27 
 28 /*
 29  * If the major version changes we are incompatible.
 30  * Minor version changes are a hint.
 31  */
 32 #define SYSTEMCFG_MAJOR 1
 33 #define SYSTEMCFG_MINOR 1
 34 
 35 #ifndef __ASSEMBLY__
 36 
 37 #include <linux/unistd.h>
 38 #include <linux/time.h>
 39 #include <vdso/datapage.h>
 40 
 41 #define SYSCALL_MAP_SIZE      ((NR_syscalls + 31) / 32)
 42 
 43 /*
 44  * So here is the ppc64 backward compatible version
 45  */
 46 
 47 #ifdef CONFIG_PPC64
 48 
 49 struct vdso_arch_data {
 50         __u8  eye_catcher[16];          /* Eyecatcher: SYSTEMCFG:PPC64  0x00 */
 51         struct {                        /* Systemcfg version numbers         */
 52                 __u32 major;            /* Major number                 0x10 */
 53                 __u32 minor;            /* Minor number                 0x14 */
 54         } version;
 55 
 56         /* Note about the platform flags: it now only contains the lpar
 57          * bit. The actual platform number is dead and buried
 58          */
 59         __u32 platform;                 /* Platform flags               0x18 */
 60         __u32 processor;                /* Processor type               0x1C */
 61         __u64 processorCount;           /* # of physical processors     0x20 */
 62         __u64 physicalMemorySize;       /* Size of real memory(B)       0x28 */
 63         __u64 tb_orig_stamp;            /* (NU) Timebase at boot        0x30 */
 64         __u64 tb_ticks_per_sec;         /* Timebase tics / sec          0x38 */
 65         __u64 tb_to_xs;                 /* (NU) Inverse of TB to 2^20   0x40 */
 66         __u64 stamp_xsec;               /* (NU)                         0x48 */
 67         __u64 tb_update_count;          /* (NU) Timebase atomicity ctr  0x50 */
 68         __u32 tz_minuteswest;           /* (NU) Min. west of Greenwich  0x58 */
 69         __u32 tz_dsttime;               /* (NU) Type of dst correction  0x5C */
 70         __u32 dcache_size;              /* L1 d-cache size              0x60 */
 71         __u32 dcache_line_size;         /* L1 d-cache line size         0x64 */
 72         __u32 icache_size;              /* L1 i-cache size              0x68 */
 73         __u32 icache_line_size;         /* L1 i-cache line size         0x6C */
 74 
 75         /* those additional ones don't have to be located anywhere
 76          * special as they were not part of the original systemcfg
 77          */
 78         __u32 dcache_block_size;                /* L1 d-cache block size     */
 79         __u32 icache_block_size;                /* L1 i-cache block size     */
 80         __u32 dcache_log_block_size;            /* L1 d-cache log block size */
 81         __u32 icache_log_block_size;            /* L1 i-cache log block size */
 82         __u32 syscall_map[SYSCALL_MAP_SIZE];    /* Map of syscalls  */
 83         __u32 compat_syscall_map[SYSCALL_MAP_SIZE];     /* Map of compat syscalls */
 84 
 85         struct vdso_data data[CS_BASES];
 86 };
 87 
 88 #else /* CONFIG_PPC64 */
 89 
 90 /*
 91  * And here is the simpler 32 bits version
 92  */
 93 struct vdso_arch_data {
 94         __u64 tb_ticks_per_sec;         /* Timebase tics / sec          0x38 */
 95         __u32 syscall_map[SYSCALL_MAP_SIZE]; /* Map of syscalls */
 96         __u32 compat_syscall_map[0];    /* No compat syscalls on PPC32 */
 97         struct vdso_data data[CS_BASES];
 98 };
 99 
100 #endif /* CONFIG_PPC64 */
101 
102 extern struct vdso_arch_data *vdso_data;
103 
104 #else /* __ASSEMBLY__ */
105 
106 .macro get_datapage ptr
107         bcl     20, 31, .+4
108 999:
109         mflr    \ptr
110         addis   \ptr, \ptr, (_vdso_datapage - 999b)@ha
111         addi    \ptr, \ptr, (_vdso_datapage - 999b)@l
112 .endm
113 
114 #include <asm/asm-offsets.h>
115 #include <asm/page.h>
116 
117 .macro get_realdatapage ptr scratch
118         get_datapage \ptr
119 #ifdef CONFIG_TIME_NS
120         lwz     \scratch, VDSO_CLOCKMODE_OFFSET(\ptr)
121         xoris   \scratch, \scratch, VDSO_CLOCKMODE_TIMENS@h
122         xori    \scratch, \scratch, VDSO_CLOCKMODE_TIMENS@l
123         cntlzw  \scratch, \scratch
124         rlwinm  \scratch, \scratch, PAGE_SHIFT - 5, 1 << PAGE_SHIFT
125         add     \ptr, \ptr, \scratch
126 #endif
127 .endm
128 
129 #endif /* __ASSEMBLY__ */
130 
131 #endif /* __KERNEL__ */
132 #endif /* _SYSTEMCFG_H */
133 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php