00001 #include <string.h> 00002 #include <stdint.h> 00003 #include <free_align.h> 00004 00005 #include <moc.h> 00006 #include <internal/ppu/imoc_core_ppu.h> 00007 #include <internal/ppu/imoc_dma_ppu.h> 00008 00009 int IMOC_wait_dma(imoc_dma_request* request) 00010 { 00011 uint32_t dmastatus; 00012 int err; 00013 err = spe_mfcio_tag_status_read(moc_spu_thread_list[request->dest 00014 - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); 00015 if (err) 00016 return MOC_ERR_INTERN; 00017 00018 if (request->remainder != 0) // check if buffer was used and copy back data from there to target 00019 { 00020 memcpy(request->target + request->size, request->buffer, 00021 request->remainder); 00022 _free_align(request->buffer); 00023 } 00024 moc_tag_release(request->dest - moc_ppu_thread_count, request->tag_id); 00025 return MOC_SUCCESS; 00026 }
1.5.6