Rev 1702 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1702 | Rev 1780 | ||
---|---|---|---|
Line 43... | Line 43... | ||
43 | /** Buddy system operations to be implemented by each implementation. */ |
43 | /** Buddy system operations to be implemented by each implementation. */ |
44 | struct buddy_system_operations { |
44 | struct buddy_system_operations { |
45 | link_t *(* find_buddy)(buddy_system_t *, link_t *); /**< Return pointer to left-side or right-side buddy for block passed as argument. */ |
45 | link_t *(* find_buddy)(buddy_system_t *, link_t *); /**< Return pointer to left-side or right-side buddy for block passed as argument. */ |
46 | link_t *(* bisect)(buddy_system_t *, link_t *); /**< Bisect the block passed as argument and return pointer to the new right-side buddy. */ |
46 | link_t *(* bisect)(buddy_system_t *, link_t *); /**< Bisect the block passed as argument and return pointer to the new right-side buddy. */ |
47 | link_t *(* coalesce)(buddy_system_t *, link_t *, link_t *); /**< Coalesce two buddies into a bigger block. */ |
47 | link_t *(* coalesce)(buddy_system_t *, link_t *, link_t *); /**< Coalesce two buddies into a bigger block. */ |
48 | void (*set_order)(buddy_system_t *, link_t *, __u8); /**< Set order of block passed as argument. */ |
48 | void (*set_order)(buddy_system_t *, link_t *, uint8_t); /**< Set order of block passed as argument. */ |
49 | __u8 (*get_order)(buddy_system_t *, link_t *); /**< Return order of block passed as argument. */ |
49 | uint8_t (*get_order)(buddy_system_t *, link_t *); /**< Return order of block passed as argument. */ |
50 | void (*mark_busy)(buddy_system_t *, link_t *); /**< Mark block as busy. */ |
50 | void (*mark_busy)(buddy_system_t *, link_t *); /**< Mark block as busy. */ |
51 | void (*mark_available)(buddy_system_t *, link_t *); /**< Mark block as available. */ |
51 | void (*mark_available)(buddy_system_t *, link_t *); /**< Mark block as available. */ |
52 | /** Find parent of block that has given order */ |
52 | /** Find parent of block that has given order */ |
53 | link_t *(* find_block)(buddy_system_t *, link_t *, __u8); |
53 | link_t *(* find_block)(buddy_system_t *, link_t *, uint8_t); |
54 | void (* print_id)(buddy_system_t *, link_t *); |
54 | void (* print_id)(buddy_system_t *, link_t *); |
55 | }; |
55 | }; |
56 | 56 | ||
57 | struct buddy_system { |
57 | struct buddy_system { |
58 | __u8 max_order; /**< Maximal order of block which can be stored by buddy system. */ |
58 | uint8_t max_order; /**< Maximal order of block which can be stored by buddy system. */ |
59 | link_t *order; |
59 | link_t *order; |
60 | buddy_system_operations_t *op; |
60 | buddy_system_operations_t *op; |
61 | void *data; /**< Pointer to be used by the implementation. */ |
61 | void *data; /**< Pointer to be used by the implementation. */ |
62 | }; |
62 | }; |
63 | 63 | ||
64 | extern void buddy_system_create(buddy_system_t *b, |
64 | extern void buddy_system_create(buddy_system_t *b, |
65 | __u8 max_order, |
65 | uint8_t max_order, |
66 | buddy_system_operations_t *op, void *data); |
66 | buddy_system_operations_t *op, void *data); |
67 | extern link_t *buddy_system_alloc(buddy_system_t *b, __u8 i); |
67 | extern link_t *buddy_system_alloc(buddy_system_t *b, uint8_t i); |
68 | extern bool buddy_system_can_alloc(buddy_system_t *b, __u8 order); |
68 | extern bool buddy_system_can_alloc(buddy_system_t *b, uint8_t order); |
69 | extern void buddy_system_free(buddy_system_t *b, link_t *block); |
69 | extern void buddy_system_free(buddy_system_t *b, link_t *block); |
70 | extern void buddy_system_structure_print(buddy_system_t *b, size_t elem_size); |
70 | extern void buddy_system_structure_print(buddy_system_t *b, size_t elem_size); |
71 | extern size_t buddy_conf_size(int max_order); |
71 | extern size_t buddy_conf_size(int max_order); |
72 | extern link_t *buddy_system_alloc_block(buddy_system_t *b, link_t *block); |
72 | extern link_t *buddy_system_alloc_block(buddy_system_t *b, link_t *block); |
73 | 73 |