| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _ASM_S390_BOOT_DATA_H |
| |
| #include <linux/string.h> |
| #include <asm/setup.h> |
| #include <asm/ipl.h> |
| |
| extern char early_command_line[COMMAND_LINE_SIZE]; |
| extern struct ipl_parameter_block ipl_block; |
| extern int ipl_block_valid; |
| extern int ipl_secure_flag; |
| |
| extern unsigned long ipl_cert_list_addr; |
| extern unsigned long ipl_cert_list_size; |
| |
| extern unsigned long early_ipl_comp_list_addr; |
| extern unsigned long early_ipl_comp_list_size; |
| |
| extern char boot_rb[PAGE_SIZE * 2]; |
| extern bool boot_earlyprintk; |
| extern size_t boot_rb_off; |
| extern char bootdebug_filter[128]; |
| extern bool bootdebug; |
| |
| #define boot_rb_foreach(cb) \ |
| do { \ |
| size_t off = boot_rb_off + strlen(boot_rb + boot_rb_off) + 1; \ |
| size_t len; \ |
| for (; off < sizeof(boot_rb) && (len = strlen(boot_rb + off)); off += len + 1) \ |
| cb(boot_rb + off); \ |
| for (off = 0; off < boot_rb_off && (len = strlen(boot_rb + off)); off += len + 1) \ |
| cb(boot_rb + off); \ |
| } while (0) |
| |
| /* |
| * bootdebug_filter is a comma separated list of strings, |
| * where each string can be a prefix of the message. |
| */ |
| static inline bool bootdebug_filter_match(const char *buf) |
| { |
| char *p = bootdebug_filter, *s; |
| char *end; |
| |
| if (!*p) |
| return true; |
| |
| end = p + strlen(p); |
| while (p < end) { |
| p = skip_spaces(p); |
| s = memscan(p, ',', end - p); |
| if (!strncmp(p, buf, s - p)) |
| return true; |
| p = s + 1; |
| } |
| return false; |
| } |
| |
| static inline const char *skip_timestamp(const char *buf) |
| { |
| #ifdef CONFIG_PRINTK_TIME |
| const char *p = memchr(buf, ']', strlen(buf)); |
| |
| if (p && p[1] == ' ') |
| return p + 2; |
| #endif |
| return buf; |
| } |
| |
| #endif /* _ASM_S390_BOOT_DATA_H */ |