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

appldata.h (1593B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright IBM Corp. 2006
      4 *
      5 * Author(s): Melissa Howland <melissah@us.ibm.com>
      6 */
      7
      8#ifndef _ASM_S390_APPLDATA_H
      9#define _ASM_S390_APPLDATA_H
     10
     11#include <asm/diag.h>
     12#include <asm/io.h>
     13
     14#define APPLDATA_START_INTERVAL_REC	0x80
     15#define APPLDATA_STOP_REC		0x81
     16#define APPLDATA_GEN_EVENT_REC		0x82
     17#define APPLDATA_START_CONFIG_REC	0x83
     18
     19/*
     20 * Parameter list for DIAGNOSE X'DC'
     21 */
     22struct appldata_parameter_list {
     23	u16 diag;
     24	u8  function;
     25	u8  parlist_length;
     26	u32 unused01;
     27	u16 reserved;
     28	u16 buffer_length;
     29	u32 unused02;
     30	u64 product_id_addr;
     31	u64 buffer_addr;
     32} __attribute__ ((packed));
     33
     34struct appldata_product_id {
     35	char prod_nr[7];	/* product number */
     36	u16  prod_fn;		/* product function */
     37	u8   record_nr; 	/* record number */
     38	u16  version_nr;	/* version */
     39	u16  release_nr;	/* release */
     40	u16  mod_lvl;		/* modification level */
     41} __attribute__ ((packed));
     42
     43
     44static inline int appldata_asm(struct appldata_parameter_list *parm_list,
     45			       struct appldata_product_id *id,
     46			       unsigned short fn, void *buffer,
     47			       unsigned short length)
     48{
     49	int ry;
     50
     51	if (!MACHINE_IS_VM)
     52		return -EOPNOTSUPP;
     53	parm_list->diag = 0xdc;
     54	parm_list->function = fn;
     55	parm_list->parlist_length = sizeof(*parm_list);
     56	parm_list->buffer_length = length;
     57	parm_list->product_id_addr = (unsigned long) id;
     58	parm_list->buffer_addr = virt_to_phys(buffer);
     59	diag_stat_inc(DIAG_STAT_X0DC);
     60	asm volatile(
     61		"	diag	%1,%0,0xdc"
     62		: "=d" (ry)
     63		: "d" (parm_list), "m" (*parm_list), "m" (*id)
     64		: "cc");
     65	return ry;
     66}
     67
     68#endif /* _ASM_S390_APPLDATA_H */