Statistics
| Branch: | Tag: | Revision:

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