acrn-hypervisor/hypervisor/include/arch/x86/asm/lapic.h
Geoffroy Van Cutsem 8b16be9185 Remove "All rights reserved" string headers
Many of the license and Intel copyright headers include the "All rights
reserved" string. It is not relevant in the context of the BSD-3-Clause
license that the code is released under. This patch removes those strings
throughout the code (hypervisor, devicemodel and misc).

Tracked-On: #7254
Signed-off-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
2022-04-06 13:21:02 +08:00

130 lines
2.5 KiB
C

/*
* Copyright (C) 2018 Intel Corporation.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef ARCH_X86_LAPIC_H
#define ARCH_X86_LAPIC_H
#include <types.h>
/* x2APIC Interrupt Command Register (ICR) structure */
union apic_icr {
uint64_t value;
struct {
uint32_t lo_32;
uint32_t hi_32;
} value_32;
struct {
uint32_t vector:8;
uint32_t delivery_mode:3;
uint32_t destination_mode:1;
uint32_t rsvd_1:2;
uint32_t level:1;
uint32_t trigger_mode:1;
uint32_t rsvd_2:2;
uint32_t shorthand:2;
uint32_t rsvd_3:12;
uint32_t dest_field:32;
} bits;
};
/**
* @defgroup lapic_ext_apis LAPIC External Interfaces
*
* This is a group that includes LAPIC External Interfaces.
*
* @{
*/
/**
* @brief Enable LAPIC in x2APIC mode
*
* Enable LAPIC in x2APIC mode via MSR writes.
*
*/
void early_init_lapic(void);
/**
* @brief Suspend LAPIC
*
* Suspend LAPIC by getting the APIC base addr and saving the registers.
*/
void suspend_lapic(void);
/**
* @brief Resume LAPIC
*
* Resume LAPIC by setting the APIC base addr and restoring the registers.
*/
void resume_lapic(void);
/**
* @brief Get the LAPIC ID
*
* Get the LAPIC ID via MSR read.
*
* @return LAPIC ID
*/
uint32_t get_cur_lapic_id(void);
/**
* @}
*/
/* End of lapic_ext_apis */
void init_lapic(uint16_t pcpu_id);
void send_lapic_eoi(void);
/**
* @defgroup ipi_ext_apis IPI External Interfaces
*
* This is a group that includes IPI External Interfaces.
*
* @{
*/
/**
* @brief Send an SIPI to a specific cpu
*
* Send an Startup IPI to a specific cpu, to notify the cpu to start booting.
*
* @param[in] dest_pcpu_id The id of destination physical cpu
* @param[in] cpu_startup_start_address The address for the dest pCPU to start running
*
*/
void send_startup_ipi(uint16_t dest_pcpu_id, uint64_t cpu_startup_start_address);
/**
* @brief Send an IPI to multiple pCPUs
*
* @param[in] dest_mask The mask of destination physical cpus
* @param[in] vector The vector of interrupt
*/
void send_dest_ipi_mask(uint32_t dest_mask, uint32_t vector);
/**
* @brief Send an IPI to a single pCPU
*
* @param[in] pcpu_id The id of destination physical cpu
* @param[in] vector The vector of interrupt
*/
void send_single_ipi(uint16_t pcpu_id, uint32_t vector);
/**
* @}
*/
/* End of ipi_ext_apis */
/**
* @brief Send an INIT signal to a single pCPU
*
* @param[in] pcpu_id The id of destination physical cpu
*
* @return None
*/
void send_single_init(uint16_t pcpu_id);
#endif /* ARCH_X86_LAPIC_H */