#ifndef EXEC_MEMORY_H #define EXEC_MEMORY_H /* ** $Filename: exec/memory.h $ ** $Release: 2.04 Includes, V37.4 $ ** $Revision: 36.12 $ ** $Date: 91/03/15 $ ** ** Definitions and structures used by the memory allocation system ** ** (C) Copyright 1985-1999 Amiga, Inc. ** All Rights Reserved */ #ifndef EXEC_NODES_H #include "exec/nodes.h" #endif /* EXEC_NODES_H */ /****** MemChunk ****************************************************/ struct MemChunk { struct MemChunk *mc_Next; /* pointer to next chunk */ ULONG mc_Bytes; /* chunk byte size */ }; /****** MemHeader ***************************************************/ struct MemHeader { struct Node mh_Node; UWORD mh_Attributes; /* characteristics of this region */ struct MemChunk *mh_First; /* first free region */ APTR mh_Lower; /* lower memory bound */ APTR mh_Upper; /* upper memory bound+1 */ ULONG mh_Free; /* total number of free bytes */ }; /****** MemEntry ****************************************************/ struct MemEntry { union { ULONG meu_Reqs; /* the AllocMem requirements */ APTR meu_Addr; /* the address of this memory region */ } me_Un; ULONG me_Length; /* the length of this memory region */ }; #define me_un me_Un /* compatibility - do not use*/ #define me_Reqs me_Un.meu_Reqs #define me_Addr me_Un.meu_Addr /****** MemList *****************************************************/ /* Note: sizeof(struct MemList) includes the size of the first MemEntry! */ struct MemList { struct Node ml_Node; UWORD ml_NumEntries; /* number of entries in this struct */ struct MemEntry ml_ME[1]; /* the first entry */ }; #define ml_me ml_ME /* compatability - do not use */ /*----- Memory Requirement Types ---------------------------*/ /*----- See the AllocMem() documentation for details--------*/ #define MEMF_ANY (0L) /* Any type of memory will do */ #define MEMF_PUBLIC (1L<<0) #define MEMF_CHIP (1L<<1) #define MEMF_FAST (1L<<2) #define MEMF_LOCAL (1L<<8) /* Memory that does not go away at RESET */ #define MEMF_24BITDMA (1L<<9) /* DMAable memory within 24 bits of address */ #define MEMF_CLEAR (1L<<16) /* AllocMem: NULL out area before return */ #define MEMF_LARGEST (1L<<17) /* AvailMem: return the largest chunk size */ #define MEMF_REVERSE (1L<<18) /* AllocMem: allocate from the top down */ #define MEMF_TOTAL (1L<<19) /* AvailMem: return total size of memory */ /*----- Current alignment rules for memory blocks (may increase) -----*/ #define MEM_BLOCKSIZE 8L #define MEM_BLOCKMASK (MEM_BLOCKSIZE-1) #endif /* EXEC_MEMORY_H */