mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-05-04 01:49:28 +00:00
Implement the SBI IPI (Inter-Processor Interrupt) extension to enable guest VMs to send software interrupts between virtual CPUs. The implementation handles the SBI_IPI_SEND_IPI function call, which allows a guest to target one or more vCPUs using either: - A mask (bitmap of target harts relative to a base hart ID) - Broadcast mode (when mask_base is UINT64_MAX) The IPI is delivered by asserting the VS-level software interrupt (VSSIP, bit 2) on each target vCPU. Proper validation is performed to ensure hart IDs are within valid range and all masked harts exist. Tracked-On: #8851 Signed-off-by: Haoyu Tang <haoyu.tang@intel.com> Acked-by: Wang Yu1 <yu1.wang@intel.com>
106 lines
3.0 KiB
Makefile
106 lines
3.0 KiB
Makefile
CROSS_COMPILE ?= riscv64-linux-gnu-
|
|
|
|
CC = $(CROSS_COMPILE)gcc
|
|
AS = $(CROSS_COMPILE)as
|
|
AR = $(CROSS_COMPILE)ar
|
|
LD = $(CROSS_COMPILE)ld
|
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
|
|
|
ARCH_LDSCRIPT_IN = arch/riscv/link_ram.ld.in
|
|
|
|
CFLAGS += -std=gnu99
|
|
|
|
ASFLAGS +=
|
|
|
|
LDFLAGS += -Wl,--no-warn-rwx-segments
|
|
LDFLAGS += -Wl,-z,norelro
|
|
LDFLAGS += -Wl,-z,noexecstack
|
|
|
|
ifeq (y, $(CONFIG_RELOC))
|
|
CFLAGS += -fpie
|
|
ASFLAGS += -fpie
|
|
CFLAGS += -fvisibility=hidden
|
|
LDFLAGS += -shared
|
|
LDFLAGS += -Wl,-z,notext
|
|
LDFLAGS += -Wl,-Bsymbolic
|
|
LDFLAGS += -Wl,-z,defs
|
|
else
|
|
CFLAGS += -fno-pie -static
|
|
ASFLAGS += -fno-pie -static
|
|
LDFLAGS += -static
|
|
endif
|
|
|
|
# g expands to i, m, a, f, d, zicsr and zifencei.
|
|
# h for hypervisor extension
|
|
RV_ISA += gh
|
|
RV_ISA += zbb
|
|
RV_ISA += zicbom
|
|
RV_ISA += zihintpause
|
|
|
|
ARCH_CFLAGS += -march=rv64$(subst $() $(),_,$(RV_ISA))
|
|
ARCH_CFLAGS += -mabi=lp64d
|
|
ARCH_CFLAGS += -mcmodel=medany
|
|
|
|
ARCH_ASFLAGS += -march=rv64$(subst $() $(),_,$(RV_ISA))
|
|
|
|
# HV host assembly sources
|
|
HOST_S_SRCS += arch/riscv/boot/cpu_entry.S
|
|
HOST_S_SRCS += arch/riscv/intr.S
|
|
HOST_S_SRCS += arch/riscv/sched.S
|
|
|
|
# HV host C sources
|
|
HOST_C_SRCS += arch/riscv/boot/reloc.c
|
|
HOST_C_SRCS += arch/riscv/lib/random.c
|
|
HOST_C_SRCS += arch/riscv/init.c
|
|
HOST_C_SRCS += arch/riscv/sbi.c
|
|
HOST_C_SRCS += arch/riscv/notify.c
|
|
HOST_C_SRCS += arch/riscv/timer.c
|
|
HOST_C_SRCS += arch/riscv/trap.c
|
|
HOST_C_SRCS += arch/riscv/cpu.c
|
|
HOST_C_SRCS += arch/riscv/mmu.c
|
|
HOST_C_SRCS += arch/riscv/irq.c
|
|
HOST_C_SRCS += arch/riscv/pgtable.c
|
|
HOST_C_SRCS += arch/riscv/security.c
|
|
HOST_C_SRCS += arch/riscv/pm.c
|
|
|
|
# Virtual platform assembly sources
|
|
VP_S_SRCS +=
|
|
|
|
# Virtual platform C sources
|
|
VP_C_SRCS += arch/riscv/guest/guest_memory.c
|
|
VP_C_SRCS += arch/riscv/guest/vcpu.c
|
|
VP_C_SRCS += arch/riscv/guest/vm.c
|
|
VP_C_SRCS += arch/riscv/guest/vcpu_exit.c
|
|
VP_C_SRCS += arch/riscv/guest/virq.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_base.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_hsm.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_srst.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_acrn.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_dbcn.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_timer.c
|
|
VP_C_SRCS += arch/riscv/guest/vsbi/vsbi_ipi.c
|
|
|
|
VM_CFG_C_SRCS += $(SCENARIO_CFG_DIR)/vm_configurations.c
|
|
VM_CFG_C_SRCS += $(BOARD_CFG_DIR)/pci_dev.c
|
|
VM_CFG_C_SRCS += $(BOARD_CFG_DIR)/pt_intx.c
|
|
VM_CFG_C_SRCS += $(BOARD_INFO_DIR)/board.c
|
|
|
|
HOST_C_OBJS := $(patsubst %.c,$(HV_OBJDIR)/%.o,$(HOST_C_SRCS))
|
|
HOST_S_OBJS := $(patsubst %.S,$(HV_OBJDIR)/%.o,$(HOST_S_SRCS))
|
|
VP_C_OBJS := $(patsubst %.c,$(HV_OBJDIR)/%.o,$(VP_C_SRCS))
|
|
VP_S_OBJS := $(patsubst %.S,$(HV_OBJDIR)/%.o,$(VP_S_SRCS))
|
|
VM_CFG_C_OBJS := $(patsubst %.c,%.o,$(VM_CFG_C_SRCS))
|
|
|
|
HOST_MOD := $(HV_MODDIR)/host_mod.a
|
|
VP_MOD := $(HV_MODDIR)/vp_mod.a
|
|
|
|
MODULES += $(HOST_MOD)
|
|
MODULES += $(VP_MOD)
|
|
|
|
$(HOST_MOD): $(HOST_C_OBJS) $(HOST_S_OBJS)
|
|
$(AR) $(ARFLAGS) $(HOST_MOD) $(HOST_C_OBJS) $(HOST_S_OBJS)
|
|
|
|
$(VP_MOD): $(VP_C_OBJS) $(VP_S_OBJS) $(VM_CFG_C_OBJS)
|
|
$(AR) $(ARFLAGS) $(VP_MOD) $(VP_C_OBJS) $(VP_S_OBJS) $(VM_CFG_C_OBJS)
|