Multi Channel DMA Intel® FPGA IP for PCI Express User Guide
                    
                        ID
                        683821
                    
                
                
                    Date
                    4/20/2022
                
                
                    Public
                
            A newer version of this document is available. Customers should click here to go to the newest version.
                
                    
                        1. Before You Begin
                    
                    
                
                    
                        2. Introduction
                    
                    
                
                    
                        3. Functional Description
                    
                    
                
                    
                        4. Interface Overview
                    
                    
                
                    
                        5. Parameters (H-Tile)
                    
                    
                
                    
                        6. Parameters (P-Tile and F-Tile)
                    
                    
                
                    
                        7. Designing with the IP Core
                    
                    
                
                    
                        8. Software Programming Model
                    
                    
                
                    
                        9. Registers
                    
                    
                
                    
                        10. Troubleshooting/Debugging
                    
                    
                
                    
                    
                        11. Multi Channel DMA Intel FPGA IP for PCI Express User Guide Archives
                    
                
                    
                    
                        12. Revision History for Multi Channel DMA Intel FPGA IP for PCI Express User Guide
                    
                
            
        
                        
                        
                            
                                4.1. Port List
                            
                            
                        
                            
                            
                                4.2. Clocks
                            
                        
                            
                            
                                4.3. Resets
                            
                        
                            
                                4.4. Multi Channel DMA
                            
                            
                        
                            
                            
                                4.5. Bursting Avalon-MM Master (BAM) Interface
                            
                        
                            
                            
                                4.6. Bursting Avalon-MM Slave (BAS) Interface
                            
                        
                            
                            
                                4.7. Config Slave Interface (RP only)
                            
                        
                            
                            
                                4.8. Hard IP Reconfiguration Interface
                            
                        
                            
                            
                                4.9. Config TL Interface
                            
                        
                            
                            
                                4.10. Configuration Intercept Interface (EP Only)
                            
                        
                            
                            
                                4.11. User Functional Level Reset (FLR)
                            
                        
                            
                            
                                4.12. User Event MSI-X Request Interface
                            
                        
                            
                                4.13. Data Mover Interface
                            
                            
                        
                            
                            
                                4.14. Hard IP Status Interface
                            
                        
                    
                
                                                
                                                
                                                    
                                                    
                                                        8.1.6.1. ifc_api_start
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.2. ifc_mcdma_port_by_name
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.3. ifc_qdma_device_get
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.4. ifc_num_channels_get
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.5. ifc_qdma_channel_get
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.6. ifc_qdma_acquire_channels
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.7. ifc_qdma_release_all_channels
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.8. ifc_qdma_device_put
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.9. ifc_qdma_channel_put
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.10. ifc_qdma_completion_poll
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.11. ifc_qdma_request_start
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.12. ifc_qdma_request_prepare
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.13. ifc_qdma_descq_queue_batch_load
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.14. ifc_qdma_request_submit
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.15. ifc_qdma_pio_read32
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.16. ifc_qdma_pio_write32
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.17. ifc_qdma_pio_read64
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.18. ifc_qdma_pio_write64
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.19. ifc_qdma_pio_read128
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.20. ifc_qdma_pio_write128
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.21. ifc_qdma_pio_read256
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.22. ifc_qdma_pio_write256
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.23. ifc_request_malloc
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.24. ifc_request_free
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.25. ifc_app_stop
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.26. ifc_qdma_poll_init
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.27. ifc_qdma_poll_add
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.28. ifc_qdma_poll_wait
                                                    
                                                    
                                                
                                                    
                                                    
                                                        8.1.6.29. ifc_mcdma_port_by_name
                                                    
                                                    
                                                
                                            
                                        8.3.3.3. Completions Management
Kernel module supports two modes of descriptor process completion indication . This is in accordance with the support of the hardware.
- For both of these modes eventfds are used to pass the completed request counter to the application from the driver
 - The eventfds are passed from the user application to kernel driver using a control message
 - A control message: It is a structure that contains the details of the eventfds, file size (#descriptors per file) and payload size per queue 
      
- It is passed by the user application before starting of transfer using the read/write system call
 - In order to differentiate between control message & a DMA request, the size must be set to zero in the read/write system call argument to indicate the former
 
 - The application uses a read operation on the eventfd to acquire the count of completed requests.
 
     Figure 45. Completion Management Flow
      
       
    
 
   
    In both modes: 
    
 
   - Updation of the context of the associated descriptor queue also increases the 64 bit counter of the eventfd of the application associated with the queue
 - The application uses read operation on the eventfd to receive the recent number of completed requests
 
    In Interrupt Mode: 
    
 
   - Upon completion of request the MCDMA IP generates MSI-X signals
 - This interrupt signal invokes the interrupt handler of the driver
 - In the above diagram, steps 1 and 2 of interrupt mode occur asynchronously
 
    In Poll Mode: 
    
 
  - Application uses poll file operation to poll a channel
 - ifc_device_poll function of kernel driver polls both the queues of the channel and returns flags POLLIN,POLLOUT and/or POLLRDNORM, POLLWRNORM depending on the status of the queues