FreeBSD/sys/arm64/arm64/mp_machdep.c
/*
 *  Setup IPI handler on interrupt controller.
 *
 *  Not SMP coherent.
 */
Setup IPI handler on interrupt controller.
Not SMP coherent.
Setup IPI handler on interrupt controller . Not SMP coherent .
static void
intr_pic_ipi_setup(u_int ipi, const char *name, intr_ipi_handler_t *hand,
    void *arg)
{
	struct intr_irqsrc *isrc;
	struct intr_ipi *ii;
	int error;
	KASSERT(intr_irq_root_dev != NULL, ("%s: no root attached", __func__));
	KASSERT(hand != NULL, ("%s: ipi %u no handler", __func__, ipi));
	error = PIC_IPI_SETUP(intr_irq_root_dev, ipi, &isrc);
	if (error != 0)
		return;
	isrc->isrc_handlers++;
	ii = intr_ipi_lookup(ipi);
	KASSERT(ii->ii_count == NULL, ("%s: ipi %u reused", __func__, ipi));
	ii->ii_handler = hand;
	ii->ii_handler_arg = arg;
	ii->ii_send = pic_ipi_send;
	ii->ii_send_arg = isrc;
	strlcpy(ii->ii_name, name, INTR_IPI_NAMELEN);
	ii->ii_count = intr_ipi_setup_counters(name);
}
static void intr_pic_ipi_setup ( u_int ipi , const char * name , intr_ipi_handler_t * hand , void * arg ) { struct intr_irqsrc * isrc ; struct intr_ipi * ii ; int error ; KASSERT ( intr_irq_root_dev != NULL , ( " " , __func__ ) ) ; KASSERT ( hand != NULL , ( " " , __func__ , ipi ) ) ; error = PIC_IPI_SETUP ( intr_irq_root_dev , ipi , & isrc ) ; if ( error != 0 ) return ; isrc -> isrc_handlers ++ ; ii = intr_ipi_lookup ( ipi ) ; KASSERT ( ii -> ii_count == NULL , ( " " , __func__ , ipi ) ) ; ii -> ii_handler = hand ; ii -> ii_handler_arg = arg ; ii -> ii_send = pic_ipi_send ; ii -> ii_send_arg = isrc ; strlcpy ( ii -> ii_name , name , INTR_IPI_NAMELEN ) ; ii -> ii_count = intr_ipi_setup_counters ( name ) ; }
Setup IPI handler on interrupt controller.
Setup IPI handler on interrupt controller .