	IFND	EXEC_MEMORY_I
EXEC_MEMORY_I	SET	1
**
**	$VER: memory.i 39.3 (20.5.92)
**	Includes Release 40.15
**
**	Definitions and structures used by the memory allocation system
**
**	(C) Copyright 1985-1993 Commodore-Amiga, Inc.
**	    All Rights Reserved
**

    IFND EXEC_NODES_I
    INCLUDE "exec/nodes.i"
    ENDC	; EXEC_NODES_I


*---------------------------------------------------------------------
*
*   Memory List Structures
*
*---------------------------------------------------------------------
*
*   A memory list appears in two forms:  One is a requirements list
*   the other is a list of already allocated memory.  The format is
*   the same, with the reqirements/address field occupying the same
*   position.
*
*   The format is a linked list of ML structures each of which has
*   an array of ME entries.
*
*---------------------------------------------------------------------

 STRUCTURE ML,LN_SIZE
    UWORD   ML_NUMENTRIES	    ; The number of ME structures that follow
    LABEL   ML_ME		    ; where the ME structures begin
    LABEL   ML_SIZE	;Note: does NOT include any "ME" structures.


 STRUCTURE ME,0
    LABEL   ME_REQS		    ; the AllocMem requirements
    APTR    ME_ADDR		    ; the address of this block (an alias
				    ;	for the same location as ME_REQS)
    ULONG   ME_LENGTH		    ; the length of this region
    LABEL   ME_SIZE


*------ memory options:
*------ see the AllocMem() documentation for details------*

MEMF_ANY	EQU 0		;Any type of memory will do
    BITDEF  MEM,PUBLIC,0
    BITDEF  MEM,CHIP,1
    BITDEF  MEM,FAST,2
    BITDEF  MEM,LOCAL,8		;Memory that does not go away at RESET
    BITDEF  MEM,24BITDMA,9	;DMAable memory within 24 bits of address
    BITDEF  MEM,KICK,10		;Memory that can be used for KickTag stuff

    BITDEF  MEM,CLEAR,16	;AllocMem: NULL out area before return
    BITDEF  MEM,LARGEST,17	;AvailMem: return the largest chunk size
    BITDEF  MEM,REVERSE,18	;AllocMem: allocate from the top down
    BITDEF  MEM,TOTAL,19	;AvailMem: return total size of memory

    BITDEF  MEM,NO_EXPUNGE,31	;AllocMem: Do not cause expunge on failure

*----- Current alignment rules for memory blocks (may increase) -----
MEM_BLOCKSIZE	EQU 8
MEM_BLOCKMASK	EQU (MEM_BLOCKSIZE-1)


*---------------------------------------------------------------------
*
*   Low memory handler data structure
*
* Note:  This structure is *READ ONLY* and only EXEC can create it!
*---------------------------------------------------------------------
 STRUCTURE MemHandlerData,0
    ULONG   memh_RequestSize	; Requested allocation size
    ULONG   memh_RequestFlags	; Requested allocation flags
    ULONG   memh_Flags		; Flags (see blow)
    LABEL   memh_SIZEOF

* Flag definitions:
    BITDEF  MEMH,RECYCLE,0	; 0==First time, 1==recycle

*------ Low Memory handler return values
MEM_DID_NOTHING	EQU	0	; Nothing we could do...
MEM_ALL_DONE	EQU	-1	; We did all we could do
MEM_TRY_AGAIN	EQU	1	; We did some, try the allocation again

*---------------------------------------------------------------------
*
*   Memory Region Header
*
*---------------------------------------------------------------------

 STRUCTURE  MH,LN_SIZE		    ; (LN_TYPE will be set to NT_MEMORY)
    UWORD   MH_ATTRIBUTES	    ; characteristics of this region
    APTR    MH_FIRST		    ; first free region
    APTR    MH_LOWER		    ; lower memory bound
    APTR    MH_UPPER		    ; upper memory bound+1
    ULONG   MH_FREE		    ; number of free bytes
    LABEL   MH_SIZE


*---------------------------------------------------------------------
*
*   Memory Chunk
*
*---------------------------------------------------------------------

 STRUCTURE  MC,0
    APTR    MC_NEXT		    ; ptr to next chunk
    ULONG   MC_BYTES		    ; chunk byte size
    APTR    MC_SIZE

	ENDC	; EXEC_MEMORY_I
