Subversion Repositories Kolibri OS

Rev

Rev 3263 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3260 Serge 1
#include 
2
#include 
3
#include "i915_drv.h"
4
#include "intel_drv.h"
5
 
6
 
7
struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags)
8
{
9
    struct file *filep;
10
    int count;
11
 
12
    filep = malloc(sizeof(*filep));
13
 
14
    if(unlikely(filep == NULL))
15
        return ERR_PTR(-ENOMEM);
16
 
17
    count = size / PAGE_SIZE;
18
 
19
    filep->pages = kzalloc(sizeof(struct page *) * count, 0);
20
    if(unlikely(filep->pages == NULL))
21
    {
22
        kfree(filep);
23
        return ERR_PTR(-ENOMEM);
24
    };
25
 
26
    filep->count     = count;
27
    filep->allocated = 0;
28
    filep->vma       = NULL;
29
 
30
//    dbgprintf("%s file %p pages %p count %d\n",
31
//              __FUNCTION__,filep, filep->pages, filep->pages);
32
 
33
    return filep;
34
}
35
 
36
struct page *shmem_read_mapping_page_gfp(struct file *filep,
37
                                         pgoff_t index, gfp_t gfp)
38
{
39
    struct page *page;
40
 
41
//    dbgprintf("%s, file %p index %d\n", __FUNCTION__, filep, index);
42
 
43
    if(unlikely(index >= filep->count))
44
        return ERR_PTR(-EINVAL);
45
 
46
    page = filep->pages[index];
47
 
48
    if(unlikely(page == NULL))
49
    {
50
        page = (struct page *)AllocPage();
51
 
52
        if(unlikely(page == NULL))
53
            return ERR_PTR(-ENOMEM);
54
 
55
        filep->pages[index] = page;
56
    };
57
 
58
    return page;
59
};