libxcoder  3.5.1
ni_defs_logan.h
Go to the documentation of this file.
1 /*******************************************************************************
2  *
3  * Copyright (C) 2022 NETINT Technologies
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9  * copies of the Software, and to permit persons to whom the Software is
10  * furnished to do so, subject to the following conditions:
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18  * SOFTWARE.
19  *
20  ******************************************************************************/
21 
22 /*!*****************************************************************************
23 * \file ni_defs_logan.h
24 *
25 * \brief Common NETINT definitions used by all modules
26 *
27 *******************************************************************************/
28 
29 #pragma once
30 
31 #ifdef _WIN32
32 #include <windows.h>
33 #include <malloc.h>
34 #include <process.h>
35 #include <limits.h>
36 #elif defined(__linux__) || defined(__APPLE__)
37 #if defined(__linux__)
38 #include <linux/types.h>
39 #endif
40 #include <pthread.h>
41 #include <sys/time.h>
42 #endif
43 
44 #include <assert.h>
45 #include <ctype.h>
46 #include <errno.h>
47 #include <inttypes.h>
48 #include <signal.h>
49 #include <stdbool.h>
50 #include <stdint.h>
51 #include <stdio.h>
52 #include <stdlib.h>
53 #include <string.h>
54 #include <time.h>
55 
56 #ifdef __cplusplus
57 extern "C"
58 {
59 #endif
60 
61 // REVISION = SW_VERSION + "R" + API_FLAVOR + API_VER
62 #define NI_LOGAN_XCODER_REVISION "351R2019"
63 #define NI_LOGAN_XCODER_FW_VER_SUPPORTED_MIN "300"
64 #define NI_LOGAN_XCODER_FW_API_FLAVORS_SUPPORTED "20" // Should match one API flavor in NI_LOGAN_XCODER_REVISION
65 #define NI_LOGAN_XCODER_FW_API_VER_SUPPORTED_MIN 13
66 
67 #define NI_LOGAN_XCODER_VER_SZ 3
68 #define NI_LOGAN_XCODER_API_FLAVOR_SZ 2
69 #define NI_LOGAN_XCODER_API_VER_SZ 2
70 
71 #ifndef QUADRA
72 
73 #define NI_LITTLE_ENDIAN_PLATFORM 0
74 #define NI_BIG_ENDIAN_PLATFORM 1
76 #ifndef PLATFORM_ENDIANESS
77 #define PLATFORM_ENDIANESS NI_LITTLE_ENDIAN_PLATFORM
78 #endif
79 
80 #define NETINT_PCI_VENDOR_ID 0x1D82
82 #ifdef _WIN32
83 typedef struct _ni_pthread_t
84 {
85  void *handle;
86  void *(*start_routine)(void *arg);
87  void *arg;
88  void *rc;
89 } ni_pthread_t;
90 typedef CRITICAL_SECTION ni_pthread_mutex_t;
91 typedef CONDITION_VARIABLE ni_pthread_cond_t;
92 typedef void ni_pthread_attr_t;
93 typedef void ni_pthread_condattr_t;
94 typedef void ni_pthread_mutexattr_t;
95 typedef void ni_sigset_t;
96 typedef HANDLE ni_device_handle_t;
97 typedef HANDLE ni_event_handle_t;
98 typedef HANDLE ni_lock_handle_t;
99 typedef HANDLE sem_t;
100 #define NI_INVALID_DEVICE_HANDLE (INVALID_HANDLE_VALUE)
101 #define NI_INVALID_EVENT_HANDLE (NULL) // Failure to create an Event returns NULL
102 #define NI_INVALID_LOCK_HANDLE (NULL) // Failure to create a Mutex returns NULL
103 #ifdef XCODER_DLL
104  #ifdef LIB_EXPORTS
105  #define LIB_API __declspec(dllexport)
106  #else
107  #define LIB_API __declspec(dllimport)
108  #endif
109 #else
110  #define LIB_API
111 #endif
112 #elif defined(__linux__)
113 typedef pthread_t ni_pthread_t;
114 typedef pthread_mutex_t ni_pthread_mutex_t;
115 typedef pthread_cond_t ni_pthread_cond_t;
116 typedef pthread_attr_t ni_pthread_attr_t;
117 typedef pthread_condattr_t ni_pthread_condattr_t;
118 typedef pthread_mutexattr_t ni_pthread_mutexattr_t;
119 typedef sigset_t ni_sigset_t;
120 typedef int32_t ni_device_handle_t;
121 typedef int32_t ni_event_handle_t;
122 typedef int32_t ni_lock_handle_t;
123 #define NI_INVALID_DEVICE_HANDLE (-1)
124 #define NI_INVALID_EVENT_HANDLE (-1)
125 #define NI_INVALID_LOCK_HANDLE (-1)
126 #define LIB_API
127 #define SYS_PARAMS_PREFIX_PATH "/sys/block/"
128 #define SYS_PREFIX_SZ strlen(SYS_PARAMS_PREFIX_PATH)
129 #define KERNEL_NVME_MAX_SEG_PATH "/queue/max_segments"
130 #define KERNEL_NVME_MAX_SEG_SZ_PATH "/queue/max_segment_size"
131 #define KERNEL_NVME_MIN_IO_SZ_PATH "/queue/minimum_io_size"
132 #define KERNEL_NVME_MAX_HW_SEC_KB_PATH "/queue/max_hw_sectors_kb"
133 #define MIN_NVME_BLK_NAME_LEN 7 //has to be at least nvmeXnY
134 #define KERNEL_NVME_FILE_NAME_MAX_SZ (SYS_PREFIX_SZ + strlen(KERNEL_NVME_MAX_SEG_SZ_PATH) + \
135  MIN_NVME_BLK_NAME_LEN + 10)
136 #define DEFAULT_IO_TRANSFER_SIZE 520192
137 #define MAX_IO_TRANSFER_SIZE 3133440
138 
139 #elif defined(__APPLE__)
140 typedef pthread_t ni_pthread_t;
141 typedef pthread_mutex_t ni_pthread_mutex_t;
142 typedef pthread_cond_t ni_pthread_cond_t;
143 typedef pthread_attr_t ni_pthread_attr_t;
144 typedef pthread_condattr_t ni_pthread_condattr_t;
145 typedef pthread_mutexattr_t ni_pthread_mutexattr_t;
146 typedef sigset_t ni_sigset_t;
147 typedef int32_t ni_device_handle_t;
148 typedef int32_t ni_event_handle_t;
149 typedef int32_t ni_lock_handle_t;
150 #define NI_INVALID_DEVICE_HANDLE (-1)
151 #define NI_INVALID_EVENT_HANDLE (-1)
152 #define NI_INVALID_LOCK_HANDLE (-1)
153 #define LIB_API
154 #define MAX_IO_TRANSFER_SIZE 3133440
155 #endif /* _WIN32 */
156 
157 // number of system last error
158 #ifdef _WIN32
159 #define NI_ERRNO (GetLastError())
160 #else
161 #define NI_ERRNO (errno)
162 #endif
163 
164 #define NI_INVALID_IO_SIZE (0)
165 
166 #endif // #ifndef QUADRA
167 
168 #define LOGAN_MAX_DEVICE_CNT 256
169 #define NI_LOGAN_MAX_DEVICE_NAME_LEN 32
170 
171 #define NI_LOGAN_MAX_PACKET_SZ 0x20000
172 #define NI_LOGAN_POLL_INTERVAL (2 * 1000)
173 
174 #define NI_LOGAN_MAX_NUM_DATA_POINTERS 4
175 
176 #define NI_LOGAN_MAX_CONTEXTS_PER_HW_INSTANCE 32
177 #define NI_LOGAN_MAX_1080P_FPS 240
178 #define NI_LOGAN_MAX_CONTEXTS_PER_DECODER_INSTANCE 4
179 
180 #define NI_LOGAN_MAX_DEVICES_PER_HW_INSTANCE 4
181 
182 #define NI_LOGAN_MAX_TX_SZ 0x4B00000
183 
184 #define NI_LOGAN_MEM_PAGE_ALIGNMENT 0x200
185 
188 #define COMMAND_QUEUE_DEPTH 4
189 #define ONE_TASKBUF_SIZE_FOR_W511DEC_CQ (72 * 1024 * 1024) /* Set to maximum YUV Size * 1.2 = 8192x5120 * 1.5*1.2 */
190 #define ONE_TASKBUF_SIZE_FOR_CQ ONE_TASKBUF_SIZE_FOR_W511DEC_CQ
191 #define SIZE_COMMON ((2*1024*1024) + (COMMAND_QUEUE_DEPTH*ONE_TASKBUF_SIZE_FOR_CQ))
192 #define MAX_NUM_VPU_CORE 2
193 #define MAX_VPU_CORE_NUM MAX_NUM_VPU_CORE
194 #define WAVE5_DRAM_PHY_SIZE 0xDBF00000
195 #define VPU_DRAM_SIZE WAVE5_DRAM_PHY_SIZE
196 #define VDI_INIT_VMEM_SIZE ((VPU_DRAM_SIZE) - SIZE_COMMON * MAX_VPU_CORE_NUM)
198 
199 // for pts values storage
200 #define NI_LOGAN_MAX_DEC_REJECT 1024
201 //DTS PTS FIFO size
202 #define NI_LOGAN_FIFO_SZ 1024
203 
204 //PTS gap to signal to signal pts jump
205 #define NI_LOGAN_MAX_PTS_GAP 32
206 
207 //PTS gap to signal to signal pts jump
208 #define NI_LOGAN_MAX_I_P_DIST 8
209 
210 // invalid sei type
211 #define NI_LOGAN_INVALID_SEI_TYPE (-1)
212 // max length of custom sei
213 #define NI_LOGAN_MAX_CUSTOM_SEI_SZ 8192
214 // max count of custom sei per packet
215 #define NI_LOGAN_MAX_CUSTOM_SEI_CNT 10
216 // max count of force frame PTS recording
217 #define NI_LOGAN_MAX_FORCE_FRAME_TABLE_SIZE 10
218 
219 //bytes size of meta data sent together with YUV: from f/w decoder to app
220 #define NI_LOGAN_FW_META_DATA_SZ 64
221 // size of meta data sent together with YUV data: from app to f/w encoder
222 #define NI_LOGAN_APP_ENC_FRAME_META_DATA_SIZE 64
223 // size of meta data sent together with bitstream: from f/w encoder to app
224 #define NI_LOGAN_FW_ENC_BITSTREAM_META_DATA_SIZE 40
225 
226 //size of str_fw_API_ver
227 #define NI_LOGAN_XCODER_FW_API_VER_SZ (NI_LOGAN_XCODER_API_VER_SZ + 1)
228 // size of ui8_light_level_data
229 #define NI_LOGAN_LIGHT_LEVEL_DATA_SZ 5
230 // ui8_mdcv_max_min_lum_data size
231 #define NI_LOGAN_MDCV_LUM_DATA_SZ 9
232 typedef enum
233 {
239 
240 /* enum for decode flush buffers status */
241 typedef enum
242 {
246 
247 //for custom driver
248 #define NI_LOGAN_MAX_NAMESPACE 16
249 #define NI_LOGAN_MAX_PROFILE_NAME_LEN 128
250 #define NI_LOGAN_MAX_LEVEL_NAME_LEN 64
251 #define NI_LOGAN_MAX_ADDITIONAL_INFO_LEN 64
252 
253 #if defined(LRETURN)
254 #undef LRETURN
255 #define LRETURN goto END
256 #undef END
257 #define END end
258 #else
259 #define LRETURN goto END
260 #define END end
261 #endif
262 
263 #define ni_logan_assert(expression) assert(expression)
264 
265 #define K_TO_C(temperature) ((temperature)-273)
266 
267 typedef enum
268 {
273 
274 // return number for init
275 // if init already, return this
276 #define NI_LOGAN_RETCODE_INIT_ALREADY (INT32_MAX)
277 
278 typedef enum
279 {
360 
361 
362 #ifndef QUADRA
363 typedef enum _ni_nvme_opcode
364 {
371  nvme_cmd_dsm = 0x09,
377  nvme_cmd_xcoder_read = 0x84
379 #endif // #ifndef QUADRA
380 
382 {
383  uint32_t cdw2;
384  uint32_t cdw3;
385  uint32_t cdw10;
386  uint32_t cdw11;
387  uint32_t cdw12;
388  uint32_t cdw13;
389  uint32_t cdw14;
390  uint32_t cdw15;
392 
394 {
395  uint64_t abs_timenano;
396  int64_t ts_time;
398 
400 {
401  int front, rear, size;
402  unsigned capacity;
405 
407 {
408  uint16_t sess_err_no; // See SYSTEM_MANAGER_ERROR_CODES definition
409  uint16_t sess_rsvd; // session reserved
410  uint16_t inst_state; // instance current state
411  uint16_t inst_err_no; // instance error return code: 0 normal, > 0 error
412  uint32_t wr_buf_avail_size; // instance write buffer size available
413  uint32_t rd_buf_avail_size; // instance read buffer size available
414  uint64_t sess_timestamp; // session start timestamp
415  uint32_t frames_input;
416  uint32_t frames_buffered;
418  uint32_t frames_output;
419  uint32_t frames_dropped;
420  uint32_t inst_errors;
421 } ni_logan_instance_status_info_t; // 48 bytes (has to be 8 byte aligned)
422 
423 #ifdef __cplusplus
424 }
425 #endif
struct _ni_logan_lat_meas_q_t ni_logan_lat_meas_q_t
ni_logan_retcode_t
@ NI_LOGAN_RETCODE_PARAM_ERROR_MN_QP
@ NI_LOGAN_RETCODE_ERROR_INVALID_HANDLE
@ NI_LOGAN_RETCODE_NVME_SC_VPU_GENERAL_ERROR
@ NI_LOGAN_RETCODE_PARAM_ERROR_CONF_WIN_R
@ NI_LOGAN_RETCODE_PARAM_ERROR_HEIGHT_TOO_SMALL
@ NI_LOGAN_RETCODE_ERROR_INVALID_SESSION
@ NI_LOGAN_RETCODE_PARAM_ERROR_ZERO
@ NI_LOGAN_RETCODE_PARAM_ERROR_FRATE
@ NI_LOGAN_RETCODE_PARAM_INVALID_VALUE
@ NI_LOGAN_RETCODE_PARAM_ERROR_TOO_SMALL
@ NI_LOGAN_RETCODE_PARAM_ERROR_OOR
@ NI_LOGAN_RETCODE_PARAM_ERROR_CONF_WIN_TOP
@ NI_LOGAN_RETCODE_PARAM_ERROR_USR_RMD_ENC_PARAM
@ NI_LOGAN_RETCODE_PARAM_ERROR_CU_SIZE_MODE
@ NI_LOGAN_RETCODE_PARAM_ERROR_TRATE
@ NI_LOGAN_RETCODE_PARAM_ERROR_GOP_PRESET
@ NI_LOGAN_RETCODE_PARAM_ERROR_AREA_TOO_BIG
@ NI_LOGAN_RETCODE_PARAM_ERROR_RCENABLE
@ NI_LOGAN_RETCODE_PARAM_ERROR_WIDTH_TOO_SMALL
@ NI_LOGAN_RETCODE_NVME_SC_RESOURCE_IS_EMPTY
@ NI_LOGAN_RETCODE_ERROR_UNLOCK_DEVICE
@ NI_LOGAN_RETCODE_DEFAULT_SESSION_ERR_NO
@ NI_LOGAN_RETCODE_PARAM_GOP_INTRA_INCOMPATIBLE
@ NI_LOGAN_RETCODE_PARAM_ERROR_CONF_WIN_L
@ NI_LOGAN_RETCODE_NVME_SC_REQUEST_IN_PROGRESS
@ NI_LOGAN_RETCODE_PARAM_ERROR_TOO_BIG
@ NI_LOGAN_RETCODE_ERROR_RESOURCE_UNAVAILABLE
@ NI_LOGAN_RETCODE_PARAM_ERROR_MX_QP
@ NI_LOGAN_RETCODE_PARAM_ERROR_BRATE_LT_TRATE
@ NI_LOGAN_RETCODE_PARAM_ERROR_CUSIZE_MODE_8X8_EN
@ NI_LOGAN_RETCODE_PARAM_ERROR_DY_MERGE_16X16_EN
@ NI_LOGAN_RETCODE_PARAM_ERROR_CUSIZE_MODE_16X16_EN
@ NI_LOGAN_RETCODE_ERROR_NVME_CMD_FAILED
@ NI_LOGAN_RETCODE_INVALID_PARAM
@ NI_LOGAN_RETCODE_ERROR_MEM_ALOC
@ NI_LOGAN_RETCODE_PARAM_ERROR_DY_MERGE_8X8_EN
@ NI_LOGAN_RETCODE_ERROR_VERSION_INCOMPATIBLE
@ NI_LOGAN_RETCODE_PARAM_ERROR_PIC_HEIGHT
@ NI_LOGAN_RETCODE_PARAM_ERROR_INTRA_PERIOD
@ NI_LOGAN_RETCODE_ERROR_VPU_RECOVERY
@ NI_LOGAN_RETCODE_PARAM_INVALID_NAME
@ NI_LOGAN_RETCODE_ERROR_GET_DEVICE_POOL
@ NI_LOGAN_RETCODE_PARAM_ERROR_BRATE
@ NI_LOGAN_RETCODE_PARAM_ERROR_HEIGHT_TOO_BIG
@ NI_LOGAN_RETCODE_PARAM_ERROR_RCINITDELAY
@ NI_LOGAN_RETCODE_PARAM_ERROR_MAXNUMMERGE
@ NI_LOGAN_RETCODE_PARAM_ERROR_CONF_WIN_BOT
@ NI_LOGAN_RETCODE_PARAM_ERROR_HVS_QP_EN
@ NI_LOGAN_RETCODE_PARAM_ERROR_CUSTOM_GOP
@ NI_LOGAN_RETCODE_SUCCESS
@ NI_LOGAN_RETCODE_NVME_SC_WRITE_BUFFER_FULL
@ NI_LOGAN_RETCODE_FAILURE
@ NI_LOGAN_RETCODE_NVME_SC_VPU_RECOVERY
@ NI_LOGAN_RETCODE_PARAM_ERROR_PIC_WIDTH
@ NI_LOGAN_RETCODE_PARAM_ERROR_DY_MERGE_32X32_EN
@ NI_LOGAN_RETCODE_PARAM_ERROR_MX_DELTA_QP
@ NI_LOGAN_RETCODE_NVME_SC_RESOURCE_UNAVAILABLE
@ NI_LOGAN_RETCODE_PARAM_ERROR_CUSIZE_MODE_32X32_EN
@ NI_LOGAN_RETCODE_PARAM_ERROR_HVS_QP_SCL
@ NI_LOGAN_RETCODE_PARAM_ERROR_INTRA_QP
@ NI_LOGAN_RETCODE_PARAM_ERROR_DECODING_REFRESH_TYPE
@ NI_LOGAN_RETCODE_PARAM_ERROR_CU_LVL_RC_EN
@ NI_LOGAN_RETCODE_ERROR_LOCK_DOWN_DEVICE
@ NI_LOGAN_RETCODE_PARAM_ERROR_WIDTH_TOO_BIG
@ NI_LOGAN_RETCODE_ERROR_INVALID_ALLOCATION_METHOD
@ NI_LOGAN_RETCODE_ERROR_OPEN_DEVICE
@ NI_LOGAN_RETCODE_ERROR_EXCEED_MAX_NUM_SESSIONS
@ NI_LOGAN_RETCODE_PARAM_ERROR_RC_INIT_DELAY
@ NI_LOGAN_RETCODE_NVME_SC_VPU_RSRC_INSUFFICIENT
@ NI_LOGAN_RETCODE_PARAM_ERROR_MX_NUM_MERGE
@ NI_LOGAN_RETCODE_NVME_SC_INVALID_PARAMETER
@ NI_LOGAN_RETCODE_NVME_SC_REQUEST_NOT_COMPLETED
@ NI_LOGAN_RETCODE_NVME_SC_RESOURCE_NOT_FOUND
struct _ni_logan_instance_status_info ni_logan_instance_status_info_t
_ni_nvme_opcode
@ nvme_cmd_write_uncor
@ nvme_cmd_xcoder_write
@ nvme_cmd_resv_register
@ nvme_cmd_resv_release
@ nvme_cmd_resv_acquire
@ nvme_cmd_write
@ nvme_cmd_flush
@ nvme_cmd_write_zeroes
@ nvme_cmd_compare
@ nvme_cmd_read
@ nvme_cmd_xcoder_read
@ nvme_cmd_resv_report
@ nvme_cmd_dsm
struct _ni_logan_nvme_command_t ni_logan_nvme_command_t
ni_logan_device_type_t
@ NI_LOGAN_DEVICE_TYPE_UPLOAD
@ NI_LOGAN_DEVICE_TYPE_ENCODER
@ NI_LOGAN_DEVICE_TYPE_DECODER
struct _ni_logan_lat_meas_q_entry_t ni_logan_lat_meas_q_entry_t
ni_logan_decode_buffer_flush_status
@ NI_LOGAN_DECODE_BUFFERS_FLUSHING
@ NI_LOGAN_DECODE_FLUSH_BUFFER_OFF
enum _ni_nvme_opcode ni_nvme_opcode_t
ni_logan_device_element_index
@ NI_LOGAN_V_ELEMENT
@ NI_LOGAN_Y_ELEMENT
@ NI_LOGAN_META_ELEMENT
@ NI_LOGAN_U_ELEMENT
int64_t ts_time
uint64_t abs_timenano
ni_logan_lat_meas_q_entry_t * array