13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright (C) 1999 Wittawat Yamwong 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the "Software"), 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * to deal in the Software without restriction, including without limitation 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Software is furnished to do so, subject to the following conditions: 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice shall be included 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * in all copies or substantial portions of the Software. 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * @file 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Memory manager code. Primarily used by device drivers to manage texture 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * heaps, etc. 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef _U_MM_H_ 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define _U_MM_H_ 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct mem_block { 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct mem_block *next, *prev; 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct mem_block *next_free, *prev_free; 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct mem_block *heap; 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int ofs,size; 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org unsigned int free:1; 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org unsigned int reserved:1; 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * input: total size in bytes 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * return: a heap pointer if OK, NULL if error 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern struct mem_block *u_mmInit(int ofs, int size); 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Allocate 'size' bytes with 2^align2 bytes alignment, 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * restrict the search to free memory after 'startSearch' 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * depth and back buffers should be in different 4mb banks 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * to get better page hits if possible 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * input: size = size of block 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * align2 = 2^align2 bytes alignment 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * startSearch = linear offset from start of heap to begin search 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * return: pointer to the allocated block, 0 if error 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern struct mem_block *u_mmAllocMem(struct mem_block *heap, int size, int align2, 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int startSearch); 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Free block starts at offset 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * input: pointer to a block 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * return: 0 if OK, -1 if error 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern int u_mmFreeMem(struct mem_block *b); 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Free block starts at offset 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * input: pointer to a heap, start offset 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * return: pointer to a block 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern struct mem_block *u_mmFindBlock(struct mem_block *heap, int start); 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * destroy MM 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern void u_mmDestroy(struct mem_block *mmInit); 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * For debugging purposes. 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern void u_mmDumpMemInfo(const struct mem_block *mmInit); 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 92