root / xseg / xtypes / xobj.h @ 597a1115
History | View | Annotate | Download (1.1 kB)
1 | fb7ae048 | Filippos Giannakos | #ifndef __XOBJ_H__
|
---|---|---|---|
2 | fb7ae048 | Filippos Giannakos | #define __XOBJ_H__
|
3 | fb7ae048 | Filippos Giannakos | |
4 | fb7ae048 | Filippos Giannakos | #include <sys/util.h> |
5 | fb7ae048 | Filippos Giannakos | #include <xtypes/xlock.h> |
6 | fb7ae048 | Filippos Giannakos | #include <xtypes/xheap.h> |
7 | fb7ae048 | Filippos Giannakos | #include <xtypes/domain.h> |
8 | fb7ae048 | Filippos Giannakos | |
9 | fb7ae048 | Filippos Giannakos | #define X_ALLOC ((uint32_t) (1 << 0)) |
10 | fb7ae048 | Filippos Giannakos | |
11 | 0bf9fcf7 | Filippos Giannakos | struct xobject_header {
|
12 | fb7ae048 | Filippos Giannakos | XPTR_TYPE(struct xseg_object_handler) obj_h;
|
13 | fb7ae048 | Filippos Giannakos | }; |
14 | fb7ae048 | Filippos Giannakos | |
15 | fb7ae048 | Filippos Giannakos | struct xobject {
|
16 | fb7ae048 | Filippos Giannakos | uint32_t magic; |
17 | fb7ae048 | Filippos Giannakos | uint64_t size; |
18 | fb7ae048 | Filippos Giannakos | xptr next; |
19 | fb7ae048 | Filippos Giannakos | }; |
20 | fb7ae048 | Filippos Giannakos | |
21 | fb7ae048 | Filippos Giannakos | struct xobject_h {
|
22 | 597a1115 | Filippos Giannakos | struct xlock lock;
|
23 | fb7ae048 | Filippos Giannakos | uint32_t magic; |
24 | fb7ae048 | Filippos Giannakos | uint64_t obj_size; |
25 | fb7ae048 | Filippos Giannakos | uint32_t flags; |
26 | fb7ae048 | Filippos Giannakos | XPTR_TYPE(void) container;
|
27 | fb7ae048 | Filippos Giannakos | xptr heap; |
28 | fb7ae048 | Filippos Giannakos | xptr allocated; |
29 | 597a1115 | Filippos Giannakos | uint64_t nr_allocated; |
30 | 597a1115 | Filippos Giannakos | uint64_t allocated_space; |
31 | fb7ae048 | Filippos Giannakos | xptr list; |
32 | 597a1115 | Filippos Giannakos | uint64_t nr_free; |
33 | fb7ae048 | Filippos Giannakos | }; |
34 | fb7ae048 | Filippos Giannakos | |
35 | fb7ae048 | Filippos Giannakos | void *xobj_get_obj(struct xobject_h * obj_h, uint32_t flags); |
36 | fb7ae048 | Filippos Giannakos | void xobj_put_obj(struct xobject_h * obj_h, void *ptr); |
37 | fb7ae048 | Filippos Giannakos | int xobj_alloc_obj(struct xobject_h * obj_h, uint64_t nr); |
38 | fb7ae048 | Filippos Giannakos | int xobj_handler_init(struct xobject_h *obj_h, void *container, |
39 | fb7ae048 | Filippos Giannakos | uint32_t magic, uint64_t size, struct xheap *heap);
|
40 | fb7ae048 | Filippos Giannakos | |
41 | 0bf9fcf7 | Filippos Giannakos | //TODO
|
42 | 0bf9fcf7 | Filippos Giannakos | //xobj_handler_destroy()
|
43 | 0bf9fcf7 | Filippos Giannakos | //releases allocated pages
|
44 | 4494b184 | Filippos Giannakos | //
|
45 | 4494b184 | Filippos Giannakos | //maybe we need lock free versions of get/put obj
|
46 | 4494b184 | Filippos Giannakos | //
|
47 | 4494b184 | Filippos Giannakos | //also an
|
48 | 4494b184 | Filippos Giannakos | //unsigned long xobj_get_objs(obj_h, flags, uint64_t nr, void **buf)
|
49 | 4494b184 | Filippos Giannakos | //which will put nr objects in buf
|
50 | fb7ae048 | Filippos Giannakos | #endif |