/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_S390_BOOT_DATA_H #include #include #include 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 */