1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright IBM Corp. 2017 4 */ 5 6 #include <linux/console.h> 7 #include <linux/kernel.h> 8 #include <linux/init.h> 9 #include <asm/setup.h> 10 #include <asm/sclp.h> 11 12 static void sclp_early_write(struct console *con, const char *s, unsigned int len) 13 { 14 __sclp_early_printk(s, len); 15 } 16 17 static struct console sclp_early_console = { 18 .name = "earlysclp", 19 .write = sclp_early_write, 20 .flags = CON_PRINTBUFFER | CON_BOOT, 21 .index = -1, 22 }; 23 24 void __init register_early_console(void) 25 { 26 if (early_console) 27 return; 28 if (!sclp.has_linemode && !sclp.has_vt220) 29 return; 30 early_console = &sclp_early_console; 31 register_console(early_console); 32 } 33 34 static int __init setup_early_printk(char *buf) 35 { 36 if (early_console) 37 return 0; 38 /* Accept only "earlyprintk" and "earlyprintk=sclp" */ 39 if (buf && !str_has_prefix(buf, "sclp")) 40 return 0; 41 register_early_console(); 42 return 0; 43 } 44 early_param("earlyprintk", setup_early_printk); 45