X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftbm_bufmgr_int.h;h=915cd1bdeac53d21d67bb40863d82a7ec1269bb2;hb=0685d37af53e41e7ad4daa7aea7c799c5642a198;hp=f4cc290b9bb39cdacf971fc564b331d8c0cb3feb;hpb=757968fc683975d882aadf1b45a54e214bbd4783;p=platform%2Fcore%2Fuifw%2Flibtbm.git diff --git a/src/tbm_bufmgr_int.h b/src/tbm_bufmgr_int.h index f4cc290..915cd1b 100644 --- a/src/tbm_bufmgr_int.h +++ b/src/tbm_bufmgr_int.h @@ -58,11 +58,18 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include #include +#include extern tbm_bufmgr gBufMgr; extern int b_dump_queue; extern int trace_mask; +#define C(b, m) (((b) >> (m)) & 0xFF) +#define B(c, s) ((((unsigned int)(c)) & 0xff) << (s)) +#define FOURCC(a, b, c, d) (B(d, 24) | B(c, 16) | B(b, 8) | B(a, 0)) +#define FOURCC_STR(id) C(id, 0), C(id, 8), C(id, 16), C(id, 24) +#define FOURCC_ID(str) FOURCC(((char*)str)[0], ((char*)str)[1], ((char*)str)[2], ((char*)str)[3]) + /* check flags */ #define RETURN_CHECK_FLAG(cond) {\ if ((cond)) {\ @@ -163,10 +170,36 @@ struct list_head { struct list_head *next; }; +typedef enum _tbm_module_type { + TBM_MODULE_TYPE_NONE, + TBM_MODULE_TYPE_HAL_TBM, + TBM_MODULE_TYPE_TBM_BACKEND, + TBM_MODULE_TYPE_BUFMGR_BACKEND, +} tbm_module_type; + +typedef struct _tbm_module { + tbm_module_type type; + + void *module_data; /* backend module */ + tbm_bufmgr_backend backend; /* bufmgr backend (will be DEPRECATED) */ + + tbm_backend_module *backend_module_data; /* backend module data */ + tbm_backend_bufmgr_data *bufmgr_data; /* backend data of the backend module */ + tbm_backend_bufmgr_func *bufmgr_func; /* backend functions for bufmgr */ + tbm_backend_bo_func *bo_func; /* backend functions for bo */ + + int use_hal_tbm; /* use hal-api-tbm */ + int auth_wl_socket_created; /* create wayland socket for authenticated drm_fd */ + int auth_fd; + hal_tbm_backend *hal_backend; /* hal-api-tbm backend */ + hal_tbm_bufmgr *hal_bufmgr; /* hal-api-tbm bufmgr */ +} tbm_module; + /** * @brief tbm_bo : buffer object of Tizen Buffer Manager */ struct _tbm_bo { + unsigned int magic; /* tbm bo magic number */ tbm_bufmgr bufmgr; /* tbm buffer manager */ int ref_cnt; /* ref count of bo */ int flags; /* TBM_BO_FLAGS :bo memory type */ @@ -178,6 +211,7 @@ struct _tbm_bo { unsigned int map_cnt; /* device map count */ tbm_backend_bo_data *bo_data; /* bo data of the backend module */ + int get_from_hal_surface; /* bo_data has be detroyed by hal backend */ }; /** @@ -185,7 +219,6 @@ struct _tbm_bo { * */ struct _tbm_bufmgr { - pthread_mutex_t lock; /* mutex lock */ int ref_count; /* reference count */ int fd; /* bufmgr fd */ tbm_bufmgr_bo_lock_type bo_lock_type; /* lock_type of bufmgr */ @@ -197,6 +230,10 @@ struct _tbm_bufmgr { struct list_head surf_queue_list; /* list of surface queues belonging to bufmgr */ struct list_head debug_key_list; /* list of debug data key list belonging to bufmgr */ + //TODO: tbm_module *module; + tbm_module *module; /* tbm module */ + + //TODO: replace this to data in tbm_module *module void *module_data; /* backend module */ tbm_bufmgr_backend backend; /* bufmgr backend (will be DEPRECATED) */ @@ -204,6 +241,12 @@ struct _tbm_bufmgr { tbm_backend_bufmgr_data *bufmgr_data; /* backend data of the backend module */ tbm_backend_bufmgr_func *bufmgr_func; /* backend functions for bufmgr */ tbm_backend_bo_func *bo_func; /* backend functions for bo */ + + int use_hal_tbm; /* use hal-api-tbm */ + int auth_wl_socket_created; /* create wayland socket for authenticated drm_fd */ + int auth_fd; + hal_tbm_backend *hal_backend; /* hal-api-tbm backend */ + hal_tbm_bufmgr *hal_bufmgr; /* hal-api-tbm bufmgr */ }; /** @@ -211,6 +254,8 @@ struct _tbm_bufmgr { * */ struct _tbm_surface { + unsigned int magic; /* tbm surface magic number */ + tbm_bufmgr bufmgr; /* tbm buffer manager */ tbm_surface_info_s info; /* tbm surface information */ @@ -231,16 +276,20 @@ struct _tbm_surface { struct list_head item_link; /* link of surface */ - struct list_head user_data_list; /* list of the user_date in surface */ + struct list_head user_data_list; /* list of the user_data in surface */ struct list_head debug_data_list; /* list of debug data */ + struct list_head destroy_funcs; /* list of destory callback function */ + struct { int x; int y; int width; int height; } damage; + + hal_tbm_surface *hal_surface; // hal_tbm_surface }; typedef struct { @@ -260,12 +309,18 @@ typedef struct { struct list_head item_link; } tbm_surface_debug_data; +typedef struct _tbm_surface_destroy_func_info { + tbm_surface_internal_destroy_handler destroy_func; + void *user_data; + + struct list_head item_link; +} tbm_surface_destroy_func_info; + tbm_bufmgr _tbm_bufmgr_get_bufmgr(void); int _tbm_bo_set_surface(tbm_bo bo, tbm_surface_h surface); int _tbm_surface_is_valid(tbm_surface_h surface); void _tbm_bo_free(tbm_bo bo); -/* functions for mutex */ int tbm_surface_internal_get_info(tbm_surface_h surface, int opt, tbm_surface_info_s *info, int map); void tbm_surface_internal_unmap(tbm_surface_h surface); @@ -287,4 +342,20 @@ tbm_bufmgr tbm_bufmgr_get(void); void _tbm_set_last_result(tbm_error_e err); -#endif /* _TBM_BUFMGR_INT_H_ */ +/* functions for mutex */ +void _tbm_bufmgr_mutex_lock(void); +void _tbm_bufmgr_mutex_unlock(void); + +tbm_bo tbm_bo_alloc_with_format(tbm_bufmgr bufmgr, int format, int bo_idx, int width, int bpp, int height, tbm_bo_memory_type flags, tbm_error_e *error); +tbm_bo tbm_bo_alloc_with_bo_data(tbm_bufmgr bufmgr, tbm_backend_bo_data *bo_data, int flags); + +/* tbm_module functions */ +tbm_module *tbm_module_load(int fd); +void tbm_module_unload(tbm_module *module); + +int tbm_module_bufmgr_get_capabilities(tbm_module *module, tbm_error_e *error); +tbm_error_e tbm_module_bufmgr_bind_native_display(tbm_module *module, void *native_display); +tbm_backend_bo_data *tbm_module_bufmgr_bo_alloc(tbm_module *module, tbm_bo bo, int size, int flags, tbm_error_e *error); +tbm_backend_bo_data *tbm_module_bufmgr_bo_alloc_with_format(tbm_module *module, int format, int bo_idx, int width, int height, int bpp, tbm_bo_memory_type flags, tbm_error_e *error); + +#endif /* _TBM_BUFMGR_INT_H_ */