palm-os-sdk/sdk-2/include/Core/System/MemoryMgr.h
2016-08-25 07:53:48 -03:00

345 lines
10 KiB
C

/*******************************************************************
* Pilot Software
*
* Copyright (c) 1994-1997, Palm Computing Inc., All Rights Reserved
*
*-------------------------------------------------------------------
* FileName:
* MemoryMgr.h
*
* Description:
* Include file for Memory Manager
*
* History:
* 10/25/94 RM - Created by Ron Marianetti
*
*******************************************************************/
#ifndef __MEMORYMGR_H__
#define __MEMORYMGR_H__
// Include elementary types
#include <Common.h> // Basic types
#include <SysTraps.h> // Trap Numbers.
/************************************************************
* 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)
#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 | 10)
/********************************************************************
* 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(UInt cardNo)
SYS_TRAP(sysTrapMemInitHeapTable);
//-------------------------------------------------------------------
// Card formatting and Info
//-------------------------------------------------------------------
UInt MemNumCards(void)
SYS_TRAP(sysTrapMemNumCards);
Err MemCardFormat(UInt cardNo, CharPtr cardNameP,
CharPtr manufNameP, CharPtr ramStoreNameP)
SYS_TRAP(sysTrapMemCardFormat);
Err MemCardInfo(UInt cardNo,
CharPtr cardNameP, CharPtr manufNameP,
UIntPtr versionP, ULongPtr crDateP,
ULongPtr romSizeP, ULongPtr ramSizeP,
ULongPtr freeBytesP)
SYS_TRAP(sysTrapMemCardInfo);
//-------------------------------------------------------------------
// Store Info
//-------------------------------------------------------------------
Err MemStoreInfo(UInt cardNo, UInt storeNumber,
UIntPtr versionP, UIntPtr flagsP, CharPtr nameP,
ULongPtr crDateP, ULongPtr bckUpDateP,
ULongPtr heapListOffsetP, ULongPtr initCodeOffset1P,
ULongPtr initCodeOffset2P, LocalID* databaseDirIDP)
SYS_TRAP(sysTrapMemStoreInfo);
Err MemStoreSetInfo(UInt cardNo, UInt storeNumber,
UIntPtr versionP, UIntPtr flagsP, CharPtr nameP,
ULongPtr crDateP, ULongPtr bckUpDateP,
ULongPtr heapListOffsetP, ULongPtr initCodeOffset1P,
ULongPtr initCodeOffset2P, LocalID* databaseDirIDP)
SYS_TRAP(sysTrapMemStoreSetInfo);
//-------------------------------------------------------------------
// Heap Info & Utilities
//-------------------------------------------------------------------
UInt MemNumHeaps(UInt cardNo)
SYS_TRAP(sysTrapMemNumHeaps);
UInt MemNumRAMHeaps(UInt cardNo)
SYS_TRAP(sysTrapMemNumRAMHeaps);
UInt MemHeapID(UInt cardNo, UInt heapIndex)
SYS_TRAP(sysTrapMemHeapID);
Boolean MemHeapDynamic(UInt heapID)
SYS_TRAP(sysTrapMemHeapDynamic);
Err MemHeapFreeBytes(UInt heapID, ULongPtr freeP, ULongPtr maxP)
SYS_TRAP(sysTrapMemHeapFreeBytes);
ULong MemHeapSize(UInt heapID)
SYS_TRAP(sysTrapMemHeapSize);
UInt MemHeapFlags(UInt heapID)
SYS_TRAP(sysTrapMemHeapFlags);
// Heap utilities
Err MemHeapCompact(UInt heapID)
SYS_TRAP(sysTrapMemHeapCompact);
Err MemHeapInit(UInt heapID, Int numHandles, Boolean initContents)
SYS_TRAP(sysTrapMemHeapInit);
Err MemHeapFreeByOwnerID(UInt heapID, UInt ownerID)
SYS_TRAP(sysTrapMemHeapFreeByOwnerID);
//-------------------------------------------------------------------
// Low Level Allocation
//-------------------------------------------------------------------
VoidPtr MemChunkNew(UInt heapID, ULong size, UInt attr)
SYS_TRAP(sysTrapMemChunkNew);
Err MemChunkFree(VoidPtr chunkDataP)
SYS_TRAP(sysTrapMemChunkFree);
//-------------------------------------------------------------------
// Pointer (Non-Movable) based Chunk Routines
//-------------------------------------------------------------------
VoidPtr MemPtrNew(ULong size)
SYS_TRAP(sysTrapMemPtrNew);
#define MemPtrFree( p) \
MemChunkFree(p)
// Getting Attributes
VoidHand MemPtrRecoverHandle(VoidPtr p)
SYS_TRAP(sysTrapMemPtrRecoverHandle);
UInt MemPtrFlags(VoidPtr p)
SYS_TRAP(sysTrapMemPtrFlags);
ULong MemPtrSize(VoidPtr p)
SYS_TRAP(sysTrapMemPtrSize);
UInt MemPtrOwner(VoidPtr p)
SYS_TRAP(sysTrapMemPtrOwner);
UInt MemPtrHeapID(VoidPtr p)
SYS_TRAP(sysTrapMemPtrHeapID);
Boolean MemPtrDataStorage(VoidPtr p)
SYS_TRAP(sysTrapMemPtrDataStorage);
UInt MemPtrCardNo(VoidPtr p)
SYS_TRAP(sysTrapMemPtrCardNo);
LocalID MemPtrToLocalID(VoidPtr p)
SYS_TRAP(sysTrapMemPtrToLocalID);
// Setting Attributes
Err MemPtrSetOwner(VoidPtr p, UInt owner)
SYS_TRAP(sysTrapMemPtrSetOwner);
Err MemPtrResize(VoidPtr p, ULong newSize)
SYS_TRAP(sysTrapMemPtrResize);
Err MemPtrResetLock(VoidPtr p)
SYS_TRAP(sysTrapMemPtrResetLock);
Err MemPtrUnlock(VoidPtr p)
SYS_TRAP(sysTrapMemPtrUnlock);
//-------------------------------------------------------------------
// Handle (Movable) based Chunk Routines
//-------------------------------------------------------------------
VoidHand MemHandleNew(ULong size)
SYS_TRAP(sysTrapMemHandleNew);
Err MemHandleFree(VoidHand h)
SYS_TRAP(sysTrapMemHandleFree);
// Getting Attributes
UInt MemHandleFlags(VoidHand h)
SYS_TRAP(sysTrapMemHandleFlags);
ULong MemHandleSize(VoidHand h)
SYS_TRAP(sysTrapMemHandleSize);
UInt MemHandleOwner(VoidHand h)
SYS_TRAP(sysTrapMemHandleOwner);
UInt MemHandleLockCount(VoidHand h)
SYS_TRAP(sysTrapMemHandleLockCount);
UInt MemHandleHeapID(VoidHand h)
SYS_TRAP(sysTrapMemHandleHeapID);
Boolean MemHandleDataStorage(VoidHand h)
SYS_TRAP(sysTrapMemHandleDataStorage);
UInt MemHandleCardNo(VoidHand h)
SYS_TRAP(sysTrapMemHandleCardNo);
LocalID MemHandleToLocalID(VoidHand h)
SYS_TRAP(sysTrapMemHandleToLocalID);
// Setting Attributes
Err MemHandleSetOwner( VoidHand h, UInt owner)
SYS_TRAP(sysTrapMemHandleSetOwner);
Err MemHandleResize(VoidHand h, ULong newSize)
SYS_TRAP(sysTrapMemHandleResize);
VoidPtr MemHandleLock(VoidHand h)
SYS_TRAP(sysTrapMemHandleLock);
Err MemHandleUnlock(VoidHand h)
SYS_TRAP(sysTrapMemHandleUnlock);
Err MemHandleResetLock(VoidHand h)
SYS_TRAP(sysTrapMemHandleResetLock);
//-------------------------------------------------------------------
// Local ID based routines
//-------------------------------------------------------------------
VoidPtr MemLocalIDToGlobal(LocalID local, UInt cardNo)
SYS_TRAP(sysTrapMemLocalIDToGlobal);
LocalIDKind MemLocalIDKind(LocalID local)
SYS_TRAP(sysTrapMemLocalIDKind);
VoidPtr MemLocalIDToPtr(LocalID local, UInt cardNo)
SYS_TRAP(sysTrapMemLocalIDToPtr);
VoidPtr MemLocalIDToLockedPtr(LocalID local, UInt cardNo)
SYS_TRAP(sysTrapMemLocalIDToLockedPtr);
//-------------------------------------------------------------------
// Utilities
//-------------------------------------------------------------------
Err MemMove(VoidPtr dstP, VoidPtr srcP, ULong numBytes)
SYS_TRAP(sysTrapMemMove);
Err MemSet(VoidPtr dstP, ULong numBytes, Byte value)
SYS_TRAP(sysTrapMemSet);
Int MemCmp (VoidPtr s1, VoidPtr s2, ULong numBytes)
SYS_TRAP(sysTrapMemCmp);
Err MemSemaphoreReserve(Boolean writeAccess)
SYS_TRAP(sysTrapMemSemaphoreReserve);
Err MemSemaphoreRelease(Boolean writeAccess)
SYS_TRAP(sysTrapMemSemaphoreRelease);
//-------------------------------------------------------------------
// Debugging Support
//-------------------------------------------------------------------
Word MemDebugMode(void)
SYS_TRAP(sysTrapMemDebugMode);
Err MemSetDebugMode(Word flags)
SYS_TRAP(sysTrapMemSetDebugMode);
Err MemHeapScramble(UInt heapID)
SYS_TRAP(sysTrapMemHeapScramble);
Err MemHeapCheck(UInt heapID)
SYS_TRAP(sysTrapMemHeapCheck);
#ifdef __cplusplus
}
#endif
#endif // __MEMORYMGR_H__