cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

processor.h (2452B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3#ifndef __ASM_CSKY_PROCESSOR_H
      4#define __ASM_CSKY_PROCESSOR_H
      5
      6#include <linux/bitops.h>
      7#include <linux/cache.h>
      8#include <asm/ptrace.h>
      9#include <asm/current.h>
     10#include <abi/reg_ops.h>
     11#include <abi/regdef.h>
     12#include <abi/switch_context.h>
     13#ifdef CONFIG_CPU_HAS_FPU
     14#include <abi/fpu.h>
     15#endif
     16
     17struct cpuinfo_csky {
     18	unsigned long asid_cache;
     19} __aligned(SMP_CACHE_BYTES);
     20
     21extern struct cpuinfo_csky cpu_data[];
     22
     23/*
     24 * User space process size: 2GB. This is hardcoded into a few places,
     25 * so don't change it unless you know what you are doing.  TASK_SIZE
     26 * for a 64 bit kernel expandable to 8192EB, of which the current CSKY
     27 * implementations will "only" be able to use 1TB ...
     28 */
     29#define TASK_SIZE	(PAGE_OFFSET - (PAGE_SIZE * 8))
     30
     31#ifdef __KERNEL__
     32#define STACK_TOP       TASK_SIZE
     33#define STACK_TOP_MAX   STACK_TOP
     34#endif
     35
     36/* This decides where the kernel will search for a free chunk of vm
     37 * space during mmap's.
     38 */
     39#define TASK_UNMAPPED_BASE      (TASK_SIZE / 3)
     40
     41struct thread_struct {
     42	unsigned long  sp;        /* kernel stack pointer */
     43	unsigned long  trap_no;   /* saved status register */
     44
     45	/* FPU regs */
     46	struct user_fp __aligned(16) user_fp;
     47};
     48
     49#define INIT_THREAD  { \
     50	.sp = sizeof(init_stack) + (unsigned long) &init_stack, \
     51}
     52
     53/*
     54 * Do necessary setup to start up a newly executed thread.
     55 *
     56 * pass the data segment into user programs if it exists,
     57 * it can't hurt anything as far as I can tell
     58 */
     59#define start_thread(_regs, _pc, _usp)					\
     60do {									\
     61	(_regs)->pc = (_pc);						\
     62	(_regs)->regs[1] = 0; /* ABIV1 is R7, uClibc_main rtdl arg */	\
     63	(_regs)->regs[2] = 0;						\
     64	(_regs)->regs[3] = 0; /* ABIV2 is R7, use it? */		\
     65	(_regs)->sr &= ~PS_S;						\
     66	(_regs)->usp = (_usp);						\
     67} while (0)
     68
     69/* Forward declaration, a strange C thing */
     70struct task_struct;
     71
     72/* Free all resources held by a thread. */
     73static inline void release_thread(struct task_struct *dead_task)
     74{
     75}
     76
     77/* Prepare to copy thread state - unlazy all lazy status */
     78#define prepare_to_copy(tsk)    do { } while (0)
     79
     80extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
     81
     82unsigned long __get_wchan(struct task_struct *p);
     83
     84#define KSTK_EIP(tsk)		(task_pt_regs(tsk)->pc)
     85#define KSTK_ESP(tsk)		(task_pt_regs(tsk)->usp)
     86
     87#define task_pt_regs(p) \
     88	((struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1)
     89
     90#define cpu_relax() barrier()
     91
     92#endif /* __ASM_CSKY_PROCESSOR_H */