|   | 3 | [[PageOutline]] | 
                  
                          |   | 4 |  | 
                  
                          |   | 5 |  == A) General principles == | 
                  
                          |   | 6 |  | 
                  
                          |   | 7 | The PIC generic device describes an external interrupt Controler, that translates N input IRQs generated by external peripherals to N WTI IRQs, that will be routed to a dynamically allocated WTI mailbox in a given cluster.  | 
                  
                          |   | 8 |  | 
                  
                          |   | 9 | The max number of input IRQs is defined by the CONFIG_IRQ_PIC_MAX parameter. The actual number of connected IRQs is defined in the ''arch_info'' file, and stored in the PIC device extension.   | 
                  
                          |   | 10 |  | 
                  
                          |   | 11 | The "source" device for each input IRQ is also defined in the ''arch_info'' file, and are stored in the ''devices_irq'' global variable in the kernel initialization phase. | 
                  
                          |   | 12 |  | 
                  
                          |   | 13 | This external peripheral does not execute I/O operations, but is just acting as a dynamically configurable interrupt router for another I/O operation. Therefore, ALMOS-MK does not use the PIC device waiting queue, but call directly the PIC driver blocking functions to dynamically configure the PIC component. | 
                  
                          |   | 14 |  | 
                  
                          |   | 15 | == B) Access Functions == | 
                  
                          |   | 16 |  | 
                  
                          |   | 17 | === 1) '''void dev_pic_init'''( xptr_t   xp_dev ,  uint32_t irq_nr ) === | 
                  
                          |   | 18 |  | 
                  
                          |   | 19 | This function makes two initializations: | 
                  
                          |   | 20 | It initializes the PIC specific fields of the device descriptor. It call the PIC driver to initialize the PIC hardware device. | 
                  
                          |   | 21 | It is executed once in the kernel initialisation phase. | 
                  
                          |   | 22 |  | 
                  
                          |   | 23 | === 2) '''void dev_pic_bind_irq'''( uint32_t   irq_id ,  cxy_t  cxy ,  uint32_t   wti_id ) === | 
                  
                          |   | 24 |  | 
                  
                          |   | 25 | This function link a WTI mailbox to the PIC input IRQ identified by its index, and unmask the selected input IRQ. | 
                  
                          |   | 26 | The <irq_id> argument is the input IRQ index. The <cxy> argument is the WTI mailbox cluster. The <wti_id>  argument | 
                  
                          |   | 27 | is the WTI mailbox index in cluster. | 
                  
                          |   | 28 |  | 
                  
                          |   | 29 | === 3) '''void dev_pic_unbind_irq'''( uint32_t  irq_id ) === | 
                  
                          |   | 30 |  | 
                  
                          |   | 31 | This function mask a PIC input IRQ identified by its index. The <irq_id> argument is the input IRQ index.  | 
                  
                          |   | 32 |  | 
                  
                          |   | 33 | /***************************************************************************************** | 
                  
                          |   | 34 |  * This function mask a PIC input IRQ identified by its index. | 
                  
                          |   | 35 |  ***************************************************************************************** | 
                  
                          |   | 36 |  * @ irq_id    : input IRQ index. | 
                  
                          |   | 37 |  * @ returns 0 if success / returns EINVAL if input IRQ not found. | 
                  
                          |   | 38 |  ****************************************************************************************/ | 
                  
                          |   | 39 | void dev_pic_unbind_irq( uint32_t   irq_id ); | 
                  
                          |   | 40 |        |