mac-rom/ProcessMgr/Zone.h
Elliot Nunn 4325cdcc78 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 09:52:23 +08:00

115 lines
4.5 KiB
C

/*
File: Zone.h
Contains: Information needed by heap management routines, regardless of whether we
are in 24-bit or 32-bit zone. Mode specific information is in Zone24.h
and Zone32.h.
Written by: Phil Goldman
Copyright: © 1986-1991 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<6> 4/9/91 DFH VL, #83672 : Added GetProcessMgrHiMaxBlock vector definitions.
<5> 4/7/91 DFH gbm, WS#JC-PM-005 : Added MIN_PHYSICAL_SIZE_EITHER_MODE.
<4> 3/14/91 DFH gbm,#82504, #82681, #83168, #83182, #83207: Removed
GUARANTEED_SYSHEAP_FREE_CONTIGUOUS_SPACE.
<3> 2/21/91 DFH dba,#82504, #82681, #83168, #83182, #83207: Added
GetSystemHiFreeBytes vector. need to grow.
<0> x/xx/86 PYG New Today.
*/
/* Macros for heap access */
#define SIZEOF_ZONE_HEADER (sizeof(Zone) - sizeof(short))
#define SIZEOF_24BIT_BLOCK_HEADER ((unsigned int) 8)
#define SIZEOF_32BIT_BLOCK_HEADER ((unsigned int) 12)
#define HEAP_FREE_SPACE(theZone) ((theZone)->zcbFree)
#define FNoRvrAlloc (1<<5)
#define ZONE_BYTES_PER_MP (8*1024)
#define MIN_PHYSICAL_SIZE_EITHER_MODE ((unsigned int) 16)
#define MIN_LOGICAL_SIZE ((unsigned int) 4)
#define SIZEOF_SMALLEST_PTR_DATUM MIN_LOGICAL_SIZE
#define MAX_LOGICAL_SIZE (0xFFFFFFF0)
#define MINGROWTH ((unsigned int) 16)
#define MAX_TOO_FEW_SYS_MPS ((unsigned int) 32)
#define EXTRA_SLOP_FOR_NEXT_TIME (10*1024)
/* maxSize that works both in 24-bit and 32-bit modes
* NOTE: This must not be too big, since the memory manager automatically
* adds the block header size to this value, which would cause it to wrap
* to a small positive number.
*/
#define compactAll 0xFFFFFF00
/* Typedef that zone files can share */
typedef unsigned long FreeBlockAddr; /* address of free block */
/* Function prototypes */
typedef pascal long (*GZProcPtr)(long cbNeeded);
pascal long ProcessMgr_GZProc_Glue(u_size cbNeeded)
extern;
pascal long ProcessMgrSysGZProc(u_size cbNeeded)
extern;
void MakeNonRelocatable24(Ptr *);
void MakeNonRelocatable32(Ptr *);
/* Function prototypes for vectored routines */
typedef u_size (*zvr1Ptr) (Handle, Boolean *);
typedef void (*zvr2Ptr) (THz pZone, u_size cbNeeded);
typedef void (*zvr3Ptr) (THz oldZone, THz newZone);
typedef long (*zvr4Ptr) (u_size cbNeeded);
typedef Ptr (*zvr5Ptr) (Ptr ceilingPtr);
typedef FreeBlockAddr (*zvr6Ptr) (u_size size, Ptr lockPtr);
typedef long (*zvr7Ptr) (FreeBlockAddr pTopBlock);
typedef FreeBlockAddr (*zvr8Ptr) (FreeBlockAddr pBlockHdr, u_size newSize);
typedef FreeBlockAddr (*zvr9Ptr) (FreeBlockAddr pBlock, Handle *pHandle,u_size sizeNeeded, short sizeCorrection);
typedef Ptr (*zvr10Ptr) (THz pZone);
typedef u_size (*zvr11Ptr) (void);
typedef u_size (*zvr12Ptr) (void);
/* Macros to get vectored routines */
#define GetProcessMgrLoFreeBytes (*vrGetProcessMgrLoFreeBytes)
#define ExtendZone (*vrExtendZone)
#define MoveZone (*vrMoveZone)
#define ShrinkProcessMgrZone (*vrShrinkProcessMgrZone)
#define GetLockPtr (*vrGetLockPtr)
#define GetHighestLargeFreeBlock (*vrGetHighestLargeFreeBlock)
#define GetTopBlockSize (*vrGetTopBlockSize)
#define FreeTop (*vrFreeTop)
#define ChipOffRelocFromFree (*vrChipOffRelocFromFree)
#define ZoneMPBlockPtr (*vrZoneMPBlockPtr)
#define GetSystemHiFreeBytes (*vrGetSystemHiFreeBytes)
#define GetProcessMgrHiMaxBlock (*vrGetProcessMgrHiMaxBlock)
/* Import the vectors */
extern zvr1Ptr vrGetProcessMgrLoFreeBytes;
extern zvr2Ptr vrExtendZone;
extern zvr3Ptr vrMoveZone;
extern zvr4Ptr vrShrinkProcessMgrZone;
extern zvr5Ptr vrGetLockPtr;
extern zvr6Ptr vrGetHighestLargeFreeBlock;
extern zvr7Ptr vrGetTopBlockSize;
extern zvr8Ptr vrFreeTop;
extern zvr9Ptr vrChipOffRelocFromFree;
extern zvr10Ptr vrZoneMPBlockPtr;
extern zvr11Ptr vrGetSystemHiFreeBytes;
extern zvr12Ptr vrGetProcessMgrHiMaxBlock;
/* Import the non-vectored routines */
extern void InitVectorTable24(void);
extern void InitVectorTable32(void);
/* Exports */
void InitHeaps(void);
pascal long MyGrowZone(unsigned long);
u_size ProcessMgrMaxBlock(void);
u_size StraddleBlockSize(u_size *, u_size *, Handle, Boolean *);
void ReclaimSpaceIfSysHeapLow(Handle *);
#define LogicalToPhysicalSize(size) (size) += (In32BitMode) ? SIZEOF_32BIT_BLOCK_HEADER : SIZEOF_24BIT_BLOCK_HEADER;
#define PhysicalToLogicalSize(size) (size) -= (In32BitMode) ? SIZEOF_32BIT_BLOCK_HEADER : SIZEOF_24BIT_BLOCK_HEADER;