CS350 COS
COS
Loading...
Searching...
No Matches
kmem.h
Go to the documentation of this file.
1
2#ifndef __KMEM_H__
3#define __KMEM_H__
4
5#include <sys/queue.h>
6#include <sys/spinlock.h>
7
8typedef struct Page {
9 uint32_t refcount; // Number of references
10 uint32_t pincount; // Pin count (HW, Software)
11 uint32_t flags; // Flags
14
15/*
16 * Page Allocator
17 */
20void *PAlloc_AllocPage();
21void PAlloc_Retain(void *pg);
22void PAlloc_Release(void *pg);
23
24/*
25 * XMem Memory Mapping Region
26 */
27typedef struct XMem XMem;
28
29void XMem_Init();
30XMem *XMem_New();
31void XMem_Destroy(XMem *xmem);
35
36/*
37 * Slab Allocator
38 */
39
40#define SLAB_NAMELEN 32
41
42typedef struct SlabElement {
45
46typedef struct Slab {
53 LIST_HEAD(SlabElementHead, SlabElement) freeList;
54 // Debugging
58 LIST_ENTRY(Slab) slabList;
60
61void Slab_Init(Slab *slab, const char *name, uintptr_t objsz, uintptr_t align);
62void *Slab_Alloc(Slab *slab) __attribute__((malloc));
63void Slab_Free(Slab *slab, void *obj);
64
65#define DECLARE_SLAB(_type) \
66 _type *_type##_Alloc(); \
67 void _type##_Free(_type *obj);
68
69#define DEFINE_SLAB(_type, _pool) \
70 _type *_type##_Alloc() { \
71 return (_type *)Slab_Alloc(_pool); \
72 } \
73 void _type##_Free(_type *obj) { \
74 Slab_Free(_pool, obj); \
75 }
76
77#endif /* __KMEM_H__ */
78
uintptr_t XMem_GetLength(XMem *xmem)
Definition: xmem.c:86
void PAlloc_Retain(void *pg)
Definition: palloc.c:248
uint32_t flags
Definition: kmem.h:11
void PAlloc_Release(void *pg)
Definition: palloc.c:265
#define SLAB_NAMELEN
Definition: kmem.h:40
uint32_t pincount
Definition: kmem.h:10
uint32_t _unused
Definition: kmem.h:12
void Slab_Free(Slab *slab, void *obj)
Definition: slab.c:135
void * PAlloc_AllocPage()
Definition: palloc.c:188
void XMem_Init()
Definition: xmem.c:28
XMem * XMem_New()
Definition: xmem.c:47
void * Slab_Alloc(Slab *slab) __attribute__((malloc))
Definition: slab.c:105
bool XMem_Allocate(XMem *xmem, uintptr_t length)
Definition: xmem.c:92
void PAlloc_AddRegion(uintptr_t start, uintptr_t len)
Definition: palloc.c:92
uintptr_t XMem_GetBase(XMem *xmem)
Definition: xmem.c:80
void XMem_Destroy(XMem *xmem)
Definition: xmem.c:63
void PAlloc_Init()
uint32_t refcount
Definition: kmem.h:9
void Slab_Init(Slab *slab, const char *name, uintptr_t objsz, uintptr_t align)
Definition: kmem.h:8
struct multiboot_mod_list __attribute__
uint64_t len
Definition: multiboot.h:2
void free(void *buf)
Definition: malloc.c:169
void * malloc(size_t sz)
Definition: malloc.c:160
LIST_ENTRY(SlabElement) free
Definition: kmem.h:46
uintptr_t align
Definition: kmem.h:48
uintptr_t objsz
Definition: kmem.h:47
Spinlock lock
Definition: kmem.h:50
LIST_ENTRY(Slab) slabList
uint64_t freeObjs
Definition: kmem.h:52
uint64_t frees
Definition: kmem.h:56
char name[SLAB_NAMELEN]
Definition: kmem.h:57
LIST_HEAD(SlabElementHead, SlabElement) freeList
XMem * xmem
Definition: kmem.h:49
uint64_t allocs
Definition: kmem.h:55
uint64_t objs
Definition: kmem.h:51
unsigned int uint32_t
Definition: types.h:12
uint64_t uintptr_t
Definition: types.h:16
unsigned long uint64_t
Definition: types.h:13
uintptr_t length
Definition: xmem.c:22
Definition: xmem.c:18