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

rse.h (1750B)


      1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2#ifndef _ASM_IA64_RSE_H
      3#define _ASM_IA64_RSE_H
      4
      5/*
      6 * Copyright (C) 1998, 1999 Hewlett-Packard Co
      7 * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com>
      8 *
      9 * Register stack engine related helper functions.  This file may be
     10 * used in applications, so be careful about the name-space and give
     11 * some consideration to non-GNU C compilers (though __inline__ is
     12 * fine).
     13 */
     14
     15static __inline__ unsigned long
     16ia64_rse_slot_num (unsigned long *addr)
     17{
     18	return (((unsigned long) addr) >> 3) & 0x3f;
     19}
     20
     21/*
     22 * Return TRUE if ADDR is the address of an RNAT slot.
     23 */
     24static __inline__ unsigned long
     25ia64_rse_is_rnat_slot (unsigned long *addr)
     26{
     27	return ia64_rse_slot_num(addr) == 0x3f;
     28}
     29
     30/*
     31 * Returns the address of the RNAT slot that covers the slot at
     32 * address SLOT_ADDR.
     33 */
     34static __inline__ unsigned long *
     35ia64_rse_rnat_addr (unsigned long *slot_addr)
     36{
     37	return (unsigned long *) ((unsigned long) slot_addr | (0x3f << 3));
     38}
     39
     40/*
     41 * Calculate the number of registers in the dirty partition starting at BSPSTORE and
     42 * ending at BSP.  This isn't simply (BSP-BSPSTORE)/8 because every 64th slot stores
     43 * ar.rnat.
     44 */
     45static __inline__ unsigned long
     46ia64_rse_num_regs (unsigned long *bspstore, unsigned long *bsp)
     47{
     48	unsigned long slots = (bsp - bspstore);
     49
     50	return slots - (ia64_rse_slot_num(bspstore) + slots)/0x40;
     51}
     52
     53/*
     54 * The inverse of the above: given bspstore and the number of
     55 * registers, calculate ar.bsp.
     56 */
     57static __inline__ unsigned long *
     58ia64_rse_skip_regs (unsigned long *addr, long num_regs)
     59{
     60	long delta = ia64_rse_slot_num(addr) + num_regs;
     61
     62	if (num_regs < 0)
     63		delta -= 0x3e;
     64	return addr + num_regs + delta/0x3f;
     65}
     66
     67#endif /* _ASM_IA64_RSE_H */