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