Changeset e49e234 in mainline for kernel/generic/include/mm/frame.h
- Timestamp:
- 2009-02-27T11:32:31Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c1f7f6ea
- Parents:
- 5f0f29ce
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/frame.h
r5f0f29ce re49e234 40 40 #include <adt/list.h> 41 41 #include <mm/buddy.h> 42 #include <synch/spinlock.h> 42 43 #include <arch/mm/page.h> 43 44 #include <arch/mm/frame.h> … … 68 69 typedef uint8_t zone_flags_t; 69 70 71 /** Available zone (free for allocation) */ 72 #define ZONE_AVAILABLE 0x00 70 73 /** Zone is reserved (not available for allocation) */ 71 #define ZONE_RESERVED 0x0874 #define ZONE_RESERVED 0x08 72 75 /** Zone is used by firmware (not available for allocation) */ 73 #define ZONE_FIRMWARE 0x1076 #define ZONE_FIRMWARE 0x10 74 77 75 78 /** Currently there is no equivalent zone flags 76 79 for frame flags */ 77 80 #define FRAME_TO_ZONE_FLAGS(frame_flags) 0 81 82 typedef struct { 83 count_t refcount; /**< Tracking of shared frames */ 84 uint8_t buddy_order; /**< Buddy system block order */ 85 link_t buddy_link; /**< Link to the next free block inside 86 one order */ 87 void *parent; /**< If allocated by slab, this points there */ 88 } frame_t; 89 90 typedef struct { 91 pfn_t base; /**< Frame_no of the first frame 92 in the frames array */ 93 count_t count; /**< Size of zone */ 94 count_t free_count; /**< Number of free frame_t 95 structures */ 96 count_t busy_count; /**< Number of busy frame_t 97 structures */ 98 zone_flags_t flags; /**< Type of the zone */ 99 100 frame_t *frames; /**< Array of frame_t structures 101 in this zone */ 102 buddy_system_t *buddy_system; /**< Buddy system for the zone */ 103 } zone_t; 104 105 /* 106 * The zoneinfo.lock must be locked when accessing zoneinfo structure. 107 * Some of the attributes in zone_t structures are 'read-only' 108 */ 109 typedef struct { 110 SPINLOCK_DECLARE(lock); 111 count_t count; 112 zone_t info[ZONES_MAX]; 113 } zones_t; 114 115 extern zones_t zones; 78 116 79 117 static inline uintptr_t PFN2ADDR(pfn_t frame) … … 99 137 } 100 138 139 static inline bool zone_flags_available(zone_flags_t flags) 140 { 141 return ((flags & (ZONE_RESERVED | ZONE_FIRMWARE)) == 0); 142 } 143 101 144 #define IS_BUDDY_ORDER_OK(index, order) \ 102 145 ((~(((unative_t) -1) << (order)) & (index)) == 0) … … 118 161 extern void frame_reference_add(pfn_t); 119 162 163 extern count_t find_zone(pfn_t frame, count_t count, count_t hint); 120 164 extern count_t zone_create(pfn_t, count_t, pfn_t, zone_flags_t); 121 165 extern void *frame_get_parent(pfn_t, count_t);
Note:
See TracChangeset
for help on using the changeset viewer.