void ImportTracker::cleanUp() { clear(); if(linksetgroups.size()) { if(groupcounter < (linksetgroups.size() - 1)) { ++groupcounter; LLSD ls_llsd; ls_llsd=linksetgroups[groupcounter]["Object"]; linksetoffset=linksetgroups[groupcounter]["ObjectPos"]; import(ls_llsd); } } else cleargroups(); }
int main(unsigned long long speid, addr64 argp, addr64 envp) { // Check size of structures, these offsets must match assembly STATIC_ASSERT(sizeof(struct OgrLevel) == 6*16+16+16); STATIC_ASSERT(sizeof(struct OgrState) == 2*16 + 8*16*29); STATIC_ASSERT(sizeof(CellOGRCoreArgs) == 16 + 2*16 + 8*16*29 + 16 + 16 + 16); STATIC_ASSERT(offsetof(CellOGRCoreArgs, state ) == 16); STATIC_ASSERT(offsetof(CellOGRCoreArgs, state.Levels) == 16 + 32); STATIC_ASSERT(sizeof(u16) == 2); /* DMA fetches of pchoose */ (void) speid; (void) envp; // One DMA used in program mfc_write_tag_mask(1<<DMA_ID); // Fetch arguments from main memory mfc_get(&myCellOGRCoreArgs, argp.a32[1], sizeof(CellOGRCoreArgs), DMA_ID, 0, 0); mfc_read_tag_status_all(); s32 retval; /* check for memory corruption in incoming arguments */ if (myCellOGRCoreArgs.sign1 != SIGN_PPU_TO_SPU_1) { retval = RETVAL_ERR_BAD_SIGN1; goto done; } if (myCellOGRCoreArgs.sign2 != SIGN_PPU_TO_SPU_2) { retval = RETVAL_ERR_BAD_SIGN2; goto done; } // Prepare arguments to be passed to the core struct OgrState* state = &myCellOGRCoreArgs.state; int* pnodes = &myCellOGRCoreArgs.pnodes; u32 upchoose = myCellOGRCoreArgs.upchoose; static int cached_maxdepth; if (state->maxdepth != cached_maxdepth) { cached_maxdepth = state->maxdepth; cleargroups(); } // Call the core // s32 retval = SPE_CORE_FUNCTION(CORE_NAME) (state, pnodes, ogr_choose_dat); if (*pnodes) /* core will not handle nodes == 0 */ myCellOGRCoreArgs.ret_depth = ogr_cycle_256_test(state, pnodes, upchoose); // Check for memory corruption after core exit if (myCellOGRCoreArgs.sign1 != SIGN_PPU_TO_SPU_1) retval = RETVAL_ERR_TRASHED_SIGN1; else if (myCellOGRCoreArgs.sign2 != SIGN_PPU_TO_SPU_2) retval = RETVAL_ERR_TRASHED_SIGN2; else retval = 0; update_groups_stats(); done: // Update changes in main memory myCellOGRCoreArgs.sign1 = SIGN_SPU_TO_PPU_1; myCellOGRCoreArgs.sign2 = SIGN_SPU_TO_PPU_2; mfc_put(&myCellOGRCoreArgs, argp.a32[1], sizeof(CellOGRCoreArgs), DMA_ID, 0, 0); mfc_read_tag_status_all(); return retval; /* no status codes in ogr-ng, core info returned in ret_depth */ }