FreeBSD/sys/arm64/arm64/mp_machdep.c
/*
 *  Setup IPI handler to interrupt source.
 *
 *  Note that there could be more ways how to send and receive IPIs
 *  on a platform like fast interrupts for example. In that case,
 *  one can call this function with ASIF_NOALLOC flag set and then
 *  call intr_ipi_dispatch() when appropriate.
 *
 *  Not SMP coherent.
 */
Setup IPI handler to interrupt source.
Note that there could be more ways how to send and receive IPIs
on a platform like fast interrupts for example. In that case,
one can call this function with ASIF_NOALLOC flag set and then
call intr_ipi_dispatch() when appropriate.

Not SMP coherent.
Setup IPI handler to interrupt source . Note that there could be more ways how to send and receive IPIs on a platform like fast interrupts for example . In that case one can call this function with ASIF_NOALLOC flag set and then call intr_ipi_dispatch () when appropriate . Not SMP coherent .
int
intr_ipi_set_handler(u_int ipi, const char *name, intr_ipi_filter_t *filter,
    void *arg, u_int flags)
{
	struct intr_irqsrc *isrc;
	int error;
	if (filter == NULL)
		return(EINVAL);
	isrc = intr_ipi_lookup(ipi);
	if (isrc->isrc_ipifilter != NULL)
		return (EEXIST);
	if ((flags & AISHF_NOALLOC) == 0) {
		error = ipi_map(isrc, ipi);
		if (error != 0)
			return (error);
	}
	isrc->isrc_ipifilter = filter;
	isrc->isrc_arg = arg;
	isrc->isrc_handlers = 1;
	isrc->isrc_count = intr_ipi_setup_counters(name);
	isrc->isrc_index = 0; 
	if (isrc->isrc_dev != NULL) {
		PIC_ENABLE_INTR(isrc->isrc_dev, isrc);
		PIC_ENABLE_SOURCE(isrc->isrc_dev, isrc);
	}
	return (0);
}
int intr_ipi_set_handler ( u_int ipi , const char * name , intr_ipi_filter_t * filter , void * arg , u_int flags ) { struct intr_irqsrc * isrc ; int error ; if ( filter == NULL ) return ( EINVAL ) ; isrc = intr_ipi_lookup ( ipi ) ; if ( isrc -> isrc_ipifilter != NULL ) return ( EEXIST ) ; if ( ( flags & AISHF_NOALLOC ) == 0 ) { error = ipi_map ( isrc , ipi ) ; if ( error != 0 ) return ( error ) ; } isrc -> isrc_ipifilter = filter ; isrc -> isrc_arg = arg ; isrc -> isrc_handlers = 1 ; isrc -> isrc_count = intr_ipi_setup_counters ( name ) ; isrc -> isrc_index = 0 ; if ( isrc -> isrc_dev != NULL ) { PIC_ENABLE_INTR ( isrc -> isrc_dev , isrc ) ; PIC_ENABLE_SOURCE ( isrc -> isrc_dev , isrc ) ; } return ( 0 ) ; }
Setup IPI handler to interrupt source.
Setup IPI handler to interrupt source .
/* it should not be used in IPI case */