libxcoder 5.8.0
Loading...
Searching...
No Matches
ni_nvme.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_nvme.h
24 *
25 * \brief Private definitions for interfacing with NETINT video processing
26 * devices over NVMe
27 ******************************************************************************/
28
29#pragma once
30
31#include "ni_defs.h"
32
33#ifdef __cplusplus
34extern "C"
35{
36#endif
37
38#define NI_NVME_IDENTITY_CMD_DATA_SZ 4096
39
40typedef struct _ni_nvme_command
41{
42 uint32_t cdw2;
43 uint32_t cdw3;
44 uint32_t cdw10;
45 uint32_t cdw11;
46 uint32_t cdw12;
47 uint32_t cdw13;
48 uint32_t cdw14;
49 uint32_t cdw15;
51
53{
54 uint16_t ui16MaxPower;
55 uint8_t ui8Rsvd2;
56 uint8_t ui8Flags;
57 uint32_t ui32EntryLat;
58 uint32_t ui32ExitLat;
59 uint8_t ui8ReadTput;
60 uint8_t ui8ReadLat;
61 uint8_t ui8WriteTput;
62 uint8_t ui8WriteLat;
63 uint16_t ui16IdlePower;
64 uint8_t ui8IdleScale;
65 uint8_t ui8Rsvd19;
68 uint8_t aui8Rsvd23[9];
70
71#pragma pack(1)
87#pragma pack()
88
89typedef struct _ni_nvme_identity
90{
91 // NVMe identify controller data structure, p_first 3K bytes of general
92 // controller capabilities and features, copied from f/w nvme.h
93 uint16_t ui16Vid; //PCI Vendor ID
94 uint16_t ui16Ssvid; //PCI Subsystem Vendor ID
95 uint8_t ai8Sn[20]; //serial Number, it is a space right filled ASCII array(not a string)
96 uint8_t ai8Mn[40]; //Model number, it is a space right filled ASCII array(not a string)
97 uint8_t ai8Fr[8]; //Firmware Revision, it is a space right filled ASCII array(not a string)
98 uint8_t ui8Rab; //Recommend Arbitration Burst
99 uint8_t aui8Ieee[3]; //IEEE OUI Identifier
100 uint8_t ui8Cmic; //controller multi-path I/O and namespace sharing Capabilities
101 uint8_t ui8Mdts; //Maximum data transfer size
102 uint16_t ui16Cntlid; //Controller ID Savio: should be 2 bytes
103 uint32_t ui32Ver; //Version
104 uint32_t ui32Rtd3r; //RTD3 resume latency
105 uint32_t ui32Rtd3e; //RTD3 entry Latency
106 uint32_t ui32Oaes; //optional Asynchronous events supported
107 uint8_t aui8Rsvd96[160];
108 uint16_t ui16Oacs; //optional Admin Command Support
109 uint8_t ui8Acl; //Abort command Limit - 0's based value
110 uint8_t ui8Aerl; //Asynchronous Event Request Limit - 0's based value
111 uint8_t ui8Frmw; //Firmware updates
112 uint8_t ui8Lpa; //Log Page Attributes
113 uint8_t ui8Elpe; //Error Log Page Entries - 0's based value
114 uint8_t ui8Npss; //number of Power states support - 0's based value
115 uint8_t ui8Avscc; //Admin Vendor Specific Command Configuration
116 uint8_t ui8Apsta; //Autonomous power state transition attributes
117 uint16_t ui16Wctemp; //Warning Composite Temperature Threshold
118 uint16_t ui16Cctemp; //Critical Composite Temperature Threshold
119 uint16_t ui16Mtfa; //Maximum Time for Firmware Activation
120 uint32_t ui32Hmpre; //Host Memory Buffer Preferred Size
121 uint32_t ui32Hmmin; //Host Memory Buffer Minimum Size
122 uint8_t aui32Tnvmcap[16]; //Total NVM Capacity
123 uint8_t aui8Unvmcap[16]; //unallocated NVM Capacity
124 uint32_t ui32Rpmbs; //Replay Protected Memory Block Support
125 uint8_t aui8Rsvd316[196];
126 uint8_t ui8Sqes; //Submission Queue Entry Size
127 uint8_t ui8Cqes; //Completion Queue Entry Size
128 uint8_t ui8Rsvd514[2];
129 uint32_t ui32Nn; //Number of Namespaces
130 uint16_t ui16Oncs; //Optional NVM Command Support
131 uint16_t ui16Fuses; //Fused Operation Support
132 uint8_t ui8Fna; //Format NVM Attributes
133 uint8_t ui8Vwc; //Volatile write cache
134 uint16_t ui16Awun; //Atomic Write Unit Normal - 0's based value
135 uint16_t ui16Awupf; //Atomic Write Unit Power Fail - 0's based value
136 uint8_t ui8Nvscc; //NVM Vendor Specific Command Configuration
137 uint8_t ui8Rsvd531;
138 uint16_t ui16Acwu; //Atomic Compare & write Unit - 0's based value
139 uint8_t aui8Rsvd534[2];
140 uint32_t ui32Sgls; //SGL Support
141 uint8_t aui8Rsvd540[1508];
142 ni_nvme_id_power_state_t asPsd[32]; //Power state Descriptors
143
144 // Below are vendor-specific parameters
145 uint8_t aui8TotalRawCap[8]; // total raw capacity in the number of 4K
146 uint8_t ui8CurPcieLnkSpd; // current PCIe link speed
147 uint8_t ui8NegPcieLnkWid; // negotiated PCIe link width
148 uint16_t ui16ChipVer; // chip version in binary
149 uint8_t aui8FwLoaderRev[8]; // firmware loader revision in ASCII
150 uint8_t ui8NbFlashChan; // number of flash channels (1-32)
151 uint8_t ui8RAIDsupport; // RAID support. 1: supported 0: not
152
153 // Below is xcoder part
154
156 uint8_t sed_support;
157
158 // xcoder HW - version 1
164 uint8_t xcoder_reserved[11];
165
166 uint8_t hw0_id;
177 uint8_t hw0_reserved[9];
178
179 uint8_t hw1_id;
190 uint8_t hw1_reserved[9];
191
192 uint8_t hw2_id;
203 uint8_t hw2_reserved[9];
204
205 uint8_t hw3_id;
216 uint8_t hw3_reserved[9];
217
218 uint8_t fw_branch_name[256];
219 uint8_t fw_commit_time[26];
220 uint8_t fw_commit_hash[41];
221 uint8_t fw_build_time[26];
222 uint8_t fw_build_id[256];
224
225 uint8_t memory_cfg; // 0 == DR, 1 == SR, 2 == SR(disable P2P), 3 == SR_4G
226 // byte offset 469 (=468+1 due to alignment at hw0_max_video_width)
227
228 // xcoder HW - version 2 (replaces/deprecates version 1)
229 uint8_t xcoder_num_elements; // total element types
230 uint8_t xcoder_num_devices; // total devices
231 uint8_t xcoder_cnt[14]; // device count per type
234
235#ifdef __linux__
236
237typedef struct _ni_nvme_user_io
238{
239 __u8 opcode;
240 __u8 flags;
241 __u16 control;
242 __u16 nblocks;
243 __u16 rsvd;
244 __u64 metadata;
245 __u64 addr;
246 __u64 slba;
247 __u32 dsmgmt;
248 __u32 reftag;
249 __u16 apptag;
250 __u16 appmask;
251} ni_nvme_user_io_t;
252
253typedef struct _ni_nvme_passthrough_cmd
254{
255 __u8 opcode;
256 __u8 flags;
257 __u16 rsvd1;
258 __u32 nsid;
259 __u32 cdw2;
260 __u32 cdw3;
261 __u64 metadata;
262 __u64 addr;
263 __u32 metadata_len;
264 __u32 data_len;
265 __u32 cdw10;
266 __u32 cdw11;
267 __u32 cdw12;
268 __u32 cdw13;
269 __u32 cdw14;
270 __u32 cdw15;
271 __u32 timeout_ms;
272 __u32 result; //DW0
273}ni_nvme_passthrough_cmd_t;
274
275typedef ni_nvme_passthrough_cmd_t ni_nvme_admin_cmd_t;
276
277#define NVME_IOCTL_ID _IO('N', 0x40)
278#define NVME_IOCTL_ADMIN_CMD _IOWR('N', 0x41, ni_nvme_admin_cmd_t)
279#define NVME_IOCTL_SUBMIT_IO _IOW('N', 0x42, ni_nvme_user_io_t)
280#define NVME_IOCTL_IO_CMD _IOWR('N', 0x43, ni_nvme_passthrough_cmd_t)
281#define NVME_IOCTL_RESET _IO('N', 0x44)
282#define NVME_IOCTL_SUBSYS_RESET _IO('N', 0x45)
283#define NVME_IOCTL_RESCAN _IO('N', 0x46)
284
285#endif //__linux__ defined
286
287#ifdef _WIN32
288typedef struct _ni_nvme_completion_result
289{
290 uint32_t ui32Result;
291 uint32_t ui32Rsvd;
292 uint16_t ui16SqHead;
293 uint16_t ui16SqId;
294 uint16_t ui16CommandId;
295 uint16_t ui16Status;
296}ni_nvme_completion_result_t, *p_ni_nvme_completion_result_t;
297#endif
298
333
339
344
349
354
361
366
391
398
405
418
443
454
461
462
463typedef uint32_t ni_nvme_result_t;
464
465
466#if (PLATFORM_ENDIANESS == NI_BIG_ENDIAN_PLATFORM)
467static inline uint64_t ni_htonll(uint64_t val)
468{
469 if (1 == htonl(1))
470 return val;
471
472 return ((((uint64_t)htonl((val)&0xFFFFFFFFUL)) << 32) | htonl((uint32_t)((val) >> 32)));
473}
474
475static inline uint64_t ni_ntohll(uint64_t val)
476{
477 if (1 == ntohl(1))
478 return val;
479
480 return ((((uint64_t)ntohl((val)&0xFFFFFFFFUL)) << 32) | ntohl((uint32_t)((val) >> 32)));
481}
482
483static inline uint32_t ni_htonl(uint32_t val)
484{
485 return htonl(val);
486}
487static inline uint16_t ni_htons(uint16_t val)
488{
489 return htons(val);
490}
491static inline uint32_t ni_ntohl(uint32_t val)
492{
493 return ntohl(val);
494}
495static inline uint16_t ni_ntohs(uint16_t val)
496{
497 return ntohs(val);
498}
499#else
500static inline uint64_t ni_ntohll(uint64_t val)
501{
502 return (val);
503}
504static inline uint64_t ni_htonll(uint64_t val)
505{
506 return (val);
507}
508static inline uint32_t ni_htonl(uint32_t val)
509{
510 return (val);
511}
512static inline uint16_t ni_htons(uint16_t val)
513{
514 return (val);
515}
516static inline uint32_t ni_ntohl(uint32_t val)
517{
518 return (val);
519}
520static inline uint16_t ni_ntohs(uint16_t val)
521{
522 return (val);
523}
524#endif
525
526#define WRITE_INSTANCE_SET_DW2_SUBFRAME_IDX(dst, size) (dst = (size & 0xFFFFFFFFUL))
527#define WRITE_INSTANCE_SET_DW3_SUBFRAME_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
528
529#define CREATE_SESSION_SET_DW10_SUBTYPE(dst) (dst = (nvme_open_xcoder_create_session & 0xFFFFUL))
530#define CREATE_SESSION_SET_DW11_INSTANCE(dst, instance) (dst = (instance & 0xFFFFUL))
531#define CREATE_SESSION_SET_DW12_DEC_CID(dst, cid) (dst = (cid & 0xFFFFUL))
532#define CREATE_SESSION_SET_DW12_DEC_HWF(dst, hwf) (dst = (((hwf << 16) & 0xFFFF0000UL) | (dst & 0xFFFFUL)))
533
534#define CREATE_SESSION_SET_DW12_SCL_OPC(dst, opc) (dst = (opc & 0xFFFFUL))
535
536#define CREATE_SESSION_SET_DW12_ENC_CID_FRWIDTH(dst, cid, width) (dst = (((width << 16) & 0xFFFF0000UL) | (cid & 0xFFFFUL)))
537#define CREATE_SESSION_SET_DW13_ENC_FRHIGHT(dst, hight) (dst = (hight & 0xFFFFUL))
538#define CREATE_SESSION_SET_DW14_MODEL_LOAD(dst, load) (dst = (load & 0xFFFFFFFFUL))
539
540#define CREATE_SESSION_SET_DW12_AI_HWF(dst, hwf) \
541 (dst = (((hwf << 16) & 0xFFFF0000UL) | (dst & 0xFFFFUL)))
542
543#define DESTROY_SESSION_SET_DW10_INSTANCE(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_close_xcoder_destroy_session & 0xFFFFUL)))
544
545#define READ_INSTANCE_SET_DW10_SUBTYPE(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_write_xcoder_write_instance & 0xFFFFUL)))
546#define READ_INSTANCE_SET_DW11_INSTANCE(dst, instance) (dst = (instance & 0xFFFFUL))
547#define READ_INSTANCE_SET_DW15_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
548
549#define WRITE_INSTANCE_SET_DW10_SUBTYPE(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_write_xcoder_write_instance & 0xFFFFUL)))
550#define WRITE_INSTANCE_SET_DW11_INSTANCE(dst, instance) (dst = (instance & 0xFFFFUL))
551#define WRITE_INSTANCE_SET_DW11_PAGEOFFSET(dst, pageoffset) (dst = (((pageoffset << 16) | dst)))
552#define WRITE_INSTANCE_SET_DW12_ISHWDESC(dst, ishwdesc) (dst = (ishwdesc & 0xFFFFUL))
553#define WRITE_INSTANCE_SET_DW12_FRAMEINSTID(dst, fid) (dst = (0xFFFFUL & dst) | ((fid<<16) & 0xFFFF0000UL))
554
555#define WRITE_INSTANCE_SET_DW15_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
556
557#define QUERY_SESSION_SET_DW10_SUBTYPE(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_query_xcoder_query_session & 0xFFFFUL)))
558#define QUERY_SESSION_SET_DW11_INSTANCE(dst, instance) (dst = (instance & 0xFFFFUL))
559#define QUERY_SESSION_SET_DW11_SESSION_STATS(dst) (dst = (nvme_query_xcoder_session_get_stats & 0xFFFFUL))
560#define QUERY_SESSION_SET_DW15_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
561
562#define QUERY_INSTANCE_SET_DW10_SUBTYPE(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_query_xcoder_query_instance & 0xFFFFUL)))
563#define QUERY_INSTANCE_SET_DW11_INSTANCE_STATUS(dst, instance) (dst = (((nvme_query_xcoder_instance_get_status << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
564#define QUERY_INSTANCE_SET_DW11_INSTANCE_STREAM_INFO(dst, instance) (dst = (((nvme_query_xcoder_instance_get_stream_info << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
565#define QUERY_INSTANCE_SET_DW11_INSTANCE_END_OF_OUTPUT(dst, instance) (dst = (((nvme_query_xcoder_instance_get_end_of_output << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
566
567#define QUERY_INSTANCE_SET_DW11_INSTANCE_BUF_INFO(dst, rw_type, inst_type) (dst = (((rw_type << 16) & 0xFFFF0000UL) | (inst_type & 0xFFFFUL)))
568
569#define QUERY_INSTANCE_SET_DW15_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
570
571#define QUERY_GENERAL_SET_DW10_SUBTYPE(dst) (dst = ( (nvme_query_xcoder_query_general & 0xFFFFUL)))
572#define QUERY_GENERAL_SET_DW11_INSTANCE_STATUS(dst, instance) (dst = (((nvme_query_xcoder_general_get_status << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
573#define CONFIG_SESSION_SET_DW10_SESSION_ID(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_config_xcoder_config_session & 0xFFFFUL)))
574#define CONFIG_SESSION_SET_DW11_SUBTYPE(dst, subtype) (dst = (((0 << 16) & 0xFFFF0000UL) | (subtype & 0xFFFFUL)))
575#define CONFIG_SESSION_SET_DW15_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
576
577#define CONFIG_INSTANCE_SET_DW10_SUBTYPE(dst, sid) (dst = (((sid << 16) & 0xFFFF0000UL) | (nvme_config_xcoder_config_instance & 0xFFFFUL)))
578#define CONFIG_INSTANCE_SET_DW11_SOS(dst, instance) (dst = (((nvme_config_xcoder_config_set_sos << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
579#define CONFIG_INSTANCE_SET_DW11_EOS(dst, instance) (dst = (((nvme_config_xcoder_config_set_eos << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
580#define CONFIG_INSTANCE_SET_DW11_DEC_PARAMS(dst, instance) (dst = (((nvme_config_xcoder_config_set_dec_params << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
581#define CONFIG_INSTANCE_SET_DW11_ENC_PARAMS(dst, instance) (dst = (((nvme_config_xcoder_config_set_enc_params << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
582#define CONFIG_INSTANCE_SET_DW11_ENC_FRAME_PARAMS(dst, instance) (dst = (((nvme_config_xcoder_config_set_enc_frame_params << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
583#define CONFIG_INSTANCE_SET_DW11_FLUSH(dst, instance) (dst = (((nvme_config_xcoder_config_flush << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
584#define CONFIG_INSTANCE_SET_DW11_UPDATE_PARAMS(dst, instance) (dst = (((nvme_config_xcoder_config_update_enc_params << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
585#define CONFIG_INSTANCE_SET_DW11_ALLOC_FRAME(dst, instance) (dst = (((nvme_config_xcoder_config_alloc_frame << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
586#define CONFIG_INSTANCE_SET_DW11_WRITE_LEN(dst, instance) (dst = (((nvme_config_xcoder_config_set_write_legth << 16) & 0xFFFF0000UL) | (instance & 0xFFFFUL)))
587
588#define CONFIG_INSTANCE_SET_DW11_AI_PARAMS(dst, instance) \
589 (dst = (((nvme_config_xcoder_config_set_network_binary << 16) & \
590 0xFFFF0000UL) | \
591 (instance & 0xFFFFUL)))
592
593#define CONFIG_INSTANCE_SET_DW15_SIZE(dst, size) (dst = (size & 0xFFFFFFFFUL))
594#define RECYCLE_BUFFER_SET_DW10_BUFID(dst, bid) (dst = (bid & 0xFFFFUL))
595
596#ifndef XCODER_IO_RW_ENABLED
598 ni_device_handle_t fd,
599 ni_nvme_command_t *p_ni_nvme_cmd,
600 uint32_t data_len, void *data,
601 uint32_t *pResult);
602
603int32_t ni_nvme_send_io_cmd(ni_nvme_opcode_t opcode, ni_device_handle_t fd,
604 ni_nvme_command_t *p_ni_nvme_cmd, uint32_t data_len,
605 void *data, uint32_t *pResult);
606#endif
607
609 ni_device_handle_t fd,
610 ni_nvme_command_t *p_ni_nvme_cmd,
611 uint32_t data_len, void *data,
612 uint32_t *pResult);
613
614ni_retcode_t ni_nvme_check_error_code(int rc, int opcode, uint32_t xcoder_type,
615 uint32_t hw_id, uint32_t *inst_id);
616
618 int max_handles);
619
620
621#ifdef __linux__
622int32_t ni_nvme_send_admin_pass_through_command(ni_device_handle_t fd, ni_nvme_passthrough_cmd_t* cmd);
623int32_t ni_nvme_send_io_pass_through_command(ni_device_handle_t fd, ni_nvme_passthrough_cmd_t* cmd);
624#endif
625
626/********************* transcoder through io read/write command ***********************/
627#define NI_DATA_BUFFER_LEN 4096
628#define LBA_BIT_OFFSET 12 //logic block size = 4K
629
630//supposed LBA 4K aligned
631#define NI_SUB_BIT_OFFSET 4
632#define NI_OP_BIT_OFFSET 8
633#define NI_INSTANCE_TYPE_OFFSET 19
634#define NI_SESSION_ID_OFFSET 22
635
636#define NI_SESSION_ID_SHIFT_HI 3
637
638#define MBs(xMB) ((xMB)*1024*1024)
639#define MBs_to_4k(xMB) ((xMB)*1024*1024/4096) // MB to 4K
640
641#define START_OFFSET_IN_4K MBs_to_4k(512) // 0x00 -- 0x20000
642
643#define CTL_OFFSET_IN_4K(op,sub,subtype) (START_OFFSET_IN_4K+(((op)<<NI_OP_BIT_OFFSET) + \
644 ((sub)<<NI_SUB_BIT_OFFSET)+subtype)) // 0x20000 -- 0x28000, each (op,sub,subtype) has 4k bytes
645#define RD_OFFSET_IN_4K \
646 (START_OFFSET_IN_4K + MBs_to_4k(128)) // 0x28000 -- 0x38000
647
648#define WR_OFFSET_IN_4K \
649 (RD_OFFSET_IN_4K + MBs_to_4k(256)) // 0x38000 -- 0x48000
650
651#define LOAD_OFFSET_IN_4K \
652 (WR_OFFSET_IN_4K + MBs_to_4k(256)) // 0x48000 -- 0x50000
653
654#define WR_METADATA_OFFSET_IN_4K \
655 (MBs_to_4k(1024) + MBs_to_4k(256)) // 0x50000 -- 0x58000
656
657#define DOWNLOAD_OFFSET_IN_4K \
658 (WR_METADATA_OFFSET_IN_4K + MBs_to_4k(128)) // 0x58000 -- 0x68000
659
660// total 0x00000 -- 0x80000
661
662#define DUMP_LOG_OFFSET_IN_4K (LOAD_OFFSET_IN_4K + MBs_to_4k(8))
663
664#define NVME_LOG_OFFSET_IN_4K (DUMP_LOG_OFFSET_IN_4K)
665#define EP_LOG_OFFSET_IN_4K (NVME_LOG_OFFSET_IN_4K + MBs_to_4k(1))
666#define DP_LOG_OFFSET_IN_4K (EP_LOG_OFFSET_IN_4K + MBs_to_4k(1))
667#define TP_LOG_OFFSET_IN_4K (DP_LOG_OFFSET_IN_4K + MBs_to_4k(1))
668#define FP_LOG_OFFSET_IN_4K (TP_LOG_OFFSET_IN_4K + MBs_to_4k(1))
669#define FL_LOG_OFFSET_IN_4K (FP_LOG_OFFSET_IN_4K + MBs_to_4k(1))
670#define ARTIFACTS_OFFSET_IN_4K (FL_LOG_OFFSET_IN_4K + MBs_to_4k(1))
671
672#define HIGH_OFFSET_IN_4K(sid, instance) \
673 ((((sid & 0x1FFUL) << NI_SESSION_ID_SHIFT_HI) | (instance)) \
674 << NI_INSTANCE_TYPE_OFFSET) // 1024MB +128MB from range 0x0 to 0x40000 + 0x40000 to 0x48000
675#define GAP(opcode) ((opcode) - nvme_admin_cmd_xcoder_open)
676
677/************read/write command macro*******************/
678//write instance
679#define WRITE_INSTANCE_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + WR_OFFSET_IN_4K
680// write separate metadata
681#define WRITE_METADATA_W(sid, instance) \
682 HIGH_OFFSET_IN_4K(sid, instance) + WR_METADATA_OFFSET_IN_4K
683
684//read instance
685#define READ_INSTANCE_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + RD_OFFSET_IN_4K
686
687// download hwframe
688#define DOWNLOAD_FRAMEIDX_R(frame_id) ((frame_id & 0xFFFUL) << NI_INSTANCE_TYPE_OFFSET) + DOWNLOAD_OFFSET_IN_4K
689
690/************control command macro**********************/
691//identify
692#define IDENTIFY_DEVICE_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(0xD9), 1, 0)
693
694//open
695#define OPEN_GET_SID_R(instance) HIGH_OFFSET_IN_4K(0,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_open), \
696 nvme_open_xcoder_create_session,2)
697#define OPEN_SESSION_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_open), \
698 nvme_open_xcoder_create_session,0)
699#define OPEN_SESSION_CODEC(instance, codec, param) HIGH_OFFSET_IN_4K((param & 0x3F),instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_open), \
700 nvme_open_xcoder_create_session,codec)
701#define OPEN_ADD_CODEC(instance, codec, param) HIGH_OFFSET_IN_4K(param,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_open), \
702 nvme_open_xcoder_add_session,codec)
703
704
705//close
706#define CLOSE_SESSION_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_close), \
707 nvme_close_xcoder_destroy_session,0)
708
709//query
710#define QUERY_SESSION_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
711 nvme_query_xcoder_query_session,0)
712#define QUERY_SESSION_STATS_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
713 nvme_query_xcoder_query_session,nvme_query_xcoder_session_get_stats)
714#define QUERY_INSTANCE_STATUS_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
715 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_get_status)
716
717#define QUERY_INSTANCE_CUR_STATUS_INFO_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
718 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_get_current_status)
719#define QUERY_INSTANCE_AI_INFO_R(sid, instance) \
720 HIGH_OFFSET_IN_4K(sid, instance) + \
721 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
722 nvme_query_xcoder_query_instance, \
723 nvme_query_xcoder_instance_read_ai_hw_output)
724#define QUERY_INSTANCE_STREAM_INFO_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
725 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_get_stream_info)
726#define QUERY_INSTANCE_EOS_R(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
727 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_get_end_of_output)
728#define QUERY_INSTANCE_RBUFF_SIZE_R(sid, instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
729 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_read_buf_size)
730#define QUERY_INSTANCE_WBUFF_SIZE_R(sid, instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
731 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_write_buf_size)
732#define QUERY_INSTANCE_WBUFF_SIZE_R_BY_EP(sid, instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
733 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_write_buf_size_by_ep)
734#define QUERY_INSTANCE_RBUFF_SIZE_BUSY_R(sid, instance) \
735 HIGH_OFFSET_IN_4K(sid, instance) + \
736 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
737 nvme_query_xcoder_query_instance, \
738 nvme_query_xcoder_instance_read_buf_size_busy)
739#define QUERY_INSTANCE_WBUFF_SIZE_BUSY_R(sid, instance) \
740 HIGH_OFFSET_IN_4K(sid, instance) + \
741 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
742 nvme_query_xcoder_query_instance, \
743 nvme_query_xcoder_instance_write_buf_size_busy)
744#define QUERY_INSTANCE_UPLOAD_ID_R(sid, instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
745 nvme_query_xcoder_query_instance,nvme_query_xcoder_instance_upload_idx)
746#define QUERY_INSTANCE_ACQUIRE_BUF(sid, instance) \
747 HIGH_OFFSET_IN_4K(sid, instance) + \
748 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
749 nvme_query_xcoder_query_instance, \
750 nvme_query_xcoder_instance_acquire_buf)
751
752#define QUERY_INSTANCE_HW_OUT_SIZE_R(sid, instance) \
753 HIGH_OFFSET_IN_4K(sid, instance) + \
754 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
755 nvme_query_xcoder_query_instance, \
756 nvme_query_xcoder_instance_read_output_buf_size)
757
758#define QUERY_INSTANCE_NL_SIZE_R(sid, instance) \
759 HIGH_OFFSET_IN_4K(sid, instance) + \
760 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
761 nvme_query_xcoder_query_instance, \
762 nvme_query_xcoder_instance_network_layer_size)
763#define QUERY_INSTANCE_NL_R(sid, instance) \
764 HIGH_OFFSET_IN_4K(sid, instance) + \
765 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
766 nvme_query_xcoder_query_instance, \
767 nvme_query_xcoder_instance_read_network_layer)
768
769#define QUERY_INSTANCE_NL_SIZE_V2_R(sid, instance) \
770 HIGH_OFFSET_IN_4K(sid, instance) + \
771 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
772 nvme_query_xcoder_query_instance, \
773 nvme_query_xcoder_instance_network_layer_size_v2)
774
775#define QUERY_INSTANCE_NL_V2_R(sid, instance) \
776 HIGH_OFFSET_IN_4K(sid, instance) + \
777 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
778 nvme_query_xcoder_query_instance, \
779 nvme_query_xcoder_instance_read_network_layer_v2)
780
781#define QUERY_INSTANCE_METRICS_R(sid, instance) \
782 HIGH_OFFSET_IN_4K(sid, instance) + \
783 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
784 nvme_query_xcoder_query_instance, \
785 nvme_query_xcoder_instance_read_perf_metrics)
786
787#define QUERY_GENERAL_GET_STATUS_R(instance) HIGH_OFFSET_IN_4K(0,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
788 nvme_query_xcoder_query_general,nvme_query_xcoder_general_get_status)
789
790#define QUERY_DETAIL_GET_STATUS_R(instance) HIGH_OFFSET_IN_4K(0,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
791 nvme_query_xcoder_query_general,nvme_query_xcoder_general_get_detail_info)
792#define QUERY_DETAIL_GET_STATUS_V1_R(instance) HIGH_OFFSET_IN_4K(0,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_query), \
793 nvme_query_xcoder_query_general,nvme_query_xcoder_general_get_detail_info_v1)
794
795#define QUERY_GET_NVME_STATUS_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
796 nvme_xcoder_general_status_query, 0)
797#define QUERY_GET_VERSIONS_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
798 nvme_xcoder_general_versions_query, 0)
799
800#define QUERY_GET_NS_VF_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
801 nvme_xcoder_general_nsvf_query, 0)
802#define QUERY_GET_TEMPERATURE_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
803 nvme_xcoder_general_temperature_query, 0)
804#define QUERY_GET_EXTTRA_INFO_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
805 nvme_xcoder_general_extra_info_query, 0)
806#define QUERY_GET_QOS_INFO_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
807 nvme_xcoder_general_qos_info_query, 0)
808#define QUERY_GET_QOS_NS_INFO_R HIGH_OFFSET_IN_4K(0,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_general), \
809 nvme_xcoder_general_qos_ns_query, 0)
810
811//config instance
812#define CONFIG_INSTANCE_SetSOS_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
813 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_sos)
814#define CONFIG_INSTANCE_SetEOS_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
815 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_eos)
816#define CONFIG_INSTANCE_Flush_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
817 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_flush)
818
819#define CONFIG_INSTANCE_SetDecPara_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
820 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_dec_params)
821#define CONFIG_INSTANCE_SetDecPpuPara_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
822 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_ppu_params)
823#define CONFIG_INSTANCE_SetScalerPara_W(sid, instance) \
824 HIGH_OFFSET_IN_4K(sid, instance) + \
825 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
826 nvme_config_xcoder_config_instance, \
827 nvme_config_xcoder_config_set_scaler_params)
828#define CONFIG_INSTANCE_SetScalerAlloc_W(sid, instance) \
829 HIGH_OFFSET_IN_4K(sid, instance) + \
830 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
831 nvme_config_xcoder_config_instance, \
832 nvme_config_xcoder_config_alloc_frame)
833
834#define CONFIG_INSTANCE_SetScalerDrawBoxPara_W(sid, instance) \
835 HIGH_OFFSET_IN_4K(sid, instance) + \
836 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
837 nvme_config_xcoder_config_instance, \
838 nvme_config_xcoder_config_set_scaler_drawbox_params)
839
840#define CONFIG_INSTANCE_SetScalerWatermarkPara_W(sid, instance) \
841 HIGH_OFFSET_IN_4K(sid, instance) + \
842 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
843 nvme_config_xcoder_config_instance, \
844 nvme_config_xcoder_config_set_scaler_watermark_params)
845
846#define CONFIG_INSTANCE_SetEncPara_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
847 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_enc_params)
848#define CONFIG_INSTANCE_UpdateEncPara_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
849 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_update_enc_params)
850#define CONFIG_INSTANCE_SetEncFramePara_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
851 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_enc_frame_params)
852#define CONFIG_INSTANCE_SetPktSize_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
853 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_write_legth)
854#define CONFIG_INSTANCE_SetSeqChange_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
855 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_sequence_change)
856#define CONFIG_INSTANCE_SetEncRoiQpMap_W(sid,instance) HIGH_OFFSET_IN_4K(sid,instance) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
857 nvme_config_xcoder_config_instance,nvme_config_xcoder_config_set_roi_qp_map)
858#define CONFIG_INSTANCE_SetAiPara_W(sid, instance) \
859 HIGH_OFFSET_IN_4K(sid, instance) + \
860 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
861 nvme_config_xcoder_config_instance, \
862 nvme_config_xcoder_config_set_network_binary)
863#define CONFIG_INSTANCE_SetAiHVSPlus_W(sid, instance) \
864 HIGH_OFFSET_IN_4K(sid, instance) + \
865 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
866 nvme_config_xcoder_config_instance, \
867 nvme_config_xcoder_config_hvsplus)
868#define CONFIG_INSTANCE_SetAiFrm_W(sid, instance) \
869 HIGH_OFFSET_IN_4K(sid, instance) + \
870 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
871 nvme_config_xcoder_config_instance, \
872 nvme_config_xcoder_config_alloc_frame)
873
874#define CONFIG_INSTANCE_SetP2P_W(sid,instance) \
875 HIGH_OFFSET_IN_4K(sid, instance) + \
876 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
877 nvme_config_xcoder_config_instance, \
878 nvme_config_xcoder_config_set_p2p_params)
879
880//config session
881#define CONFIG_SESSION_KeepAlive_W(sid) HIGH_OFFSET_IN_4K(sid,1) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
882 nvme_config_xcoder_config_session,nvme_config_xcoder_config_session_keep_alive)
883#define CONFIG_SESSION_Read_W(sid) HIGH_OFFSET_IN_4K(sid,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
884 nvme_config_xcoder_config_session,nvme_config_xcoder_config_session_read)
885#define CONFIG_SESSION_Write_W(sid) HIGH_OFFSET_IN_4K(sid,0) + CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
886 nvme_config_xcoder_config_session,nvme_config_xcoder_config_session_write)
887
888#define CLEAR_INSTANCE_BUF_W(frame_id) CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_recycle_buffer), 0, (frame_id & 0x00FF)) + (((frame_id & 0xFF00)>>8)<<NI_INSTANCE_TYPE_OFFSET)
889
890#define SEND_P2P_BUF_W CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_p2p_send), 0, 0)
891
892#define CONFIG_SESSION_KeepAliveTimeout_W(sid) \
893 HIGH_OFFSET_IN_4K(sid, 0) + \
894 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
895 nvme_config_xcoder_config_session, \
896 nvme_config_xcoder_config_session_keep_alive_timeout)
897
898#define CONFIG_SESSION_SWVersion_W(sid) \
899 HIGH_OFFSET_IN_4K(sid, 0) + \
900 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
901 nvme_config_xcoder_config_session, \
902 nvme_config_xcoder_config_session_sw_version)
903
904#define CONFIG_GLOBAL_NAMESPACE_NUM \
905 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
906 nvme_config_xcoder_config_global, \
907 nvme_config_xcoder_config_namespace_num)
908
909#define CONFIG_SESSION_DDR_PRIORITY_W(sid) \
910 HIGH_OFFSET_IN_4K(sid, 0) + \
911 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
912 nvme_config_xcoder_config_session, \
913 nvme_config_xcoder_config_ddr_priority)
914
915#define CONFIG_SESSION_FRAME_COPY_W(sid) \
916 HIGH_OFFSET_IN_4K(sid, 0) + \
917 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
918 nvme_config_xcoder_config_session, \
919 nvme_config_xcoder_config_frame_clone)
920
921#define CONFIG_SESSION_SetHostTime_W(sid) \
922 HIGH_OFFSET_IN_4K(sid, 0) + \
923 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
924 nvme_config_xcoder_config_session, \
925 nvme_config_xcoder_config_session_host_time)
926
927#define CONFIG_INSTANCE_UploadModel_W(sid,instance) \
928 HIGH_OFFSET_IN_4K(sid, instance) + \
929 CTL_OFFSET_IN_4K(GAP(nvme_admin_cmd_xcoder_config), \
930 nvme_config_xcoder_config_instance, \
931 nvme_config_xcoder_config_set_upload_load)
932
933int32_t ni_nvme_send_read_cmd(ni_device_handle_t handle, ni_event_handle_t event_handle, void *p_data, uint32_t data_len, uint32_t lba);
934int32_t ni_nvme_send_write_cmd(ni_device_handle_t handle, ni_event_handle_t event_handle, void *p_data, uint32_t data_len, uint32_t lba);
935
936#ifdef __linux__
937static inline int32_t ni_aio_setup(unsigned nr, aio_context_t *ctxp)
938{
939 return syscall(__NR_io_setup, nr, ctxp);
940}
941
942static inline int32_t ni_aio_destroy(aio_context_t ctx)
943{
944 return syscall(__NR_io_destroy, ctx);
945}
946
947static inline int32_t ni_aio_submit(aio_context_t ctx, long nr, struct iocb **iocbpp)
948{
949 return syscall(__NR_io_submit, ctx, nr, iocbpp);
950}
951
952static inline int32_t ni_aio_getevents(aio_context_t ctx, long min_nr, long max_nr, struct io_event *events, struct timespec *timeout)
953{
954 return syscall(__NR_io_getevents, ctx, min_nr, max_nr, events, timeout);
955}
956
957void ni_nvme_setup_aio_iocb(ni_device_handle_t handle, ni_iocb_t *iocb,
958 void *p_data, uint32_t data_len, uint32_t lba,
959 int write);
960int32_t ni_nvme_batch_cmd_aio(aio_context_t ctx, ni_iocb_t **iocbs,
961 ni_io_event_t *events, int iocb_num);
962#endif
963
964#ifdef __cplusplus
965}
966#endif
Common NETINT definitions used by all modules.
#define NI_MAX_DEVICE_NAME_LEN
Definition ni_defs.h:236
#define NI_MAX_DEVICES_PER_HW_INSTANCE
Definition ni_defs.h:251
enum _ni_nvme_opcode ni_nvme_opcode_t
ni_retcode_t
Definition ni_defs.h:447
int32_t ni_nvme_send_io_cmd_thru_admin_queue(ni_nvme_admin_opcode_t opcode, ni_device_handle_t fd, ni_nvme_command_t *p_ni_nvme_cmd, uint32_t data_len, void *data, uint32_t *pResult)
enum _nvme_query_xcoder_subtype nvme_query_xcoder_subtype_t
enum _nvme_query_xcoder_general_subtype nvme_query_xcoder_general_subtype_t
_nvme_query_xcoder_subtype
Definition ni_nvme.h:356
@ nvme_query_xcoder_query_session
Definition ni_nvme.h:357
@ nvme_query_xcoder_query_instance
Definition ni_nvme.h:358
@ nvme_query_xcoder_query_general
Definition ni_nvme.h:359
_ni_nvme_admin_opcode
Definition ni_nvme.h:300
@ nvme_admin_cmd_xcoder_init_framepool
Definition ni_nvme.h:326
@ nvme_admin_cmd_create_cq
Definition ni_nvme.h:305
@ nvme_admin_cmd_identify
Definition ni_nvme.h:306
@ nvme_admin_cmd_xcoder_p2p_send
Definition ni_nvme.h:330
@ nvme_admin_cmd_async_event
Definition ni_nvme.h:310
@ nvme_admin_cmd_set_features
Definition ni_nvme.h:308
@ nvme_admin_cmd_xcoder_config
Definition ni_nvme.h:324
@ nvme_admin_cmd_ns_attach
Definition ni_nvme.h:314
@ nvme_admin_cmd_xcoder_general
Definition ni_nvme.h:328
@ nvme_admin_cmd_abort_cmd
Definition ni_nvme.h:307
@ nvme_admin_cmd_xcoder_load
Definition ni_nvme.h:329
@ nvme_admin_cmd_xcoder_open
Definition ni_nvme.h:318
@ nvme_admin_cmd_xcoder_query
Definition ni_nvme.h:320
@ nvme_admin_cmd_xcoder_read
Definition ni_nvme.h:322
@ nvme_admin_cmd_xcoder_identity
Definition ni_nvme.h:327
@ nvme_admin_cmd_delete_cq
Definition ni_nvme.h:304
@ nvme_admin_cmd_activate_fw
Definition ni_nvme.h:312
@ nvme_admin_cmd_xcoder_close
Definition ni_nvme.h:319
@ nvme_admin_cmd_format_nvm
Definition ni_nvme.h:315
@ nvme_admin_cmd_delete_sq
Definition ni_nvme.h:301
@ nvme_admin_cmd_download_fw
Definition ni_nvme.h:313
@ nvme_admin_cmd_xcoder_download_buffer
Definition ni_nvme.h:331
@ nvme_admin_cmd_xcoder_write
Definition ni_nvme.h:323
@ nvme_admin_cmd_get_log_page
Definition ni_nvme.h:303
@ nvme_admin_cmd_xcoder_recycle_buffer
Definition ni_nvme.h:325
@ nvme_admin_cmd_create_sq
Definition ni_nvme.h:302
@ nvme_admin_cmd_security_send
Definition ni_nvme.h:316
@ nvme_admin_cmd_get_features
Definition ni_nvme.h:309
@ nvme_admin_cmd_ns_mgmt
Definition ni_nvme.h:311
@ nvme_admin_cmd_xcoder_connect
Definition ni_nvme.h:321
@ nvme_admin_cmd_security_recv
Definition ni_nvme.h:317
enum _nvme_close_xcoder_subtype nvme_close_xcoder_subtype_t
struct _ni_nvme_identity ni_nvme_identity_t
struct _ni_nvme_write_complete_dw0_t ni_nvme_write_complete_dw0_t
enum _nvme_xcoder_general_subtype nvme_xcoder_general_subtype_t
_nvme_write_xcoder_subtype
Definition ni_nvme.h:351
@ nvme_write_xcoder_write_instance
Definition ni_nvme.h:352
ni_retcode_t ni_nvme_check_error_code(int rc, int opcode, uint32_t xcoder_type, uint32_t hw_id, uint32_t *inst_id)
Check f/w error return code, and if it's a fatal one, terminate application's decoding/encoding proce...
Definition ni_nvme.c:62
_nvme_config_xcoder_config_session_subtype
Definition ni_nvme.h:407
@ nvme_config_xcoder_config_ddr_priority
Definition ni_nvme.h:414
@ nvme_config_xcoder_config_session_read
Definition ni_nvme.h:409
@ nvme_config_xcoder_config_session_keep_alive
Definition ni_nvme.h:408
@ nvme_config_xcoder_config_session_host_time
Definition ni_nvme.h:416
@ nvme_config_xcoder_config_frame_clone
Definition ni_nvme.h:415
@ nvme_config_xcoder_config_session_write
Definition ni_nvme.h:410
@ nvme_config_xcoder_config_namespace_num
Definition ni_nvme.h:413
@ nvme_config_xcoder_config_session_keep_alive_timeout
Definition ni_nvme.h:411
@ nvme_config_xcoder_config_session_sw_version
Definition ni_nvme.h:412
_nvme_query_xcoder_instance_subtype
Definition ni_nvme.h:368
@ nvme_query_xcoder_instance_get_status
Definition ni_nvme.h:371
@ nvme_query_xcoder_instance_write_buf_size
Definition ni_nvme.h:380
@ nvme_query_xcoder_instance_read_buf_size_busy
Definition ni_nvme.h:388
@ nvme_query_xcoder_instance_write_buf_size_by_ep
Definition ni_nvme.h:377
@ nvme_query_xcoder_instance_read_buf_size
Definition ni_nvme.h:379
@ nvme_query_xcoder_instance_read_network_layer
Definition ni_nvme.h:386
@ nvme_query_xcoder_instance_dec_place_holder
Definition ni_nvme.h:384
@ nvme_query_xcoder_instance_write_buf_size_busy
Definition ni_nvme.h:389
@ nvme_query_xcoder_instance_get_stream_info
Definition ni_nvme.h:373
@ nvme_query_xcoder_instance_upload_idx
Definition ni_nvme.h:381
@ nvme_query_xcoder_instance_get_current_status
Definition ni_nvme.h:372
@ nvme_query_xcoder_instance_read_ai_hw_output
Definition ni_nvme.h:369
@ nvme_query_xcoder_instance_get_end_of_output
Definition ni_nvme.h:375
@ nvme_query_xcoder_instance_scl_place_holder
Definition ni_nvme.h:387
@ nvme_query_xcoder_instance_read_output_buf_size
Definition ni_nvme.h:383
@ nvme_query_xcoder_instance_network_layer_size_v2
Definition ni_nvme.h:374
@ nvme_query_xcoder_instance_read_perf_metrics
Definition ni_nvme.h:370
@ nvme_query_xcoder_instance_network_layer_size
Definition ni_nvme.h:382
@ nvme_query_xcoder_instance_read_network_layer_v2
Definition ni_nvme.h:376
@ nvme_query_xcoder_instance_acquire_buf
Definition ni_nvme.h:378
_nvme_query_xcoder_general_subtype
Definition ni_nvme.h:393
@ nvme_query_xcoder_general_get_detail_info
Definition ni_nvme.h:395
@ nvme_query_xcoder_general_get_status
Definition ni_nvme.h:394
@ nvme_query_xcoder_general_get_detail_info_v1
Definition ni_nvme.h:396
_nvme_query_xcoder_session_subtype
Definition ni_nvme.h:363
@ nvme_query_xcoder_session_get_stats
Definition ni_nvme.h:364
int32_t ni_nvme_send_read_cmd(ni_device_handle_t handle, ni_event_handle_t event_handle, void *p_data, uint32_t data_len, uint32_t lba)
Compose an io read command.
Definition ni_nvme.c:554
enum _nvme_query_xcoder_instance_subtype nvme_query_xcoder_instance_subtype_t
enum _nvme_config_xcoder_config_session_subtype nvme_config_xcoder_config_session_subtype_t
int32_t ni_nvme_send_io_cmd(ni_nvme_opcode_t opcode, ni_device_handle_t fd, ni_nvme_command_t *p_ni_nvme_cmd, uint32_t data_len, void *data, uint32_t *pResult)
Compose a nvme io command.
Definition ni_nvme.c:397
int32_t ni_nvme_send_admin_cmd(ni_nvme_admin_opcode_t opcode, ni_device_handle_t fd, ni_nvme_command_t *p_ni_nvme_cmd, uint32_t data_len, void *data, uint32_t *pResult)
Compose a nvme admin command.
Definition ni_nvme.c:350
uint32_t ni_nvme_result_t
Definition ni_nvme.h:463
enum _ni_nvme_admin_opcode ni_nvme_admin_opcode_t
_nvme_open_xcoder_subtype
Definition ni_nvme.h:335
@ nvme_open_xcoder_add_session
Definition ni_nvme.h:337
@ nvme_open_xcoder_create_session
Definition ni_nvme.h:336
_nvme_config_xcoder_subtype
Definition ni_nvme.h:400
@ nvme_config_xcoder_config_global
Definition ni_nvme.h:403
@ nvme_config_xcoder_config_session
Definition ni_nvme.h:401
@ nvme_config_xcoder_config_instance
Definition ni_nvme.h:402
int32_t ni_nvme_send_write_cmd(ni_device_handle_t handle, ni_event_handle_t event_handle, void *p_data, uint32_t data_len, uint32_t lba)
Compose a io write command.
Definition ni_nvme.c:661
_nvme_xcoder_general_subtype
Definition ni_nvme.h:445
@ nvme_xcoder_general_extra_info_query
Definition ni_nvme.h:450
@ nvme_xcoder_general_qos_info_query
Definition ni_nvme.h:451
@ nvme_xcoder_general_nsvf_query
Definition ni_nvme.h:448
@ nvme_xcoder_general_temperature_query
Definition ni_nvme.h:449
@ nvme_xcoder_general_status_query
Definition ni_nvme.h:446
@ nvme_xcoder_general_versions_query
Definition ni_nvme.h:447
@ nvme_xcoder_general_qos_ns_query
Definition ni_nvme.h:452
enum _nvme_write_xcoder_subtype nvme_write_xcoder_subtype_t
int ni_nvme_enumerate_devices(char ni_devices[][NI_MAX_DEVICE_NAME_LEN], int max_handles)
enum _nvme_query_xcoder_session_subtype nvme_query_xcoder_session_subtype_t
_nvme_config_xcoder_config_instance_subtype
Definition ni_nvme.h:420
@ nvme_config_xcoder_config_alloc_frame
Definition ni_nvme.h:437
@ nvme_config_xcoder_config_set_ppu_params
Definition ni_nvme.h:428
@ nvme_config_xcoder_config_hvsplus
Definition ni_nvme.h:431
@ nvme_config_xcoder_config_set_scaler_watermark_params
Definition ni_nvme.h:440
@ nvme_config_xcoder_config_set_scaler_drawbox_params
Definition ni_nvme.h:426
@ nvme_config_xcoder_config_set_enc_params
Definition ni_nvme.h:423
@ nvme_config_xcoder_config_set_network_binary
Definition ni_nvme.h:433
@ nvme_config_xcoder_config_set_upload_load
Definition ni_nvme.h:430
@ nvme_config_xcoder_config_set_roi_qp_map
Definition ni_nvme.h:435
@ nvme_config_xcoder_config_set_p2p_params
Definition ni_nvme.h:427
@ nvme_config_xcoder_config_set_sos
Definition ni_nvme.h:421
@ nvme_config_xcoder_config_flush
Definition ni_nvme.h:429
@ nvme_config_xcoder_config_set_dec_params
Definition ni_nvme.h:424
@ nvme_config_xcoder_config_set_write_legth
Definition ni_nvme.h:436
@ nvme_config_xcoder_config_update_enc_params
Definition ni_nvme.h:432
@ nvme_config_xcoder_config_set_scaler_params
Definition ni_nvme.h:425
@ nvme_config_xcoder_config_set_sequence_change
Definition ni_nvme.h:438
@ nvme_config_xcoder_config_set_eos
Definition ni_nvme.h:422
@ nvme_config_xcoder_config_set_enc_frame_params
Definition ni_nvme.h:434
@ nvme_config_xcoder_instance_read_buf_size_busy_place_holder
Definition ni_nvme.h:439
@ nvme_config_xcoder_instance_write_buf_size_busy_place_holder
Definition ni_nvme.h:441
enum _nvme_read_xcoder_subtype nvme_read_xcoder_subtype_t
enum _nvme_config_xcoder_subtype nvme_config_xcoder_subtype_t
struct _ni_nvme_identity_xcoder_hw ni_nvme_identity_xcoder_hw_t
enum _nvme_config_xcoder_config_instance_subtype nvme_config_xcoder_config_instance_subtype_t
struct _ni_nvme_command ni_nvme_command_t
_nvme_close_xcoder_subtype
Definition ni_nvme.h:341
@ nvme_close_xcoder_destroy_session
Definition ni_nvme.h:342
struct _ni_nvme_id_power_state ni_nvme_id_power_state_t
_nvme_read_xcoder_subtype
Definition ni_nvme.h:346
@ nvme_read_xcoder_read_instance
Definition ni_nvme.h:347
enum _nvme_open_xcoder_subtype nvme_open_xcoder_subtype_t
uint32_t cdw10
Definition ni_nvme.h:44
uint32_t cdw13
Definition ni_nvme.h:47
uint32_t cdw12
Definition ni_nvme.h:46
uint32_t cdw15
Definition ni_nvme.h:49
uint32_t cdw3
Definition ni_nvme.h:43
uint32_t cdw2
Definition ni_nvme.h:42
uint32_t cdw11
Definition ni_nvme.h:45
uint32_t cdw14
Definition ni_nvme.h:48
uint16_t ui16ActivePower
Definition ni_nvme.h:66
uint8_t ui8ActiveWorkScale
Definition ni_nvme.h:67
uint8_t aui8Rsvd23[9]
Definition ni_nvme.h:68
uint8_t hw_max_number_of_contexts
Definition ni_nvme.h:75
uint16_t ui16Acwu
Definition ni_nvme.h:138
uint8_t fw_build_id[256]
Definition ni_nvme.h:222
uint8_t ai8Fr[8]
Definition ni_nvme.h:97
uint16_t hw1_max_video_width
Definition ni_nvme.h:184
uint8_t hw2_video_profile
Definition ni_nvme.h:201
uint8_t xcoder_num_h264_decoder_hw
Definition ni_nvme.h:160
uint16_t ui16Oacs
Definition ni_nvme.h:108
uint8_t hw1_reserved[9]
Definition ni_nvme.h:190
uint8_t hw0_video_level
Definition ni_nvme.h:176
uint16_t ui16Cntlid
Definition ni_nvme.h:102
uint8_t ui8Rab
Definition ni_nvme.h:98
uint8_t xcoder_num_h264_encoder_hw
Definition ni_nvme.h:161
uint32_t ui32Rtd3r
Definition ni_nvme.h:104
uint8_t hw0_codec_type
Definition ni_nvme.h:170
uint8_t hw3_max_number_of_contexts
Definition ni_nvme.h:206
uint16_t hw2_max_video_width
Definition ni_nvme.h:197
ni_nvme_identity_xcoder_hw_t xcoder_devices[NI_MAX_DEVICES_PER_HW_INSTANCE]
Definition ni_nvme.h:232
uint16_t hw0_max_video_height
Definition ni_nvme.h:172
uint8_t hw1_codec_type
Definition ni_nvme.h:183
uint16_t hw3_max_video_height
Definition ni_nvme.h:211
uint8_t ui8Nvscc
Definition ni_nvme.h:136
uint16_t hw3_min_video_height
Definition ni_nvme.h:213
ni_nvme_id_power_state_t asPsd[32]
Definition ni_nvme.h:142
uint8_t aui8Rsvd534[2]
Definition ni_nvme.h:139
uint8_t hw2_codec_format
Definition ni_nvme.h:195
uint8_t ui8Npss
Definition ni_nvme.h:114
uint8_t aui8Rsvd540[1508]
Definition ni_nvme.h:141
uint16_t ui16Mtfa
Definition ni_nvme.h:119
uint8_t hw1_video_level
Definition ni_nvme.h:189
uint8_t ui8Cmic
Definition ni_nvme.h:100
uint8_t ui8Apsta
Definition ni_nvme.h:116
uint8_t hw1_max_number_of_contexts
Definition ni_nvme.h:180
uint16_t hw1_min_video_width
Definition ni_nvme.h:186
uint32_t ui32Sgls
Definition ni_nvme.h:140
uint8_t fw_commit_time[26]
Definition ni_nvme.h:219
uint32_t ui32Nn
Definition ni_nvme.h:129
uint8_t hw0_reserved[9]
Definition ni_nvme.h:177
uint32_t ui32Rtd3e
Definition ni_nvme.h:105
uint8_t aui8Rsvd316[196]
Definition ni_nvme.h:125
uint8_t aui8Ieee[3]
Definition ni_nvme.h:99
uint8_t xcoder_num_h265_decoder_hw
Definition ni_nvme.h:162
uint8_t ui8Elpe
Definition ni_nvme.h:113
uint8_t ui8NegPcieLnkWid
Definition ni_nvme.h:147
uint8_t aui8FwLoaderRev[8]
Definition ni_nvme.h:149
uint32_t ui32Rpmbs
Definition ni_nvme.h:124
uint8_t hw3_reserved[9]
Definition ni_nvme.h:216
uint8_t ui8Rsvd514[2]
Definition ni_nvme.h:128
uint8_t ui8NbFlashChan
Definition ni_nvme.h:150
uint8_t fw_commit_hash[41]
Definition ni_nvme.h:220
uint32_t ui32Hmmin
Definition ni_nvme.h:121
uint8_t xcoder_num_elements
Definition ni_nvme.h:229
uint8_t aui8Unvmcap[16]
Definition ni_nvme.h:123
uint16_t ui16ChipVer
Definition ni_nvme.h:148
uint8_t hw0_max_1080p_fps
Definition ni_nvme.h:168
uint16_t hw1_max_video_height
Definition ni_nvme.h:185
uint8_t ui8Frmw
Definition ni_nvme.h:111
uint8_t aui32Tnvmcap[16]
Definition ni_nvme.h:122
uint8_t ui8Mdts
Definition ni_nvme.h:101
uint8_t xcoder_num_devices
Definition ni_nvme.h:230
uint32_t ui32Ver
Definition ni_nvme.h:103
uint8_t hw2_reserved[9]
Definition ni_nvme.h:203
uint8_t ui8Rsvd531
Definition ni_nvme.h:137
uint16_t ui16Cctemp
Definition ni_nvme.h:118
uint8_t hw1_codec_format
Definition ni_nvme.h:182
uint8_t hw3_codec_format
Definition ni_nvme.h:208
uint8_t hw2_max_1080p_fps
Definition ni_nvme.h:194
uint8_t hw0_max_number_of_contexts
Definition ni_nvme.h:167
uint8_t hw3_video_level
Definition ni_nvme.h:215
uint32_t ui32Oaes
Definition ni_nvme.h:106
uint16_t ui16Ssvid
Definition ni_nvme.h:94
uint8_t fw_branch_name[256]
Definition ni_nvme.h:218
uint8_t hw2_codec_type
Definition ni_nvme.h:196
uint8_t sed_support
Definition ni_nvme.h:156
uint8_t hw1_max_1080p_fps
Definition ni_nvme.h:181
uint8_t ui8Sqes
Definition ni_nvme.h:126
uint8_t hw3_max_1080p_fps
Definition ni_nvme.h:207
uint16_t ui16Wctemp
Definition ni_nvme.h:117
uint16_t ui16Awun
Definition ni_nvme.h:134
uint8_t xcoder_reserved[11]
Definition ni_nvme.h:164
uint8_t fw_repo_info_padding[2]
Definition ni_nvme.h:223
uint32_t ui32Hmpre
Definition ni_nvme.h:120
uint16_t ui16Awupf
Definition ni_nvme.h:135
uint8_t aui8TotalRawCap[8]
Definition ni_nvme.h:145
uint16_t hw2_min_video_height
Definition ni_nvme.h:200
uint16_t hw0_min_video_height
Definition ni_nvme.h:174
uint8_t ui8Avscc
Definition ni_nvme.h:115
uint8_t ui8CurPcieLnkSpd
Definition ni_nvme.h:146
uint8_t hw3_codec_type
Definition ni_nvme.h:209
uint8_t xcoder_num_hw
Definition ni_nvme.h:159
uint16_t hw3_max_video_width
Definition ni_nvme.h:210
uint16_t hw3_min_video_width
Definition ni_nvme.h:212
uint8_t ai8Sn[20]
Definition ni_nvme.h:95
uint8_t fw_build_time[26]
Definition ni_nvme.h:221
uint8_t memory_cfg
Definition ni_nvme.h:225
uint8_t xcoder_cnt[14]
Definition ni_nvme.h:231
uint8_t ui8RAIDsupport
Definition ni_nvme.h:151
uint8_t ui8Aerl
Definition ni_nvme.h:110
uint16_t hw1_min_video_height
Definition ni_nvme.h:187
uint16_t hw0_max_video_width
Definition ni_nvme.h:171
uint8_t device_is_xcoder
Definition ni_nvme.h:155
uint16_t ui16Vid
Definition ni_nvme.h:93
uint16_t ui16Fuses
Definition ni_nvme.h:131
uint8_t hw0_video_profile
Definition ni_nvme.h:175
uint8_t hw3_video_profile
Definition ni_nvme.h:214
uint16_t hw0_min_video_width
Definition ni_nvme.h:173
uint16_t ui16Oncs
Definition ni_nvme.h:130
uint8_t ui8Cqes
Definition ni_nvme.h:127
uint16_t hw2_min_video_width
Definition ni_nvme.h:199
uint8_t aui8Rsvd96[160]
Definition ni_nvme.h:107
uint8_t xcoder_num_h265_encoder_hw
Definition ni_nvme.h:163
uint16_t hw2_max_video_height
Definition ni_nvme.h:198
uint8_t hw0_codec_format
Definition ni_nvme.h:169
uint8_t hw2_video_level
Definition ni_nvme.h:202
uint8_t hw1_video_profile
Definition ni_nvme.h:188
uint8_t ai8Mn[40]
Definition ni_nvme.h:96
uint8_t hw2_max_number_of_contexts
Definition ni_nvme.h:193