AG903ライブラリリファレンス
内容インデックスホーム
Body Source
本文ソース
1: int32_t AG903_OSWprGetMplAlign(int32_t mplid, uint32_t align, uint32_t blksz, void** p_blk) 2: { 3: ER ercd; 4: VP getaddr; 5: AG903_OSWBlkInf* blkinf; 6: int32_t retval; 7: uint32_t extsize; 8: void *blk; 9: int bit_count; 10: int ii; 11: 12: if( (NULL == p_blk) || 13: (0 == blksz) ) { 14: return -AG903_EINVAL; 15: } 16: 17: if (align < 4) { 18: return -AG903_EINVAL; 19: } 20: 21: bit_count = 0; 22: for (ii = 0; ii < (int)sizeof(align)*8; ii++) { 23: if (align>>ii & 0x1) { 24: bit_count += 1; 25: } 26: } 27: if (bit_count != 1) { 28: return -AG903_EINVAL; 29: } 30: 31: extsize = OSWBLKINF_SIZE + align-1; 32: 33: ercd = pget_mpl((ID)mplid, (UINT)(blksz+extsize), (VP*)&getaddr); 34: OSW_SetLastErcd(ercd); 35: retval = OSW_ChgErcd(ercd); 36: 37: if(AG903_ENONE == retval) { 38: blk = (void *)(((uintptr_t)getaddr + extsize) & ~(align-1)); 39: *p_blk = blk; 40: 41: blkinf = (AG903_OSWBlkInf*)((uintptr_t)blk - OSWBLKINF_SIZE); 42: blkinf->topaddr = getaddr; 43: } else { 44: *p_blk = NULL; 45: } 46: 47: return retval; 48: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.