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

rheap.h (2578B)


      1/*
      2 * include/asm-ppc/rheap.h
      3 *
      4 * Header file for the implementation of a remote heap.
      5 *
      6 * Author: Pantelis Antoniou <panto@intracom.gr>
      7 *
      8 * 2004 (c) INTRACOM S.A. Greece. This file is licensed under
      9 * the terms of the GNU General Public License version 2. This program
     10 * is licensed "as is" without any warranty of any kind, whether express
     11 * or implied.
     12 */
     13
     14#ifndef __ASM_PPC_RHEAP_H__
     15#define __ASM_PPC_RHEAP_H__
     16
     17#include <linux/list.h>
     18
     19typedef struct _rh_block {
     20	struct list_head list;
     21	unsigned long start;
     22	int size;
     23	const char *owner;
     24} rh_block_t;
     25
     26typedef struct _rh_info {
     27	unsigned int alignment;
     28	int max_blocks;
     29	int empty_slots;
     30	rh_block_t *block;
     31	struct list_head empty_list;
     32	struct list_head free_list;
     33	struct list_head taken_list;
     34	unsigned int flags;
     35} rh_info_t;
     36
     37#define RHIF_STATIC_INFO	0x1
     38#define RHIF_STATIC_BLOCK	0x2
     39
     40typedef struct _rh_stats {
     41	unsigned long start;
     42	int size;
     43	const char *owner;
     44} rh_stats_t;
     45
     46#define RHGS_FREE	0
     47#define RHGS_TAKEN	1
     48
     49/* Create a remote heap dynamically */
     50extern rh_info_t *rh_create(unsigned int alignment);
     51
     52/* Destroy a remote heap, created by rh_create() */
     53extern void rh_destroy(rh_info_t * info);
     54
     55/* Initialize in place a remote info block */
     56extern void rh_init(rh_info_t * info, unsigned int alignment, int max_blocks,
     57		    rh_block_t * block);
     58
     59/* Attach a free region to manage */
     60extern int rh_attach_region(rh_info_t * info, unsigned long start, int size);
     61
     62/* Detach a free region */
     63extern unsigned long rh_detach_region(rh_info_t * info, unsigned long start, int size);
     64
     65/* Allocate the given size from the remote heap (with alignment) */
     66extern unsigned long rh_alloc_align(rh_info_t * info, int size, int alignment,
     67		const char *owner);
     68
     69/* Allocate the given size from the remote heap */
     70extern unsigned long rh_alloc(rh_info_t * info, int size, const char *owner);
     71
     72/* Allocate the given size from the given address */
     73extern unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size,
     74			    const char *owner);
     75
     76/* Free the allocated area */
     77extern int rh_free(rh_info_t * info, unsigned long start);
     78
     79/* Get stats for debugging purposes */
     80extern int rh_get_stats(rh_info_t * info, int what, int max_stats,
     81			rh_stats_t * stats);
     82
     83/* Simple dump of remote heap info */
     84extern void rh_dump(rh_info_t * info);
     85
     86/* Simple dump of remote info block */
     87void rh_dump_blk(rh_info_t *info, rh_block_t *blk);
     88
     89/* Set owner of taken block */
     90extern int rh_set_owner(rh_info_t * info, unsigned long start, const char *owner);
     91
     92#endif				/* __ASM_PPC_RHEAP_H__ */