877 MEM_POOL *pmem_pool_heap;
878 MEM_POOL *pmem_pool_prev;
879 MEM_POOL *pmem_pool_next;
880 MEM_POOL *pmem_pool_blk;
913 #if (LIB_MEM_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
914 if (pmem_base_addr != (
void *)0) {
950 if (pmem_base_addr == (
void *)0) {
951 pmem_pool_blk = pmem_pool_heap;
952 pmem_pool_prev = pmem_pool_heap;
953 pmem_pool_next = pmem_pool_heap;
957 pmem_addr_ptrs = (
CPU_INT08U *)pmem_pool_heap->SegAddrNextAvail;
963 pmem_addr_pool = pmem_addr_ptrs + size_tot_ptrs;
969 size_tot = size_tot_ptrs + size_tot_pool;
970 size_rem = pmem_pool_heap->SegSizeRem;
972 if (size_tot > size_rem) {
976 *poctets_reqd = size_tot - size_rem;
984 pmem_base_addr_start = (
CPU_INT08U *)pmem_base_addr;
985 pmem_base_addr_end = (
CPU_INT08U *)pmem_base_addr + mem_size - 1;
987 pmem_pool_blk = (MEM_POOL *)0;
988 pmem_pool_prev = (MEM_POOL *)0;
991 while (pmem_pool_next != (MEM_POOL *)0) {
993 if ((pmem_base_addr == pmem_pool_next->SegAddr) &&
994 (mem_size == pmem_pool_next->SegSizeTot)) {
996 pmem_pool_blk = pmem_pool_next;
997 pmem_pool_prev = pmem_pool_next;
1001 pmem_seg_addr_start = (
CPU_INT08U *)pmem_pool_next->SegAddr;
1002 pmem_seg_addr_end = (
CPU_INT08U *)pmem_pool_next->SegAddr + pmem_pool_next->SegSizeTot - 1;
1005 if (pmem_base_addr_end < pmem_seg_addr_start) {
1009 }
else if (((pmem_base_addr_start <= pmem_seg_addr_start) &&
1010 (pmem_base_addr_end >= pmem_seg_addr_start)) ||
1011 ((pmem_base_addr_start >= pmem_seg_addr_start) &&
1012 (pmem_base_addr_end <= pmem_seg_addr_end )) ||
1013 ((pmem_base_addr_start <= pmem_seg_addr_end ) &&
1014 (pmem_base_addr_end >= pmem_seg_addr_end ))) {
1021 pmem_pool_prev = pmem_pool_next;
1022 pmem_pool_next = pmem_pool_next->SegNextPtr;
1025 if (pmem_pool_blk == (MEM_POOL *)0) {
1026 pmem_pool_blk = pmem_pool;
1027 pmem_pool->SegAddr = pmem_base_addr;
1028 pmem_pool->SegAddrNextAvail = pmem_base_addr;
1029 pmem_pool->SegSizeTot = mem_size;
1030 pmem_pool->SegSizeRem = mem_size;
1036 pmem_addr_ptrs = (
CPU_INT08U *)pmem_pool_heap->SegAddrNextAvail;
1041 size_rem = pmem_pool_heap->SegSizeRem;
1043 if (size_tot_ptrs > size_rem) {
1047 *poctets_reqd = size_tot_ptrs - size_rem;
1053 pmem_addr_pool = (
CPU_INT08U *)pmem_pool_blk->SegAddrNextAvail;
1058 size_rem = pmem_pool_blk->SegSizeRem;
1060 if (size_tot_pool > size_rem) {
1064 *poctets_reqd = size_tot_pool - size_rem;
1072 size_pool_ptrs = blk_nbr *
sizeof(
void *);
1077 if (ppool_ptr == (
void **)0) {
1078 size_rem = pmem_pool_heap->SegSizeRem;
1082 if (pmem_base_addr == (
void *)0) {
1083 if (size_tot > size_rem) {
1084 *poctets_reqd = size_tot - size_rem;
1086 *poctets_reqd = size_tot;
1089 if (size_pool_ptrs > size_rem) {
1090 *poctets_reqd = size_pool_ptrs - size_rem;
1092 *poctets_reqd = size_pool_ptrs;
1099 for (i = 0; i < blk_nbr; i++) {
1101 if (pmem_blk == (
void *)0) {
1102 pmem_addr_pool = (
CPU_INT08U *)pmem_pool_blk->SegAddrNextAvail;
1103 size_rem = (
CPU_SIZE_T )pmem_pool_blk->SegSizeRem;
1107 blk_rem = blk_nbr - i;
1112 if (size_tot > size_rem) {
1113 *poctets_reqd = size_tot - size_rem;
1115 *poctets_reqd = size_tot;
1120 ppool_ptr[i] = pmem_blk;
1126 if (pmem_pool_prev == pmem_pool_next) {
1128 pmem_pool_next = pmem_pool_blk->PoolNextPtr;
1129 pmem_pool->PoolPrevPtr = pmem_pool_blk;
1130 pmem_pool->PoolNextPtr = pmem_pool_next;
1131 pmem_pool_blk->PoolNextPtr = pmem_pool;
1132 if (pmem_pool_next != (MEM_POOL *)0) {
1133 pmem_pool_next->PoolPrevPtr = pmem_pool;
1138 pmem_pool->SegPrevPtr = pmem_pool_prev;
1139 pmem_pool->SegNextPtr = pmem_pool_next;
1141 if (pmem_pool_prev != (MEM_POOL *)0) {
1142 pmem_pool_prev->SegNextPtr = pmem_pool;
1147 if (pmem_pool_next != (MEM_POOL *)0) {
1148 pmem_pool_next->SegPrevPtr = pmem_pool;
1155 pmem_pool->PoolAddrStart = (
void *) pmem_addr_pool;
1156 pmem_pool->PoolAddrEnd = (
void *)(pmem_addr_pool + size_tot_pool - 1);
1157 pmem_pool->PoolPtrs = (
void **) ppool_ptr;
1158 pmem_pool->PoolSize = (
CPU_SIZE_T ) size_tot_pool;
1159 pmem_pool->BlkAlign = (
CPU_SIZE_T ) blk_align;