New struct intr_ipi is defined which keeps all info about an IPI. Namely, the way how to send an IPI, the way how to dispatch an IPI, an IPI name and its counter.
The intr_ipi_setup(), intr_ipi_send() and intr_ipi_dispatch() are implemented.
An IPI provider must implement two functions:
(1) an intr_ipi_send_t function which is able to send an IPI,
(2) a setup function which initializes itself for an IPI and calls intr_ipi_setup() with appropriate arguments.
An interface for an interrupt controller IPI provider is implemented.