![Heiko Carstens](/assets/img/avatar_default.png)
This patch - unifies the old sclp early code and the sclp early printk code, so they can use common functions - makes sure all sclp early functions and variables have the same "sclp_early" prefix - converts the sclp early printk code into readable code by using existing data structures instead of hard coded magic arrays - splits the early sclp code into two files: sclp_early.c and sclp_early_core.c. The core file contains everything that is required by the kernel decompressor and may not call functions not contained within the core file. Otherwise the result would be a link error. - changes interrupt handling to be completely synchronous. The old early sclp code had a small window which allowed to receive several interrupts instead of exactly the single expected interrupt. This did hide a subtle potential bug, which is fixed with this large rework. - contains a couple of small cleanups. Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
36 lines
785 B
C
36 lines
785 B
C
/*
|
|
* Copyright IBM Corp. 2017
|
|
*/
|
|
|
|
#include <linux/console.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/init.h>
|
|
#include <asm/sclp.h>
|
|
|
|
static void sclp_early_write(struct console *con, const char *s, unsigned int len)
|
|
{
|
|
__sclp_early_printk(s, len);
|
|
}
|
|
|
|
static struct console sclp_early_console = {
|
|
.name = "earlysclp",
|
|
.write = sclp_early_write,
|
|
.flags = CON_PRINTBUFFER | CON_BOOT,
|
|
.index = -1,
|
|
};
|
|
|
|
static int __init setup_early_printk(char *buf)
|
|
{
|
|
if (early_console)
|
|
return 0;
|
|
/* Accept only "earlyprintk" and "earlyprintk=sclp" */
|
|
if (buf && strncmp(buf, "sclp", 4))
|
|
return 0;
|
|
if (!sclp.has_linemode && !sclp.has_vt220)
|
|
return 0;
|
|
early_console = &sclp_early_console;
|
|
register_console(early_console);
|
|
return 0;
|
|
}
|
|
early_param("earlyprintk", setup_early_printk);
|