Subversion Repositories Kolibri OS

Rev

Rev 6296 | Rev 6935 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6296 Rev 6660
Line 1... Line 1...
1
#include 
1
#include 
2
#include 
2
#include 
-
 
3
#include 
-
 
4
#include 
3
#include 
5
#include 
4
#include 
6
#include 
5
#include "i915_drv.h"
7
#include "i915_drv.h"
6
#include "intel_drv.h"
8
#include "intel_drv.h"
7
#include 
9
#include 
Line 173... Line 175...
173
 
175
 
174
        return check_bytes8(start, value, bytes % 8);
176
        return check_bytes8(start, value, bytes % 8);
Line 175... Line -...
175
}
-
 
176
 
177
}
177
 
178
 
178
 
179
 
179
int dma_map_sg(struct device *dev, struct scatterlist *sglist,
180
int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
180
                           int nelems, int dir)
181
           enum dma_data_direction direction)
Line 181... Line 182...
181
{
182
{
182
    struct scatterlist *s;
183
    struct scatterlist *s;
183
    int i;
184
    int i;
184
 
185
 
185
    for_each_sg(sglist, s, nelems, i) {
186
    for_each_sg(sg, s, nents, i) {
186
        s->dma_address = (dma_addr_t)sg_phys(s);
187
        s->dma_address = (dma_addr_t)sg_phys(s);
Line 187... Line 188...
187
#ifdef CONFIG_NEED_SG_DMA_LENGTH
188
#ifdef CONFIG_NEED_SG_DMA_LENGTH
188
        s->dma_length  = s->length;
189
        s->dma_length  = s->length;
Line -... Line 190...
-
 
190
#endif
-
 
191
    }
-
 
192
 
-
 
193
    return nents;
-
 
194
}
Line 189... Line 195...
189
#endif
195
 
190
    }
196
void
191
 
197
dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
Line 259... Line 265...
259
        memcpy(p, src, len);
265
        memcpy(p, src, len);
260
    return p;
266
    return p;
261
}
267
}
Line 262... Line -...
262
 
-
 
263
 
-
 
264
#define KMAP_MAX    256
-
 
265
 
-
 
266
static struct mutex kmap_mutex;
-
 
267
static struct page* kmap_table[KMAP_MAX];
-
 
268
static int kmap_av;
-
 
269
static int kmap_first;
-
 
270
static void* kmap_base;
-
 
271
 
-
 
272
 
-
 
273
int kmap_init()
-
 
274
{
-
 
275
    kmap_base = AllocKernelSpace(KMAP_MAX*4096);
-
 
276
    if(kmap_base == NULL)
-
 
277
        return -1;
-
 
278
 
-
 
279
    kmap_av = KMAP_MAX;
-
 
280
    MutexInit(&kmap_mutex);
-
 
281
    return 0;
-
 
282
};
-
 
283
 
-
 
284
void *kmap(struct page *page)
-
 
285
{
-
 
286
    void *vaddr = NULL;
-
 
287
    int i;
-
 
288
 
-
 
289
    do
-
 
290
    {
-
 
291
        MutexLock(&kmap_mutex);
-
 
292
        if(kmap_av != 0)
-
 
293
        {
-
 
294
            for(i = kmap_first; i < KMAP_MAX; i++)
-
 
295
            {
-
 
296
                if(kmap_table[i] == NULL)
-
 
297
                {
-
 
298
                    kmap_av--;
-
 
299
                    kmap_first = i;
-
 
300
                    kmap_table[i] = page;
-
 
301
                    vaddr = kmap_base + (i<<12);
-
 
302
                    MapPage(vaddr,(addr_t)page,3);
-
 
303
                    break;
-
 
304
                };
-
 
305
            };
-
 
306
        };
-
 
307
        MutexUnlock(&kmap_mutex);
-
 
308
    }while(vaddr == NULL);
-
 
309
 
-
 
310
    return vaddr;
-
 
311
};
-
 
312
 
-
 
313
void *kmap_atomic(struct page *page) __attribute__ ((alias ("kmap")));
-
 
314
 
-
 
315
void kunmap(struct page *page)
-
 
316
{
-
 
317
    void *vaddr;
-
 
318
    int   i;
-
 
319
 
-
 
320
    MutexLock(&kmap_mutex);
-
 
321
 
-
 
322
    for(i = 0; i < KMAP_MAX; i++)
-
 
323
    {
-
 
324
        if(kmap_table[i] == page)
-
 
325
        {
-
 
326
            kmap_av++;
-
 
327
            if(i < kmap_first)
-
 
328
                kmap_first = i;
-
 
329
            kmap_table[i] = NULL;
-
 
330
            vaddr = kmap_base + (i<<12);
-
 
331
            MapPage(vaddr,0,0);
-
 
332
            break;
-
 
333
        };
-
 
334
    };
-
 
335
 
-
 
336
    MutexUnlock(&kmap_mutex);
-
 
337
};
-
 
338
 
-
 
339
void kunmap_atomic(void *vaddr)
-
 
340
{
-
 
341
    int i;
-
 
342
 
-
 
343
    MapPage(vaddr,0,0);
-
 
344
 
-
 
345
    i = (vaddr - kmap_base) >> 12;
-
 
346
 
-
 
347
    MutexLock(&kmap_mutex);
-
 
348
 
-
 
349
    kmap_av++;
-
 
350
    if(i < kmap_first)
-
 
351
        kmap_first = i;
-
 
352
    kmap_table[i] = NULL;
-
 
353
 
-
 
Line 354... Line 268...
354
    MutexUnlock(&kmap_mutex);
268
 
355
}
269
 
356
 
270
 
357
void msleep(unsigned int msecs)
271
void msleep(unsigned int msecs)
Line 682... Line 596...
682
 
596
 
683
    return argc;
597
    return argc;
Line 684... Line 598...
684
};
598
};
685
 
599
 
686
 
600
 
687
fb_get_options(const char *name, char **option)
601
int fb_get_options(const char *name, char **option)
688
{
602
{