00001 #include <stdint.h> 00002 00003 #include <moc.h> 00004 #include <internal/imoc.h> 00005 #ifdef __SPU__ 00006 #include <internal/spu/imoc_core_spu.h> 00007 #include <internal/spu/imoc_dma_spu.h> 00008 #else 00009 #include <internal/ppu/imoc_core_ppu.h> 00010 #include <internal/ppu/imoc_dma_ppu.h> 00011 #endif 00012 00013 int MOC_Test(MOC_Request *request, int *flag, MOC_Status *status) 00014 { 00015 uint8_t temp; 00016 int iflag, err; 00017 if (request == 0) 00018 { 00019 return MOC_ERR_REQUEST; 00020 } 00021 00022 switch (request->request_type) 00023 { 00024 case MOC_REQ_TYPE_DMA: 00025 if (0 != (err = IMOC_test_dma(&request->request_data.dma_data, &iflag))) 00026 return err; 00027 if (status != 0) 00028 { 00029 status->message_size = request->request_data.dma_data.size; 00030 status->MOC_ERROR = 0; 00031 status->MOC_TAG = 0; 00032 status->MOC_SOURCE = 0; 00033 } 00034 *flag = iflag; 00035 return 0; 00036 case MOC_REQ_TYPE_ISSEND: 00037 if (!request->request_data.issend_request.isFinished) 00038 { 00039 IMOC_testForMessageCompletion( 00040 request->request_data.issend_request.mid, &temp); 00041 if (temp) 00042 { 00043 *flag = 1; 00044 node_handle.status_array_base[request->request_data.issend_request.mid] .flags.bits.valid 00045 = 0; 00046 request->request_data.issend_request.isFinished = 1; 00047 status->MOC_ERROR = 0; 00048 status->MOC_SOURCE 00049 = request->request_data.issend_request.source; 00050 status->MOC_TAG = request->request_data.issend_request.tag; 00051 status->message_size 00052 = request->request_data.issend_request.message_size; 00053 } 00054 else 00055 *flag = 0; 00056 } 00057 else 00058 *flag = 1; 00059 return 0; 00060 default: 00061 return MOC_ERR_REQUEST; 00062 } 00063 00064 } 00065
1.5.6