Lines Matching refs:pic
72 static void append_pic(struct rt_pic *pic) in append_pic() argument
74 int pic_name_len = rt_strlen(pic->ops->name); in append_pic()
76 rt_list_insert_before(&_pic_nodes, &pic->list); in append_pic()
84 void rt_pic_default_name(struct rt_pic *pic) in rt_pic_default_name() argument
86 if (pic) in rt_pic_default_name()
89 rt_strncpy(pic->parent.name, "PIC", RT_NAME_MAX - 1); in rt_pic_default_name()
90 pic->parent.name[RT_NAME_MAX - 1] = '\0'; in rt_pic_default_name()
92 pic->parent.name = "PIC"; in rt_pic_default_name()
99 struct rt_pic *pic = RT_NULL, *tmp = RT_NULL; in rt_pic_dynamic_cast() local
120 pic = tmp; in rt_pic_dynamic_cast()
124 return pic; in rt_pic_dynamic_cast()
127 rt_err_t rt_pic_linear_irq(struct rt_pic *pic, rt_size_t irq_nr) in rt_pic_linear_irq() argument
131 if (pic && pic->ops && pic->ops->name) in rt_pic_linear_irq()
137 rt_list_init(&pic->list); in rt_pic_linear_irq()
139 rt_pic_default_name(pic); in rt_pic_linear_irq()
140 pic->parent.type = RT_Object_Class_Unknown; in rt_pic_linear_irq()
142 pic->irq_start = _pirq_hash_idx; in rt_pic_linear_irq()
143 pic->irq_nr = irq_nr; in rt_pic_linear_irq()
144 pic->pirqs = &_pirq_hash[_pirq_hash_idx]; in rt_pic_linear_irq()
148 append_pic(pic); in rt_pic_linear_irq()
150 LOG_D("%s alloc irqs ranges [%d, %d]", pic->ops->name, in rt_pic_linear_irq()
151 pic->irq_start, pic->irq_start + pic->irq_nr); in rt_pic_linear_irq()
155 LOG_E("%s alloc %d irqs is overflow", pic->ops->name, irq_nr); in rt_pic_linear_irq()
170 rt_err_t rt_pic_cancel_irq(struct rt_pic *pic) in rt_pic_cancel_irq() argument
174 if (pic && pic->pirqs) in rt_pic_cancel_irq()
182 rt_list_remove(&pic->list); in rt_pic_cancel_irq()
194 static void config_pirq(struct rt_pic *pic, struct rt_pic_irq *pirq, int irq, int hwirq) in config_pirq() argument
204 else if (pirq->pic != pic) in config_pirq()
214 pirq->pic = pic; in config_pirq()
219 int rt_pic_config_ipi(struct rt_pic *pic, int ipi_index, int hwirq) in rt_pic_config_ipi() argument
224 if (pic && ipi < RT_MAX_IPI && hwirq >= 0 && pic->ops->irq_send_ipi) in rt_pic_config_ipi()
227 config_pirq(pic, pirq, ipi, hwirq); in rt_pic_config_ipi()
234 LOG_D("%s config %s %d to hwirq %d", pic->ops->name, "ipi", ipi, hwirq); in rt_pic_config_ipi()
244 int rt_pic_config_irq(struct rt_pic *pic, int irq_index, int hwirq) in rt_pic_config_irq() argument
248 if (pic && hwirq >= 0) in rt_pic_config_irq()
250 irq = pic->irq_start + irq_index; in rt_pic_config_irq()
254 config_pirq(pic, &_pirq_hash[irq], irq, hwirq); in rt_pic_config_irq()
256 LOG_D("%s config %s %d to hwirq %d", pic->ops->name, "irq", irq, hwirq); in rt_pic_config_irq()
271 struct rt_pic_irq *rt_pic_find_ipi(struct rt_pic *pic, int ipi_index) in rt_pic_find_ipi() argument
276 RT_ASSERT(pirq->pic == pic); in rt_pic_find_ipi()
281 struct rt_pic_irq *rt_pic_find_pirq(struct rt_pic *pic, int irq) in rt_pic_find_pirq() argument
283 if (pic && irq >= pic->irq_start && irq <= pic->irq_start + pic->irq_nr) in rt_pic_find_pirq()
285 return &pic->pirqs[irq - pic->irq_start]; in rt_pic_find_pirq()
312 if (parent && pirq->pic->ops->flags & RT_PIC_F_IRQ_ROUTING) in rt_pic_cascade()
344 if (parent && pirq->pic->ops->flags & RT_PIC_F_IRQ_ROUTING) in rt_pic_uncascade()
553 RT_ASSERT(pirq->pic != RT_NULL); in rt_pic_handle_isr()
569 if (child->pic->ops->irq_ack) in rt_pic_handle_isr()
571 child->pic->ops->irq_ack(child); in rt_pic_handle_isr()
576 if (child->pic->ops->irq_eoi) in rt_pic_handle_isr()
578 child->pic->ops->irq_eoi(child); in rt_pic_handle_isr()
633 rt_weak rt_err_t rt_pic_user_extends(struct rt_pic *pic) in rt_pic_user_extends() argument
641 struct rt_pic *pic; in rt_pic_irq_init() local
643 rt_list_for_each_entry(pic, &_pic_nodes, list) in rt_pic_irq_init()
645 if (pic->ops->irq_init) in rt_pic_irq_init()
647 err = pic->ops->irq_init(pic); in rt_pic_irq_init()
651 LOG_E("PIC = %s init fail", pic->ops->name); in rt_pic_irq_init()
663 struct rt_pic *pic; in rt_pic_irq_finit() local
665 rt_list_for_each_entry(pic, &_pic_nodes, list) in rt_pic_irq_finit()
667 if (pic->ops->irq_finit) in rt_pic_irq_finit()
669 err = pic->ops->irq_finit(pic); in rt_pic_irq_finit()
673 LOG_E("PIC = %s finit fail", pic->ops->name); in rt_pic_irq_finit()
690 if (pirq->pic->ops->irq_enable) in rt_pic_irq_enable()
692 pirq->pic->ops->irq_enable(pirq); in rt_pic_irq_enable()
706 if (pirq->pic->ops->irq_disable) in rt_pic_irq_disable()
708 pirq->pic->ops->irq_disable(pirq); in rt_pic_irq_disable()
722 if (pirq->pic->ops->irq_ack) in rt_pic_irq_ack()
724 pirq->pic->ops->irq_ack(pirq); in rt_pic_irq_ack()
738 if (pirq->pic->ops->irq_mask) in rt_pic_irq_mask()
740 pirq->pic->ops->irq_mask(pirq); in rt_pic_irq_mask()
754 if (pirq->pic->ops->irq_unmask) in rt_pic_irq_unmask()
756 pirq->pic->ops->irq_unmask(pirq); in rt_pic_irq_unmask()
770 if (pirq->pic->ops->irq_eoi) in rt_pic_irq_eoi()
772 pirq->pic->ops->irq_eoi(pirq); in rt_pic_irq_eoi()
787 if (pirq->pic->ops->irq_set_priority) in rt_pic_irq_set_priority()
789 err = pirq->pic->ops->irq_set_priority(pirq, priority); in rt_pic_irq_set_priority()
833 if (pirq->pic->ops->irq_set_affinity) in rt_pic_irq_set_affinity()
835 err = pirq->pic->ops->irq_set_affinity(pirq, affinity); in rt_pic_irq_set_affinity()
880 if (pirq->pic->ops->irq_set_triger_mode) in rt_pic_irq_set_triger_mode()
882 err = pirq->pic->ops->irq_set_triger_mode(pirq, mode); in rt_pic_irq_set_triger_mode()
925 if (pirq->pic->ops->irq_send_ipi) in rt_pic_irq_send_ipi()
927 pirq->pic->ops->irq_send_ipi(pirq, cpumask); in rt_pic_irq_send_ipi()
934 rt_err_t rt_pic_irq_set_state_raw(struct rt_pic *pic, int hwirq, int type, rt_bool_t state) in rt_pic_irq_set_state_raw() argument
938 if (pic && hwirq >= 0) in rt_pic_irq_set_state_raw()
940 if (pic->ops->irq_set_state) in rt_pic_irq_set_state_raw()
942 err = pic->ops->irq_set_state(pic, hwirq, type, state); in rt_pic_irq_set_state_raw()
957 rt_err_t rt_pic_irq_get_state_raw(struct rt_pic *pic, int hwirq, int type, rt_bool_t *out_state) in rt_pic_irq_get_state_raw() argument
961 if (pic && hwirq >= 0) in rt_pic_irq_get_state_raw()
963 if (pic->ops->irq_get_state) in rt_pic_irq_get_state_raw()
967 if (!(err = pic->ops->irq_get_state(pic, hwirq, type, &state)) && out_state) in rt_pic_irq_get_state_raw()
993 err = rt_pic_irq_set_state_raw(pirq->pic, pirq->hwirq, type, state); in rt_pic_irq_set_state()
1007 err = rt_pic_irq_get_state_raw(pirq->pic, pirq->hwirq, type, out_state); in rt_pic_irq_get_state()
1018 if (pirq->pic->ops->irq_enable) in rt_pic_irq_parent_enable()
1020 pirq->pic->ops->irq_enable(pirq); in rt_pic_irq_parent_enable()
1029 if (pirq->pic->ops->irq_disable) in rt_pic_irq_parent_disable()
1031 pirq->pic->ops->irq_disable(pirq); in rt_pic_irq_parent_disable()
1040 if (pirq->pic->ops->irq_ack) in rt_pic_irq_parent_ack()
1042 pirq->pic->ops->irq_ack(pirq); in rt_pic_irq_parent_ack()
1051 if (pirq->pic->ops->irq_mask) in rt_pic_irq_parent_mask()
1053 pirq->pic->ops->irq_mask(pirq); in rt_pic_irq_parent_mask()
1062 if (pirq->pic->ops->irq_unmask) in rt_pic_irq_parent_unmask()
1064 pirq->pic->ops->irq_unmask(pirq); in rt_pic_irq_parent_unmask()
1073 if (pirq->pic->ops->irq_eoi) in rt_pic_irq_parent_eoi()
1075 pirq->pic->ops->irq_eoi(pirq); in rt_pic_irq_parent_eoi()
1086 if (pirq->pic->ops->irq_set_priority) in rt_pic_irq_parent_set_priority()
1088 if (!(err = pirq->pic->ops->irq_set_priority(pirq, priority))) in rt_pic_irq_parent_set_priority()
1104 if (pirq->pic->ops->irq_set_affinity) in rt_pic_irq_parent_set_affinity()
1106 if (!(err = pirq->pic->ops->irq_set_affinity(pirq, affinity))) in rt_pic_irq_parent_set_affinity()
1122 if (pirq->pic->ops->irq_set_triger_mode) in rt_pic_irq_parent_set_triger_mode()
1124 if (!(err = pirq->pic->ops->irq_set_triger_mode(pirq, mode))) in rt_pic_irq_parent_set_triger_mode()
1134 RT_OFW_STUB_RANGE_EXPORT(pic, _pic_ofw_start, _pic_ofw_end);
1231 if (!pirq->pic || !(dump_all || pirq->isr.action.handler)) in list_irq()
1240 _pic_name_max, pirq->pic->ops->name, in list_irq()