NVIDIA DriveOS Linux NSR SDK API Reference

7.0.3.0 Release
sivc-instance.h
Go to the documentation of this file.
1 //
2 // SPDX-FileCopyrightText: Copyright (c) 2019-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3 // SPDX-License-Identifier: LicenseRef-NvidiaProprietary
4 //
5 // NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
6 // property and proprietary rights in and to this material, related
7 // documentation and any modifications thereto. Any use, reproduction,
8 // disclosure or distribution of this material and related documentation
9 // without an express license agreement from NVIDIA CORPORATION or
10 // its affiliates is strictly prohibited.
11 //
12 
13 #ifndef SIVC_INSTANCE_H
14 #define SIVC_INSTANCE_H
15 
21 #ifdef __cplusplus
22 #include <cstddef>
23 #include <cstdint>
24 #else
25 #include <stddef.h>
26 #include <stdint.h>
27 #endif
28 
29 #include "ivclib-static-analysis.h"
30 #include "ivclib-fwd-decl.h"
31 
32 #define SIVC_ALIGN_SHIFT 6U
33 
34 #ifdef __cplusplus
35 #define SIVC_ALIGN (static_cast<uint32_t>(1U) << SIVC_ALIGN_SHIFT)
36 namespace Ivc {
37 extern "C" {
38 #else
39 #define SIVC_ALIGN (((uint32_t)1U) << SIVC_ALIGN_SHIFT)
40 #endif
41 
57 uint32_t sivc_align(uint32_t value);
58 
77 uint32_t sivc_fifo_size(uint32_t nframes, uint32_t frame_size);
78 
79 struct sivc_fifo_header;
80 
85 typedef void (*sivc_notify_function)(struct sivc_queue* queue);
86 
92 // STAN: It is necessary to use 'volatile' here to prevent optimization, as the data may be modified
93 // externally.
94 typedef void (*sivc_cache_invalidate_function)(const volatile void* addr,
95  size_t size);
96 
102 // STAN: It is necessary to use 'volatile' here to prevent optimization, as the data may be modified
103 // externally.
104 typedef void (*sivc_cache_flush_function)(const volatile void* addr,
105  size_t size);
106 
107 /* WARNING: This structure is a part of private IVC interface.
108  * You should not access any of its member directly. Please use helper
109  * functions instead.
110  * See sivc_get_nframes() and sivc_get_frame_size().
111  */
112 // STAN: It is necessary to use 'volatile' here to prevent optimization, as the data may be modified
113 // externally.
114 struct sivc_queue {
115  volatile struct sivc_fifo_header* recv_fifo;
116  volatile struct sivc_fifo_header* send_fifo;
117  uint32_t w_pos;
118  uint32_t r_pos;
119  uint32_t nframes;
120  uint32_t frame_size;
124 };
125 
211 int sivc_init(struct sivc_queue* queue,
212  uintptr_t recv_base, uintptr_t send_base,
213  uint32_t nframes, uint32_t frame_size, sivc_notify_function notify,
214  sivc_cache_invalidate_function cache_invalidate,
215  sivc_cache_flush_function sivc_cache_flush);
216 
219 #ifdef __cplusplus
220 } // extern "C"
221 } // namespace Ivc
222 #endif
223 
224 #endif // SIVC_INSTANCE_H
sivc_init
int sivc_init(struct sivc_queue *queue, uintptr_t recv_base, uintptr_t send_base, uint32_t nframes, uint32_t frame_size, sivc_notify_function notify, sivc_cache_invalidate_function cache_invalidate, sivc_cache_flush_function sivc_cache_flush)
Initialize IVC queue control structure.
sivc_cache_flush_function
void(* sivc_cache_flush_function)(const volatile void *addr, size_t size)
Callback: Flush cache for a given memory range.
Definition: sivc-instance.h:104
sivc_cache_invalidate_function
void(* sivc_cache_invalidate_function)(const volatile void *addr, size_t size)
Callback: Invalidate cache for a given memory range.
Definition: sivc-instance.h:94
sivc_queue::mem_cache_flush
sivc_cache_flush_function mem_cache_flush
Definition: sivc-instance.h:123
sivc_notify_function
void(* sivc_notify_function)(struct sivc_queue *queue)
Callback: signal the remote endpoint.
Definition: sivc-instance.h:85
sivc_queue::send_fifo
volatile struct sivc_fifo_header * send_fifo
Definition: sivc-instance.h:116
sivc_queue::r_pos
uint32_t r_pos
Definition: sivc-instance.h:118
sivc_queue::nframes
uint32_t nframes
Definition: sivc-instance.h:119
sivc_queue::frame_size
uint32_t frame_size
Definition: sivc-instance.h:120
void
typedef void(WFD_APIENTRY PFNWFDBINDSOURCETOPIPELINEWITHTIMESTAMPNV)(const WFDDevice device
sivc_queue::mem_cache_invalidate
sivc_cache_invalidate_function mem_cache_invalidate
Definition: sivc-instance.h:122
ivclib-static-analysis.h
ivclib-fwd-decl.h
sivc_queue::w_pos
uint32_t w_pos
Definition: sivc-instance.h:117
sivc_align
uint32_t sivc_align(uint32_t value)
Align a number.
sivc_fifo_size
uint32_t sivc_fifo_size(uint32_t nframes, uint32_t frame_size)
Calculate size of the memory needed for IVC fifo.
sivc_queue
Definition: sivc-instance.h:114
sivc_queue::notify
sivc_notify_function notify
Definition: sivc-instance.h:121
sivc_queue::recv_fifo
volatile struct sivc_fifo_header * recv_fifo
Definition: sivc-instance.h:115