00001 #include <string.h>
00002 #include <stdint.h>
00003 #include <free_align.h>
00004 #include <spu_mfcio.h>
00005
00006 #include <moc.h>
00007 #include <internal/spu/imoc_dma_spu.h>
00008
00009 int IMOC_test_dma(imoc_dma_request* request, int *flag)
00010 {
00011 uint32_t ret;
00012 mfc_write_tag_mask(1 << request->tag_id);
00013 mfc_write_tag_update(MFC_TAG_UPDATE_IMMEDIATE);
00014 ret = mfc_read_tag_status();
00015
00016 if ((ret & (1 << request->tag_id)) == 0)
00017 *flag = 0;
00018 else
00019 {
00020 if (request->remainder != 0)
00021 {
00022 memcpy(request->target + request->size, request->buffer,
00023 request->remainder);
00024 free(request->buffer);
00025 }
00026 mfc_tag_release(request->tag_id);
00027 *flag = 1;
00028 }
00029
00030 return MOC_SUCCESS;
00031 }