Lines Matching refs:map
44 static void init_map(sdei_ev_map_t *map) in init_map() argument
46 map->reg_count = 0; in init_map()
50 static sdei_class_t map_to_class(sdei_ev_map_t *map) in map_to_class() argument
52 return is_event_critical(map) ? SDEI_CRITICAL : SDEI_NORMAL; in map_to_class()
68 sdei_ev_map_t *map; in sdei_cpu_on_init() local
72 for_each_private_map(i, map) { in sdei_cpu_on_init()
73 se = get_event_entry(map); in sdei_cpu_on_init()
103 sdei_ev_map_t *map; in sdei_class_init() local
107 for_each_shared_map(i, map) { in sdei_class_init()
110 assert((ev_num_so_far < 0) || (map->ev_num > ev_num_so_far)); in sdei_class_init()
112 ev_num_so_far = map->ev_num; in sdei_class_init()
115 assert(map->ev_num != SDEI_EVENT_0); in sdei_class_init()
118 assert(map->ev_num >= 0); in sdei_class_init()
121 assert(is_event_shared(map)); in sdei_class_init()
124 assert(!is_event_signalable(map)); in sdei_class_init()
127 assert(!is_map_explicit(map)); in sdei_class_init()
131 if (map_to_class(map) != class) in sdei_class_init()
135 if (is_map_dynamic(map)) { in sdei_class_init()
136 assert(map->intr == SDEI_DYN_IRQ); in sdei_class_init()
137 assert(is_event_normal(map)); in sdei_class_init()
141 assert(plat_ic_is_spi(map->intr) != 0); in sdei_class_init()
142 set_map_bound(map); in sdei_class_init()
145 init_map(map); in sdei_class_init()
150 for_each_private_map(i, map) { in sdei_class_init()
153 assert((ev_num_so_far < 0) || (map->ev_num > ev_num_so_far)); in sdei_class_init()
155 ev_num_so_far = map->ev_num; in sdei_class_init()
157 if (map->ev_num == SDEI_EVENT_0) { in sdei_class_init()
161 assert(is_secure_sgi(map->intr)); in sdei_class_init()
167 assert(map->map_flags == (SDEI_MAPF_SIGNALABLE | in sdei_class_init()
171 assert(!is_event_signalable(map)); in sdei_class_init()
175 assert(map->ev_num >= 0); in sdei_class_init()
178 assert(is_event_private(map)); in sdei_class_init()
184 if (is_map_explicit(map)) { in sdei_class_init()
185 assert((map->map_flags | SDEI_MAPF_CRITICAL) == in sdei_class_init()
192 if (map_to_class(map) != class) in sdei_class_init()
196 if (map->ev_num != SDEI_EVENT_0) { in sdei_class_init()
197 if (is_map_dynamic(map)) { in sdei_class_init()
198 assert(map->intr == SDEI_DYN_IRQ); in sdei_class_init()
199 assert(is_event_normal(map)); in sdei_class_init()
201 } else if (is_map_explicit(map)) { in sdei_class_init()
206 assert(map->intr == SDEI_DYN_IRQ); in sdei_class_init()
212 assert(plat_ic_is_ppi((unsigned) map->intr) != 0); in sdei_class_init()
213 set_map_bound(map); in sdei_class_init()
217 init_map(map); in sdei_class_init()
281 sdei_ev_map_t *map; in sdei_event_routing_set() local
289 map = find_event_map(ev_num); in sdei_event_routing_set()
290 if (map == NULL) in sdei_event_routing_set()
294 if (is_event_private(map)) in sdei_event_routing_set()
297 se = get_event_entry(map); in sdei_event_routing_set()
299 sdei_map_lock(map); in sdei_event_routing_set()
301 if (!is_map_bound(map) || is_event_private(map)) { in sdei_event_routing_set()
326 plat_ic_set_spi_routing(map->intr, routing, (u_register_t) mpidr); in sdei_event_routing_set()
329 sdei_map_unlock(map); in sdei_event_routing_set()
344 sdei_ev_map_t *map; in sdei_event_register() local
357 map = find_event_map(ev_num); in sdei_event_register()
358 if (map == NULL) in sdei_event_register()
362 if (is_event_private(map)) { in sdei_event_register()
377 se = get_event_entry(map); in sdei_event_register()
385 sdei_map_lock(map); in sdei_event_register()
396 if (is_map_dynamic(map) && !is_map_bound(map)) in sdei_event_register()
399 if (is_event_private(map)) { in sdei_event_register()
401 assert(map->reg_count >= 0); in sdei_event_register()
404 assert(map->reg_count == 0); in sdei_event_register()
407 if (is_map_bound(map)) { in sdei_event_register()
409 if (plat_ic_get_interrupt_active(map->intr) != 0U) in sdei_event_register()
413 if (plat_ic_get_interrupt_type(map->intr) != INTR_TYPE_NS) in sdei_event_register()
420 plat_ic_disable_interrupt(map->intr); in sdei_event_register()
429 plat_ic_clear_interrupt_pending(map->intr); in sdei_event_register()
432 plat_ic_set_interrupt_type(map->intr, INTR_TYPE_EL3); in sdei_event_register()
435 plat_ic_set_interrupt_priority(map->intr, sdei_event_priority(map)); in sdei_event_register()
441 if (is_event_shared(map)) { in sdei_event_register()
444 plat_ic_set_spi_routing(map->intr, routing, in sdei_event_register()
453 map->reg_count++; in sdei_event_register()
455 sdei_map_unlock(map); in sdei_event_register()
463 sdei_map_unlock(map); in sdei_event_register()
471 sdei_ev_map_t *map; in sdei_event_enable() local
477 map = find_event_map(ev_num); in sdei_event_enable()
478 if (map == NULL) in sdei_event_enable()
481 se = get_event_entry(map); in sdei_event_enable()
484 if (is_event_shared(map)) in sdei_event_enable()
485 sdei_map_lock(map); in sdei_event_enable()
496 if (is_map_bound(map) && (!before && after)) in sdei_event_enable()
497 plat_ic_enable_interrupt(map->intr); in sdei_event_enable()
502 if (is_event_shared(map)) in sdei_event_enable()
503 sdei_map_unlock(map); in sdei_event_enable()
511 sdei_ev_map_t *map; in sdei_event_disable() local
517 map = find_event_map(ev_num); in sdei_event_disable()
518 if (map == NULL) in sdei_event_disable()
521 se = get_event_entry(map); in sdei_event_disable()
524 if (is_event_shared(map)) in sdei_event_disable()
525 sdei_map_lock(map); in sdei_event_disable()
536 if (is_map_bound(map) && (before && !after)) in sdei_event_disable()
537 plat_ic_disable_interrupt(map->intr); in sdei_event_disable()
542 if (is_event_shared(map)) in sdei_event_disable()
543 sdei_map_unlock(map); in sdei_event_disable()
552 sdei_ev_map_t *map; in sdei_event_get_info() local
559 map = find_event_map(ev_num); in sdei_event_get_info()
560 if (map == NULL) in sdei_event_get_info()
563 se = get_event_entry(map); in sdei_event_get_info()
565 if (is_event_shared(map)) in sdei_event_get_info()
566 sdei_map_lock(map); in sdei_event_get_info()
573 if (is_event_shared(map)) in sdei_event_get_info()
574 sdei_map_unlock(map); in sdei_event_get_info()
578 return is_event_shared(map); in sdei_event_get_info()
581 return !is_event_signalable(map); in sdei_event_get_info()
584 return is_event_critical(map); in sdei_event_get_info()
587 if (!is_event_shared(map)) in sdei_event_get_info()
594 if (!is_event_shared(map)) in sdei_event_get_info()
612 sdei_ev_map_t *map; in sdei_event_unregister() local
615 map = find_event_map(ev_num); in sdei_event_unregister()
616 if (map == NULL) in sdei_event_unregister()
619 se = get_event_entry(map); in sdei_event_unregister()
627 sdei_map_lock(map); in sdei_event_unregister()
640 map->reg_count--; in sdei_event_unregister()
641 if (is_event_private(map)) { in sdei_event_unregister()
643 assert(map->reg_count >= 0); in sdei_event_unregister()
646 assert(map->reg_count == 0); in sdei_event_unregister()
649 if (is_map_bound(map)) { in sdei_event_unregister()
650 plat_ic_disable_interrupt(map->intr); in sdei_event_unregister()
657 plat_ic_clear_interrupt_pending(map->intr); in sdei_event_unregister()
659 assert(plat_ic_get_interrupt_type(map->intr) == INTR_TYPE_EL3); in sdei_event_unregister()
660 plat_ic_set_interrupt_type(map->intr, INTR_TYPE_NS); in sdei_event_unregister()
661 plat_ic_set_interrupt_priority(map->intr, LOWEST_INTR_PRIORITY); in sdei_event_unregister()
674 sdei_map_unlock(map); in sdei_event_unregister()
682 sdei_ev_map_t *map; in sdei_event_status() local
687 map = find_event_map(ev_num); in sdei_event_status()
688 if (map == NULL) in sdei_event_status()
691 se = get_event_entry(map); in sdei_event_status()
693 if (is_event_shared(map)) in sdei_event_status()
694 sdei_map_lock(map); in sdei_event_status()
699 if (is_event_shared(map)) in sdei_event_status()
700 sdei_map_unlock(map); in sdei_event_status()
708 sdei_ev_map_t *map; in sdei_interrupt_bind() local
721 map = find_event_map_by_intr(intr_num, shared_mapping); in sdei_interrupt_bind()
722 if (map != NULL) { in sdei_interrupt_bind()
723 if (is_map_dynamic(map)) { in sdei_interrupt_bind()
724 if (is_map_bound(map)) { in sdei_interrupt_bind()
729 return map->ev_num; in sdei_interrupt_bind()
742 map = find_event_map_by_intr(SDEI_DYN_IRQ, shared_mapping); in sdei_interrupt_bind()
743 if (map == NULL) in sdei_interrupt_bind()
747 assert(is_map_dynamic(map)); in sdei_interrupt_bind()
763 sdei_map_lock(map); in sdei_interrupt_bind()
764 if (!is_map_bound(map)) { in sdei_interrupt_bind()
765 map->intr = intr_num; in sdei_interrupt_bind()
766 set_map_bound(map); in sdei_interrupt_bind()
769 sdei_map_unlock(map); in sdei_interrupt_bind()
772 return map->ev_num; in sdei_interrupt_bind()
779 sdei_ev_map_t *map; in sdei_interrupt_release() local
783 map = find_event_map(ev_num); in sdei_interrupt_release()
784 if (map == NULL) in sdei_interrupt_release()
787 if (!is_map_dynamic(map)) in sdei_interrupt_release()
790 se = get_event_entry(map); in sdei_interrupt_release()
792 sdei_map_lock(map); in sdei_interrupt_release()
795 if (map->reg_count != 0) { in sdei_interrupt_release()
809 if (is_map_bound(map)) { in sdei_interrupt_release()
814 if (plat_ic_get_interrupt_active(map->intr) != 0U) { in sdei_interrupt_release()
824 map->intr = SDEI_DYN_IRQ; in sdei_interrupt_release()
825 clr_map_bound(map); in sdei_interrupt_release()
827 SDEI_LOG("Error release bound:%d cnt:%d\n", is_map_bound(map), in sdei_interrupt_release()
828 map->reg_count); in sdei_interrupt_release()
833 sdei_map_unlock(map); in sdei_interrupt_release()
841 sdei_ev_map_t *map; in sdei_private_reset() local
846 for_each_private_map(i, map) { in sdei_private_reset()
852 ret = sdei_event_unregister(map->ev_num); in sdei_private_reset()
864 sdei_ev_map_t *map; in sdei_shared_reset() local
869 for_each_shared_map(i, map) { in sdei_shared_reset()
875 ret = sdei_event_unregister(map->ev_num); in sdei_shared_reset()
888 iterate_mapping(mapping, j, map) { in sdei_shared_reset()
893 if (is_map_dynamic(map) && is_map_bound(map)) { in sdei_shared_reset()
898 ret = sdei_interrupt_release(map->ev_num); in sdei_shared_reset()
911 sdei_ev_map_t *map; in sdei_signal() local
918 map = find_event_map(SDEI_EVENT_0); in sdei_signal()
919 if (map == NULL) in sdei_signal()
923 if (!is_event_signalable(map)) in sdei_signal()
931 plat_ic_raise_el3_sgi((int) map->intr, (u_register_t) target_pe); in sdei_signal()