kgsl_pool.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2016-2017,2019,2021 The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef __KGSL_POOL_H
  7. #define __KGSL_POOL_H
  8. #ifdef CONFIG_QCOM_KGSL_USE_SHMEM
  9. static inline void kgsl_probe_page_pools(void) { }
  10. static inline void kgsl_exit_page_pools(void) { }
  11. static inline u32 kgsl_get_page_size(size_t size, unsigned int align)
  12. {
  13. u32 page_size;
  14. for (page_size = rounddown_pow_of_two(size); page_size > PAGE_SIZE; page_size >>= 1)
  15. if ((align >= ilog2(page_size)) && (size >= page_size))
  16. return page_size;
  17. return PAGE_SIZE;
  18. }
  19. static inline int kgsl_pool_page_count_get(void *data, u64 *val)
  20. {
  21. return 0;
  22. }
  23. static inline int kgsl_pool_reserved_get(void *data, u64 *val)
  24. {
  25. return 0;
  26. }
  27. static inline int kgsl_pool_size_total(void)
  28. {
  29. return 0;
  30. }
  31. #else
  32. /**
  33. * kgsl_pool_free_page - Frees the page and adds it back to pool/system memory
  34. * @page: Pointer to page struct that needs to be freed
  35. */
  36. void kgsl_pool_free_page(struct page *page);
  37. /**
  38. * kgsl_get_page_size - Get supported pagesize
  39. * @size: Size of the page
  40. * @align: Desired alignment of the size
  41. *
  42. * Return largest available page size from pools that can be used to meet
  43. * given size and alignment requirements
  44. */
  45. u32 kgsl_get_page_size(size_t size, unsigned int align);
  46. /**
  47. * kgsl_pool_alloc_page - Allocate a page of requested size
  48. * @page_size: Size of the page to be allocated
  49. * @pages: pointer to hold list of pages, should be big enough to hold
  50. * requested page
  51. * @len: Length of array pages
  52. *
  53. * Return total page count on success and negative value on failure
  54. */
  55. int kgsl_pool_alloc_page(int *page_size, struct page **pages,
  56. unsigned int pages_len, unsigned int *align,
  57. struct device *dev);
  58. /**
  59. * kgsl_pool_free_pages - Free pages in an pages array
  60. * @pages: pointer to an array of page structs
  61. * @page_count: Number of entries in @pages
  62. *
  63. * Free the pages by collapsing any physical adjacent pages.
  64. * Pages are added back to the pool, if pool has sufficient space
  65. * otherwise they are given back to system.
  66. */
  67. void kgsl_pool_free_pages(struct page **pages, unsigned int page_count);
  68. /* Debugfs node functions */
  69. int kgsl_pool_reserved_get(void *data, u64 *val);
  70. int kgsl_pool_page_count_get(void *data, u64 *val);
  71. /**
  72. * kgsl_pool_size_total - Return the number of pages in all kgsl page pools
  73. */
  74. int kgsl_pool_size_total(void);
  75. /**
  76. * kgsl_probe_page_pools - Initialize the memory pools
  77. */
  78. void kgsl_probe_page_pools(void);
  79. /**
  80. * kgsl_exit_page_pools - Free outstanding pooled memory
  81. */
  82. void kgsl_exit_page_pools(void);
  83. #endif
  84. #endif /* __KGSL_POOL_H */