Added function and enum for Checking buffer sharing capability
[platform/core/uifw/libtbm.git] / src / tbm_bufmgr.h
old mode 100755 (executable)
new mode 100644 (file)
index 041776e..9df6f45
@@ -34,12 +34,10 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include <tbm_type.h>
 #include <stdint.h>
-#include <tizen_error.h>
 
-
-/* this define will be removed when the capi-common is the version 0.1.1 */
-#ifndef TIZEN_ERROR_TBM
-#define TIZEN_ERROR_TBM                        -0x02830000
+/* tbm error base : this error base is same as TIZEN_ERROR_TBM in tizen_error.h */
+#ifndef TBM_ERROR_BASE
+#define TBM_ERROR_BASE                 -0x02830000
 #endif
 
 /**
@@ -49,23 +47,23 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 /**
  * @brief Definition for the tizen buffer manager
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 typedef struct _tbm_bufmgr * tbm_bufmgr;
 
 /**
  * @brief Definition for the tizen buffer object
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 typedef struct _tbm_bo *tbm_bo;
 /**
  * @brief Definition for the key associated with the buffer object
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 typedef uint32_t tbm_key;
 /**
  * @brief Definition for the file descripter of the system buffer manager
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 typedef int32_t tbm_fd;
 
@@ -74,38 +72,38 @@ typedef int32_t tbm_fd;
 
 /**
  * @brief Definition for the device type to get the default handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_DEVICE_DEFAULT   0
 /**
  * @brief Definition for the device type to get the virtual memory
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_DEVICE_CPU       1
 /**
  * @brief Definition for the device type to get the 2D memory handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_DEVICE_2D        2
 /**
  * @brief Definition for the device type to get the 3D memory handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_DEVICE_3D        3
 /**
  * @brief Definition for the device type to get the multimedia handle
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_DEVICE_MM        4
 
 /**
  * @brief Definition for the cache invalidate
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_CACHE_INV            0x01
 /**
  * @brief Definition for the cache clean
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_CACHE_CLN            0x02
 
@@ -113,23 +111,23 @@ typedef int32_t tbm_fd;
 
 /**
  * @brief Definition for the access option to read
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_OPTION_READ      (1 << 0)
 /**
  * @brief Definition for the access option to write
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_OPTION_WRITE     (1 << 1)
 /**
  * @brief Definition for the vendor specific option that depends on the backend
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 #define TBM_OPTION_VENDOR    (0xffff0000)
 
 /**
  * @brief tbm_bo_handle abstraction of the memory handle by TBM_DEVICE_TYPE
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 typedef union _tbm_bo_handle
 {
@@ -142,7 +140,7 @@ typedef union _tbm_bo_handle
 
 /**
  * @brief Enumeration of bo memory type
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  */
 enum TBM_BO_FLAGS
 {
@@ -160,11 +158,35 @@ enum TBM_BO_FLAGS
  */
 typedef enum
 {
-    TBM_ERROR_NONE  = TIZEN_ERROR_NONE,                    /**< Successful */
-    TBM_ERROR_BO_LOCK_FAILED  = TIZEN_ERROR_TBM|0x0101,    /**< tbm_bo lock failed */
-    TBM_ERROR_BO_MAP_FAILED  = TIZEN_ERROR_TBM|0x0102,     /**< tbm_bo map failed */
+    TBM_ERROR_NONE  = 0,                    /**< Successful */
+    TBM_BO_ERROR_GET_FD_FAILED = TBM_ERROR_BASE|0x0101,       /**< failed to get fd failed */
+    TBM_BO_ERROR_HEAP_ALLOC_FAILED = TBM_ERROR_BASE|0x0102,   /**< failed to allocate the heap memory */
+    TBM_BO_ERROR_LOAD_MODULE_FAILED = TBM_ERROR_BASE|0x0103,  /**< failed to load module*/
+    TBM_BO_ERROR_THREAD_INIT_FAILED = TBM_ERROR_BASE|0x0104,  /**< failed to initialize the pthread */
+    TBM_BO_ERROR_BO_ALLOC_FAILED = TBM_ERROR_BASE|0x0105,     /**< failed to allocate tbm_bo */
+    TBM_BO_ERROR_INIT_STATE_FAILED = TBM_ERROR_BASE|0x0106,   /**< failed to initialize the state of tbm_bo */
+    TBM_BO_ERROR_IMPORT_FAILED = TBM_ERROR_BASE|0x0107,       /**< failed to import the handle of tbm_bo */
+    TBM_BO_ERROR_IMPORT_FD_FAILED = TBM_ERROR_BASE|0x0108,    /**< failed to import fd of tbm_bo */
+    TBM_BO_ERROR_EXPORT_FAILED = TBM_ERROR_BASE|0x0109,       /**< failed to export the handle of the tbm_bo */
+    TBM_BO_ERROR_EXPORT_FD_FAILED = TBM_ERROR_BASE|0x01010,   /**< failed to export fd of tbm_bo */
+    TBM_BO_ERROR_GET_HANDLE_FAILED = TBM_ERROR_BASE|0x0111,   /**< failed to get the tbm_bo_handle */
+    TBM_BO_ERROR_LOCK_FAILED = TBM_ERROR_BASE|0x0112,         /**< failed to lock the tbm_bo */
+    TBM_BO_ERROR_MAP_FAILED = TBM_ERROR_BASE|0x0113,          /**< failed to map the tbm_bo to get the tbm_bo_handle */
+    TBM_BO_ERROR_UNMAP_FAILED = TBM_ERROR_BASE|0x0114,        /**< failed to unmap the tbm_bo */
+    TBM_BO_ERROR_SWAP_FAILED = TBM_ERROR_BASE|0x0115,         /**< failed to swap the tbm_bos */
+    TBM_BO_ERROR_DUP_FD_FAILED = TBM_ERROR_BASE|0x0116,       /**< failed to duplicate fd */
 } tbm_error_e;
 
+/**
+ * @brief Enumeration of tbm buffer manager capability.
+ * @since_tizen 2.4
+ */
+enum TBM_BUFMGR_CAPABILITY
+{
+    TBM_BUFMGR_CAPABILITY_NONE = 0,                 /**< Not Support capability*/
+    TBM_BUFMGR_CAPABILITY_SHARE_KEY = (1<<0),       /**< Support sharing buffer by tbm key */
+    TBM_BUFMGR_CAPABILITY_SHARE_FD = (1<<1),        /**< Support sharing buffer by tbm fd */
+};
 
 #ifdef __cplusplus
 extern "C" {
@@ -185,7 +207,7 @@ extern "C" {
  * BUFMGR_MAP_CACHE default is true\n
  * true : use map cache flushing\n
  * false : to use map cache flushing
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] fd : file descripter of the system buffer manager
  * @return a buffer manager
  * @retval #tbm_bufmgr
@@ -211,7 +233,7 @@ tbm_bufmgr tbm_bufmgr_init   (int fd);
 
 /**
  * @brief Deinitializes the buffer manager.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bufmgr : the buffer manager
  * @see tbm_bufmgr_init()
  * @par Example
@@ -220,7 +242,13 @@ tbm_bufmgr tbm_bufmgr_init   (int fd);
 
    int bufmgr_fd;
    tbm_bufmgr bufmgr;
+   tbm_error_e error;
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
+   if (!bufmgr)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ....
 
@@ -240,7 +268,7 @@ void       tbm_bufmgr_deinit (tbm_bufmgr bufmgr);
  * #TBM_BO_NONCACHABLE indecates non-cachable memory\n
  * #TBM_BO_WC indecates write-combine memory\n
  * #TBM_BO_VENDOR indecates vendor specific memory: it depends on the tbm backend
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bufmgr : the buffer manager
  * @param[in] size : the size of buffer object
  * @param[in] flags : the flags of memory type
@@ -253,9 +281,15 @@ void       tbm_bufmgr_deinit (tbm_bufmgr bufmgr);
    int bufmgr_fd;
    tbm_bufmgr bufmgr;
    tbm_bo;
+   tbm_error_e error;
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
    bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
+   if (!bo)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ....
 
@@ -266,7 +300,7 @@ tbm_bo        tbm_bo_alloc      (tbm_bufmgr bufmgr, int size, int flags);
 
 /**
  * @brief Increases the reference count of bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @return a buffer object
  * @retval #tbm_bo
@@ -295,7 +329,7 @@ tbm_bo        tbm_bo_ref        (tbm_bo bo);
 
 /**
  * @brief Decreases the reference count of bo
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @see tbm_bo_ref()
  * @see tbm_bo_alloc()
@@ -333,7 +367,7 @@ void          tbm_bo_unref      (tbm_bo bo);
  * #TBM_OPTION_READ indecates the accss option to read.\n
  * #TBM_OPTION_WRITE indecates the access option to write.\n
  * #TBM_OPTION_VENDOR indecates the vendor specific option that depends on the backend.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @param[in] device : the device type to get a handle
  * @param[in] opt : the option to access the buffer object
@@ -361,7 +395,7 @@ void          tbm_bo_unref      (tbm_bo bo);
    handle = tbm_bo_map (bo, TBM_DEVICE_2D, TBM_OPTION_READ|TBM_OPTION_WRITE);
    if (handle.ptr == NULL)
    {
-      error = get_last_result ();
+      error = tbm_get_last_error ();
       ...
    }
 
@@ -376,7 +410,7 @@ tbm_bo_handle tbm_bo_map        (tbm_bo bo, int device, int opt);
 
 /**
  * @brief Unmaps the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @return 1 if this function succeeds, otherwise 0.
  * @see tbm_bo_map()
@@ -414,7 +448,7 @@ int           tbm_bo_unmap      (tbm_bo bo);
  * #TBM_DEVICE_3D indecates the 3D memory handle.\n
  * #TBM_DEVICE_CPU indecates the virtual memory handle.\n
  * #TBM_DEVICE_MM indecates the multimedia handle.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @param[in] device : the device type to get a handle
  * @return the handle of the buffer object
@@ -427,6 +461,7 @@ int           tbm_bo_unmap      (tbm_bo bo);
    tbm_bufmgr bufmgr;
    tbm_bo bo;
    tbm_bo_handle handle;
+   tbm_error_e error;
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
    bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
@@ -434,6 +469,11 @@ int           tbm_bo_unmap      (tbm_bo bo);
    ...
 
    handle = tbm_bo_get_handle (bo, TBM_DEVICE_2D);
+   if (handle.ptr == NULL)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ...
 
@@ -446,7 +486,7 @@ tbm_bo_handle tbm_bo_get_handle (tbm_bo bo, int device);
 /**
  * @brief Exports the buffer object by key.
  * @details The tbm_bo can be exported to the anther process with the unique key associated with the the tbm_bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @return key associated with the buffer object
  * @retval #tbm_key
@@ -459,10 +499,16 @@ tbm_bo_handle tbm_bo_get_handle (tbm_bo bo, int device);
    tbm_bufmgr bufmgr;
    tbm_bo;
    tbm_key key;
+   tbm_error_e error;
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
    bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
    key = tbm_bo_export (bo);
+   if (key == 0)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ...
 
@@ -475,7 +521,8 @@ tbm_key  tbm_bo_export     (tbm_bo bo);
 /**
  * @brief Exports the buffer object by fd.
  * @details The tbm_bo can be exported to the anther process with the unique fd associated with the the tbm_bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You must release the fd using close().
  * @param[in] bo : the buffer object
  * @return fd associated with the buffer object
  * @retval #tbm_fd
@@ -488,10 +535,16 @@ tbm_key  tbm_bo_export     (tbm_bo bo);
    tbm_fd bo_fd;
    tbm_bufmgr bufmgr;
    tbm_bo;
+   tbm_error_e error;
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
    bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
    bo_fd = tbm_bo_export (bo);
+   if (bo_fd == 0)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ...
 
@@ -504,7 +557,7 @@ tbm_fd tbm_bo_export_fd (tbm_bo bo);
 /**
  * @brief Imports the buffer object associated with the key.
  * @details The reference count of the tbm_bo is 1.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bufmgr : the buffer manager
  * @param[in] key : the key associated with the buffer object
  * @return a buffer object
@@ -518,11 +571,17 @@ tbm_fd tbm_bo_export_fd (tbm_bo bo);
    int bo_key;
    tbm_bufmgr bufmgr;
    tbm_bo;
+   tbm_error_e error;
 
    ...
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
    bo = tbm_bo_import (key);
+   if (bo == NULL)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ...
 
@@ -535,7 +594,8 @@ tbm_bo        tbm_bo_import     (tbm_bufmgr bufmgr, tbm_key key);
 /**
  * @brief Imports the buffer object associated with the fd.
  * @details The reference count of the tbm_bo is 1.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @remarks You must release the fd using close().
  * @param[in] bufmgr : the buffer manager
  * @param[in] fd : the fd associated with the buffer object
  * @return a buffer object
@@ -549,11 +609,17 @@ tbm_bo        tbm_bo_import     (tbm_bufmgr bufmgr, tbm_key key);
    tbm_fd bo_fd;
    tbm_bufmgr bufmgr;
    tbm_bo bo;
+   tbm_error_e error;
 
    ...
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
-   bo = tbm_bo_import_fd (bo_fd);
+   bo_fd = tbm_bo_import_fd (bo_fd);
+   if (bo_fd == 0)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ...
 
@@ -565,7 +631,7 @@ tbm_bo        tbm_bo_import_fd  (tbm_bufmgr bufmgr, tbm_fd fd);
 
 /**
  * @brief Gets the size of a bo.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @return 1 if this function succeeds, otherwise 0.
  * @see tbm_bo_alloc()
@@ -592,7 +658,7 @@ int           tbm_bo_size       (tbm_bo bo);
 
 /**
  * @brief Gets the state where the buffer object is locked.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @return 1 if this bo is locked, otherwise 0.
  * @see tbm_bo_map()
@@ -623,7 +689,7 @@ int           tbm_bo_locked     (tbm_bo bo);
 
 /**
  * @brief Swaps the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo1 : the buffer object
  * @param[in] bo2 : the buffer object
  * @return 1 if this function succeeds, otherwise 0.
@@ -636,6 +702,7 @@ int           tbm_bo_locked     (tbm_bo bo);
    tbm_bo bo1;
    tbm_bo bo2;
    int ret;
+   tbm_error_e error;
 
    bufmgr = tbm_bufmgr_init (bufmgr_fd);
    bo1 = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
@@ -644,6 +711,11 @@ int           tbm_bo_locked     (tbm_bo bo);
    ...
 
    ret = tbm_bo_swap (bo1, bo2);
+   if (ret == 0)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
 
    ...
 
@@ -657,7 +729,7 @@ int           tbm_bo_swap       (tbm_bo bo1, tbm_bo bo2);
 
 /**
  * @brief Called when the user data is deleted in buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] user_data User_data to be passed to callback function
  * @pre The callback must be registered using tbm_bo_add_user_data().\n
  * tbm_bo_delete_user_data() must be called to invoke this callback.
@@ -668,7 +740,7 @@ typedef void (*tbm_data_free)(void *user_data);
 
 /**
  * @brief Adds a user_data to the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @param[in] key : the key associated with the user_data
  * @param[in] data_free_func : the function pointer to free the user_data
@@ -723,7 +795,7 @@ int tbm_bo_add_user_data    (tbm_bo bo, unsigned long key, tbm_data_free data_fr
 
 /**
  * @brief Deletes the user_data in the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @param[in] key : the key associated with the user_date
  * @return 1 if this function succeeds, otherwise 0.
@@ -774,7 +846,7 @@ int tbm_bo_delete_user_data (tbm_bo bo, unsigned long key);
 
 /**
  * @brief Sets a user_date to the buffer object.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @param[in] key : the key associated with the user_date
  * @param[in] data : a pointer of the user_data
@@ -826,7 +898,7 @@ int tbm_bo_set_user_data    (tbm_bo bo, unsigned long key, void* data);
 
 /**
  * @brief Gets a user_data from the buffer object with the key.
- * @since_tizen 2.3
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  * @param[in] bo : the buffer object
  * @param[in] key : the key associated with the user_date
  * @param[out] data : to get the user data
@@ -876,6 +948,68 @@ int tbm_bo_set_user_data    (tbm_bo bo, unsigned long key, void* data);
  */
 int tbm_bo_get_user_data    (tbm_bo bo, unsigned long key, void** data);
 
+/**
+ * @brief Gets the latest tbm_error.
+ * @since_tizen 2.4
+ * @return the latest tbm_error
+ * @par Example
+   @code
+   #include <tbm_bufmgr.h>
+
+   int bufmgr_fd;
+   tbm_bufmgr bufmgr;
+   tbm_bo bo;
+   tbm_bo_handle handle;
+   tbm_error_e error;
+
+   bufmgr = tbm_bufmgr_init (bufmgr_fd);
+   bo = tbm_bo_alloc (bufmgr, 128 * 128, TBM_BO_DEFAULT);
+   if (!bo)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
+
+   ...
+
+   handle = tbm_bo_map (bo, TBM_DEVICE_2D, TBM_OPTION_READ|TBM_OPTION_WRITE);
+   if (handle.ptr == NULL)
+   {
+      error = tbm_get_last_error ();
+      ...
+   }
+
+   ...
+
+   tbm_bo_unmap (bo);
+   tbm_bo_unref (bo);
+   tbm_bufmgr_deinit (bufmgr);
+   @endcode
+ */
+tbm_error_e tbm_get_last_error    (void);
+
+/**
+ * @brief Gets the tbm buffer capability.
+ * @since_tizen 2.4
+ * @param[in] bufmgr : the buffer manager
+ * @return the tbm bufmgr capability
+ * @par Example
+   @code
+   #include <tbm_bufmgr.h>
+
+   int bufmgr_fd;
+   tbm_bufmgr bufmgr;
+   unsigned int capability;
+
+   bufmgr = tbm_bufmgr_init (bufmgr_fd);
+
+   capability = tbm_bufmgr_get_capability (bufmgr);
+
+   tbm_bufmgr_deinit (bufmgr);
+   @endcode
+ */
+unsigned int tbm_bufmgr_get_capability (tbm_bufmgr bufmgr);
+
 #ifdef __cplusplus
 }
 #endif