brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · b281659 Raw
90 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * POWER Data Stream Control Register (DSCR)4 *5 * This header file contains helper functions and macros6 * required for all the DSCR related test cases.7 *8 * Copyright 2012, Anton Blanchard, IBM Corporation.9 * Copyright 2015, Anshuman Khandual, IBM Corporation.10 */11#ifndef _SELFTESTS_POWERPC_DSCR_DSCR_H12#define _SELFTESTS_POWERPC_DSCR_DSCR_H13 14#include <unistd.h>15#include <stdio.h>16#include <stdlib.h>17#include <string.h>18#include <fcntl.h>19#include <dirent.h>20#include <pthread.h>21#include <sched.h>22#include <sys/types.h>23#include <sys/stat.h>24#include <sys/wait.h>25 26#include "reg.h"27#include "utils.h"28 29#define THREADS		100	/* Max threads */30#define COUNT		100	/* Max iterations */31#define DSCR_MAX	16	/* Max DSCR value */32#define LEN_MAX		100	/* Max name length */33 34#define DSCR_DEFAULT	"/sys/devices/system/cpu/dscr_default"35#define CPU_PATH	"/sys/devices/system/cpu/"36 37#define rmb()  asm volatile("lwsync":::"memory")38#define wmb()  asm volatile("lwsync":::"memory")39 40#define READ_ONCE(x) (*(volatile typeof(x) *)&(x))41 42/* Prilvilege state DSCR access */43inline unsigned long get_dscr(void)44{45	return mfspr(SPRN_DSCR_PRIV);46}47 48inline void set_dscr(unsigned long val)49{50	mtspr(SPRN_DSCR_PRIV, val);51}52 53/* Problem state DSCR access */54inline unsigned long get_dscr_usr(void)55{56	return mfspr(SPRN_DSCR);57}58 59inline void set_dscr_usr(unsigned long val)60{61	mtspr(SPRN_DSCR, val);62}63 64/* Default DSCR access */65unsigned long get_default_dscr(void)66{67	int err;68	unsigned long val;69 70	err = read_ulong(DSCR_DEFAULT, &val, 16);71	if (err) {72		perror("read() failed");73		exit(1);74	}75	return val;76}77 78void set_default_dscr(unsigned long val)79{80	int err;81 82	err = write_ulong(DSCR_DEFAULT, val, 16);83	if (err) {84		perror("write() failed");85		exit(1);86	}87}88 89#endif	/* _SELFTESTS_POWERPC_DSCR_DSCR_H */90