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