initial commit
[pfinal.git] / Routix / include / routix / kalloc.h
blob5cc7414a7cd167ec342b41593a008b1a5d29f28c
1 /*! \brief Uso interno de malloc y free
2 */
4 #include <routix/allocwrap.h>
5 #include <routix/system.h>
8 #ifndef __ALLOC_KERNEL
9 #define __ALLOC_KERNEL
11 #define PAGINA_SIZE 4096
13 void *malloc_page(void);
14 void *__malloc(unsigned nbytes);
15 void __free (void *ap);
20 // La variable __ALLOC_WRAPPER_ON esta definida en routix/allocwrap.h y se
21 // utiliza para habilitar y deshabilitar el wrapper
22 // Con las macros siguientes trapeamos todas las llamadas a malloc y free que
23 // no han sido portadas al wrapper (aparecerán como tipo UNKNOWN).
25 #ifdef __ALLOC_WRAPPER_ON
26 // Wrapper activo (debug)
27 #define malloc(nbytes) (MALLOC(MM_WRAPPER_UNKNOWN,nbytes))
28 #define free(ap) (FREE(MM_WRAPPER_UNKNOWN,ap))
30 #else
31 // Wrapper inactivo (máxima performance)
32 #define malloc(nbytes) __malloc(nbytes)
33 #define free(ap) __free(ap)
35 #endif
40 typedef long Align;
42 typedef union header {
43 struct {
44 union header *ptr;
45 unsigned size;
46 } s;
47 Align x;
48 } Header;
50 Header *morecore(void);
53 // Funciones
54 dword kmem_free (void);
55 addr_t get_free_page(void);
56 addr_t kmalloc_page(void);
57 int kfree_page(addr_t direccion);
59 struct user_page *umalloc_page ( word flags, addr_t vdir, addr_t cr3);
60 struct user_page *ufree_page (struct user_page *aux);
61 void inicializacion_kmalloc(int memoria_fisica, int memoria_kernel);
63 #endif