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 (3253B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
      4 *
      5 * vineetg: March 2009
      6 *  -Implemented task_pt_regs( )
      7 *
      8 * Amit Bhor, Sameer Dhavale, Ashwin Chaugule: Codito Technologies 2004
      9 */
     10
     11#ifndef __ASM_ARC_PROCESSOR_H
     12#define __ASM_ARC_PROCESSOR_H
     13
     14#ifndef __ASSEMBLY__
     15
     16#include <asm/ptrace.h>
     17#include <asm/dsp.h>
     18#include <asm/fpu.h>
     19
     20/* Arch specific stuff which needs to be saved per task.
     21 * However these items are not so important so as to earn a place in
     22 * struct thread_info
     23 */
     24struct thread_struct {
     25	unsigned long ksp;	/* kernel mode stack pointer */
     26	unsigned long callee_reg;	/* pointer to callee regs */
     27	unsigned long fault_address;	/* dbls as brkpt holder as well */
     28#ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS
     29	struct dsp_callee_regs dsp;
     30#endif
     31#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
     32	struct arc_fpu fpu;
     33#endif
     34};
     35
     36#define INIT_THREAD  {                          \
     37	.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
     38}
     39
     40/* Forward declaration, a strange C thing */
     41struct task_struct;
     42
     43#define task_pt_regs(p) \
     44	((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
     45
     46/* Free all resources held by a thread */
     47#define release_thread(thread) do { } while (0)
     48
     49/*
     50 * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
     51 * get optimised away by gcc
     52 */
     53#define cpu_relax()		barrier()
     54
     55#define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
     56#define KSTK_ESP(tsk)   (task_pt_regs(tsk)->sp)
     57
     58/*
     59 * Where about of Task's sp, fp, blink when it was last seen in kernel mode.
     60 * Look in process.c for details of kernel stack layout
     61 */
     62#define TSK_K_ESP(tsk)		(tsk->thread.ksp)
     63
     64#define TSK_K_REG(tsk, off)	(*((unsigned long *)(TSK_K_ESP(tsk) + \
     65					sizeof(struct callee_regs) + off)))
     66
     67#define TSK_K_BLINK(tsk)	TSK_K_REG(tsk, 4)
     68#define TSK_K_FP(tsk)		TSK_K_REG(tsk, 0)
     69
     70extern void start_thread(struct pt_regs * regs, unsigned long pc,
     71			 unsigned long usp);
     72
     73extern unsigned int __get_wchan(struct task_struct *p);
     74
     75#endif /* !__ASSEMBLY__ */
     76
     77/*
     78 * Default System Memory Map on ARC
     79 *
     80 * ---------------------------- (lower 2G, Translated) -------------------------
     81 * 0x0000_0000		0x5FFF_FFFF	(user vaddr: TASK_SIZE)
     82 * 0x6000_0000		0x6FFF_FFFF	(reserved gutter between U/K)
     83 * 0x7000_0000		0x7FFF_FFFF	(kvaddr: vmalloc/modules/pkmap..)
     84 *
     85 * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) -----------------------
     86 * 0x8000_0000		0xBFFF_FFFF	(kernel direct mapped)
     87 * 0xC000_0000		0xFFFF_FFFF	(peripheral uncached space)
     88 * -----------------------------------------------------------------------------
     89 */
     90
     91#define TASK_SIZE	0x60000000
     92
     93#define VMALLOC_START	(PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20))
     94
     95/* 1 PGDIR_SIZE each for fixmap/pkmap, 2 PGDIR_SIZE gutter (see asm/highmem.h) */
     96#define VMALLOC_SIZE	((CONFIG_ARC_KVADDR_SIZE << 20) - PMD_SIZE * 4)
     97
     98#define VMALLOC_END	(VMALLOC_START + VMALLOC_SIZE)
     99
    100#define USER_KERNEL_GUTTER    (VMALLOC_START - TASK_SIZE)
    101
    102#define STACK_TOP       TASK_SIZE
    103#define STACK_TOP_MAX   STACK_TOP
    104
    105/* This decides where the kernel will search for a free chunk of vm
    106 * space during mmap's.
    107 */
    108#define TASK_UNMAPPED_BASE      (TASK_SIZE / 3)
    109
    110#endif /* __ASM_ARC_PROCESSOR_H */