Changes in kernel/generic/include/mm/frame.h [26aafe8:1a313f7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/frame.h
r26aafe8 r1a313f7 50 50 typedef uint8_t frame_flags_t; 51 51 52 #define FRAME_NONE 0x0 52 53 /** Convert the frame address to kernel VA. */ 53 54 #define FRAME_KA 0x1 … … 58 59 /** Do not reserve / unreserve memory. */ 59 60 #define FRAME_NO_RESERVE 0x8 61 /** Allocate a frame which can be identity-mapped. */ 62 #define FRAME_LOWMEM 0x10 63 /** Allocate a frame which cannot be identity-mapped. */ 64 #define FRAME_HIGHMEM 0x20 60 65 61 66 typedef uint8_t zone_flags_t; 62 67 68 #define ZONE_NONE 0x0 63 69 /** Available zone (free for allocation) */ 64 #define ZONE_AVAILABLE 0x 070 #define ZONE_AVAILABLE 0x1 65 71 /** Zone is reserved (not available for allocation) */ 66 #define ZONE_RESERVED 0x 872 #define ZONE_RESERVED 0x2 67 73 /** Zone is used by firmware (not available for allocation) */ 68 #define ZONE_FIRMWARE 0x10 74 #define ZONE_FIRMWARE 0x4 75 /** Zone contains memory that can be identity-mapped */ 76 #define ZONE_LOWMEM 0x8 77 /** Zone contains memory that cannot be identity-mapped */ 78 #define ZONE_HIGHMEM 0x10 69 79 70 /** Currently there is no equivalent zone flags 71 for frame flags */ 72 #define FRAME_TO_ZONE_FLAGS(frame_flags) 0 80 /** Mask of zone bits that must be matched exactly. */ 81 #define ZONE_EF_MASK 0x7 82 83 #define FRAME_TO_ZONE_FLAGS(ff) \ 84 ((((ff) & FRAME_LOWMEM) ? ZONE_LOWMEM : \ 85 (((ff) & FRAME_HIGHMEM) ? ZONE_HIGHMEM : \ 86 ZONE_LOWMEM /* | ZONE_HIGHMEM */)) | \ 87 ZONE_AVAILABLE) 88 89 #define ZONE_FLAGS_MATCH(zf, f) \ 90 (((((zf) & ZONE_EF_MASK)) == ((f) & ZONE_EF_MASK)) && \ 91 (((zf) & ~ZONE_EF_MASK) & (f))) 73 92 74 93 typedef struct { 75 94 size_t refcount; /**< Tracking of shared frames */ 76 uint8_t buddy_order; /**< Buddy system block order */77 95 link_t buddy_link; /**< Link to the next free block inside 78 96 one order */ 79 97 void *parent; /**< If allocated by slab, this points there */ 98 uint8_t buddy_order; /**< Buddy system block order */ 80 99 } frame_t; 81 100 … … 129 148 } 130 149 131 NO_TRACE static inline bool zone_flags_available(zone_flags_t flags)132 {133 return ((flags & (ZONE_RESERVED | ZONE_FIRMWARE)) == 0);134 }135 136 150 #define IS_BUDDY_ORDER_OK(index, order) \ 137 151 ((~(((sysarg_t) -1) << (order)) & (index)) == 0) … … 146 160 147 161 extern void frame_init(void); 162 extern bool frame_adjust_zone_bounds(bool, uintptr_t *, size_t *); 148 163 extern void *frame_alloc_generic(uint8_t, frame_flags_t, size_t *); 149 164 extern void *frame_alloc(uint8_t, frame_flags_t); … … 161 176 extern void frame_mark_unavailable(pfn_t, size_t); 162 177 extern size_t zone_conf_size(size_t); 178 extern pfn_t zone_external_conf_alloc(size_t); 163 179 extern bool zone_merge(size_t, size_t); 164 180 extern void zone_merge_all(void);
Note:
See TracChangeset
for help on using the changeset viewer.