TIOVX User Guide
tivx_kernels_target_utils.h
1 /*
2 *
3 * Copyright (c) 2017 Texas Instruments Incorporated
4 *
5 * All rights reserved not granted herein.
6 *
7 * Limited License.
8 *
9 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10 * license under copyrights and patents it now or hereafter owns or controls to make,
11 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12 * terms herein. With respect to the foregoing patent license, such license is granted
13 * solely to the extent that any such patent is necessary to Utilize the software alone.
14 * The patent license shall not apply to any combinations which include this software,
15 * other than combinations with devices manufactured by or for TI ("TI Devices").
16 * No hardware patent is licensed hereunder.
17 *
18 * Redistributions must preserve existing copyright notices and reproduce this license
19 * (including the above copyright notice and the disclaimer and (if applicable) source
20 * code license limitations below) in the documentation and/or other materials provided
21 * with the distribution
22 *
23 * Redistribution and use in binary form, without modification, are permitted provided
24 * that the following conditions are met:
25 *
26 * * No reverse engineering, decompilation, or disassembly of this software is
27 * permitted with respect to any software provided in binary form.
28 *
29 * * any redistribution and use are licensed by TI for use only with TI Devices.
30 *
31 * * Nothing shall obligate TI to provide you with source code for the software
32 * licensed and provided to you in object code.
33 *
34 * If software source code is provided to you, modification and redistribution of the
35 * source code are permitted provided that the following conditions are met:
36 *
37 * * any redistribution and use of the source code, including any resulting derivative
38 * works, are licensed by TI for use only with TI Devices.
39 *
40 * * any redistribution and use of any object code compiled from the source code
41 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42 *
43 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44 *
45 * may be used to endorse or promote products derived from this software without
46 * specific prior written permission.
47 *
48 * DISCLAIMER.
49 *
50 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59 * OF THE POSSIBILITY OF SUCH DAMAGE.
60 *
61 */
62 
63 #ifndef TIVX_KERNELS_TARGET_UTILS_
64 #define TIVX_KERNELS_TARGET_UTILS_
65 
66 #include <ti/vxlib/src/common/VXLIB_bufParams.h>
67 #include <tivx_kernels_common_utils.h>
68 #include <TI/tivx_obj_desc.h>
69 
70 #ifdef __cplusplus
71 extern "C" {
72 #endif
73 
74 #define MAX2(a, b) (((a) > (b)) ? (a) : (b))
75 #define MAX3(a, b, c) (MAX2((MAX2((a), (b))), (c)))
76 #define MAX4(a, b, c, d) (MAX2((MAX3((a), (b), (c))), (d)))
77 #define MAX5(a, b, c, d, e) (MAX2((MAX4((a), (b), (c), (d))), (e)))
78 #define MAX6(a, b, c, d, e, f) (MAX2((MAX5((a), (b), (c), (d), (e))), (f)))
79 #define MAX7(a, b, c, d, e, f, g) (MAX2((MAX6((a), (b), (c), (d), (e), (f))), (g)))
80 #define MAX8(a, b, c, d, e, f, g, h) (MAX2((MAX7((a), (b), (c), (d), (e), (f), (g))), (h)))
81 #define MAX9(a, b, c, d, e, f, g, h, i) (MAX2((MAX8((a), (b), (c), (d), (e), (f), (g), (h))), (i)))
82 #define MAX10(a, b, c, d, e, f, g, h, i, j) (MAX2((MAX9((a), (b), (c), (d), (e), (f), (g), (h), (i))), (j)))
83 
84 typedef void (*tivxTargetKernel_Fxn) (void);
85 
86 typedef struct {
87  tivxTargetKernel_Fxn add_kernel;
88  tivxTargetKernel_Fxn remove_kernel;
89 } Tivx_Target_Kernel_List;
90 
96 void tivxRegisterTargetKernels(const Tivx_Target_Kernel_List *kernel_list, uint32_t num_kernels);
97 
103 void tivxUnRegisterTargetKernels(const Tivx_Target_Kernel_List *kernel_list, uint32_t num_kernels);
104 
110 static inline vx_uint32 tivxComputePatchOffset(
112 
127 static inline vx_status tivxCheckNullParams(
128  tivx_obj_desc_t *obj_desc[], uint16_t num_params,
129  uint16_t max_params);
130 
153 void tivxInitBufParams(
154  const tivx_obj_desc_image_t *obj_desc,
155  VXLIB_bufParams2D_t buf_params[]);
156 
165  const tivx_obj_desc_image_t *obj_desc0,
166  const tivx_obj_desc_image_t *obj_desc1,
167  VXLIB_bufParams2D_t buf_params0[],
168  VXLIB_bufParams2D_t buf_params1[]);
169 
177  const tivx_obj_desc_image_t *obj_desc,
178  void *target_ptr[],
179  uint8_t *addr[]);
180 
188  const tivx_obj_desc_image_t *obj_desc0,
189  const tivx_obj_desc_image_t *obj_desc1,
190  void *target_ptr0[],
191  void *target_ptr1[],
192  uint8_t *addr0[],
193  uint8_t *addr1[]);
194 
200 void tivxReserveC66xL2MEM(void);
201 
202 
209 
215 {
216  return ((vx_uint32)addr->stride_y * (y / addr->step_y)) +
217  ((vx_uint32)addr->stride_x * (x / addr->step_x));
218 }
219 
224  tivx_obj_desc_t *obj_desc[], uint16_t num_params,
225  uint16_t max_params)
226 {
227  vx_status status = (vx_status)VX_SUCCESS;
228  uint32_t i;
229 
230  if (num_params != max_params)
231  {
232  status = (vx_status)VX_FAILURE;
233  }
234  else
235  {
236  for (i = 0U; i < max_params; i ++)
237  {
238  if (NULL == obj_desc[i])
239  {
240  status = (vx_status)VX_FAILURE;
241  break;
242  }
243  }
244  }
245  return status;
246 }
247 
248 #ifdef __cplusplus
249 }
250 #endif
251 
252 #endif
Image object descriptor as placed in shared memory.
Object descriptor.
void tivxRegisterTargetKernels(const Tivx_Target_Kernel_List *kernel_list, uint32_t num_kernels)
Registers the kernels list on the target side.
VX_SUCCESS
void tivxUnRegisterTargetKernels(const Tivx_Target_Kernel_List *kernel_list, uint32_t num_kernels)
Unregisters the kernels list on the target side.
vx_status tivxKernelsTargetUtilsAssignTargetNameDsp(char *target_name)
Function to assign platform-specific DSP target name.
vx_enum vx_status
static vx_uint32 tivxComputePatchOffset(vx_uint32 x, vx_uint32 y, const vx_imagepatch_addressing_t *addr)
Computes the patch offset into the image.
void tivxInitTwoBufParams(const tivx_obj_desc_image_t *obj_desc0, const tivx_obj_desc_image_t *obj_desc1, VXLIB_bufParams2D_t buf_params0[], VXLIB_bufParams2D_t buf_params1[])
A utility API to initialize two VXLIB bufparams for a kernel where width and height should be equal...
Interface to object descriptor.
void tivxSetPointerLocation(const tivx_obj_desc_image_t *obj_desc, void *target_ptr[], uint8_t *addr[])
A utility API that sets the pointer to the correct location based on the minimum of the valid rectang...
void tivxSetTwoPointerLocation(const tivx_obj_desc_image_t *obj_desc0, const tivx_obj_desc_image_t *obj_desc1, void *target_ptr0[], void *target_ptr1[], uint8_t *addr0[], uint8_t *addr1[])
A utility API that sets the pointer to the correct location based on the minimum of the valid rectang...
void tivxReserveC66xL2MEM(void)
Reserve L2MEM within C66x for usage with BAM framework.
VX_FAILURE
uint32_t vx_uint32
static vx_status tivxCheckNullParams(tivx_obj_desc_t *obj_desc[], uint16_t num_params, uint16_t max_params)
Check number of parameters and NULL pointers.
void tivxInitBufParams(const tivx_obj_desc_image_t *obj_desc, VXLIB_bufParams2D_t buf_params[])
A utility API to initialize VXLIB buf parameters based on the provided object descriptor.