White space fixes, detab.
[AROS.git] / rom / kernel / kernel_memory.c
blob2a9908ac22a070fcda215972a1589eab7b5103e0
1 /*
2 Copyright © 2010-2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Common memory utility functions
6 Lang: english
7 */
9 #include <aros/debug.h>
10 #include <exec/execbase.h>
11 #include <exec/memory.h>
12 #include <proto/exec.h>
14 #include <kernel_base.h>
17 * Create MemHeader structure for the specified RAM region.
18 * The header will be placed in the beginning of the region itself.
19 * The header will NOT be added to the memory list!
21 void krnCreateMemHeader(CONST_STRPTR name, BYTE pri, APTR start, IPTR size, ULONG flags)
23 /* The MemHeader itself does not have to be aligned */
24 struct MemHeader *mh = start;
26 /* If the end is less than (1 << 31), MEMF_31BIT is implied */
27 if (((IPTR)start+size) < (1UL << 31))
28 flags |= MEMF_31BIT;
29 else
30 flags &= ~MEMF_31BIT;
32 mh->mh_Node.ln_Succ = NULL;
33 mh->mh_Node.ln_Pred = NULL;
34 mh->mh_Node.ln_Type = NT_MEMORY;
35 mh->mh_Node.ln_Name = (STRPTR)name;
36 mh->mh_Node.ln_Pri = pri;
37 mh->mh_Attributes = flags;
38 /* The first MemChunk needs to be aligned. We do it by adding MEMHEADER_TOTAL. */
39 mh->mh_First = start + MEMHEADER_TOTAL;
40 mh->mh_First->mc_Next = NULL;
41 mh->mh_First->mc_Bytes = size - MEMHEADER_TOTAL;
44 * mh_Lower and mh_Upper are informational only. Since our MemHeader resides
45 * inside the region it describes, the region includes MemHeader.
47 mh->mh_Lower = start;
48 mh->mh_Upper = start + size;
49 mh->mh_Free = mh->mh_First->mc_Bytes;
53 * Create informational MemHeader for ROM region.
54 * The header will be allocated from system's public memory lists.
55 * It will be not possible to allocate memory from the created MemHeader.
56 * The header will be added to the memory list.
57 * This routine uses exec.library/Allocate() for memory allocation, so it is safe
58 * to use before exec.library and kernel.resource memory management is initialized.
60 struct MemHeader *krnCreateROMHeader(CONST_STRPTR name, APTR start, APTR end)
62 struct MemHeader *mh = AllocMem(sizeof(struct MemHeader), MEMF_ANY);
64 if (mh)
66 mh->mh_Node.ln_Type = NT_MEMORY;
67 mh->mh_Node.ln_Name = (STRPTR)name;
68 mh->mh_Node.ln_Pri = -128;
69 mh->mh_Attributes = MEMF_KICK;
70 mh->mh_First = NULL;
71 mh->mh_Lower = start;
72 mh->mh_Upper = end + 1; /* end is the last valid address of the region */
73 mh->mh_Free = 0; /* Never allocate from this chunk! */
74 Enqueue(&SysBase->MemList, &mh->mh_Node);
77 return mh;