| 1 |
|
| 2 | |
| 3 | * Copyright (C) 2013 ARM Ltd.
|
| 4 |
|
| 5 | #ifndef __ASM_CPU_OPS_H
|
| 6 | #define __ASM_CPU_OPS_H
|
| 7 |
|
| 8 | #include <linux/init.h>
|
| 9 | #include <linux/threads.h>
|
| 10 |
|
| 11 | |
| 12 | * struct cpu_operations - Callback operations for hotplugging CPUs.
|
| 13 | *
|
| 14 | * @name: Name of the property as appears in a devicetree cpu node's
|
| 15 | * enable-method property. On systems booting with ACPI, @name
|
| 16 | * identifies the struct cpu_operations entry corresponding to
|
| 17 | * the boot protocol specified in the ACPI MADT table.
|
| 18 | * @cpu_init: Reads any data necessary for a specific enable-method for a
|
| 19 | * proposed logical id.
|
| 20 | * @cpu_prepare: Early one-time preparation step for a cpu. If there is a
|
| 21 | * mechanism for doing so, tests whether it is possible to boot
|
| 22 | * the given CPU.
|
| 23 | * @cpu_boot: Boots a cpu into the kernel.
|
| 24 | * @cpu_postboot: Optionally, perform any post-boot cleanup or necessary
|
| 25 | * synchronisation. Called from the cpu being booted.
|
| 26 | * @cpu_can_disable: Determines whether a CPU can be disabled based on
|
| 27 | * mechanism-specific information.
|
| 28 | * @cpu_disable: Prepares a cpu to die. May fail for some mechanism-specific
|
| 29 | * reason, which will cause the hot unplug to be aborted. Called
|
| 30 | * from the cpu to be killed.
|
| 31 | * @cpu_die: Makes a cpu leave the kernel. Must not fail. Called from the
|
| 32 | * cpu being killed.
|
| 33 | * @cpu_kill: Ensures a cpu has left the kernel. Called from another cpu.
|
| 34 |
|
| 35 | struct cpu_operations {
|
| 36 | const char *name;
|
| 37 | int (*cpu_init)(unsigned int);
|
| 38 | int (*cpu_prepare)(unsigned int);
|
| 39 | int (*cpu_boot)(unsigned int);
|
| 40 | void (*cpu_postboot)(void);
|
| 41 | #ifdef CONFIG_HOTPLUG_CPU
|
| 42 | bool (*cpu_can_disable)(unsigned int cpu);
|
| 43 | int (*cpu_disable)(unsigned int cpu);
|
| 44 | void (*cpu_die)(unsigned int cpu);
|
| 45 | int (*cpu_kill)(unsigned int cpu);
|
| 46 | #endif
|
| 47 | };
|
| 48 |
|
| 49 | int __init init_cpu_ops(int cpu);
|
| 50 | extern const struct cpu_operations *get_cpu_ops(int cpu);
|
| 51 |
|
| 52 | static inline void __init init_bootcpu_ops(void)
|
| 53 | {
|
| 54 | init_cpu_ops(0);
|
| 55 | }
|
| 56 |
|
| 57 | #endif
|