// -------------------------------------------------------------- // // DMA Transfer Wrapper // // -------------------------------------------------------------- // Hint transfer_dma(void * src, void * des, Hint size) { XAxiCdma dma; Hint status = dma_create(&dma,SLAVE_LOCAL_DMA_DEVICE_ID); if (status != SUCCESS) return FAILURE; // Reset DMA dma_reset(&dma); status = dma_transfer(&dma, (Huint) src, (Huint) des, size); if (status != SUCCESS) return FAILURE; // Wait until done while(dma_getbusy(&dma)); // Check for any errors return (dma_geterror(&dma)); }
Hint sw_crc(void * list_ptr, Huint size) { // Set up DMA structure dma_t local_dma; dma_config_t local_dma_config; local_dma_config.base = ACCELERATOR_DMA_BASEADDR; dma_create(&local_dma, &local_dma_config); // Transfer List A to local BRAM A using local dma if(transfer_dma(&local_dma, (void *) list_ptr, (void *) ACC_BRAM_A, size*4)) return FAILURE; Hint *array = (Hint *) ACC_BRAM_A; for (array = (Hint *) ACC_BRAM_A; array < (Hint *) ACC_BRAM_A + size; array++) { *array = gen_crc(*array); } // Transfer results back if(transfer_dma(&local_dma, (void *) ACC_BRAM_A, (void *) list_ptr, size*4)) return FAILURE; else return SUCCESS; }