MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / rt_pic_cascade

Function rt_pic_cascade

components/drivers/pic/pic.c:291–327  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

289}
290
291rt_err_t rt_pic_cascade(struct rt_pic_irq *pirq, int parent_irq)
292{
293 rt_err_t err = RT_EOK;
294
295 if (pirq && !pirq->parent && parent_irq >= 0)
296 {
297 struct rt_pic_irq *parent;
298
299 rt_spin_lock(&pirq->rw_lock);
300
301 parent = irq2pirq(parent_irq);
302
303 if (parent)
304 {
305 pirq->parent = parent;
306 pirq->priority = parent->priority;
307 rt_memcpy(&pirq->affinity, &parent->affinity, sizeof(pirq->affinity));
308 }
309
310 rt_spin_unlock(&pirq->rw_lock);
311
312 if (parent && pirq->pic->ops->flags & RT_PIC_F_IRQ_ROUTING)
313 {
314 rt_spin_lock(&parent->rw_lock);
315
316 rt_list_insert_before(&parent->children_nodes, &pirq->list);
317
318 rt_spin_unlock(&parent->rw_lock);
319 }
320 }
321 else
322 {
323 err = -RT_EINVAL;
324 }
325
326 return err;
327}
328
329rt_err_t rt_pic_uncascade(struct rt_pic_irq *pirq)
330{

Callers 3

pin_dm_irq_mapFunction · 0.85
gicv2m_irq_alloc_msiFunction · 0.85
gicv3_its_irq_alloc_msiFunction · 0.85

Calls 5

irq2pirqFunction · 0.85
rt_memcpyFunction · 0.85
rt_list_insert_beforeFunction · 0.85
rt_spin_lockFunction · 0.50
rt_spin_unlockFunction · 0.50

Tested by

no test coverage detected