| | 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 | |