fix: corrected time conversion on alarm/sleep syscall
[lunaix-os.git] / lunaix-os / includes / lunaix / mm / cake.h
index 6a3aa392238e38cfb358f59849dd4adc007161f6..18d67e0bf3659bae32488122ef6c930aa88d8fc8 100644 (file)
@@ -7,24 +7,30 @@
 
 #define PILE_CACHELINE 1
 
+struct cake_pile;
+
+typedef void (*pile_cb)(struct cake_pile*, void*);
+
 struct cake_pile
 {
     struct llist_header piles;
     struct llist_header full;
     struct llist_header partial;
     struct llist_header free;
-    unsigned int offset;
-    unsigned int piece_size;
-    unsigned int cakes_count;
-    unsigned int alloced_pieces;
-    unsigned int pieces_per_cake;
-    unsigned int pg_per_cake;
+    u32_t offset;
+    u32_t piece_size;
+    u32_t cakes_count;
+    u32_t alloced_pieces;
+    u32_t pieces_per_cake;
+    u32_t pg_per_cake;
     char pile_name[PILE_NAME_MAXLEN];
+
+    pile_cb ctor;
 };
 
 typedef unsigned int piece_index_t;
 
-#define EO_FREE_PIECE (-1)
+#define EO_FREE_PIECE ((u32_t)-1)
 
 struct cake_s
 {
@@ -49,6 +55,9 @@ cake_new_pile(char* name,
               unsigned int pg_per_cake,
               int options);
 
+void
+cake_set_constructor(struct cake_pile* pile, pile_cb ctor);
+
 /**
  * @brief 拿一块儿蛋糕
  *
@@ -73,4 +82,9 @@ cake_init();
 void
 cake_export();
 
+/********** some handy constructor ***********/
+
+void
+cake_ctor_zeroing(struct cake_pile* pile, void* piece);
+
 #endif /* __LUNAIX_VALLOC_H */