t2ex/t2ex_source/lib/libtk/src_t2ex/mem.h | bare source | permlink (0.02 seconds) |
1: /* 2: *---------------------------------------------------------------------- 3: * T2EX Software Package 4: * 5: * Copyright 2012 by Ken Sakamura. 6: * This software is distributed under the latest version of T-License 2.x. 7: *---------------------------------------------------------------------- 8: * 9: * Released by T-Engine Forum(http://www.t-engine.org/) at 2012/12/12. 10: * Modified by TRON Forum(http://www.tron.org/) at 2015/06/04. 11: * 12: *---------------------------------------------------------------------- 13: */ 14: /* 15: * This software package is available for use, modification, 16: * and redistribution in accordance with the terms of the attached 17: * T-License 2.x. 18: * If you want to redistribute the source code, you need to attach 19: * the T-License 2.x document. 20: * There's no obligation to publish the content, and no obligation 21: * to disclose it to the TRON Forum if you have modified the 22: * software package. 23: * You can also distribute the modified source code. In this case, 24: * please register the modification to T-Kernel traceability service. 25: * People can know the history of modifications by the service, 26: * and can be sure that the version you have inherited some 27: * modification of a particular version or not. 28: * 29: * http://trace.tron.org/tk/?lang=en 30: * http://trace.tron.org/tk/?lang=ja 31: * 32: * As per the provisions of the T-License 2.x, TRON Forum ensures that 33: * the portion of the software that is copyrighted by Ken Sakamura or 34: * the TRON Forum does not infringe the copyrights of a third party. 35: * However, it does not make any warranty other than this. 36: * DISCLAIMER: TRON Forum and Ken Sakamura shall not be held 37: * responsible for any consequences or damages caused directly or 38: * indirectly by the use of this software package. 39: * 40: * The source codes in bsd_source.tar.gz in this software package are 41: * derived from NetBSD or OpenBSD and not covered under T-License 2.x. 42: * They need to be changed or redistributed according to the 43: * representation of each source header. 44: */ 45: 46: /* 47: * @(#)mem.h (libtk) 48: * 49: * Memory local allocation library 50: */ 51: 52: #include <basic.h> 53: #include <sys/memalloc.h> 54: #include <libstr.h> 55: 56: /* 57: * Minimum fragmentation unit 58: * Since memory is allocated in ROUNDSZ units, 59: * the lower three bits of the address must be 0. 60: * These low three bits are used in the flag in the area queue. 61: */ 62: #define ROUNDSZ ( sizeof(QUEUE) ) /* 8 byte */ 63: #define ROUND(sz) ( ((UINT)(sz) + (ROUNDSZ-1)) & ~(ROUNDSZ-1) ) 64: 65: /* Minimum fragment size 66: * A size smaller than 'sizeof(QUEUE) * 2' will result in malfunction. 67: */ 68: #define MIN_FRAGMENT ( sizeof(QUEUE) * 2 ) 69: 70: /* 71: * Flag that uses the lower bits of the area queue prev 72: */ 73: #define AREA_USE 0x00000001U /* In use */ 74: #define AREA_TOP 0x00000002U /* Top of page */ 75: #define AREA_END 0x00000004U /* End of page */ 76: #define AREA_MASK 0x00000007U 77: 78: #define setAreaFlag(q, f) ( (q)->prev = (QUEUE*)((UW)(q)->prev | (UW)(f)) ) 79: #define clrAreaFlag(q, f) ( (q)->prev = (QUEUE*)((UW)(q)->prev & ~(UW)(f)) ) 80: #define chkAreaFlag(q, f) ( ((UW)(q)->prev & (UW)(f)) != 0 ) 81: 82: #define Mask(x) ( (QUEUE*)((UW)(x) & ~AREA_MASK) ) 83: #define Assign(x, y) ( (x) = (QUEUE*)(((UW)(x) & AREA_MASK) | (UW)(y)) ) 84: 85: /* 86: * Area size 87: */ 88: #define AreaSize(aq) ( (VB*)(aq)->next - (VB*)((aq) + 1) ) 89: #define FreeSize(fq) ( (VB*)((fq) - 1)->next - (VB*)(fq) ) 90: 91: /* 92: * Memory allocation check function 93: */ 94: IMPORT BOOL (*_mem_chkalloc)( void *ptr, int mode, MACB *macb );