| 1 | = GIET-VM / CMA Driver = |
| 2 | |
| 3 | The [source:soft/giet_vm/giet_drivers/cma_driver.c cma_driver.c] and [source:soft/giet_vm/giet_drivers/cma_driver.h cma_driver.h] files define the CMA driver. |
| 4 | |
| 5 | It supports the SocLib ''vci_chbuf_dma'' component, that is a multi channels, chained buffer DMA controller. |
| 6 | This component can be used in conjonction with the SocLib ''vci_frame_buffer'' to display images, or with the SocLib ''vci_multi_nic controller'' to transfer both RX and TX packets between NIC and memory buffers. |
| 7 | |
| 8 | The SEG_CMA_BASE address must be defined in the hard_config.h file |
| 9 | |
| 10 | All accesses to CMA registers are done by the two _cma_set_register() and _cma_get_register() low-level functions, that are handling the extended physical addresses. |
| 11 | The higher level access functions are defined in the [wiki:fbf_driver fbf_driver] and [wiki:nic_driver nic_driver] files. |
| 12 | |
| 13 | The addressable registers map is defined [source:soft/giet_vm/giet_drivers/cma_driver.h here]. |
| 14 | |
| 15 | === unsigned int '''_cma_get_register'''( unsigned int channel, unsigned int index ) === |
| 16 | This low_level function returns the value contained in register (index). |
| 17 | |
| 18 | === void '''_cma_set_register'''( unsigned int channel, unsigned int index, unsigned int value ) === |
| 19 | This low_level function returns the value contained in register (index). |
| 20 | |
| 21 | === void '''_cma_isr'''( unsigned int irq_type, unsigned int irq_id, unsigned int channel ) === |
| 22 | This Interrupt Service Routine handles the IRQ generated by a CMA channel. |
| 23 | |