ion_fbcdc_alloc.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*************************************************************************/ /*!
  2. @Title ion allocations for compressed framebuffers
  3. @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved
  4. @License Strictly Confidential.
  5. */ /**************************************************************************/
  6. #ifndef ION_FBCDC_ALLOC_H
  7. #define ION_FBCDC_ALLOC_H
  8. #define ION_IOC_FBCDC_ALLOC 1
  9. struct ion_fbcdc_alloc_data {
  10. /* in */
  11. size_t len;
  12. size_t align;
  13. unsigned int heap_id_mask;
  14. unsigned int flags;
  15. size_t tiles;
  16. /* out */
  17. int handle;
  18. };
  19. #if !defined(__KERNEL__)
  20. static
  21. int ion_fbcdc_alloc(int fd, size_t len, size_t align, unsigned int heap_mask,
  22. unsigned int flags, size_t tiles, int *handlefd) __attribute__((unused));
  23. static
  24. int ion_fbcdc_alloc(int fd, size_t len, size_t align, unsigned int heap_mask,
  25. unsigned int flags, size_t tiles, int *handlefd)
  26. {
  27. int err;
  28. struct ion_fbcdc_alloc_data payload = {
  29. .len = len,
  30. .align = align,
  31. .heap_id_mask = heap_mask,
  32. .flags = flags,
  33. .tiles = tiles,
  34. };
  35. struct ion_custom_data data = {
  36. .cmd = ION_IOC_FBCDC_ALLOC,
  37. .arg = (unsigned long)&payload,
  38. };
  39. if (handlefd == NULL)
  40. return -EINVAL;
  41. err = ioctl(fd, ION_IOC_CUSTOM, &data);
  42. if (err < 0)
  43. return err;
  44. /* The handle returned is a shared dma_buf.*/
  45. *handlefd = payload.handle;
  46. return err;
  47. }
  48. static int ion_custom_alloc(int fd, size_t len, size_t align, unsigned int heap_mask,
  49. unsigned int flags, size_t tiles, int *handlefd)
  50. {
  51. #if defined(PVR_ANDROID_ION_FBCDC_ALLOC)
  52. return ion_fbcdc_alloc(fd, len, align, heap_mask, flags, tiles, handlefd);
  53. #else /* defined(PVR_ANDROID_ION_FBCDC_ALLOC) */
  54. PVR_UNREFERENCED_PARAMETER(tiles);
  55. return ion_alloc_fd(fd, len, align, heap_mask, flags, handlefd);
  56. #endif /* defined(PVR_ANDROID_ION_FBCDC_ALLOC) */
  57. }
  58. #endif /* !defined(__KERNEL__) */
  59. #endif /* ION_FBCDC_ALLOC_H */