mem.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:3k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: mem.h 531 2006-01-04 12:56:13Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #ifndef __MEM_H
  24. #define __MEM_H
  25. #if defined(_WIN32) && (!defined(NO_PLUGINS) || defined(TARGET_PALMOS))
  26. DLL void* malloc_win32(size_t);
  27. DLL void* realloc_win32(void*,size_t);
  28. DLL void free_win32(void*);
  29. #define malloc(n) malloc_win32(n)
  30. #define realloc(p,n) realloc_win32(p,n)
  31. #define free(p) free_win32(p)
  32. #endif
  33. // OS level allocation
  34. typedef struct block
  35. {
  36. const uint8_t* Ptr;
  37. uint32_t Id;
  38. } block;
  39. #define HEAP_ANY 0x0003
  40. #define HEAP_ANYWR 0x0005
  41. #define HEAP_DYNAMIC 0x0001
  42. #define HEAP_STORAGE 0x0002
  43. #define HEAP_STORAGEWR 0x0004
  44. DLL bool_t AllocBlock(size_t,block* Block,bool_t Optional,int Heap);
  45. DLL void FreeBlock(block* Block);
  46. DLL void WriteBlock(block* Block,int Ofs,const void* Src,int Length);
  47. DLL bool_t SetHeapBlock(int,block* Block,int Heap);
  48. static INLINE int IsHeapStorage(block* Block) { return Block->Id!=0; }
  49. DLL size_t AvailMemory();
  50. DLL void CheckHeap();
  51. typedef struct phymemblock
  52. {
  53. uint32_t Addr;
  54. uint32_t Length;
  55. void* Private; // needed by PhyMemAlloc/PhyMemFree
  56. } phymemblock;
  57. DLL void* PhyMemAlloc(int Length,phymemblock* Blocks,int* BlockCount);
  58. DLL void PhyMemFree(void*,phymemblock* Blocks,int BlockCount);
  59. DLL void* PhyMemBegin(uint32_t Addr,uint32_t Length,bool_t Cached); // single block mapping
  60. DLL void* PhyMemBeginEx(phymemblock* Blocks,int BlockCount,bool_t Cached); // multi block mapping
  61. DLL void PhyMemEnd(void*); 
  62. DLL void* CodeAlloc(int Size);
  63. DLL void CodeFree(void*,int Size);
  64. DLL void CodeLock(void*,int Size);
  65. DLL void CodeUnlock(void*,int Size);
  66. DLL void CodeFindPages(void* Ptr,unsigned char** Min,unsigned char** Max,size_t* PageSize);
  67. DLL void ShowOutOfMemory();
  68. DLL void DisableOutOfMemory();
  69. DLL void EnableOutOfMemory();
  70. void Mem_Init();
  71. void Mem_Done();
  72. //-----------------------------------
  73. // low level memory managing
  74. DLL uint32_t MemVirtToPhy(void* Virt);
  75. DLL void* MemPhyToVirt(uint32_t Phy);
  76. typedef struct memoryinfo
  77. {
  78. uint32_t *TLB;
  79. uint32_t MemBase[2];
  80. int MemSize[2]; //in MB
  81. uint32_t UnusedArea[2];
  82. } memoryinfo;
  83. DLL bool_t MemGetInfo(memoryinfo* Out);
  84. DLL void* MemAsWritable(uint32_t Phy);
  85. #endif