memorymgr.pp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. {$MACRO ON}
  2. (******************************************************************************
  3. *
  4. * Copyright (c) 1994-2000 Palm, Inc. or its subsidiaries.
  5. * All rights reserved.
  6. *
  7. * File: MemoryMgr.h
  8. *
  9. * Release: Palm OS SDK 4.0 (63220)
  10. *
  11. * Description:
  12. * Include file for Memory Manager
  13. *
  14. * History:
  15. * 10/25/94 RM Created by Ron Marianetti
  16. * 10/28/99 kwk Added memErrROMOnlyCard.
  17. *
  18. *****************************************************************************)
  19. unit memorymgr;
  20. interface
  21. uses palmos, coretraps, errorbase;
  22. (************************************************************
  23. * Memory Manager Types
  24. *************************************************************)
  25. type
  26. LocalIDKind = Enum;
  27. const
  28. memIDPtr = 0;
  29. memIDHandle = Succ(memIDPtr);
  30. (************************************************************
  31. * Flags accepted as parameter for MemNewChunk.
  32. *************************************************************)
  33. memNewChunkFlagPreLock = $0100;
  34. memNewChunkFlagNonMovable = $0200;
  35. memNewChunkFlagAtStart = $0400; // force allocation at front of heap
  36. memNewChunkFlagAtEnd = $0800; // force allocation at end of heap
  37. (************************************************************
  38. * Memory Manager Debug settings for the MemSetDebugMode function
  39. *************************************************************)
  40. memDebugModeCheckOnChange = $0001;
  41. memDebugModeCheckOnAll = $0002;
  42. memDebugModeScrambleOnChange = $0004;
  43. memDebugModeScrambleOnAll = $0008;
  44. memDebugModeFillFree = $0010;
  45. memDebugModeAllHeaps = $0020;
  46. memDebugModeRecordMinDynHeapFree = $0040;
  47. (************************************************************
  48. * Memory Manager result codes
  49. *************************************************************)
  50. memErrChunkLocked = memErrorClass or 1;
  51. memErrNotEnoughSpace = memErrorClass or 2;
  52. memErrInvalidParam = memErrorClass or 3; // invalid param or requested size is too big
  53. memErrChunkNotLocked = memErrorClass or 4;
  54. memErrCardNotPresent = memErrorClass or 5;
  55. memErrNoCardHeader = memErrorClass or 6;
  56. memErrInvalidStoreHeader = memErrorClass or 7;
  57. memErrRAMOnlyCard = memErrorClass or 8;
  58. memErrWriteProtect = memErrorClass or 9;
  59. memErrNoRAMOnCard = memErrorClass or 10;
  60. memErrNoStore = memErrorClass or 11;
  61. memErrROMOnlyCard = memErrorClass or 12;
  62. (********************************************************************
  63. * Memory Manager Routines
  64. * These are define as syscall calls only under emulation mode or
  65. * under native mode from the module that actually installs the trap
  66. * vectors
  67. ********************************************************************)
  68. //-------------------------------------------------------------------
  69. // Initialization
  70. //-------------------------------------------------------------------
  71. function MemInit: Err; syscall sysTrapMemInit;
  72. function MemKernelInit: Err; syscall sysTrapMemKernelInit;
  73. function MemInitHeapTable(cardNo: UInt16): Err; syscall sysTrapMemInitHeapTable;
  74. //-------------------------------------------------------------------
  75. // Card formatting and Info
  76. //-------------------------------------------------------------------
  77. function MemNumCards: UInt16; syscall sysTrapMemNumCards;
  78. function MemCardFormat(cardNo: UInt16; const cardNameP, manufNameP, ramStoreNameP: PChar): Err; syscall sysTrapMemCardFormat;
  79. function MemCardInfo(cardNo: UInt16; cardNameP, manufNameP: PChar; var versionP: UInt16;
  80. var crDateP, romSizeP, ramSizeP, freeBytesP: UInt32): Err; syscall sysTrapMemCardInfo;
  81. //-------------------------------------------------------------------
  82. // Store Info
  83. //-------------------------------------------------------------------
  84. function MemStoreInfo(cardNo, storeNumber: UInt16; var versionP, flagsP: UInt16;
  85. nameP: PChar; var crDateP, bckUpDateP, heapListOffsetP, initCodeOffset1P,
  86. initCodeOffset2P: UInt32; var databaseDirIDP: LocalID): Err; syscall sysTrapMemStoreInfo;
  87. function MemStoreSetInfo(cardNo, storeNumber: UInt16; var versionP, flagsP: UInt16;
  88. nameP: PChar; var crDateP, bckUpDateP, heapListOffsetP, initCodeOffset1P,
  89. initCodeOffset2P: UInt32; var databaseDirIDP: LocalID): Err; syscall sysTrapMemStoreSetInfo;
  90. //-------------------------------------------------------------------
  91. // Heap Info & Utilities
  92. //-------------------------------------------------------------------
  93. function MemNumHeaps(cardNo: UInt16): UInt16; syscall sysTrapMemNumHeaps;
  94. function MemNumRAMHeaps(cardNo: UInt16): UInt16; syscall sysTrapMemNumRAMHeaps;
  95. function MemHeapID(cardNo, heapIndex: UInt16): UInt16; syscall sysTrapMemHeapID;
  96. function MemHeapDynamic(heapID: UInt16): Boolean; syscall sysTrapMemHeapDynamic;
  97. function MemHeapFreeBytes(heapID: UInt16; var freeP, maxP: UInt32): Err; syscall sysTrapMemHeapFreeBytes;
  98. function MemHeapSize(heapID: UInt16): UInt32; syscall sysTrapMemHeapSize;
  99. function MemHeapFlags(heapID: UInt16): UInt16; syscall sysTrapMemHeapFlags;
  100. // Heap utilities
  101. function MemHeapCompact(heapID: UInt16): Err; syscall sysTrapMemHeapCompact;
  102. function MemHeapInit(heapID: UInt16; numHandles: Int16; initContents: Boolean): Err; syscall sysTrapMemHeapInit;
  103. function MemHeapFreeByOwnerID(heapID, ownerID: UInt16): Err; syscall sysTrapMemHeapFreeByOwnerID;
  104. //-------------------------------------------------------------------
  105. // Low Level Allocation
  106. //-------------------------------------------------------------------
  107. function MemChunkNew(heapID: UInt16; size: UInt32; attr: UInt16): MemPtr; syscall sysTrapMemChunkNew;
  108. function MemChunkFree(chunkDataP: MemPtr): Err; syscall sysTrapMemChunkFree;
  109. //-------------------------------------------------------------------
  110. // Pointer (Non-Movable) based Chunk Routines
  111. //-------------------------------------------------------------------
  112. function MemPtrNew(size: UInt32): MemPtr; syscall sysTrapMemPtrNew;
  113. function MemPtrFree(chunkDataP: MemPtr): Err; syscall sysTrapMemChunkFree;
  114. // Getting Attributes
  115. function MemPtrRecoverHandle(p: MemPtr): MemHandle; syscall sysTrapMemPtrRecoverHandle;
  116. function MemPtrFlags(p: MemPtr): UInt16; syscall sysTrapMemPtrFlags;
  117. function MemPtrSize(p: MemPtr): UInt32; syscall sysTrapMemPtrSize;
  118. function MemPtrOwner(p: MemPtr): UInt16; syscall sysTrapMemPtrOwner;
  119. function MemPtrHeapID(p: MemPtr): UInt16; syscall sysTrapMemPtrHeapID;
  120. function MemPtrDataStorage(p: MemPtr): Boolean; syscall sysTrapMemPtrDataStorage;
  121. function MemPtrCardNo(p: MemPtr): UInt16; syscall sysTrapMemPtrCardNo;
  122. function MemPtrToLocalID(p: MemPtr): LocalID; syscall sysTrapMemPtrToLocalID;
  123. // Setting Attributes
  124. function MemPtrSetOwner(p: MemPtr; owner: UInt16): Err; syscall sysTrapMemPtrSetOwner;
  125. function MemPtrResize(p: MemPtr; newSize: UInt32): Err; syscall sysTrapMemPtrResize;
  126. function MemPtrResetLock(p: MemPtr): Err; syscall sysTrapMemPtrResetLock;
  127. function MemPtrUnlock(p: MemPtr): Err; syscall sysTrapMemPtrUnlock;
  128. //-------------------------------------------------------------------
  129. // MemHandle (Movable) based Chunk Routines
  130. //-------------------------------------------------------------------
  131. function MemHandleNew(size: UInt32): MemHandle; syscall sysTrapMemHandleNew;
  132. function MemHandleFree(h: MemHandle): Err; syscall sysTrapMemHandleFree;
  133. // Getting Attributes
  134. function MemHandleFlags(h: MemHandle): UInt16; syscall sysTrapMemHandleFlags;
  135. function MemHandleSize(h: MemHandle): UInt32; syscall sysTrapMemHandleSize;
  136. function MemHandleOwner(h: MemHandle): UInt16; syscall sysTrapMemHandleOwner;
  137. function MemHandleLockCount(h: MemHandle): UInt16; syscall sysTrapMemHandleLockCount;
  138. function MemHandleHeapID(h: MemHandle): UInt16; syscall sysTrapMemHandleHeapID;
  139. function MemHandleDataStorage(h: MemHandle): Boolean; syscall sysTrapMemHandleDataStorage;
  140. function MemHandleCardNo(h: MemHandle): UInt16; syscall sysTrapMemHandleCardNo;
  141. function MemHandleToLocalID(h: MemHandle): LocalID; syscall sysTrapMemHandleToLocalID;
  142. // Setting Attributes
  143. function MemHandleSetOwner(h: MemHandle; owner: UInt16): Err; syscall sysTrapMemHandleSetOwner;
  144. function MemHandleResize(h: MemHandle; newSize: UInt32): Err; syscall sysTrapMemHandleResize;
  145. function MemHandleLock(h: MemHandle): MemPtr; syscall sysTrapMemHandleLock;
  146. function MemHandleUnlock(h: MemHandle): Err; syscall sysTrapMemHandleUnlock;
  147. function MemHandleResetLock(h: MemHandle): Err; syscall sysTrapMemHandleResetLock;
  148. //-------------------------------------------------------------------
  149. // Local ID based routines
  150. //-------------------------------------------------------------------
  151. function MemLocalIDToGlobal(local: LocalID; cardNo: UInt16): MemPtr; syscall sysTrapMemLocalIDToGlobal;
  152. function MemLocalIDKind(local: LocalID): LocalIDKind; syscall sysTrapMemLocalIDKind;
  153. function MemLocalIDToPtr(local: LocalID; cardNo: UInt16): MemPtr; syscall sysTrapMemLocalIDToPtr;
  154. function MemLocalIDToLockedPtr(local: LocalID; cardNo: UInt16): MemPtr; syscall sysTrapMemLocalIDToLockedPtr;
  155. //-------------------------------------------------------------------
  156. // Utilities
  157. //-------------------------------------------------------------------
  158. function MemMove(dstP: Pointer; const sP: Pointer; numBytes: Int32): Err; syscall sysTrapMemMove;
  159. function MemSet(dstP: Pointer; numBytes: Int32; value: UInt8): Err; syscall sysTrapMemSet;
  160. function MemCmp(const s1: Pointer; const s2: Pointer; numBytes: Int32): Int16; syscall sysTrapMemCmp;
  161. function MemSemaphoreReserve(writeAccess: Boolean): Err; syscall sysTrapMemSemaphoreReserve;
  162. function MemSemaphoreRelease(writeAccess: Boolean): Err; syscall sysTrapMemSemaphoreRelease;
  163. //-------------------------------------------------------------------
  164. // Debugging Support
  165. //-------------------------------------------------------------------
  166. function MemDebugMode: UInt16; syscall sysTrapMemDebugMode;
  167. function MemSetDebugMode(flags: UInt16): Err; syscall sysTrapMemSetDebugMode;
  168. function MemHeapScramble(heapID: UInt16): Err; syscall sysTrapMemHeapScramble;
  169. function MemHeapCheck(heapID: UInt16): Err; syscall sysTrapMemHeapCheck;
  170. implementation
  171. end.