| .. | .. |
|---|
| 63 | 63 | typedef unsigned int sclp_cmdw_t; |
|---|
| 64 | 64 | |
|---|
| 65 | 65 | #define SCLP_CMDW_READ_CPU_INFO 0x00010001 |
|---|
| 66 | +#define SCLP_CMDW_READ_SCP_INFO 0x00020001 |
|---|
| 67 | +#define SCLP_CMDW_READ_STORAGE_INFO 0x00040001 |
|---|
| 68 | +#define SCLP_CMDW_READ_SCP_INFO_FORCED 0x00120001 |
|---|
| 66 | 69 | #define SCLP_CMDW_READ_EVENT_DATA 0x00770005 |
|---|
| 67 | 70 | #define SCLP_CMDW_WRITE_EVENT_DATA 0x00760005 |
|---|
| 68 | 71 | #define SCLP_CMDW_WRITE_EVENT_MASK 0x00780005 |
|---|
| .. | .. |
|---|
| 156 | 159 | u8 reserved[4096 - 16]; |
|---|
| 157 | 160 | } __attribute__((packed, aligned(PAGE_SIZE))); |
|---|
| 158 | 161 | |
|---|
| 162 | +struct read_info_sccb { |
|---|
| 163 | + struct sccb_header header; /* 0-7 */ |
|---|
| 164 | + u16 rnmax; /* 8-9 */ |
|---|
| 165 | + u8 rnsize; /* 10 */ |
|---|
| 166 | + u8 _pad_11[16 - 11]; /* 11-15 */ |
|---|
| 167 | + u16 ncpurl; /* 16-17 */ |
|---|
| 168 | + u16 cpuoff; /* 18-19 */ |
|---|
| 169 | + u8 _pad_20[24 - 20]; /* 20-23 */ |
|---|
| 170 | + u8 loadparm[8]; /* 24-31 */ |
|---|
| 171 | + u8 _pad_32[42 - 32]; /* 32-41 */ |
|---|
| 172 | + u8 fac42; /* 42 */ |
|---|
| 173 | + u8 fac43; /* 43 */ |
|---|
| 174 | + u8 _pad_44[48 - 44]; /* 44-47 */ |
|---|
| 175 | + u64 facilities; /* 48-55 */ |
|---|
| 176 | + u8 _pad_56[66 - 56]; /* 56-65 */ |
|---|
| 177 | + u8 fac66; /* 66 */ |
|---|
| 178 | + u8 _pad_67[76 - 67]; /* 67-83 */ |
|---|
| 179 | + u32 ibc; /* 76-79 */ |
|---|
| 180 | + u8 _pad80[84 - 80]; /* 80-83 */ |
|---|
| 181 | + u8 fac84; /* 84 */ |
|---|
| 182 | + u8 fac85; /* 85 */ |
|---|
| 183 | + u8 _pad_86[91 - 86]; /* 86-90 */ |
|---|
| 184 | + u8 fac91; /* 91 */ |
|---|
| 185 | + u8 _pad_92[98 - 92]; /* 92-97 */ |
|---|
| 186 | + u8 fac98; /* 98 */ |
|---|
| 187 | + u8 hamaxpow; /* 99 */ |
|---|
| 188 | + u32 rnsize2; /* 100-103 */ |
|---|
| 189 | + u64 rnmax2; /* 104-111 */ |
|---|
| 190 | + u32 hsa_size; /* 112-115 */ |
|---|
| 191 | + u8 fac116; /* 116 */ |
|---|
| 192 | + u8 fac117; /* 117 */ |
|---|
| 193 | + u8 fac118; /* 118 */ |
|---|
| 194 | + u8 fac119; /* 119 */ |
|---|
| 195 | + u16 hcpua; /* 120-121 */ |
|---|
| 196 | + u8 _pad_122[124 - 122]; /* 122-123 */ |
|---|
| 197 | + u32 hmfai; /* 124-127 */ |
|---|
| 198 | + u8 _pad_128[134 - 128]; /* 128-133 */ |
|---|
| 199 | + u8 byte_134; /* 134 */ |
|---|
| 200 | + u8 cpudirq; /* 135 */ |
|---|
| 201 | + u16 cbl; /* 136-137 */ |
|---|
| 202 | + u8 _pad_138[4096 - 138]; /* 138-4095 */ |
|---|
| 203 | +} __packed __aligned(PAGE_SIZE); |
|---|
| 204 | + |
|---|
| 205 | +struct read_storage_sccb { |
|---|
| 206 | + struct sccb_header header; |
|---|
| 207 | + u16 max_id; |
|---|
| 208 | + u16 assigned; |
|---|
| 209 | + u16 standby; |
|---|
| 210 | + u16 :16; |
|---|
| 211 | + u32 entries[0]; |
|---|
| 212 | +} __packed; |
|---|
| 213 | + |
|---|
| 159 | 214 | static inline void sclp_fill_core_info(struct sclp_core_info *info, |
|---|
| 160 | 215 | struct read_cpu_info_sccb *sccb) |
|---|
| 161 | 216 | { |
|---|
| .. | .. |
|---|
| 174 | 229 | #define SCLP_HAS_CPU_INFO (sclp.facilities & 0x0800000000000000ULL) |
|---|
| 175 | 230 | #define SCLP_HAS_CPU_RECONFIG (sclp.facilities & 0x0400000000000000ULL) |
|---|
| 176 | 231 | #define SCLP_HAS_PCI_RECONFIG (sclp.facilities & 0x0000000040000000ULL) |
|---|
| 177 | | - |
|---|
| 232 | +#define SCLP_HAS_AP_RECONFIG (sclp.facilities & 0x0000000100000000ULL) |
|---|
| 178 | 233 | |
|---|
| 179 | 234 | struct gds_subvector { |
|---|
| 180 | 235 | u8 length; |
|---|
| .. | .. |
|---|
| 250 | 305 | int sclp_reactivate(void); |
|---|
| 251 | 306 | int sclp_sync_request(sclp_cmdw_t command, void *sccb); |
|---|
| 252 | 307 | int sclp_sync_request_timeout(sclp_cmdw_t command, void *sccb, int timeout); |
|---|
| 253 | | - |
|---|
| 254 | 308 | int sclp_sdias_init(void); |
|---|
| 255 | | -void sclp_sdias_exit(void); |
|---|
| 256 | 309 | |
|---|
| 257 | 310 | enum { |
|---|
| 258 | 311 | sclp_init_state_uninitialized, |
|---|
| .. | .. |
|---|
| 266 | 319 | extern unsigned long sclp_console_full; |
|---|
| 267 | 320 | extern bool sclp_mask_compat_mode; |
|---|
| 268 | 321 | |
|---|
| 269 | | -extern char sclp_early_sccb[PAGE_SIZE]; |
|---|
| 322 | +extern char *sclp_early_sccb; |
|---|
| 270 | 323 | |
|---|
| 271 | 324 | void sclp_early_wait_irq(void); |
|---|
| 272 | 325 | int sclp_early_cmd(sclp_cmdw_t cmd, void *sccb); |
|---|
| .. | .. |
|---|
| 275 | 328 | int sclp_early_set_event_mask(struct init_sccb *sccb, |
|---|
| 276 | 329 | sccb_mask_t receive_mask, |
|---|
| 277 | 330 | sccb_mask_t send_mask); |
|---|
| 331 | +int sclp_early_get_info(struct read_info_sccb *info); |
|---|
| 278 | 332 | |
|---|
| 279 | 333 | /* useful inlines */ |
|---|
| 280 | 334 | |
|---|
| .. | .. |
|---|
| 311 | 365 | |
|---|
| 312 | 366 | /* translate string from EBCDIC to ASCII */ |
|---|
| 313 | 367 | static inline void |
|---|
| 314 | | -sclp_ebcasc_str(unsigned char *str, int nr) |
|---|
| 368 | +sclp_ebcasc_str(char *str, int nr) |
|---|
| 315 | 369 | { |
|---|
| 316 | 370 | (MACHINE_IS_VM) ? EBCASC(str, nr) : EBCASC_500(str, nr); |
|---|
| 317 | 371 | } |
|---|
| 318 | 372 | |
|---|
| 319 | 373 | /* translate string from ASCII to EBCDIC */ |
|---|
| 320 | 374 | static inline void |
|---|
| 321 | | -sclp_ascebc_str(unsigned char *str, int nr) |
|---|
| 375 | +sclp_ascebc_str(char *str, int nr) |
|---|
| 322 | 376 | { |
|---|
| 323 | 377 | (MACHINE_IS_VM) ? ASCEBC(str, nr) : ASCEBC_500(str, nr); |
|---|
| 324 | 378 | } |
|---|