sis_ds.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* sis_ds.h -- Private header for Direct Rendering Manager -*- linux-c -*-
  2.  * Created: Mon Jan  4 10:05:05 1999 by sclin@sis.com.tw
  3.  *
  4.  * Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
  5.  * All rights reserved.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the "Software"),
  9.  * to deal in the Software without restriction, including without limitation
  10.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  11.  * and/or sell copies of the Software, and to permit persons to whom the
  12.  * Software is furnished to do so, subject to the following conditions:
  13.  * 
  14.  * The above copyright notice and this permission notice (including the next
  15.  * paragraph) shall be included in all copies or substantial portions of the
  16.  * Software.
  17.  * 
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  21.  * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  22.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  23.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  24.  * DEALINGS IN THE SOFTWARE.
  25.  * 
  26.  * Authors:
  27.  *    Sung-Ching Lin <sclin@sis.com.tw>
  28.  * 
  29.  */
  30. #ifndef _sis_ds_h_
  31. #define _sis_ds_h_
  32. /* Set Data Structure */
  33. #define SET_SIZE 5000
  34. #define MALLOC(s) kmalloc(s, GFP_KERNEL)
  35. #define FREE(s) kfree(s)
  36. typedef unsigned int ITEM_TYPE;
  37. typedef struct {
  38.   ITEM_TYPE val;
  39.   int alloc_next, free_next;
  40. } list_item_t;
  41. typedef struct {
  42.   int alloc;
  43.   int free;
  44.   int trace;
  45.   list_item_t list[SET_SIZE];
  46. } set_t;
  47. set_t *setInit(void);
  48. int setAdd(set_t *set, ITEM_TYPE item);
  49. int setDel(set_t *set, ITEM_TYPE item);
  50. int setFirst(set_t *set, ITEM_TYPE *item);
  51. int setNext(set_t *set, ITEM_TYPE *item);
  52. int setDestroy(set_t *set);
  53. #endif
  54. /*
  55.  * GLX Hardware Device Driver common code
  56.  * Copyright (C) 1999 Keith Whitwell
  57.  *
  58.  * Permission is hereby granted, free of charge, to any person obtaining a
  59.  * copy of this software and associated documentation files (the "Software"),
  60.  * to deal in the Software without restriction, including without limitation
  61.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  62.  * and/or sell copies of the Software, and to permit persons to whom the
  63.  * Software is furnished to do so, subject to the following conditions:
  64.  *
  65.  * The above copyright notice and this permission notice shall be included
  66.  * in all copies or substantial portions of the Software.
  67.  *
  68.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  69.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  70.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  71.  * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
  72.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
  73.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
  74.  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  75.  *
  76.  */
  77. #ifndef MM_INC
  78. #define MM_INC
  79. struct mem_block_t {
  80.   struct mem_block_t *next;
  81.   struct mem_block_t *heap;
  82.   int ofs,size;
  83.   int align;
  84.   int free:1;
  85.   int reserved:1;
  86. };
  87. typedef struct mem_block_t TMemBlock;
  88. typedef struct mem_block_t *PMemBlock;
  89. /* a heap is just the first block in a chain */
  90. typedef struct mem_block_t memHeap_t;
  91. static __inline__ int mmBlockSize(PMemBlock b)
  92. { return b->size; }
  93. static __inline__ int mmOffset(PMemBlock b)
  94. { return b->ofs; }
  95. static __inline__ void mmMarkReserved(PMemBlock b)
  96. { b->reserved = 1; }
  97. /* 
  98.  * input: total size in bytes
  99.  * return: a heap pointer if OK, NULL if error
  100.  */
  101. memHeap_t *mmInit( int ofs, int size );
  102. memHeap_t *mmAddRange( memHeap_t *heap,
  103.        int ofs,
  104.        int size );
  105. /*
  106.  * Allocate 'size' bytes with 2^align2 bytes alignment,
  107.  * restrict the search to free memory after 'startSearch'
  108.  * depth and back buffers should be in different 4mb banks
  109.  * to get better page hits if possible
  110.  * input: size = size of block
  111.  *        align2 = 2^align2 bytes alignment
  112.  * startSearch = linear offset from start of heap to begin search
  113.  * return: pointer to the allocated block, 0 if error
  114.  */
  115. PMemBlock  mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch );
  116. /*
  117.  * Free block starts at offset
  118.  * input: pointer to a block
  119.  * return: 0 if OK, -1 if error
  120.  */
  121. int  mmFreeMem( PMemBlock b );
  122. /*
  123.  * Reserve 'size' bytes block start at offset
  124.  * This is used to prevent allocation of memory already used
  125.  * by the X server for the front buffer, pixmaps, and cursor
  126.  * input: size, offset
  127.  * output: 0 if OK, -1 if error
  128.  */
  129. int mmReserveMem( memHeap_t *heap, int offset,int size );
  130. int mmFreeReserved( memHeap_t *heap, int offset );
  131. /*
  132.  * destroy MM
  133.  */
  134. void mmDestroy( memHeap_t *mmInit );
  135. /* For debuging purpose. */
  136. void mmDumpMemInfo( memHeap_t *mmInit );
  137. #endif