mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-12 07:41:43 +01:00
260 lines
10 KiB
ObjectPascal
260 lines
10 KiB
ObjectPascal
{$MACRO ON}
|
|
|
|
(******************************************************************************
|
|
*
|
|
* Copyright (c) 1994-2000 Palm, Inc. or its subsidiaries.
|
|
* All rights reserved.
|
|
*
|
|
* File: MemoryMgr.h
|
|
*
|
|
* Release: Palm OS SDK 4.0 (63220)
|
|
*
|
|
* Description:
|
|
* Include file for Memory Manager
|
|
*
|
|
* History:
|
|
* 10/25/94 RM Created by Ron Marianetti
|
|
* 10/28/99 kwk Added memErrROMOnlyCard.
|
|
*
|
|
*****************************************************************************)
|
|
|
|
unit memorymgr;
|
|
|
|
interface
|
|
|
|
uses palmos, coretraps, errorbase;
|
|
|
|
(************************************************************
|
|
* Memory Manager Types
|
|
*************************************************************)
|
|
|
|
type
|
|
LocalIDKind = Enum;
|
|
|
|
const
|
|
memIDPtr = 0;
|
|
memIDHandle = Succ(memIDPtr);
|
|
|
|
(************************************************************
|
|
* Flags accepted as parameter for MemNewChunk.
|
|
*************************************************************)
|
|
|
|
memNewChunkFlagPreLock = $0100;
|
|
memNewChunkFlagNonMovable = $0200;
|
|
memNewChunkFlagAtStart = $0400; // force allocation at front of heap
|
|
memNewChunkFlagAtEnd = $0800; // force allocation at end of heap
|
|
|
|
(************************************************************
|
|
* Memory Manager Debug settings for the MemSetDebugMode function
|
|
*************************************************************)
|
|
|
|
memDebugModeCheckOnChange = $0001;
|
|
memDebugModeCheckOnAll = $0002;
|
|
memDebugModeScrambleOnChange = $0004;
|
|
memDebugModeScrambleOnAll = $0008;
|
|
memDebugModeFillFree = $0010;
|
|
memDebugModeAllHeaps = $0020;
|
|
memDebugModeRecordMinDynHeapFree = $0040;
|
|
|
|
(************************************************************
|
|
* Memory Manager result codes
|
|
*************************************************************)
|
|
|
|
memErrChunkLocked = memErrorClass or 1;
|
|
memErrNotEnoughSpace = memErrorClass or 2;
|
|
memErrInvalidParam = memErrorClass or 3; // invalid param or requested size is too big
|
|
memErrChunkNotLocked = memErrorClass or 4;
|
|
memErrCardNotPresent = memErrorClass or 5;
|
|
memErrNoCardHeader = memErrorClass or 6;
|
|
memErrInvalidStoreHeader = memErrorClass or 7;
|
|
memErrRAMOnlyCard = memErrorClass or 8;
|
|
memErrWriteProtect = memErrorClass or 9;
|
|
memErrNoRAMOnCard = memErrorClass or 10;
|
|
memErrNoStore = memErrorClass or 11;
|
|
memErrROMOnlyCard = memErrorClass or 12;
|
|
|
|
(********************************************************************
|
|
* Memory Manager Routines
|
|
* These are define as syscall calls only under emulation mode or
|
|
* under native mode from the module that actually installs the trap
|
|
* vectors
|
|
********************************************************************)
|
|
|
|
//-------------------------------------------------------------------
|
|
// Initialization
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemInit: Err; syscall sysTrapMemInit;
|
|
|
|
function MemKernelInit: Err; syscall sysTrapMemKernelInit;
|
|
|
|
function MemInitHeapTable(cardNo: UInt16): Err; syscall sysTrapMemInitHeapTable;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Card formatting and Info
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemNumCards: UInt16; syscall sysTrapMemNumCards;
|
|
|
|
function MemCardFormat(cardNo: UInt16; const cardNameP, manufNameP, ramStoreNameP: PChar): Err; syscall sysTrapMemCardFormat;
|
|
|
|
function MemCardInfo(cardNo: UInt16; cardNameP, manufNameP: PChar; var versionP: UInt16;
|
|
var crDateP, romSizeP, ramSizeP, freeBytesP: UInt32): Err; syscall sysTrapMemCardInfo;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Store Info
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemStoreInfo(cardNo, storeNumber: UInt16; var versionP, flagsP: UInt16;
|
|
nameP: PChar; var crDateP, bckUpDateP, heapListOffsetP, initCodeOffset1P,
|
|
initCodeOffset2P: UInt32; var databaseDirIDP: LocalID): Err; syscall sysTrapMemStoreInfo;
|
|
|
|
function MemStoreSetInfo(cardNo, storeNumber: UInt16; var versionP, flagsP: UInt16;
|
|
nameP: PChar; var crDateP, bckUpDateP, heapListOffsetP, initCodeOffset1P,
|
|
initCodeOffset2P: UInt32; var databaseDirIDP: LocalID): Err; syscall sysTrapMemStoreSetInfo;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Heap Info & Utilities
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemNumHeaps(cardNo: UInt16): UInt16; syscall sysTrapMemNumHeaps;
|
|
|
|
function MemNumRAMHeaps(cardNo: UInt16): UInt16; syscall sysTrapMemNumRAMHeaps;
|
|
|
|
function MemHeapID(cardNo, heapIndex: UInt16): UInt16; syscall sysTrapMemHeapID;
|
|
|
|
function MemHeapDynamic(heapID: UInt16): Boolean; syscall sysTrapMemHeapDynamic;
|
|
|
|
function MemHeapFreeBytes(heapID: UInt16; var freeP, maxP: UInt32): Err; syscall sysTrapMemHeapFreeBytes;
|
|
|
|
function MemHeapSize(heapID: UInt16): UInt32; syscall sysTrapMemHeapSize;
|
|
|
|
function MemHeapFlags(heapID: UInt16): UInt16; syscall sysTrapMemHeapFlags;
|
|
|
|
// Heap utilities
|
|
function MemHeapCompact(heapID: UInt16): Err; syscall sysTrapMemHeapCompact;
|
|
|
|
function MemHeapInit(heapID: UInt16; numHandles: Int16; initContents: Boolean): Err; syscall sysTrapMemHeapInit;
|
|
|
|
function MemHeapFreeByOwnerID(heapID, ownerID: UInt16): Err; syscall sysTrapMemHeapFreeByOwnerID;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Low Level Allocation
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemChunkNew(heapID: UInt16; size: UInt32; attr: UInt16): MemPtr; syscall sysTrapMemChunkNew;
|
|
|
|
function MemChunkFree(chunkDataP: MemPtr): Err; syscall sysTrapMemChunkFree;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Pointer (Non-Movable) based Chunk Routines
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemPtrNew(size: UInt32): MemPtr; syscall sysTrapMemPtrNew;
|
|
|
|
function MemPtrFree(chunkDataP: MemPtr): Err; syscall sysTrapMemChunkFree;
|
|
|
|
// Getting Attributes
|
|
function MemPtrRecoverHandle(p: MemPtr): MemHandle; syscall sysTrapMemPtrRecoverHandle;
|
|
|
|
function MemPtrFlags(p: MemPtr): UInt16; syscall sysTrapMemPtrFlags;
|
|
|
|
function MemPtrSize(p: MemPtr): UInt32; syscall sysTrapMemPtrSize;
|
|
|
|
function MemPtrOwner(p: MemPtr): UInt16; syscall sysTrapMemPtrOwner;
|
|
|
|
function MemPtrHeapID(p: MemPtr): UInt16; syscall sysTrapMemPtrHeapID;
|
|
|
|
function MemPtrDataStorage(p: MemPtr): Boolean; syscall sysTrapMemPtrDataStorage;
|
|
|
|
function MemPtrCardNo(p: MemPtr): UInt16; syscall sysTrapMemPtrCardNo;
|
|
|
|
function MemPtrToLocalID(p: MemPtr): LocalID; syscall sysTrapMemPtrToLocalID;
|
|
|
|
// Setting Attributes
|
|
function MemPtrSetOwner(p: MemPtr; owner: UInt16): Err; syscall sysTrapMemPtrSetOwner;
|
|
|
|
function MemPtrResize(p: MemPtr; newSize: UInt32): Err; syscall sysTrapMemPtrResize;
|
|
|
|
function MemPtrResetLock(p: MemPtr): Err; syscall sysTrapMemPtrResetLock;
|
|
|
|
function MemPtrUnlock(p: MemPtr): Err; syscall sysTrapMemPtrUnlock;
|
|
|
|
//-------------------------------------------------------------------
|
|
// MemHandle (Movable) based Chunk Routines
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemHandleNew(size: UInt32): MemHandle; syscall sysTrapMemHandleNew;
|
|
|
|
function MemHandleFree(h: MemHandle): Err; syscall sysTrapMemHandleFree;
|
|
|
|
// Getting Attributes
|
|
function MemHandleFlags(h: MemHandle): UInt16; syscall sysTrapMemHandleFlags;
|
|
|
|
function MemHandleSize(h: MemHandle): UInt32; syscall sysTrapMemHandleSize;
|
|
|
|
function MemHandleOwner(h: MemHandle): UInt16; syscall sysTrapMemHandleOwner;
|
|
|
|
function MemHandleLockCount(h: MemHandle): UInt16; syscall sysTrapMemHandleLockCount;
|
|
|
|
function MemHandleHeapID(h: MemHandle): UInt16; syscall sysTrapMemHandleHeapID;
|
|
|
|
function MemHandleDataStorage(h: MemHandle): Boolean; syscall sysTrapMemHandleDataStorage;
|
|
|
|
function MemHandleCardNo(h: MemHandle): UInt16; syscall sysTrapMemHandleCardNo;
|
|
|
|
function MemHandleToLocalID(h: MemHandle): LocalID; syscall sysTrapMemHandleToLocalID;
|
|
|
|
// Setting Attributes
|
|
function MemHandleSetOwner(h: MemHandle; owner: UInt16): Err; syscall sysTrapMemHandleSetOwner;
|
|
|
|
function MemHandleResize(h: MemHandle; newSize: UInt32): Err; syscall sysTrapMemHandleResize;
|
|
|
|
function MemHandleLock(h: MemHandle): MemPtr; syscall sysTrapMemHandleLock;
|
|
|
|
function MemHandleUnlock(h: MemHandle): Err; syscall sysTrapMemHandleUnlock;
|
|
|
|
function MemHandleResetLock(h: MemHandle): Err; syscall sysTrapMemHandleResetLock;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Local ID based routines
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemLocalIDToGlobal(local: LocalID; cardNo: UInt16): MemPtr; syscall sysTrapMemLocalIDToGlobal;
|
|
|
|
function MemLocalIDKind(local: LocalID): LocalIDKind; syscall sysTrapMemLocalIDKind;
|
|
|
|
function MemLocalIDToPtr(local: LocalID; cardNo: UInt16): MemPtr; syscall sysTrapMemLocalIDToPtr;
|
|
|
|
function MemLocalIDToLockedPtr(local: LocalID; cardNo: UInt16): MemPtr; syscall sysTrapMemLocalIDToLockedPtr;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Utilities
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemMove(dstP: Pointer; const sP: Pointer; numBytes: Int32): Err; syscall sysTrapMemMove;
|
|
|
|
function MemSet(dstP: Pointer; numBytes: Int32; value: UInt8): Err; syscall sysTrapMemSet;
|
|
|
|
function MemCmp(const s1: Pointer; const s2: Pointer; numBytes: Int32): Int16; syscall sysTrapMemCmp;
|
|
|
|
function MemSemaphoreReserve(writeAccess: Boolean): Err; syscall sysTrapMemSemaphoreReserve;
|
|
|
|
function MemSemaphoreRelease(writeAccess: Boolean): Err; syscall sysTrapMemSemaphoreRelease;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Debugging Support
|
|
//-------------------------------------------------------------------
|
|
|
|
function MemDebugMode: UInt16; syscall sysTrapMemDebugMode;
|
|
|
|
function MemSetDebugMode(flags: UInt16): Err; syscall sysTrapMemSetDebugMode;
|
|
|
|
function MemHeapScramble(heapID: UInt16): Err; syscall sysTrapMemHeapScramble;
|
|
|
|
function MemHeapCheck(heapID: UInt16): Err; syscall sysTrapMemHeapCheck;
|
|
|
|
implementation
|
|
|
|
end.
|