diff options
Diffstat (limited to 'arch/s390/kernel/ipl.c')
-rw-r--r-- | arch/s390/kernel/ipl.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index f731185bf2bd..a83cf1fdd8f5 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -47,7 +47,7 @@ enum ipl_type { | |||
47 | * Must be in data section since the bss section | 47 | * Must be in data section since the bss section |
48 | * is not cleared when these are accessed. | 48 | * is not cleared when these are accessed. |
49 | */ | 49 | */ |
50 | u16 ipl_devno __attribute__((__section__(".data"))) = 0; | 50 | static u16 ipl_devno __attribute__((__section__(".data"))) = 0; |
51 | u32 ipl_flags __attribute__((__section__(".data"))) = 0; | 51 | u32 ipl_flags __attribute__((__section__(".data"))) = 0; |
52 | 52 | ||
53 | static char *ipl_type_str(enum ipl_type type) | 53 | static char *ipl_type_str(enum ipl_type type) |
@@ -1038,6 +1038,27 @@ static int __init s390_ipl_init(void) | |||
1038 | 1038 | ||
1039 | __initcall(s390_ipl_init); | 1039 | __initcall(s390_ipl_init); |
1040 | 1040 | ||
1041 | void __init ipl_save_parameters(void) | ||
1042 | { | ||
1043 | struct cio_iplinfo iplinfo; | ||
1044 | unsigned int *ipl_ptr; | ||
1045 | void *src, *dst; | ||
1046 | |||
1047 | if (cio_get_iplinfo(&iplinfo)) | ||
1048 | return; | ||
1049 | |||
1050 | ipl_devno = iplinfo.devno; | ||
1051 | ipl_flags |= IPL_DEVNO_VALID; | ||
1052 | if (!iplinfo.is_qdio) | ||
1053 | return; | ||
1054 | ipl_flags |= IPL_PARMBLOCK_VALID; | ||
1055 | ipl_ptr = (unsigned int *)__LC_IPL_PARMBLOCK_PTR; | ||
1056 | src = (void *)(unsigned long)*ipl_ptr; | ||
1057 | dst = (void *)IPL_PARMBLOCK_ORIGIN; | ||
1058 | memmove(dst, src, PAGE_SIZE); | ||
1059 | *ipl_ptr = IPL_PARMBLOCK_ORIGIN; | ||
1060 | } | ||
1061 | |||
1041 | static LIST_HEAD(rcall); | 1062 | static LIST_HEAD(rcall); |
1042 | static DEFINE_MUTEX(rcall_mutex); | 1063 | static DEFINE_MUTEX(rcall_mutex); |
1043 | 1064 | ||