OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [arch/] [s390/] [kernel/] [machine_kexec.c] - Blame information for rev 63

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 63 marcus.erl
/*
2
 * arch/s390/kernel/machine_kexec.c
3
 *
4
 * Copyright IBM Corp. 2005,2006
5
 *
6
 * Author(s): Rolf Adelsberger,
7
 *            Heiko Carstens <heiko.carstens@de.ibm.com>
8
 */
9
 
10
#include <linux/device.h>
11
#include <linux/mm.h>
12
#include <linux/kexec.h>
13
#include <linux/delay.h>
14
#include <linux/reboot.h>
15
#include <asm/cio.h>
16
#include <asm/setup.h>
17
#include <asm/pgtable.h>
18
#include <asm/pgalloc.h>
19
#include <asm/system.h>
20
#include <asm/smp.h>
21
#include <asm/reset.h>
22
#include <asm/ipl.h>
23
 
24
typedef void (*relocate_kernel_t)(kimage_entry_t *, unsigned long);
25
 
26
extern const unsigned char relocate_kernel[];
27
extern const unsigned long long relocate_kernel_len;
28
 
29
int machine_kexec_prepare(struct kimage *image)
30
{
31
        void *reboot_code_buffer;
32
 
33
        /* Can't replace kernel image since it is read-only. */
34
        if (ipl_flags & IPL_NSS_VALID)
35
                return -ENOSYS;
36
 
37
        /* We don't support anything but the default image type for now. */
38
        if (image->type != KEXEC_TYPE_DEFAULT)
39
                return -EINVAL;
40
 
41
        /* Get the destination where the assembler code should be copied to.*/
42
        reboot_code_buffer = (void *) page_to_phys(image->control_code_page);
43
 
44
        /* Then copy it */
45
        memcpy(reboot_code_buffer, relocate_kernel, relocate_kernel_len);
46
        return 0;
47
}
48
 
49
void machine_kexec_cleanup(struct kimage *image)
50
{
51
}
52
 
53
void machine_shutdown(void)
54
{
55
        printk(KERN_INFO "kexec: machine_shutdown called\n");
56
}
57
 
58
void machine_kexec(struct kimage *image)
59
{
60
        relocate_kernel_t data_mover;
61
 
62
        smp_send_stop();
63
        pfault_fini();
64
        s390_reset_system();
65
 
66
        data_mover = (relocate_kernel_t) page_to_phys(image->control_code_page);
67
 
68
        /* Call the moving routine */
69
        (*data_mover)(&image->head, image->start);
70
        for (;;);
71
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.