Subversion Repositories Kolibri OS

Rev

Rev 3263 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include <drm/drmP.h>
  2. #include <drm/i915_drm.h>
  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. };
  60.