linux/arch/powerpc/include/asm/vdso_datapage.h
<<
>>
Prefs
   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
  49struct 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 */
  93struct 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
 102extern struct vdso_arch_data *vdso_data;
 103
 104#else /* __ASSEMBLY__ */
 105
 106.macro get_datapage ptr
 107        bcl     20, 31, .+4
 108999:
 109        mflr    \ptr
 110        addis   \ptr, \ptr, (_vdso_datapage - 999b)@ha
 111        addi    \ptr, \ptr, (_vdso_datapage - 999b)@l
 112.endm
 113
 114#endif /* __ASSEMBLY__ */
 115
 116#endif /* __KERNEL__ */
 117#endif /* _SYSTEMCFG_H */
 118