Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/i386/libsaio/allocate.c

Source at commit 1592 created 12 years 8 months ago.
By blackosx, Moved the modules choice out of the bootloader menu to the root menu. Made some changes to the wording used for some of the options for the English strings, and will add more in time. Updated header info in Settings files.
1/*
2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Portions Copyright (c) 2003 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 2.0 (the "License"). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License.
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24
25#include "sl.h"
26#include "saio_internal.h"
27#include "bootstruct.h"
28#include "device_tree.h"
29
30static long gImageLastKernelAddr;
31
32#define kPageSize 4096
33#define RoundPage(x) ((((unsigned)(x)) + kPageSize - 1) & ~(kPageSize - 1))
34
35
36long
37AllocateMemoryRange(char * rangeName, long start, long length, long type)
38{
39 char *nameBuf;
40 uint32_t *buffer;
41
42 nameBuf = malloc(strlen(rangeName) + 1);
43 if (nameBuf == 0) return -1;
44 strcpy(nameBuf, rangeName);
45
46 buffer = malloc(2 * sizeof(uint32_t));
47 if (buffer == 0) return -1;
48
49 buffer[0] = start;
50 buffer[1] = length;
51
52 DT__AddProperty(gMemoryMapNode, nameBuf, 2 * sizeof(uint32_t), (char *)buffer);
53
54 return 0;
55}
56
57long
58AllocateKernelMemory( long inSize )
59{
60 long addr;
61
62 if (gImageLastKernelAddr == 0) {
63 gImageLastKernelAddr = RoundPage( bootArgs->kaddr +
64 bootArgs->ksize );
65 }
66 addr = gImageLastKernelAddr;
67 gImageLastKernelAddr += RoundPage(inSize);
68
69 if ( gImageLastKernelAddr >= (KERNEL_ADDR + KERNEL_LEN) ) {
70 stop ("AllocateKernelMemory error");
71 }
72
73 bootArgs->ksize = gImageLastKernelAddr - bootArgs->kaddr;
74
75 return addr;
76}
77

Archive Download this file

Revision: 1592