Subversion Repositories Kolibri OS

Rev

Rev 889 | Rev 892 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
854 serge 1
 
2
{
3
  link_t buddy_link;        /**< link to the next free block inside one  order */
4
  count_t refcount;         /**< tracking of shared frames  */
5
  u32_t buddy_order;        /**< buddy system block order */
6
  void *parent;             /**< If allocated by slab, this points there */
7
} frame_t;
8
9
 
10
  SPINLOCK_DECLARE(lock);   /**< this lock protects everything below */
11
  pfn_t base;               /**< frame_no of the first frame in the frames array */
12
  count_t count;            /**< Size of zone */
13
14
 
15
  count_t free_count;       /**< number of free frame_t structures */
16
  count_t busy_count;       /**< number of busy frame_t structures */
17
18
 
19
  link_t order[21];
20
21
 
22
} zone_t;
23
24
 
889 serge 25
 
859 serge 26
{
27
    link_t  link;
889 serge 28
    link_t  adj;
29
    addr_t  base;
30
    size_t  size;
31
    void   *parent;
32
    u32_t   state;
33
}md_t;
34
854 serge 35
 
36
 
864 serge 37
#define PG_WRITE      2
889 serge 38
#define PG_USER       4
39
859 serge 40
 
889 serge 41
#define PG_UW         7
42
864 serge 43
 
889 serge 44
 
45
 
854 serge 46
#define FRAME_WIDTH  12
47
48
 
49
50
 
864 serge 51
 
52
# define KA2PA(x) (((addr_t) (x)) - OS_BASE)
53
54
 
854 serge 55
{
56
	if (!size)
57
		return 0;
58
  return (count_t) ((size - 1) >> FRAME_WIDTH) + 1;
59
}
60
61
 
62
{
63
  return (addr_t) (frame << FRAME_WIDTH);
64
}
65
66
 
67
{
68
	return (pfn_t) (addr >> FRAME_WIDTH);
69
};
70
71
 
72
73
 
889 serge 74
void  __fastcall frame_set_parent(pfn_t pfn, void *data);
75
76
 
77
78
 
79
 
859 serge 80
void   __fastcall core_free(addr_t frame);
889 serge 81
854 serge 82
 
83
84
 
859 serge 85
 
890 serge 86
864 serge 87
 
890 serge 88
 
89
90
 
91
void  __fastcall __export mem_free(void *mem) asm ("MemFree");
92