17e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 2f91c8768670386683a281cc39141e21bdda9c97fKun Wang * Copyright (c) 2011 Intel Corporation. All Rights Reserved. 33f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang * Copyright (c) Imagination Technologies Limited, UK 47e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * 5f91c8768670386683a281cc39141e21bdda9c97fKun Wang * Permission is hereby granted, free of charge, to any person obtaining a 6f91c8768670386683a281cc39141e21bdda9c97fKun Wang * copy of this software and associated documentation files (the 7f91c8768670386683a281cc39141e21bdda9c97fKun Wang * "Software"), to deal in the Software without restriction, including 8f91c8768670386683a281cc39141e21bdda9c97fKun Wang * without limitation the rights to use, copy, modify, merge, publish, 9f91c8768670386683a281cc39141e21bdda9c97fKun Wang * distribute, sub license, and/or sell copies of the Software, and to 10f91c8768670386683a281cc39141e21bdda9c97fKun Wang * permit persons to whom the Software is furnished to do so, subject to 11f91c8768670386683a281cc39141e21bdda9c97fKun Wang * the following conditions: 123f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang * 13f91c8768670386683a281cc39141e21bdda9c97fKun Wang * The above copyright notice and this permission notice (including the 14f91c8768670386683a281cc39141e21bdda9c97fKun Wang * next paragraph) shall be included in all copies or substantial portions 15f91c8768670386683a281cc39141e21bdda9c97fKun Wang * of the Software. 163f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang * 17f91c8768670386683a281cc39141e21bdda9c97fKun Wang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18f91c8768670386683a281cc39141e21bdda9c97fKun Wang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19f91c8768670386683a281cc39141e21bdda9c97fKun Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20f91c8768670386683a281cc39141e21bdda9c97fKun Wang * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21f91c8768670386683a281cc39141e21bdda9c97fKun Wang * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22f91c8768670386683a281cc39141e21bdda9c97fKun Wang * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23f91c8768670386683a281cc39141e21bdda9c97fKun Wang * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun * 25bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang * Authors: 26bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang * Waldo Bastian <waldo.bastian@intel.com> 27bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang * 28bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang */ 29bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang 307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#ifndef _PSB_BUFFER_H_ 317e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define _PSB_BUFFER_H_ 327e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "psb_drv_video.h" 347e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang//#include "xf86mm.h" 367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 37dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun/* For TopazSC, it indicates the next frame should be skipped */ 38dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define SKIP_NEXT_FRAME 0x800 39dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun 407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct psb_buffer_s *psb_buffer_p; 417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 427e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* VPU = MSVDX */ 437e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef enum psb_buffer_type_e { 44bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang psb_bt_cpu_vpu = 0, /* Shared between CPU & Video PU */ 45bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang psb_bt_cpu_vpu_shared, /* CPU/VPU can access, and can shared by other process */ 46f31d5416a60f83e184b0906a7ec77ba021840531hding psb_bt_surface, /* linear surface */ 474a98dcd2483042879b67cee3cd51f5b4b2ea630aJason Hu psb_bt_surface_tt, /* surface allocated in TT*/ 48f31d5416a60f83e184b0906a7ec77ba021840531hding#ifdef PSBVIDEO_MSVDX_DEC_TILING 49f31d5416a60f83e184b0906a7ec77ba021840531hding psb_bt_mmu_tiling, /* Tiled surface */ 50f31d5416a60f83e184b0906a7ec77ba021840531hding psb_bt_surface_tiling, /* Tiled surface */ 51f31d5416a60f83e184b0906a7ec77ba021840531hding#endif 52bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang psb_bt_vpu_only, /* Only used by Video PU */ 53bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang psb_bt_cpu_only, /* Only used by CPU */ 547e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_bt_camera, /* memory is camera device memory */ 55cc2673c315517dd5a4bd294fb8707cf40c0d2088Fei Jiang psb_bt_imr, /* global RAR buffer */ 56cc2673c315517dd5a4bd294fb8707cf40c0d2088Fei Jiang psb_bt_imr_surface, /* memory is RAR device memory for protected surface*/ 57cc2673c315517dd5a4bd294fb8707cf40c0d2088Fei Jiang psb_bt_imr_slice, /* memory is RAR device memory for slice data */ 588ad9853613fb16f48b9eaf95b4688f55bef4b5f4SUN,Jing psb_bt_user_buffer, /* memory is from user buffers */ 598ad9853613fb16f48b9eaf95b4688f55bef4b5f4SUN,Jing psb_bt_cpu_vpu_cached /* Cached & CPU/VPU can access */ 607e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang} psb_buffer_type_t; 617e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef enum psb_buffer_status_e { 637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_bs_unfinished = 0, 647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_bs_ready, 657e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_bs_queued, 667e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_bs_abandoned 677e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang} psb_buffer_status_t; 687e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 697e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct psb_buffer_s { 707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang struct _WsbmBufferObject *drm_buf; 717e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang int wsbm_synccpu_flag; 727e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang uint64_t pl_flags; 732befccec034c13d34746a9e87149889d59ac767bFei Jiang 747e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_buffer_type_t type; 757e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang psb_buffer_status_t status; 767e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang uint32_t rar_handle; 777e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang unsigned int buffer_ofs; /* several buffers may share one BO (camera/RAR), and use offset to distinguish it */ 787e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang struct psb_buffer_s *next; 79e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang unsigned char *user_ptr; /* user pointer for user buffers */ 802befccec034c13d34746a9e87149889d59ac767bFei Jiang psb_driver_data_p driver_data; /* for RAR buffer release */ 81fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang uint32_t size; 82f31d5416a60f83e184b0906a7ec77ba021840531hding void *handle; 832c6fb3e28229a8b90c4a719caeb0e30b44dc0510Dale Stimson unsigned char *virtual_addr; 84367040d221af4e32e54530425f87fb576bc28ae0Li Zeng int unfence_flag; 857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang}; 867e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Create buffer 897e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */ 90dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunVAStatus psb_buffer_create(psb_driver_data_p driver_data, 91dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun unsigned int size, 92dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun psb_buffer_type_t type, 93dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun psb_buffer_p buf 94dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun ); 955ed159b49cff6b05d923bcf00d09c67ee2ce1f80hding/* flags: 0 indicates cache */ 965ed159b49cff6b05d923bcf00d09c67ee2ce1f80hding#define PSB_USER_BUFFER_UNCACHED (0x1) 975ed159b49cff6b05d923bcf00d09c67ee2ce1f80hding#define PSB_USER_BUFFER_WC (0x1<<1) 987e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 99fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang * Create buffer from user ptr 100fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang */ 101fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei JiangVAStatus psb_buffer_create_from_ub(psb_driver_data_p driver_data, 102fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang unsigned int size, 103fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang psb_buffer_type_t type, 104fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang psb_buffer_p buf, 1055ed159b49cff6b05d923bcf00d09c67ee2ce1f80hding void * vaddr, 1065ed159b49cff6b05d923bcf00d09c67ee2ce1f80hding unsigned int flags 107fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang ); 108fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang 109fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang/* 1107e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Setstatus Buffer 1117e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */ 112dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunint psb_buffer_setstatus(psb_buffer_p buf, uint32_t set_placement, uint32_t clr_placement); 1137e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 1147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 1157e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1167e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Reference buffer 1177e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */ 118dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunVAStatus psb_buffer_reference(psb_driver_data_p driver_data, 119dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun psb_buffer_p buf, 120dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun psb_buffer_p reference_buf 121dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun ); 12209998e330bbcbf835798128768e590772f5a5737Shuduo Sang/* 1233f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang * 12409998e330bbcbf835798128768e590772f5a5737Shuduo Sang */ 12509998e330bbcbf835798128768e590772f5a5737Shuduo SangVAStatus psb_kbuffer_reference(psb_driver_data_p driver_data, 1263f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang psb_buffer_p buf, 1273f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang int kbuf_handle 1283f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang ); 1297e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 1307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1317e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Suspend buffer 132dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun */ 1337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangvoid psb__suspend_buffer(psb_driver_data_p driver_data, object_buffer_p obj_buffer); 1347e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 1357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Destroy buffer 137dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun */ 138dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunvoid psb_buffer_destroy(psb_buffer_p buf); 1397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 1407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Map buffer 1427e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * 1437e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Returns 0 on success 1447e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */ 145e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wangint psb_buffer_map(psb_buffer_p buf, unsigned char **address /* out */); 1467e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 147437b3eda28a4bf098efa80598cab67f190275266Fei Jiangint psb_codedbuf_map_mangle( 148dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun VADriverContextP ctx, 149dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun object_buffer_p obj_buffer, 150dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun void **pbuf /* out */ 151437b3eda28a4bf098efa80598cab67f190275266Fei Jiang); 152437b3eda28a4bf098efa80598cab67f190275266Fei Jiang 153437b3eda28a4bf098efa80598cab67f190275266Fei Jiang 1547e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1557e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Unmap buffer 1567e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * 1577e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Returns 0 on success 1587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */ 159dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunint psb_buffer_unmap(psb_buffer_p buf); 1607e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 16161e067e1c2cfca5234c4a7fa2af351206b543904hding#if PSB_MFLD_DUMMY_CODE 1627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * Create buffer from camera device memory 1647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */ 165dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunVAStatus psb_buffer_create_camera(psb_driver_data_p driver_data, 166dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun psb_buffer_p buf, 167dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun int is_v4l2, 168dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun int id_or_ofs 169dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun ); 1707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang 1717e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* 1722befccec034c13d34746a9e87149889d59ac767bFei Jiang * Create one buffer from user buffer 1732befccec034c13d34746a9e87149889d59ac767bFei Jiang * id_or_ofs is CI frame ID (actually now is frame offset), or V4L2 buffer offset 1742befccec034c13d34746a9e87149889d59ac767bFei Jiang * user_ptr :virtual address of user buffer start. 1752befccec034c13d34746a9e87149889d59ac767bFei Jiang */ 176dc1209519284865899ca8d990b3a2c7dbca8ae08wangkunVAStatus psb_buffer_create_camera_from_ub(psb_driver_data_p driver_data, 177dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun psb_buffer_p buf, 178dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun int id_or_ofs, 179dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun int size, 180dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun const unsigned long * user_ptr); 18161e067e1c2cfca5234c4a7fa2af351206b543904hding#endif 182e9f11f100c212e9aeb194337ae43bbfea6a130dbKun WangVAStatus psb_buffer_reference_imr(psb_driver_data_p driver_data, 183e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang uint32_t imr_offset, 184e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang psb_buffer_p buf 1853f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang ); 186e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang 1877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#endif /* _PSB_BUFFER_H_ */ 188