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 #include <TI/tivx_debug.h>
70 #include <TI/tivx_target_kernel.h>
71 
72 #ifdef __cplusplus
73 extern "C" {
74 #endif
75 
80 #define VX_PRINT_KERNEL(zone, kernel, message, ...) do { tivx_print_object(((vx_enum)zone), tivxGetTargetKernelInstanceDebugZonemask(kernel), "[%s:%u] " message, __FUNCTION__, __LINE__, ## __VA_ARGS__); } while (1 == 0)
81 
82 #define MAX2(a, b) (((a) > (b)) ? (a) : (b))
83 #define MAX3(a, b, c) (MAX2((MAX2((a), (b))), (c)))
84 #define MAX4(a, b, c, d) (MAX2((MAX3((a), (b), (c))), (d)))
85 #define MAX5(a, b, c, d, e) (MAX2((MAX4((a), (b), (c), (d))), (e)))
86 #define MAX6(a, b, c, d, e, f) (MAX2((MAX5((a), (b), (c), (d), (e))), (f)))
87 #define MAX7(a, b, c, d, e, f, g) (MAX2((MAX6((a), (b), (c), (d), (e), (f))), (g)))
88 #define MAX8(a, b, c, d, e, f, g, h) (MAX2((MAX7((a), (b), (c), (d), (e), (f), (g))), (h)))
89 #define MAX9(a, b, c, d, e, f, g, h, i) (MAX2((MAX8((a), (b), (c), (d), (e), (f), (g), (h))), (i)))
90 #define MAX10(a, b, c, d, e, f, g, h, i, j) (MAX2((MAX9((a), (b), (c), (d), (e), (f), (g), (h), (i))), (j)))
91 
92 typedef void (*tivxTargetKernel_Fxn) (void);
93 
94 typedef struct {
95  tivxTargetKernel_Fxn add_kernel;
96  tivxTargetKernel_Fxn remove_kernel;
97 } Tivx_Target_Kernel_List;
98 
104 void tivxRegisterTargetKernels(const Tivx_Target_Kernel_List *kernel_list, uint32_t num_kernels);
105 
111 void tivxUnRegisterTargetKernels(const Tivx_Target_Kernel_List *kernel_list, uint32_t num_kernels);
112 
118 static inline vx_uint32 tivxComputePatchOffset(
120 
135 static inline vx_status tivxCheckNullParams(
136  tivx_obj_desc_t *obj_desc[], uint16_t num_params,
137  uint16_t max_params);
138 
161 void tivxInitBufParams(
162  const tivx_obj_desc_image_t *obj_desc,
163  VXLIB_bufParams2D_t buf_params[]);
164 
172  const tivx_obj_desc_image_t *obj_desc,
173  void *target_ptr[],
174  uint8_t *addr[]);
175 
176 #if defined(BUILD_BAM)
177 
182 void tivxReserveC66xL2MEM(void);
183 #endif
184 
185 #if defined(TARGET_DSP) || defined(PC)
186 
192 void tivxSetTwoPointerLocation(
193  const tivx_obj_desc_image_t *obj_desc0,
194  const tivx_obj_desc_image_t *obj_desc1,
195  void *target_ptr0[],
196  void *target_ptr1[],
197  uint8_t *addr0[],
198  uint8_t *addr1[]);
199 #endif /* #if defined(TARGET_DSP) || defined(PC) */
200 
217 
231 
245 
252 
258 {
259  return ((vx_uint32)addr->stride_y * (y / addr->step_y)) +
260  ((vx_uint32)addr->stride_x * (x / addr->step_x));
261 }
262 
267  tivx_obj_desc_t *obj_desc[], uint16_t num_params,
268  uint16_t max_params)
269 {
270  vx_status status = (vx_status)VX_SUCCESS;
271  uint32_t i;
272 
273  if (num_params != max_params)
274  {
275  status = (vx_status)VX_FAILURE;
276  }
277  else
278  {
279  for (i = 0U; i < max_params; i ++)
280  {
281  if (NULL == obj_desc[i])
282  {
283  status = (vx_status)VX_FAILURE;
284  break;
285  }
286  }
287  }
288  return status;
289 }
290 
291 #ifdef __cplusplus
292 }
293 #endif
294 
295 #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 tivxKernelsTargetUtilsAssignTargetNameC7x(char *target_name)
Function to assign C7X target name on J721E.
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.
Interface to object descriptor.
The Internal Debugging API.
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...
vx_status tivxKernelsTargetUtilsAssignTargetNameMpu(char *target_name)
Function to assign MPU target name (TIVX_TARGET_MPU_0)
vx_status tivxKernelsTargetUtilsAssignTargetNameMcu(char *target_name)
Function to assign platform-specific MCU target name.
VX_FAILURE
Interface to kernel APIs on target.
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.