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