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

sclp.h (4183B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 *    Copyright IBM Corp. 2007
      4 */
      5
      6#ifndef _ASM_S390_SCLP_H
      7#define _ASM_S390_SCLP_H
      8
      9#include <linux/types.h>
     10
     11#define SCLP_CHP_INFO_MASK_SIZE		32
     12#define EARLY_SCCB_SIZE		PAGE_SIZE
     13#define SCLP_MAX_CORES		512
     14/* 144 + 16 * SCLP_MAX_CORES + 2 * (SCLP_MAX_CORES - 1) */
     15#define EXT_SCCB_READ_SCP	(3 * PAGE_SIZE)
     16/* 24 + 16 * SCLP_MAX_CORES */
     17#define EXT_SCCB_READ_CPU	(3 * PAGE_SIZE)
     18
     19#ifndef __ASSEMBLY__
     20#include <asm/chpid.h>
     21#include <asm/cpu.h>
     22
     23struct sclp_chp_info {
     24	u8 recognized[SCLP_CHP_INFO_MASK_SIZE];
     25	u8 standby[SCLP_CHP_INFO_MASK_SIZE];
     26	u8 configured[SCLP_CHP_INFO_MASK_SIZE];
     27};
     28
     29#define LOADPARM_LEN 8
     30
     31struct sclp_ipl_info {
     32	int is_valid;
     33	int has_dump;
     34	char loadparm[LOADPARM_LEN];
     35};
     36
     37struct sclp_core_entry {
     38	u8 core_id;
     39	u8 reserved0;
     40	u8 : 4;
     41	u8 sief2 : 1;
     42	u8 skey : 1;
     43	u8 : 2;
     44	u8 : 2;
     45	u8 gpere : 1;
     46	u8 siif : 1;
     47	u8 sigpif : 1;
     48	u8 : 3;
     49	u8 reserved2[3];
     50	u8 : 2;
     51	u8 ib : 1;
     52	u8 cei : 1;
     53	u8 : 4;
     54	u8 reserved3[6];
     55	u8 type;
     56	u8 reserved1;
     57} __attribute__((packed));
     58
     59struct sclp_core_info {
     60	unsigned int configured;
     61	unsigned int standby;
     62	unsigned int combined;
     63	struct sclp_core_entry core[SCLP_MAX_CORES];
     64};
     65
     66struct sclp_info {
     67	unsigned char has_linemode : 1;
     68	unsigned char has_vt220 : 1;
     69	unsigned char has_siif : 1;
     70	unsigned char has_sigpif : 1;
     71	unsigned char has_core_type : 1;
     72	unsigned char has_sprp : 1;
     73	unsigned char has_hvs : 1;
     74	unsigned char has_esca : 1;
     75	unsigned char has_sief2 : 1;
     76	unsigned char has_64bscao : 1;
     77	unsigned char has_gpere : 1;
     78	unsigned char has_cmma : 1;
     79	unsigned char has_gsls : 1;
     80	unsigned char has_ib : 1;
     81	unsigned char has_cei : 1;
     82	unsigned char has_pfmfi : 1;
     83	unsigned char has_ibs : 1;
     84	unsigned char has_skey : 1;
     85	unsigned char has_kss : 1;
     86	unsigned char has_gisaf : 1;
     87	unsigned char has_diag318 : 1;
     88	unsigned char has_sipl : 1;
     89	unsigned char has_dirq : 1;
     90	unsigned char has_iplcc : 1;
     91	unsigned int ibc;
     92	unsigned int mtid;
     93	unsigned int mtid_cp;
     94	unsigned int mtid_prev;
     95	unsigned long rzm;
     96	unsigned long rnmax;
     97	unsigned long hamax;
     98	unsigned int max_cores;
     99	unsigned long hsa_size;
    100	unsigned long facilities;
    101	unsigned int hmfai;
    102};
    103extern struct sclp_info sclp;
    104
    105struct zpci_report_error_header {
    106	u8 version;	/* Interface version byte */
    107	u8 action;	/* Action qualifier byte
    108			 * 0: Adapter Reset Request
    109			 * 1: Deconfigure and repair action requested
    110			 *	(OpenCrypto Problem Call Home)
    111			 * 2: Informational Report
    112			 *	(OpenCrypto Successful Diagnostics Execution)
    113			 */
    114	u16 length;	/* Length of Subsequent Data (up to 4K – SCLP header */
    115	u8 data[];	/* Subsequent Data passed verbatim to SCLP ET 24 */
    116} __packed;
    117
    118extern char *sclp_early_sccb;
    119
    120void sclp_early_adjust_va(void);
    121void sclp_early_set_buffer(void *sccb);
    122int sclp_early_read_info(void);
    123int sclp_early_read_storage_info(void);
    124int sclp_early_get_core_info(struct sclp_core_info *info);
    125void sclp_early_get_ipl_info(struct sclp_ipl_info *info);
    126void sclp_early_detect(void);
    127void sclp_early_printk(const char *s);
    128void __sclp_early_printk(const char *s, unsigned int len);
    129
    130int sclp_early_get_memsize(unsigned long *mem);
    131int sclp_early_get_hsa_size(unsigned long *hsa_size);
    132int _sclp_get_core_info(struct sclp_core_info *info);
    133int sclp_core_configure(u8 core);
    134int sclp_core_deconfigure(u8 core);
    135int sclp_sdias_blk_count(void);
    136int sclp_sdias_copy(void *dest, int blk_num, int nr_blks);
    137int sclp_chp_configure(struct chp_id chpid);
    138int sclp_chp_deconfigure(struct chp_id chpid);
    139int sclp_chp_read_info(struct sclp_chp_info *info);
    140int sclp_pci_configure(u32 fid);
    141int sclp_pci_deconfigure(u32 fid);
    142int sclp_ap_configure(u32 apid);
    143int sclp_ap_deconfigure(u32 apid);
    144int sclp_pci_report(struct zpci_report_error_header *report, u32 fh, u32 fid);
    145int memcpy_hsa_kernel(void *dest, unsigned long src, size_t count);
    146int memcpy_hsa_user(void __user *dest, unsigned long src, size_t count);
    147void sclp_ocf_cpc_name_copy(char *dst);
    148
    149static inline int sclp_get_core_info(struct sclp_core_info *info, int early)
    150{
    151	if (early)
    152		return sclp_early_get_core_info(info);
    153	return _sclp_get_core_info(info);
    154}
    155
    156#endif /* __ASSEMBLY__ */
    157#endif /* _ASM_S390_SCLP_H */