1// Copyright 2016 The Fuchsia Authors 2// Copyright (c) 2014 Travis Geiselbrecht 3// 4// Use of this source code is governed by a MIT-style 5// license that can be found in the LICENSE file or at 6// https://opensource.org/licenses/MIT 7 8#pragma once 9 10#include <sys/types.h> 11#include <kernel/cpu.h> 12#include <kernel/mp.h> 13#include <zircon/types.h> 14 15__BEGIN_CDECLS 16 17/* send inter processor interrupt, if supported */ 18zx_status_t arch_mp_send_ipi(mp_ipi_target_t, cpu_mask_t mask, mp_ipi_t ipi); 19 20/* Reschedules tasks on the cpus specified by mask. Mask will not 21 * contain the local cpu_id. Will be called under the thread lock. 22 */ 23zx_status_t arch_mp_reschedule(cpu_mask_t mask); 24/* Sets the idle state of the current cpu. Will be called under the 25 * thread lock. */ 26void arch_prepare_current_cpu_idle_state(bool idle); 27 28/* Bring a CPU up and enter it into the scheduler */ 29zx_status_t platform_mp_cpu_hotplug(cpu_num_t cpu_id); 30 31/* Prepare for CPU unplug. The platform may want to shift 32 * around external interrupts at this time. */ 33zx_status_t platform_mp_prep_cpu_unplug(cpu_num_t cpu_id); 34 35/* shutdown the specified CPU. called after it is no longer 36 * being scheduled on. */ 37zx_status_t platform_mp_cpu_unplug(cpu_num_t cpu_id); 38 39/* Should be invoked by platform_mp_cpu_hotplug to ask the arch 40 * to bring a CPU up and enter it into the scheduler */ 41zx_status_t arch_mp_cpu_hotplug(cpu_num_t cpu_id); 42 43/* Should be invoked by platform_mp_prep_cpu_unplug to ask the 44 * arch to do whatever it needs to do to stop the CPU */ 45zx_status_t arch_mp_prep_cpu_unplug(cpu_num_t cpu_id); 46 47/* Should be invoked by platform_mp_cpu_unplug to ask the 48 * arch to do whatever it needs to do to stop the CPU */ 49zx_status_t arch_mp_cpu_unplug(cpu_num_t cpu_id); 50 51void arch_mp_init_percpu(void); 52 53__END_CDECLS 54