cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cpu_ops.h (2409B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      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 * @cpu_init_idle: Reads any data necessary to initialize CPU idle states for
     35 *		   a proposed logical id.
     36 * @cpu_suspend: Suspends a cpu and saves the required context. May fail owing
     37 *               to wrong parameters or error conditions. Called from the
     38 *               CPU being suspended. Must be called with IRQs disabled.
     39 */
     40struct cpu_operations {
     41	const char	*name;
     42	int		(*cpu_init)(unsigned int);
     43	int		(*cpu_prepare)(unsigned int);
     44	int		(*cpu_boot)(unsigned int);
     45	void		(*cpu_postboot)(void);
     46#ifdef CONFIG_HOTPLUG_CPU
     47	bool		(*cpu_can_disable)(unsigned int cpu);
     48	int		(*cpu_disable)(unsigned int cpu);
     49	void		(*cpu_die)(unsigned int cpu);
     50	int		(*cpu_kill)(unsigned int cpu);
     51#endif
     52#ifdef CONFIG_CPU_IDLE
     53	int		(*cpu_init_idle)(unsigned int);
     54	int		(*cpu_suspend)(unsigned long);
     55#endif
     56};
     57
     58int __init init_cpu_ops(int cpu);
     59extern const struct cpu_operations *get_cpu_ops(int cpu);
     60
     61static inline void __init init_bootcpu_ops(void)
     62{
     63	init_cpu_ops(0);
     64}
     65
     66#endif /* ifndef __ASM_CPU_OPS_H */