wiki:pic_device_api

Version 4 (modified by alain, 4 years ago) (diff)

--

PIC device API

A) General principles

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.

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.

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.

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.

B) Access functions

  • void dev_pic_init( xptr_t xp_dev , uint32_t irq_nr )

This function makes two initializations: It initializes the PIC specific fields of the device descriptor. It call the PIC driver to initialize the PIC hardware device. It is executed once in the kernel initialisation phase.

  • void dev_pic_bind_irq( uint32_t irq_id , cxy_t cxy , uint32_t wti_id )

This function link a WTI mailbox to the PIC input IRQ identified by its index, and unmask the selected input IRQ. The <irq_id> argument is the input IRQ index. The <cxy> argument is the WTI mailbox cluster. The <wti_id> argument is the WTI mailbox index in cluster.

  • void dev_pic_unbind_irq( uint32_t irq_id )

This function masks the PIC input IRQ identified by its index. The <irq_id> argument is the input IRQ index.