| // Internal dynamic memory allocations. |
| // |
| // Copyright (C) 2009-2013 Kevin O'Connor <kevin@koconnor.net> |
| // |
| // This file may be distributed under the terms of the GNU LGPLv3 license. |
| |
| #include "biosvar.h" // GET_BDA |
| #include "config.h" // BUILD_BIOS_ADDR |
| #include "e820map.h" // struct e820entry |
| #include "list.h" // hlist_node |
| #include "malloc.h" // _malloc |
| #include "memmap.h" // PAGE_SIZE |
| #include "output.h" // dprintf |
| #include "stacks.h" // wait_preempt |
| #include "std/optionrom.h" // OPTION_ROM_ALIGN |
| #include "string.h" // memset |
| |
| static unsigned long stackptr; |
| |
| /**************************************************************** |
| * tracked memory allocations |
| ****************************************************************/ |
| |
| // Allocate physical memory from the given zone and track it as a PMM allocation |
| unsigned long |
| malloc_palloc(struct zone_s *zone, u32 size, u32 align) |
| { |
| unsigned long data; |
| |
| ASSERT32FLAT(); |
| if (!size) |
| return 0; |
| |
| stackptr = (stackptr + align-1) & ~(align-1); |
| data = stackptr; |
| stackptr += size; |
| |
| // dprintf(9, "malloc: size=%d align=%d ret=0x%lx\n" , size, align, data); |
| |
| return data; |
| } |
| |
| // Allocate virtual memory from the given zone |
| void * __malloc |
| parisc_malloc(u32 size, u32 align) |
| { |
| return (void*) malloc_palloc(NULL, size, align); |
| } |
| |
| // Free a data block allocated with phys_alloc |
| int |
| malloc_pfree(u32 data) |
| { |
| return 0; |
| } |
| |
| void |
| free(void *data) |
| { |
| } |
| |
| |
| |
| /**************************************************************** |
| * Setup |
| ****************************************************************/ |
| |
| void |
| malloc_preinit(void) |
| { |
| ASSERT32FLAT(); |
| dprintf(3, "malloc preinit\n"); |
| extern u8 _ebss; |
| stackptr = (unsigned long) &_ebss; |
| } |
| |
| u32 LegacyRamSize VARFSEG; |
| |
| void |
| malloc_init(void) |
| { |
| ASSERT32FLAT(); |
| dprintf(3, "malloc init\n"); |
| } |
| |
| void |
| malloc_prepboot(void) |
| { |
| ASSERT32FLAT(); |
| dprintf(3, "malloc finalize\n"); |
| } |