- return size;
-}
-
-tbm_bo
-tbm_bo_ref(tbm_bo bo)
-{
- TBM_RETURN_VAL_IF_FAIL(_tbm_bo_is_valid(bo), NULL);
-
- tbm_bufmgr bufmgr = bo->bufmgr;
-
- pthread_mutex_lock(&bufmgr->lock);
-
- _tbm_bo_ref(bo);
-
- pthread_mutex_unlock(&bufmgr->lock);
-
- return bo;
-}
-
-void
-tbm_bo_unref(tbm_bo bo)
-{
- TBM_RETURN_IF_FAIL(_tbm_bo_is_valid(bo));
-
- tbm_bufmgr bufmgr = bo->bufmgr;
-
- pthread_mutex_lock(&bufmgr->lock);
-
- _tbm_bo_unref(bo);
-
- pthread_mutex_unlock(&bufmgr->lock);
-}
-
-tbm_bo
-tbm_bo_alloc(tbm_bufmgr bufmgr, int size, int flags)
-{
- TBM_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr) && (size > 0), NULL);
-
- tbm_bo bo = NULL;
- void *bo_priv = NULL;
-
- bo = calloc(1, sizeof(struct _tbm_bo));
- if (!bo) {
- _tbm_set_last_result(TBM_BO_ERROR_HEAP_ALLOC_FAILED);
- return NULL;
- }
-
- bo->bufmgr = bufmgr;
-
- pthread_mutex_lock(&bufmgr->lock);
-
- bo_priv = bufmgr->backend->bo_alloc(bo, size, flags);
- if (!bo_priv) {
- _tbm_set_last_result(TBM_BO_ERROR_BO_ALLOC_FAILED);
- free(bo);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }
-
- bo->ref_cnt = 1;
- bo->flags = flags;
- bo->priv = bo_priv;
-
- if (!bufmgr->use_2_0) {
- bo->tgl_key = INITIAL_KEY;
- bo->default_handle.u32 = 0;
-
- /* init bo state */
- if (!_tbm_bo_init_state(bo, CACHE_OP_CREATE)) {
- _tbm_set_last_result(TBM_BO_ERROR_INIT_STATE_FAILED);
- _tbm_bo_unref(bo);
- pthread_mutex_unlock(&bufmgr->lock);
- return NULL;
- }
- }
-
- LIST_INITHEAD(&bo->user_data_list);
-
- LIST_ADD(&bo->item_link, &bufmgr->bo_list);
-
- pthread_mutex_unlock(&bufmgr->lock);
-
- return bo;
-}
-
-tbm_bo
-tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key)
-{
- TBM_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL);
-
- tbm_bo bo = NULL;
- tbm_bo bo2 = NULL;
- tbm_bo tmp = NULL;
- void *bo_priv = NULL;
-
- pthread_mutex_lock(&bufmgr->lock);
-
- if (!bufmgr->use_2_0) {
- /* find bo in list */
- if (!LIST_IS_EMPTY(&bufmgr->bo_list)) {
- LIST_FOR_EACH_ENTRY_SAFE(bo2, tmp, &bufmgr->bo_list, item_link) {
- if (bo2->tgl_key == key) {
- DBG("[libtbm:%d] "
- "find bo(%p, ref:%d key:%d) in list\n",
- getpid(), bo2, bo2->ref_cnt, bo2->tgl_key);
-
- bo2->ref_cnt++;
- pthread_mutex_unlock(&bufmgr->lock);
- return bo2;
- }