Subversion Repositories Kolibri OS

Rev

Rev 1066 | 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 */
2971 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 */
2971 Serge 17
} frame_t;
854 serge 18
19
 
2971 Serge 20
 
1066 serge 21
{
22
  SPINLOCK_DECLARE(lock);     /**< this lock protects everything below */
2971 Serge 23
  pfn_t    base;              /**< frame_no of the first frame in the frames array */
24
  count_t  count;             /**< Size of zone */
25
854 serge 26
 
2971 Serge 27
  count_t  free_count;        /**< number of free frame_t structures */
28
  count_t  busy_count;        /**< number of busy frame_t structures */
29
854 serge 30
 
2971 Serge 31
  link_t   order[21];
32
854 serge 33
 
2971 Serge 34
} zone_t;
854 serge 35
36
 
889 serge 37
 
859 serge 38
{
39
    link_t  link;
889 serge 40
    link_t  adj;
41
    addr_t  base;
42
    size_t  size;
43
    void   *parent;
44
    u32_t   state;
45
}md_t;
46
854 serge 47
 
48
 
2971 Serge 49
#define PG_WRITE        2
50
#define PG_USER         4
51
859 serge 52
 
2971 Serge 53
#define PG_UW           7
54
864 serge 55
 
889 serge 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)
2971 Serge 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