13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * All Rights Reserved. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions: 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software. 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 29760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/* 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Memory functions 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef U_MEMORY_H 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define U_MEMORY_H 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "util/u_pointer.h" 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "util/u_debug.h" 40760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "os/os_memory.h" 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __cplusplus 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern "C" { 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 48760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define MALLOC(_size) os_malloc(_size) 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 50760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define CALLOC(_count, _size) os_calloc(_count, _size) 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 52760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define FREE(_ptr ) os_free(_ptr) 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 54760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define REALLOC(_ptr, _old_size, _size) os_realloc(_ptr, _old_size, _size) 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MALLOC_STRUCT(T) (struct T *) MALLOC(sizeof(struct T)) 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define CALLOC_STRUCT(T) (struct T *) CALLOC(1, sizeof(struct T)) 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define CALLOC_VARIANT_LENGTH_STRUCT(T,more_size) ((struct T *) CALLOC(1, sizeof(struct T) + more_size)) 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 63760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define align_malloc(_size, _alignment) os_malloc_aligned(_size, _alignment) 64760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define align_free(_ptr) os_free_aligned(_ptr) 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Duplicate a block of memory. 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic INLINE void * 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgmem_dup(const void *src, uint size) 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org void *dup = MALLOC(size); 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (dup) 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org memcpy(dup, src, size); 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return dup; 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Number of elements in an array. 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef Elements 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define Elements(x) (sizeof(x)/sizeof((x)[0])) 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Offset of a field in a struct, in bytes. 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 91760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#define Offset(TYPE, MEMBER) ((uintptr_t)&(((TYPE *)NULL)->MEMBER)) 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __cplusplus 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* U_MEMORY_H */ 101