mm.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /* SPDX-License-Identifier: LGPL-2.1 OR BSD-3-Clause */
  2. /*
  3. * Copyright (c) 2018, Chips&Media
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are met:
  8. *
  9. * 1. Redistributions of source code must retain the above copyright notice, this
  10. * list of conditions and the following disclaimer.
  11. * 2. Redistributions in binary form must reproduce the above copyright notice,
  12. * this list of conditions and the following disclaimer in the documentation
  13. * and/or other materials provided with the distribution.
  14. *
  15. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  16. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  17. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  18. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
  19. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  20. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  21. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  22. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  23. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  24. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25. */
  26. #ifndef __CNM_VIDEO_MEMORY_MANAGEMENT_H__
  27. #define __CNM_VIDEO_MEMORY_MANAGEMENT_H__
  28. typedef struct _jmem_info_struct {
  29. unsigned long total_pages;
  30. unsigned long alloc_pages;
  31. unsigned long free_pages;
  32. unsigned long page_size;
  33. } jmem_info_t;
  34. #if defined(WIN32) || defined(WIN64)
  35. #if (_MSC_VER == 1200)
  36. typedef _int64 vmem_key_t;
  37. #else
  38. typedef unsigned long long vmem_key_t;
  39. #endif
  40. #else
  41. typedef unsigned long long vmem_key_t;
  42. #endif
  43. #define VMEM_PAGE_SIZE (16*1024UL)
  44. #define MAKE_KEY(_a, _b) (((vmem_key_t)_a)<<32 | _b)
  45. #define KEY_TO_VALUE(_key) (_key>>32)
  46. typedef struct page_struct {
  47. int pageno;
  48. unsigned long addr;
  49. int used;
  50. int alloc_pages;
  51. int first_pageno;
  52. } page_t;
  53. typedef struct avl_node_struct {
  54. vmem_key_t key;
  55. int height;
  56. page_t* page;
  57. struct avl_node_struct* left;
  58. struct avl_node_struct* right;
  59. } avl_node_t;
  60. typedef struct _jpeg_mm_struct {
  61. avl_node_t* free_tree;
  62. avl_node_t* alloc_tree;
  63. page_t* page_list;
  64. int num_pages;
  65. unsigned long base_addr;
  66. unsigned long mem_size;
  67. void* mutex;
  68. int free_page_count;
  69. int alloc_page_count;
  70. } jpeg_mm_t;
  71. #if defined (__cplusplus)
  72. extern "C" {
  73. #endif
  74. extern int
  75. jmem_init(
  76. jpeg_mm_t* mm,
  77. unsigned long addr,
  78. unsigned long size
  79. );
  80. extern int
  81. jmem_exit(
  82. jpeg_mm_t* mm
  83. );
  84. extern unsigned long
  85. jmem_alloc(
  86. jpeg_mm_t* mm,
  87. int size,
  88. unsigned long pid
  89. );
  90. extern int
  91. jmem_free(
  92. jpeg_mm_t* mm,
  93. unsigned long ptr,
  94. unsigned long pid
  95. );
  96. extern int
  97. jmem_get_info(
  98. jpeg_mm_t* mm,
  99. jmem_info_t* info
  100. );
  101. #if defined (__cplusplus)
  102. }
  103. #endif
  104. #endif /* __CNM_VIDEO_MEMORY_MANAGEMENT_H__ */