1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * internal.h - printk internal definitions 4 */ 5 #include <linux/percpu.h> 6 7 #if defined(CONFIG_PRINTK) && defined(CONFIG_SYSCTL) 8 void __init printk_sysctl_init(void); 9 int devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, 10 void *buffer, size_t *lenp, loff_t *ppos); 11 #else 12 #define printk_sysctl_init() do { } while (0) 13 #endif 14 15 #ifdef CONFIG_PRINTK 16 17 /* Flags for a single printk record. */ 18 enum printk_info_flags { 19 LOG_NEWLINE = 2, /* text ended with a newline */ 20 LOG_CONT = 8, /* text is a fragment of a continuation line */ 21 }; 22 23 __printf(4, 0) 24 int vprintk_store(int facility, int level, 25 const struct dev_printk_info *dev_info, 26 const char *fmt, va_list args); 27 28 __printf(1, 0) int vprintk_default(const char *fmt, va_list args); 29 __printf(1, 0) int vprintk_deferred(const char *fmt, va_list args); 30 31 bool printk_percpu_data_ready(void); 32 33 #define printk_safe_enter_irqsave(flags) \ 34 do { \ 35 local_irq_save(flags); \ 36 __printk_safe_enter(); \ 37 } while (0) 38 39 #define printk_safe_exit_irqrestore(flags) \ 40 do { \ 41 __printk_safe_exit(); \ 42 local_irq_restore(flags); \ 43 } while (0) 44 45 void defer_console_output(void); 46 47 u16 printk_parse_prefix(const char *text, int *level, 48 enum printk_info_flags *flags); 49 #else 50 51 /* 52 * In !PRINTK builds we still export console_sem 53 * semaphore and some of console functions (console_unlock()/etc.), so 54 * printk-safe must preserve the existing local IRQ guarantees. 55 */ 56 #define printk_safe_enter_irqsave(flags) local_irq_save(flags) 57 #define printk_safe_exit_irqrestore(flags) local_irq_restore(flags) 58 59 static inline bool printk_percpu_data_ready(void) { return false; } 60 #endif /* CONFIG_PRINTK */ 61