@ VECTOR_IPI
See IPI for more information.
#define IPI_QUEUE_SIZE
IPI queue size.
void ipi_cpu_ctx_init(ipi_cpu_ctx_t *ctx)
Initialize per-CPU IPI context.
void ipi_handle_pending(interrupt_frame_t *frame, cpu_t *self)
Handle pending IPIs on the current CPU.
void ipi_invoke(void)
Invoke a IPI interrupt on the current CPU.
void ipi_wake_up(cpu_t *cpu, ipi_flags_t flags)
Wake up one or more CPUs.
void(* ipi_func_t)(ipi_func_data_t *data)
IPI function type.
uint64_t ipi_chip_register(ipi_chip_t *chip)
Register an IPI chip.
uint64_t ipi_chip_amount(void)
Get the number of registered IPI chips.
uint64_t ipi_send(cpu_t *cpu, ipi_flags_t flags, ipi_func_t func, void *private)
Send an IPI to one or more CPUs.
void ipi_chip_unregister(ipi_chip_t *chip)
Unregister the IPI chip.
@ IPI_OTHERS
Send the IPI to all CPUs except the specified CPU.
@ IPI_SINGLE
Send the IPI to the specified CPU.
@ IPI_BROADCAST
Send the IPI to all CPUs, specified CPU ignored.
#define IRQ_INVOKE(virt)
Invoke the given virtual IRQ.
#define CPU_FOR_EACH(cpu)
Macro to iterate over all CPUs.
#define LOG_INFO(format,...)
static void lock_init(lock_t *lock)
Initializes a lock.
#define LOCK_SCOPE(lock)
Acquires a lock for the reminder of the current scope.
void rwlock_read_acquire(rwlock_t *lock)
Acquires a rwlock for reading, blocking until it is available.
#define RWLOCK_READ_SCOPE(lock)
Acquires a rwlock for reading for the reminder of the current scope.
void rwlock_read_release(rwlock_t *lock)
Releases a rwlock from reading.
#define RWLOCK_CREATE()
Create a rwlock initializer.
#define RWLOCK_WRITE_SCOPE(lock)
Acquires a rwlock for writing for the reminder of the current scope.
#define EINVAL
Invalid argument.
#define ENOSYS
Function not implemented.
#define EBUSY
Device or resource busy.
#define errno
Error number variable.
#define ENODEV
No such device.
#define NULL
Pointer error value.
#define ERR
Integer error value.
static ipi_chip_t * registeredChip
static uint64_t ipi_push(cpu_t *cpu, ipi_func_t func, void *private)
static const path_flag_t flags[]
_PUBLIC void * memset(void *s, int c, size_t n)
Inter-Processor Interrupt (IPI) chip structure.
void(* interrupt)(cpu_t *cpu, irq_virt_t virt)
Should interrupt the given CPU with the given virtual IRQ.
ipi_t queue[IPI_QUEUE_SIZE]
IPI function data structure.
Read-Write Ticket Lock structure.