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