337 lines
11 KiB
C
Executable File
337 lines
11 KiB
C
Executable File
/******************************************************************************
|
|
*
|
|
* Copyright (c) 1994-2004 PalmSource, Inc. All rights reserved.
|
|
*
|
|
* File: MemoryMgr.h
|
|
*
|
|
* Release: eclipse 5 SDK (68K) R4.
|
|
*
|
|
* Description:
|
|
* Include file for Memory Manager
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef __MEMORYMGR_H__
|
|
#define __MEMORYMGR_H__
|
|
|
|
|
|
// Include elementary types
|
|
#include <PalmTypes.h> // Basic types
|
|
#include <CoreTraps.h> // Trap Numbers.
|
|
#include <ErrorBase.h>
|
|
|
|
|
|
/************************************************************
|
|
* Memory Manager Types
|
|
*************************************************************/
|
|
typedef enum { memIDPtr, memIDHandle } LocalIDKind;
|
|
|
|
|
|
/************************************************************
|
|
* Flags accepted as parameter for MemNewChunk.
|
|
*************************************************************/
|
|
#define memNewChunkFlagPreLock 0x0100
|
|
#define memNewChunkFlagNonMovable 0x0200
|
|
#define memNewChunkFlagAtStart 0x0400 // force allocation at front of heap
|
|
#define memNewChunkFlagAtEnd 0x0800 // force allocation at end of heap
|
|
|
|
|
|
/************************************************************
|
|
* Memory Manager Debug settings for the MemSetDebugMode function
|
|
*************************************************************/
|
|
#define memDebugModeCheckOnChange 0x0001
|
|
#define memDebugModeCheckOnAll 0x0002
|
|
#define memDebugModeScrambleOnChange 0x0004
|
|
#define memDebugModeScrambleOnAll 0x0008
|
|
#define memDebugModeFillFree 0x0010
|
|
#define memDebugModeAllHeaps 0x0020
|
|
#define memDebugModeRecordMinDynHeapFree 0x0040
|
|
|
|
|
|
|
|
|
|
/************************************************************
|
|
* Memory Manager result codes
|
|
*************************************************************/
|
|
#define memErrChunkLocked (memErrorClass | 1)
|
|
#define memErrNotEnoughSpace (memErrorClass | 2)
|
|
#define memErrInvalidParam (memErrorClass | 3) /* invalid param or requested size is too big */
|
|
#define memErrChunkNotLocked (memErrorClass | 4)
|
|
#define memErrCardNotPresent (memErrorClass | 5)
|
|
#define memErrNoCardHeader (memErrorClass | 6)
|
|
#define memErrInvalidStoreHeader (memErrorClass | 7)
|
|
#define memErrRAMOnlyCard (memErrorClass | 8)
|
|
#define memErrWriteProtect (memErrorClass | 9)
|
|
#define memErrNoRAMOnCard (memErrorClass | 10)
|
|
#define memErrNoStore (memErrorClass | 11)
|
|
#define memErrROMOnlyCard (memErrorClass | 12)
|
|
|
|
|
|
/********************************************************************
|
|
* Memory Manager Routines
|
|
* These are define as external calls only under emulation mode or
|
|
* under native mode from the module that actually installs the trap
|
|
* vectors
|
|
********************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Initialization
|
|
//-------------------------------------------------------------------
|
|
Err MemInit(void)
|
|
SYS_TRAP(sysTrapMemInit);
|
|
|
|
Err MemKernelInit(void)
|
|
SYS_TRAP(sysTrapMemKernelInit);
|
|
|
|
Err MemInitHeapTable(UInt16 cardNo)
|
|
SYS_TRAP(sysTrapMemInitHeapTable);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Card formatting and Info
|
|
//-------------------------------------------------------------------
|
|
UInt16 MemNumCards(void)
|
|
SYS_TRAP(sysTrapMemNumCards);
|
|
|
|
Err MemCardFormat(UInt16 cardNo, const Char *cardNameP,
|
|
const Char *manufNameP, const Char *ramStoreNameP)
|
|
SYS_TRAP(sysTrapMemCardFormat);
|
|
|
|
Err MemCardInfo(UInt16 cardNo,
|
|
Char *cardNameP, Char *manufNameP,
|
|
UInt16 *versionP, UInt32 *crDateP,
|
|
UInt32 *romSizeP, UInt32 *ramSizeP,
|
|
UInt32 *freeBytesP)
|
|
SYS_TRAP(sysTrapMemCardInfo);
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Store Info
|
|
//-------------------------------------------------------------------
|
|
Err MemStoreInfo(UInt16 cardNo, UInt16 storeNumber,
|
|
UInt16 *versionP, UInt16 *flagsP, Char *nameP,
|
|
UInt32 * crDateP, UInt32 *bckUpDateP,
|
|
UInt32 * heapListOffsetP, UInt32 *initCodeOffset1P,
|
|
UInt32 *initCodeOffset2P, LocalID* databaseDirIDP)
|
|
SYS_TRAP(sysTrapMemStoreInfo);
|
|
|
|
Err MemStoreSetInfo(UInt16 cardNo, UInt16 storeNumber,
|
|
UInt16 *versionP, UInt16 *flagsP, Char *nameP,
|
|
UInt32 *crDateP, UInt32 *bckUpDateP,
|
|
UInt32 *heapListOffsetP, UInt32 *initCodeOffset1P,
|
|
UInt32 *initCodeOffset2P, LocalID* databaseDirIDP)
|
|
SYS_TRAP(sysTrapMemStoreSetInfo);
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Heap Info & Utilities
|
|
//-------------------------------------------------------------------
|
|
UInt16 MemNumHeaps(UInt16 cardNo)
|
|
SYS_TRAP(sysTrapMemNumHeaps);
|
|
|
|
UInt16 MemNumRAMHeaps(UInt16 cardNo)
|
|
SYS_TRAP(sysTrapMemNumRAMHeaps);
|
|
|
|
UInt16 MemHeapID(UInt16 cardNo, UInt16 heapIndex)
|
|
SYS_TRAP(sysTrapMemHeapID);
|
|
|
|
Boolean MemHeapDynamic(UInt16 heapID)
|
|
SYS_TRAP(sysTrapMemHeapDynamic);
|
|
|
|
Err MemHeapFreeBytes(UInt16 heapID, UInt32 *freeP, UInt32 *maxP)
|
|
SYS_TRAP(sysTrapMemHeapFreeBytes);
|
|
|
|
UInt32 MemHeapSize(UInt16 heapID)
|
|
SYS_TRAP(sysTrapMemHeapSize);
|
|
|
|
UInt16 MemHeapFlags(UInt16 heapID)
|
|
SYS_TRAP(sysTrapMemHeapFlags);
|
|
|
|
|
|
// Heap utilities
|
|
Err MemHeapCompact(UInt16 heapID)
|
|
SYS_TRAP(sysTrapMemHeapCompact);
|
|
|
|
Err MemHeapInit(UInt16 heapID, Int16 numHandles, Boolean initContents)
|
|
SYS_TRAP(sysTrapMemHeapInit);
|
|
|
|
Err MemHeapFreeByOwnerID(UInt16 heapID, UInt16 ownerID)
|
|
SYS_TRAP(sysTrapMemHeapFreeByOwnerID);
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Low Level Allocation
|
|
//-------------------------------------------------------------------
|
|
MemPtr MemChunkNew(UInt16 heapID, UInt32 size, UInt16 attr)
|
|
SYS_TRAP(sysTrapMemChunkNew);
|
|
|
|
Err MemChunkFree(MemPtr chunkDataP)
|
|
SYS_TRAP(sysTrapMemChunkFree);
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Pointer (Non-Movable) based Chunk Routines
|
|
//-------------------------------------------------------------------
|
|
MemPtr MemPtrNew(UInt32 size)
|
|
SYS_TRAP(sysTrapMemPtrNew);
|
|
|
|
#define MemPtrFree( p) \
|
|
MemChunkFree(p)
|
|
|
|
// Getting Attributes
|
|
MemHandle MemPtrRecoverHandle(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrRecoverHandle);
|
|
|
|
UInt16 MemPtrFlags(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrFlags);
|
|
|
|
UInt32 MemPtrSize(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrSize);
|
|
|
|
UInt16 MemPtrOwner(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrOwner);
|
|
|
|
UInt16 MemPtrHeapID(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrHeapID);
|
|
|
|
Boolean MemPtrDataStorage(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrDataStorage);
|
|
|
|
UInt16 MemPtrCardNo(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrCardNo);
|
|
|
|
LocalID MemPtrToLocalID(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrToLocalID);
|
|
|
|
// Setting Attributes
|
|
Err MemPtrSetOwner(MemPtr p, UInt16 owner)
|
|
SYS_TRAP(sysTrapMemPtrSetOwner);
|
|
|
|
Err MemPtrResize(MemPtr p, UInt32 newSize)
|
|
SYS_TRAP(sysTrapMemPtrResize);
|
|
|
|
Err MemPtrResetLock(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrResetLock);
|
|
|
|
Err MemPtrUnlock(MemPtr p)
|
|
SYS_TRAP(sysTrapMemPtrUnlock);
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Handle (Movable) based Chunk Routines
|
|
//-------------------------------------------------------------------
|
|
MemHandle MemHandleNew(UInt32 size)
|
|
SYS_TRAP(sysTrapMemHandleNew);
|
|
|
|
Err MemHandleFree(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleFree);
|
|
|
|
// Getting Attributes
|
|
UInt16 MemHandleFlags(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleFlags);
|
|
|
|
UInt32 MemHandleSize(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleSize);
|
|
|
|
UInt16 MemHandleOwner(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleOwner);
|
|
|
|
UInt16 MemHandleLockCount(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleLockCount);
|
|
|
|
UInt16 MemHandleHeapID(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleHeapID);
|
|
|
|
Boolean MemHandleDataStorage(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleDataStorage);
|
|
|
|
UInt16 MemHandleCardNo(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleCardNo);
|
|
|
|
LocalID MemHandleToLocalID(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleToLocalID);
|
|
|
|
|
|
// Setting Attributes
|
|
Err MemHandleSetOwner( MemHandle h, UInt16 owner)
|
|
SYS_TRAP(sysTrapMemHandleSetOwner);
|
|
|
|
Err MemHandleResize(MemHandle h, UInt32 newSize)
|
|
SYS_TRAP(sysTrapMemHandleResize);
|
|
|
|
MemPtr MemHandleLock(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleLock);
|
|
|
|
Err MemHandleUnlock(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleUnlock);
|
|
|
|
Err MemHandleResetLock(MemHandle h)
|
|
SYS_TRAP(sysTrapMemHandleResetLock);
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Local ID based routines
|
|
//-------------------------------------------------------------------
|
|
MemPtr MemLocalIDToGlobal(LocalID local, UInt16 cardNo)
|
|
SYS_TRAP(sysTrapMemLocalIDToGlobal);
|
|
|
|
LocalIDKind MemLocalIDKind(LocalID local)
|
|
SYS_TRAP(sysTrapMemLocalIDKind);
|
|
|
|
MemPtr MemLocalIDToPtr(LocalID local, UInt16 cardNo)
|
|
SYS_TRAP(sysTrapMemLocalIDToPtr);
|
|
|
|
MemPtr MemLocalIDToLockedPtr(LocalID local, UInt16 cardNo)
|
|
SYS_TRAP(sysTrapMemLocalIDToLockedPtr);
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Utilities
|
|
//-------------------------------------------------------------------
|
|
Err MemMove(void *dstP, const void *sP, Int32 numBytes)
|
|
SYS_TRAP(sysTrapMemMove);
|
|
|
|
Err MemSet(void *dstP, Int32 numBytes, UInt8 value)
|
|
SYS_TRAP(sysTrapMemSet);
|
|
|
|
Int16 MemCmp (const void *s1, const void *s2, Int32 numBytes)
|
|
SYS_TRAP(sysTrapMemCmp);
|
|
|
|
Err MemSemaphoreReserve(Boolean writeAccess)
|
|
SYS_TRAP(sysTrapMemSemaphoreReserve);
|
|
|
|
Err MemSemaphoreRelease(Boolean writeAccess)
|
|
SYS_TRAP(sysTrapMemSemaphoreRelease);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Debugging Support
|
|
//-------------------------------------------------------------------
|
|
UInt16 MemDebugMode(void)
|
|
SYS_TRAP(sysTrapMemDebugMode);
|
|
|
|
Err MemSetDebugMode(UInt16 flags)
|
|
SYS_TRAP(sysTrapMemSetDebugMode);
|
|
|
|
Err MemHeapScramble(UInt16 heapID)
|
|
SYS_TRAP(sysTrapMemHeapScramble);
|
|
|
|
Err MemHeapCheck(UInt16 heapID)
|
|
SYS_TRAP(sysTrapMemHeapCheck);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif // __MEMORYMGR_H__
|