Subversion Repositories Kolibri OS

Rev

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