1
0

mem.c 980 B

123456789101112131415161718192021222324252627282930313233
  1. #include "mem.h"
  2. void memory_copy(u8 *source, u8 *dest, int nbytes) {
  3. int i;
  4. for (i = 0; i < nbytes; i++) {
  5. *(dest + i) = *(source + i);
  6. }
  7. }
  8. void memory_set(u8 *dest, u8 val, u32 len) {
  9. u8 *temp = (u8 *)dest;
  10. for ( ; len != 0; len--) *temp++ = val;
  11. }
  12. /* This should be computed at link time, but a hardcoded
  13. * value is fine for now. Remember that our kernel starts
  14. * at 0x1000 as defined on the Makefile */
  15. u32 free_mem_addr = 0x10000;
  16. /* Implementation is just a pointer to some free memory which
  17. * keeps growing */
  18. u32 kmalloc(u32 size, int align, u32 *phys_addr) {
  19. /* Pages are aligned to 4K, or 0x1000 */
  20. if (align == 1 && (free_mem_addr & 0xFFFFF000)) {
  21. free_mem_addr &= 0xFFFFF000;
  22. free_mem_addr += 0x1000;
  23. }
  24. /* Save also the physical address */
  25. if (phys_addr) *phys_addr = free_mem_addr;
  26. u32 ret = free_mem_addr;
  27. free_mem_addr += size; /* Remember to increment the pointer */
  28. return ret;
  29. }