Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2340 Serge 1
 
2
#include 
3
#include "i915_drm.h"
4
#include "i915_drv.h"
5
#include "intel_drv.h"
6
#include "bitmap.h"
7
8
 
2342 Serge 9
{
10
/*
11
 *
12
 *
13
 *
14
*/
15
    __DestroyObject(bitmap);
16
};
17
18
 
2340 Serge 19
20
 
21
22
 
23
{
24
    int ret;
25
26
 
27
28
 
29
};
30
31
 
32
 
2342 Serge 33
{
2340 Serge 34
    struct drm_i915_gem_object *obj;
35
36
 
37
    u32         handle;
38
    u32         width;
2342 Serge 39
    u32         height;
40
    u32         size;
2340 Serge 41
    u32         pitch;
42
    void       *uaddr;
43
44
 
45
46
 
47
    pbitmap->data   = NULL;
48
49
 
2342 Serge 50
    height = pbitmap->height;
51
52
 
2340 Serge 53
        goto err1;
54
55
 
56
//    printf("%s %d\n",__FUNCTION__, handle);
2342 Serge 57
2340 Serge 58
 
59
        goto err1;
60
61
 
62
    bitmap->handle = handle;
2342 Serge 63
    bitmap->header.destroy = destroy_bitmap;
64
    bitmap->obj    = NULL;
65
66
 
67
    if( bitmap == NULL)
2340 Serge 68
        goto err1;
69
70
 
71
72
 
73
74
 
75
//    printf("pitch %d size %d\n", pitch, size);
2342 Serge 76
2340 Serge 77
 
78
    if (obj == NULL)
79
        goto err2;
80
81
 
82
    if (ret)
83
        goto err3;
84
85
 
86
    if( uaddr == NULL)
87
        goto err4;
88
    else
89
    {
90
        u32_t *src, *dst;
91
        int count;
92
93
 
94
95
 
96
        dst =  &((u32_t*)page_tabs)[(u32_t)uaddr >> 12];
97
        count = size/4096;
98
99
 
100
        {
101
            *dst++ = (0xFFFFF000 & *src++) | 0x207 ; // map as shared page
102
        };
103
    }
104
105
 
106
    bitmap->width  = width;
107
    bitmap->height = height;
108
    bitmap->pitch  = pitch;
109
    bitmap->gaddr  = obj->gtt_offset;
110
    bitmap->uaddr  = uaddr;
111
    bitmap->obj    = obj;
112
    bitmap->header.destroy = destroy_bitmap;
2342 Serge 113
2340 Serge 114
 
2342 Serge 115
    pbitmap->handle = handle;
2340 Serge 116
    pbitmap->data   = uaddr;
117
2342 Serge 118
 
119
//            __FUNCTION__, handle, pitch, obj->gtt_offset, uaddr);
120
121
 
2340 Serge 122
123
 
124
//    drm_gem_object_unpin;
125
err3:
126
//    drm_gem_object_unreference(&obj->base);
127
err2:
128
    free_handle(&bm_man, handle);
129
    __DestroyObject(bitmap);
2342 Serge 130
err1:
2340 Serge 131
    return -1;
132
133
 
134
135
 
136
 
137
{
138
    u32* data;
139
140
 
141
    if(data)
142
    {
143
        int i;
144
145
 
146
            data[i] = ++i;
147
        data[i] = 0;
148
149
 
150
        man->next  = 0;
151
        man->avail = count;
152
        man->count = count;
153
154
 
155
    };
156
    return -ENOMEM;
157
};
158
159
 
160
{
161
    u32 handle = 0;
162
163
 
164
    {
165
        handle = man->next;
166
        man->next = man->table[handle];
167
        man->avail--;
168
        handle++;
169
    }
170
    return handle;
171
};
172
173
 
174
{
175
    int ret = -1;
176
177
 
178
179
 
180
    {
181
        man->table[handle] = man->next;
182
        man->next = handle;
183
        man->avail++;
184
        ret = 0;
185
    };
186
187
 
188
};
189