# HG changeset patch # User Shinji KONO # Date 1257571420 -32400 # Node ID 7a41d2cb0a84d177e25b62156dc4c271f1b6a920 # Parent 42c94f85c7798fa739975f577796f296063af073 fix mail box size diff -r 42c94f85c779 -r 7a41d2cb0a84 TaskManager/Cell/SpeThreads.cc --- a/TaskManager/Cell/SpeThreads.cc Sat Nov 07 14:13:29 2009 +0900 +++ b/TaskManager/Cell/SpeThreads.cc Sat Nov 07 14:23:40 2009 +0900 @@ -116,21 +116,29 @@ * @return Received 32-bit mailbox messages * if ([ret] < 0) no data read */ -int +memaddr SpeThreads::get_mail(int speid, int count, unsigned int* ret) { - return spe_out_mbox_read(spe_ctx[speid], ret, count); + memaddr mail = spe_out_mbox_read(spe_ctx[speid], ret, 1); + if (sizeof(memaddr)>4) { + mail += spe_out_mbox_read(spe_ctx[speid], ret, 1)<<4; + } + return mail; } -int +memaddr SpeThreads::check_mail(int speid, int count, unsigned int* ret) { /* * spe_out_mbox_status return only 1, waiting for multiple length * does not work. */ - if (spe_out_mbox_status(spe_ctx[speid]) >= count) { - return spe_out_mbox_read(spe_ctx[speid], ret, count); + if (spe_out_mbox_status(spe_ctx[speid]) >= 1) { + memaddr mail = spe_out_mbox_read(spe_ctx[speid], ret, 1); + if (sizeof(memaddr)>4) { + mail += spe_out_mbox_read(spe_ctx[speid], ret, 1)<<4; + } + return mail; } else { return 0; } @@ -151,9 +159,12 @@ * @param [num] The number of messages */ void -SpeThreads::send_mail(int speid, int num, unsigned int *data) +SpeThreads::send_mail(int speid, int num, memaddr *data) { spe_in_mbox_write(spe_ctx[speid], data, num, SPE_MBOX_ALL_BLOCKING); + if (sizeof(memaddr)>4) { + spe_in_mbox_write(spe_ctx[speid], data>>4, num, SPE_MBOX_ALL_BLOCKING); + } } void @@ -167,3 +178,5 @@ */ } + +/* end */ diff -r 42c94f85c779 -r 7a41d2cb0a84 TaskManager/Cell/SpeThreads.h --- a/TaskManager/Cell/SpeThreads.h Sat Nov 07 14:13:29 2009 +0900 +++ b/TaskManager/Cell/SpeThreads.h Sat Nov 07 14:23:40 2009 +0900 @@ -19,9 +19,9 @@ /* functions */ void init(void); - int get_mail(int speid, int count, unsigned int* ret); // BLOCKING - int check_mail(int speid, int count, unsigned int* ret); // NONBLOCK - void send_mail(int speid, int num, unsigned int *data); // BLOCKING + memaddr get_mail(int speid, int count, unsigned int* ret); // BLOCKING + memaddr check_mail(int speid, int count, unsigned int* ret); // NONBLOCK + void send_mail(int speid, int num, memaddr *data); // BLOCKING static void *spe_thread_run(void *arg); static void *frontend_thread_run(void *arg); void add_output_tasklist(int command, unsigned int buff, int alloc_size); diff -r 42c94f85c779 -r 7a41d2cb0a84 TaskManager/Cell/spe/CellDmaManager.cc --- a/TaskManager/Cell/spe/CellDmaManager.cc Sat Nov 07 14:13:29 2009 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.cc Sat Nov 07 14:23:40 2009 +0900 @@ -78,15 +78,19 @@ } void -CellDmaManager::mail_write(uint32 data) +CellDmaManager::mail_write(memaddr data) { - spu_write_out_mbox(data); + spu_write_out_mbox((uint32)data); + if (sizeof(memaddr)>4) + spu_write_out_mbox(data>>4); } -unsigned int -CellDmaManager::mail_read(void) +memaddr +CellDmaManager::mail_read() { - unsigned int mail = spu_read_in_mbox(); + memaddr mail = spu_read_in_mbox(); + if (sizeof(memaddr)>4) + mail += (spu_read_in_mbox()<<4); return mail; } @@ -103,3 +107,5 @@ mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, mask, 0, 0); } + +/* end */ diff -r 42c94f85c779 -r 7a41d2cb0a84 TaskManager/include/types.h --- a/TaskManager/include/types.h Sat Nov 07 14:13:29 2009 +0900 +++ b/TaskManager/include/types.h Sat Nov 07 14:23:40 2009 +0900 @@ -13,8 +13,8 @@ #ifdef MODE64 typedef uint64_t memaddr; #else -// In LP64, sizeof(long)==8 -typedef long memaddr; +// In LP64, sizeof(unsigned long)==8 +typedef unsigned long memaddr; #endif #endif