00001 00043 #include <physmem.h> 00044 #include <util.h> 00045 00066 phys_addr_t physmem_alloc(struct physmem_pool *pool, phys_size_t size, 00067 unsigned int align_order) 00068 { 00069 phys_addr_t addr; 00070 00071 addr = round_down(pool->end.addr - size, align_order); 00072 if (addr >= pool->start.addr) 00073 pool->end.addr = addr; 00074 else 00075 addr = PHYSMEM_ALLOC_ERR; 00076 00077 return addr; 00078 } 00079 00098 phys_addr_t physmem_alloc_low(struct physmem_pool *pool, phys_size_t size, 00099 unsigned int align_order) 00100 { 00101 phys_addr_t addr; 00102 00103 addr = round_up(pool->start.addr, align_order); 00104 if (addr + size <= pool->end.addr) 00105 pool->start.addr = addr + size; 00106 else 00107 addr = PHYSMEM_ALLOC_ERR; 00108 00109 return addr; 00110 }
1.6.3