Lines Matching defs:imsic

7 #define pr_fmt(fmt) "riscv-imsic: " fmt
22 #include "irq-riscv-imsic-state.h"
59 struct imsic_priv *imsic;
63 return imsic ? &imsic->global : NULL;
136 for_each_set_bit(i, lpriv->dirty_bitmap, imsic->global.nr_ids + 1) {
186 tlocal = per_cpu_ptr(imsic->global.local, tvec->cpu);
190 mlocal = per_cpu_ptr(imsic->global.local, mvec->cpu);
195 mlocal = per_cpu_ptr(imsic->global.local, mvec->cpu);
228 struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
234 bitmap_fill(lpriv->dirty_bitmap, imsic->global.nr_ids + 1);
296 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
318 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
342 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
387 old_lpriv = per_cpu_ptr(imsic->lpriv, old_vec->cpu);
391 new_lpriv = per_cpu_ptr(imsic->lpriv, new_vec->cpu);
412 lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
433 irq_matrix_debug_show(m, imsic->matrix, ind);
439 struct imsic_local_priv *lpriv = per_cpu_ptr(imsic->lpriv, cpu);
441 if (!lpriv || imsic->global.nr_ids < local_id)
455 raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
456 local_id = irq_matrix_alloc(imsic->matrix, mask, false, &cpu);
457 raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
461 lpriv = per_cpu_ptr(imsic->lpriv, cpu);
475 raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
477 irq_matrix_free(imsic->matrix, vec->cpu, vec->local_id, false);
478 raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
487 lpriv = per_cpu_ptr(imsic->lpriv, cpu);
493 free_percpu(imsic->lpriv);
498 struct imsic_global_config *global = &imsic->global;
504 imsic->lpriv = alloc_percpu(typeof(*imsic->lpriv));
505 if (!imsic->lpriv)
510 lpriv = per_cpu_ptr(imsic->lpriv, cpu);
550 raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
551 irq_matrix_online(imsic->matrix);
552 raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
559 raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
560 irq_matrix_offline(imsic->matrix);
561 raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
564 struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
574 struct imsic_global_config *global = &imsic->global;
576 raw_spin_lock_init(&imsic->matrix_lock);
577 imsic->matrix = irq_alloc_matrix(global->nr_ids + 1,
579 if (!imsic->matrix)
583 irq_matrix_assign_system(imsic->matrix, 0, false);
587 irq_matrix_assign_system(imsic->matrix, IMSIC_IPI_ID, false);
650 struct acpi_madt_imsic *imsic = (struct acpi_madt_imsic *)opaque;
652 global->guest_index_bits = imsic->guest_index_bits;
653 global->hart_index_bits = imsic->hart_index_bits;
654 global->group_index_bits = imsic->group_index_bits;
655 global->group_index_shift = imsic->group_index_shift;
656 global->nr_ids = imsic->num_ids;
657 global->nr_guest_ids = imsic->num_guest_ids;
813 if (imsic) {
823 imsic = kzalloc(sizeof(*imsic), GFP_KERNEL);
824 if (!imsic)
826 imsic->fwnode = fwnode;
827 global = &imsic->global;
964 free_percpu(imsic->global.local);
966 kfree(imsic);
967 imsic = NULL;