Changeset c520034 in mainline for kernel/generic/include/mm/frame.h
- Timestamp:
- 2011-12-31T18:19:35Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 295f658, 77c2b02, 96cd5b4
- Parents:
- 852052d (diff), 22f0561 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/frame.h
r852052d rc520034 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 : ZONE_NONE)) | \ 86 (ZONE_AVAILABLE | ZONE_LOWMEM /* | ZONE_HIGHMEM */)) 87 88 #define ZONE_FLAGS_MATCH(zf, f) \ 89 (((((zf) & ZONE_EF_MASK)) == ((f) & ZONE_EF_MASK)) && \ 90 (((zf) & ~ZONE_EF_MASK) & (f))) 73 91 74 92 typedef struct { 75 93 size_t refcount; /**< Tracking of shared frames */ 76 uint8_t buddy_order; /**< Buddy system block order */77 94 link_t buddy_link; /**< Link to the next free block inside 78 95 one order */ 79 96 void *parent; /**< If allocated by slab, this points there */ 97 uint8_t buddy_order; /**< Buddy system block order */ 80 98 } frame_t; 81 99 … … 129 147 } 130 148 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 149 #define IS_BUDDY_ORDER_OK(index, order) \ 137 150 ((~(((sysarg_t) -1) << (order)) & (index)) == 0) … … 146 159 147 160 extern void frame_init(void); 161 extern bool frame_adjust_zone_bounds(bool, uintptr_t *, size_t *); 148 162 extern void *frame_alloc_generic(uint8_t, frame_flags_t, size_t *); 149 163 extern void *frame_alloc(uint8_t, frame_flags_t); … … 161 175 extern void frame_mark_unavailable(pfn_t, size_t); 162 176 extern size_t zone_conf_size(size_t); 177 extern pfn_t zone_external_conf_alloc(size_t); 163 178 extern bool zone_merge(size_t, size_t); 164 179 extern void zone_merge_all(void);
Note:
See TracChangeset
for help on using the changeset viewer.