NVIDIA DRIVE OS Linux SDK API Reference

5.2.3 Release
For Test and Development only

Detailed Description

The NvSciSync library allows applications to manage synchronization objects which coordinate when sequences of operations begin and end.

The following constants are defined and have type unsigned int:

In C and C++ these constants are guaranteed to be defined as global const variables.

Upon each new release of NvSciSync:

This version of this specification corresponds to NvSciSync version 1.0 (major version 1, minor version 0).

Different processes using the NvSciSync inter-process APIs may use different minor versions of NvSciSync within the same major version, provided that if a process uses a feature newer than another processor's NvSciSync version, the latter process does not import an unreconciled NvSciSyncAttrList (directly or indirectly) from the former process.

In general, an NvSciSync API call will not return an error code if it has caused any side effects other than allocating resources and subsequently freeing those resources.

In general, unless specified otherwise, if a NULL pointer is passed to an NvSciSync API call, the API call will either return NvSciError_BadParameter or (if there are other applicable error conditions as well) an error code corresponding to another error.

Each NvSciSyncAttrList is either unreconciled or reconciled. It is unreconciled if it was:

It is reconciled if it was:

Data Structures

struct  NvSciSyncFence
 Defines the opaque NvSciSyncFence. More...
 
struct  NvSciSyncFenceIpcExportDescriptor
 Defines the exported form of NvSciSyncFence intended to be shared across an NvSciIpc channel. More...
 
struct  NvSciSyncObjIpcExportDescriptor
 Defines the exported form of NvSciSyncObj intended to be shared across an NvSciIpc channel. More...
 
struct  NvSciSyncAttrKeyValuePair
 This structure defines a key/value pair used to get or set the NvSciSyncAttrKey(s) and their corresponding values from or to NvSciSyncAttrList. More...
 

Typedefs

typedef struct NvSciSyncModuleRec * NvSciSyncModule
 Represents an instance of the NvSciSyncModule. More...
 
typedef struct NvSciSyncCpuWaitContextRec * NvSciSyncCpuWaitContext
 Represents the right to perform a CPU wait on an NvSciSyncFence. More...
 
typedef struct NvSciSyncObjRec * NvSciSyncObj
 A Synchronization Object is a container holding the reconciled NvSciSyncAttrList defining constraints of the Fence and the handle of the actual Primitive, with access permissions being enforced by the NvSciSyncAttrKey_RequiredPerm and NvSciSyncAttrKey_NeedCpuAccess Attribute Keys. More...
 
typedef const struct NvSciSyncObjRec * NvSciSyncObjConst
 A reference, that is not modifiable, to a particular Synchronization Object. More...
 
typedef struct NvSciSyncAttrListRec * NvSciSyncAttrList
 A container constituting an NvSciSyncAttrList which contains: More...
 

Enumerations

enum  NvSciSyncAccessPerm {
  NvSciSyncAccessPerm_WaitOnly = (uint64_t)1U << 0U,
  NvSciSyncAccessPerm_SignalOnly = (uint64_t)1U << 1U,
  NvSciSyncAccessPerm_WaitSignal = NvSciSyncAccessPerm_WaitOnly | NvSciSyncAccessPerm_SignalOnly,
  NvSciSyncAccessPerm_Auto = (uint64_t)1U << 63U
}
 Describes NvSciSyncObj access permissions. More...
 
enum  NvSciSyncAttrKey {
  NvSciSyncAttrKey_LowerBound,
  NvSciSyncAttrKey_NeedCpuAccess,
  NvSciSyncAttrKey_RequiredPerm,
  NvSciSyncAttrKey_ActualPerm,
  NvSciSyncAttrKey_WaiterContextInsensitiveFenceExports,
  NvSciSyncAttrKey_WaiterRequireTimestamps,
  NvSciSyncAttrKey_UpperBound
}
 Describes the NvSciSync public attribute keys holding corresponding values specifying synchronization object constraints. More...
 

Functions

NvSciError NvSciSyncModuleOpen (NvSciSyncModule *newModule)
 Initializes and returns a new NvSciSyncModule with no NvSciSyncAttrLists, NvSciSyncCpuWaitContexts, NvSciSyncObjs or NvSciSyncFences bound to it. More...
 
void NvSciSyncModuleClose (NvSciSyncModule module)
 Releases an instance of the NvSciSyncModule that was obtained through an earlier call to NvSciSyncModuleOpen(). More...
 
NvSciError NvSciSyncCpuWaitContextAlloc (NvSciSyncModule module, NvSciSyncCpuWaitContext *newContext)
 Allocates a new NvSciSyncCpuWaitContext. More...
 
void NvSciSyncCpuWaitContextFree (NvSciSyncCpuWaitContext context)
 Releases the NvSciSyncCpuWaitContext. More...
 
NvSciError NvSciSyncAttrListCreate (NvSciSyncModule module, NvSciSyncAttrList *attrList)
 Creates a new, single-slot unreconciled NvSciSyncAttrList associated with the input NvSciSyncModule with empty NvSciSyncAttrKeys. More...
 
void NvSciSyncAttrListFree (NvSciSyncAttrList attrList)
 Frees the NvSciSyncAttrList and removes its association with the NvSciSyncModule with which it was created. More...
 
NvSciError NvSciSyncAttrListIsReconciled (NvSciSyncAttrList attrList, bool *isReconciled)
 Checks if the NvSciSyncAttrList is reconciled. More...
 
NvSciError NvSciSyncAttrListValidateReconciled (NvSciSyncAttrList reconciledAttrList, const NvSciSyncAttrList inputUnreconciledAttrListArray[], size_t inputUnreconciledAttrListCount, bool *isReconciledListValid)
 Validates a reconciled NvSciSyncAttrList against a set of input unreconciled NvSciSyncAttrLists. More...
 
NvSciError NvSciSyncAttrListSetAttrs (NvSciSyncAttrList attrList, const NvSciSyncAttrKeyValuePair *pairArray, size_t pairCount)
 Sets the values for NvSciSyncAttrKey(s) in slot 0 of the input NvSciSyncAttrList. More...
 
NvSciError NvSciSyncAttrListGetAttrs (NvSciSyncAttrList attrList, NvSciSyncAttrKeyValuePair *pairArray, size_t pairCount)
 Gets the value of NvSciSyncAttrKey from slot 0 of the input NvSciSyncAttrList. More...
 
size_t NvSciSyncAttrListGetSlotCount (NvSciSyncAttrList attrList)
 Gets the slot count per NvSciSyncAttrKey in a NvSciSyncAttrList. More...
 
NvSciError NvSciSyncAttrListAppendUnreconciled (const NvSciSyncAttrList inputUnreconciledAttrListArray[], size_t inputUnreconciledAttrListCount, NvSciSyncAttrList *newUnreconciledAttrList)
 Appends multiple unreconciled NvSciSyncAttrLists together, forming a single new unreconciled NvSciSyncAttrList with a slot count equal to the sum of all the slot counts of NvSciSyncAttrList(s) in the input array. More...
 
NvSciError NvSciSyncAttrListClone (NvSciSyncAttrList origAttrList, NvSciSyncAttrList *newAttrList)
 Clones an NvSciSyncAttrList. More...
 
NvSciError NvSciSyncAttrListSlotGetAttrs (NvSciSyncAttrList attrList, size_t slotIndex, NvSciSyncAttrKeyValuePair *pairArray, size_t pairCount)
 Gets the value(s) of NvSciSyncAttrKey(s) from an NvSciSyncAttrList at given slot index in a multi-slot unreconciled NvSciSyncAttrList. More...
 
NvSciError NvSciSyncAttrListReconcile (const NvSciSyncAttrList inputArray[], size_t inputCount, NvSciSyncAttrList *newReconciledList, NvSciSyncAttrList *newConflictList)
 Reconciles the input unreconciled NvSciSyncAttrLists into a new reconciled NvSciSyncAttrList. More...
 
NvSciError NvSciSyncAttrListDebugDump (NvSciSyncAttrList attrList, void **buf, size_t *len)
 Dumps the NvSciSyncAttrList into a binary descriptor. More...
 
NvSciError NvSciSyncAttrListIpcExportUnreconciled (const NvSciSyncAttrList unreconciledAttrListArray[], size_t unreconciledAttrListCount, NvSciIpcEndpoint ipcEndpoint, void **descBuf, size_t *descLen)
 Transforms the input unreconciled NvSciSyncAttrList(s) to an exportable unreconciled NvSciSyncAttrList descriptor that can be transported by the application to any remote process as a serialized set of bytes over an NvSciIpc channel. More...
 
NvSciError NvSciSyncAttrListIpcExportReconciled (const NvSciSyncAttrList reconciledAttrList, NvSciIpcEndpoint ipcEndpoint, void **descBuf, size_t *descLen)
 Transforms the reconciled NvSciSyncAttrList to an exportable reconciled NvSciSyncAttrList descriptor that can be transported by the application to any remote process as a serialized set of bytes over an NvSciIpc channel. More...
 
NvSciError NvSciSyncAttrListIpcImportUnreconciled (NvSciSyncModule module, NvSciIpcEndpoint ipcEndpoint, const void *descBuf, size_t descLen, NvSciSyncAttrList *importedUnreconciledAttrList)
 Transforms an exported unreconciled NvSciSyncAttrList descriptor (potentially received from any process) into an unreconciled NvSciSyncAttrList. More...
 
NvSciError NvSciSyncAttrListIpcImportReconciled (NvSciSyncModule module, NvSciIpcEndpoint ipcEndpoint, const void *descBuf, size_t descLen, const NvSciSyncAttrList inputUnreconciledAttrListArray[], size_t inputUnreconciledAttrListCount, NvSciSyncAttrList *importedReconciledAttrList)
 Translates an exported reconciled NvSciSyncAttrList descriptor (potentially received from any process) into a reconciled NvSciSyncAttrList. More...
 
void NvSciSyncAttrListFreeDesc (void *descBuf)
 Frees an exported NvSciSyncAttrList descriptor previously returned by any NvSciSyncAttrList exporting function. More...
 
void NvSciSyncFenceClear (NvSciSyncFence *syncFence)
 Frees any resources allocated for the NvSciSyncFence. More...
 
NvSciError NvSciSyncFenceDup (const NvSciSyncFence *srcSyncFence, NvSciSyncFence *dstSyncFence)
 Duplicates the given NvSciSyncFence, such that any wait on duplicated NvSciSyncFence will complete at the same time as a wait on given NvSciSyncFence. More...
 
NvSciError NvSciSyncObjAlloc (NvSciSyncAttrList reconciledList, NvSciSyncObj *syncObj)
 Allocates and initializes a NvSciSyncObj that meets all the constraints specified in the given Reconciled NvSciSyncAttrList. More...
 
NvSciError NvSciSyncObjDup (NvSciSyncObj syncObj, NvSciSyncObj *dupObj)
 Creates a new NvSciSyncObj holding a reference to the original resources to which the input NvSciSyncObj holds reference to. More...
 
NvSciError NvSciSyncObjGetAttrList (NvSciSyncObj syncObj, NvSciSyncAttrList *syncAttrList)
 Retrieves the Reconciled NvSciSyncAttrList associated with an input NvSciSyncObj. More...
 
void NvSciSyncObjFree (NvSciSyncObj syncObj)
 Destroys a valid NvSciSyncObj and frees any resources that were allocated for it. More...
 
NvSciError NvSciSyncObjIpcExport (NvSciSyncObj syncObj, NvSciSyncAccessPerm permissions, NvSciIpcEndpoint ipcEndpoint, NvSciSyncObjIpcExportDescriptor *desc)
 Exports an NvSciSyncObj into an NvSciIpc-transferable object binary descriptor. More...
 
NvSciError NvSciSyncObjIpcImport (NvSciIpcEndpoint ipcEndpoint, const NvSciSyncObjIpcExportDescriptor *desc, NvSciSyncAttrList inputAttrList, NvSciSyncAccessPerm permissions, int64_t timeoutUs, NvSciSyncObj *syncObj)
 Creates and returns an NvSciSyncObj based on the supplied binary descriptor describing an exported NvSciSyncObj. More...
 
NvSciError NvSciSyncIpcExportFence (const NvSciSyncFence *syncFence, NvSciIpcEndpoint ipcEndpoint, NvSciSyncFenceIpcExportDescriptor *desc)
 Exports the input NvSciSyncFence into a binary descriptor shareable across the NvSciIpc channel. More...
 
NvSciError NvSciSyncIpcImportFence (NvSciSyncObj syncObj, const NvSciSyncFenceIpcExportDescriptor *desc, NvSciSyncFence *syncFence)
 Fills in the NvSciSyncFence based on the input binary descriptor. More...
 
NvSciError NvSciSyncObjGenerateFence (NvSciSyncObj syncObj, NvSciSyncFence *syncFence)
 Generates next point on sync timeline of an NvSciSyncObj and fills in the supplied NvSciSyncFence object. More...
 
NvSciError NvSciSyncObjSignal (NvSciSyncObj syncObj)
 Signals the NvSciSyncObj using the reconciled primitive that was allocated along with the NvSciSyncObj. More...
 
NvSciError NvSciSyncFenceWait (const NvSciSyncFence *syncFence, NvSciSyncCpuWaitContext context, int64_t timeoutUs)
 Performs a synchronous wait on the NvSciSyncFence object until the NvSciSyncFence has been signaled or the timeout expires. More...
 
NvSciError NvSciSyncFenceGetTimestamp (const NvSciSyncFence *syncFence, uint64_t *timestampUS)
 Read the timestamp associated with the NvSciSyncFence. More...
 
NvSciError NvSciSyncAttrListGetAttr (NvSciSyncAttrList attrList, NvSciSyncAttrKey key, const void **value, size_t *len)
 Gets the attribute value from the slot 0 of the passed NvSciSyncAttrList with the given NvSciSyncAttrKey. More...
 
NvSciError NvSciSyncAttrListReconcileAndObjAlloc (const NvSciSyncAttrList inputArray[], size_t inputCount, NvSciSyncObj *syncObj, NvSciSyncAttrList *newConflictList)
 Reconciles the input Unreconciled NvSciSyncAttrList(s) into a new Reconciled NvSciSyncAttrList. More...
 
NvSciError NvSciSyncIpcExportAttrListAndObj (NvSciSyncObj syncObj, NvSciSyncAccessPerm permissions, NvSciIpcEndpoint ipcEndpoint, void **attrListAndObjDesc, size_t *attrListAndObjDescSize)
 Exports an NvSciSyncAttrList and NvSciSyncObj into an NvSciIpc-transferable object binary descriptor pointed to by data. More...
 
void NvSciSyncAttrListAndObjFreeDesc (void *attrListAndObjDescBuf)
 Frees an NvSciSyncIpcExportAttrListAndObj descriptor returned by a successful call to NvSciSyncIpcExportAttrListAndObj. More...
 
NvSciError NvSciSyncIpcImportAttrListAndObj (NvSciSyncModule module, NvSciIpcEndpoint ipcEndpoint, const void *attrListAndObjDesc, size_t attrListAndObjDescSize, NvSciSyncAttrList const attrList[], size_t attrListCount, NvSciSyncAccessPerm minPermissions, int64_t timeoutUs, NvSciSyncObj *syncObj)
 Creates an NvSciSyncObj based on the supplied binary descriptor returned from a successful call to NvSciSyncIpcExportAttrListAndObj that has not yet been freed via NvSciSyncAttrListAndObjFreeDesc. More...
 
NvSciError NvSciSyncCheckVersionCompatibility (uint32_t majorVer, uint32_t minorVer, bool *isCompatible)
 Checks if loaded library version is compatible with the supplied library build version. More...
 

Variables

static const uint32_t NvSciSyncMajorVersion = 2U
 NvSciSync major version number. More...
 
static const uint32_t NvSciSyncMinorVersion = 0U
 NvSciSync minor version number. More...
 
static const int64_t NvSciSyncFenceMaxTimeout = (0x7fffffffffffffff / 1000)
 Maximum supported timeout value. More...
 
static const NvSciSyncFence NvSciSyncFenceInitializer = {{0U}}
 Defines the value used to zero-initialize the NvSciSyncFence object. More...
 

NvSciSync blanket statements

Input/Output parameters

Output parameters

  • In general, output parameters are passed by reference through pointers. Also, since a null pointer cannot be used to convey an output parameter, API functions typically return an error code if a null pointer is supplied for a required output parameter unless otherwise stated explicitly. Output parameter is valid only if error code returned by an API is NvSciError_Success unless otherwise stated explicitly.

Concurrency

  • Every individual function can be called concurrently with itself without any side-effects unless otherwise stated explicitly in the interface specifications.
  • The conditions for combinations of functions that cannot be called concurrently or calling them concurrently leads to side effects are explicitly stated in the interface specifications.

Fence states

Typedef Documentation

◆ NvSciSyncAttrList

typedef struct NvSciSyncAttrListRec* NvSciSyncAttrList

A container constituting an NvSciSyncAttrList which contains:

  • set of NvSciSyncAttrKey attributes defining synchronization object constraints
  • slot count defining number of slots in an NvSciSyncAttrList
  • flag specifying if NvSciSyncAttrList is reconciled or unreconciled.
Note
Every NvSciSyncAttrList that has been created but not freed holds a reference to the NvSciSyncModule, preventing the module from being de-initialized.

Definition at line 308 of file nvscisync.h.

◆ NvSciSyncCpuWaitContext

typedef struct NvSciSyncCpuWaitContextRec* NvSciSyncCpuWaitContext

Represents the right to perform a CPU wait on an NvSciSyncFence.

It holds resources necessary to perform a CPU wait using NvSciSyncFenceWait(). It can be used to wait on NvSciSyncFence(s) associated with the same NvSciSyncModule that this NvSciSyncCpuWaitContext is associated with. An NvSciSyncCpuWaitContext can be used to wait on only one NvSciSyncFence at a time. However, a single NvSciSyncCpuWaitContext can be used to wait on different NvSciSyncFences at different instants of time.

Definition at line 202 of file nvscisync.h.

◆ NvSciSyncModule

typedef struct NvSciSyncModuleRec* NvSciSyncModule

Represents an instance of the NvSciSyncModule.

Any NvSciSyncAttrList created or imported using a particular NvSciSyncModule is bound to that module instance, along with any NvSciSyncObjs created or imported using those NvSciSyncAttrLists and any NvSciSyncFences created or imported using those NvSciSyncObjs.

Note
For any NvSciSync API call that has more than one input of type NvSciSyncModule, NvSciSyncAttrList, NvSciSyncObj, and/or NvSciSyncFence, all such inputs must agree on the NvSciSyncModule instance.

Definition at line 190 of file nvscisync.h.

◆ NvSciSyncObj

typedef struct NvSciSyncObjRec* NvSciSyncObj

A Synchronization Object is a container holding the reconciled NvSciSyncAttrList defining constraints of the Fence and the handle of the actual Primitive, with access permissions being enforced by the NvSciSyncAttrKey_RequiredPerm and NvSciSyncAttrKey_NeedCpuAccess Attribute Keys.

If Timestamps have been requested prior to Reconciliation via the NvSciSyncAttrKey_WaiterRequireTimestamps key, this will also hold the Timestamp Buffer allocated by NvSciBuf.

A reference to a particular Synchronization Object.

Note
Every NvSciSyncObj that has been created but not freed holds a reference to the NvSciSyncModule, preventing the module from being de-initialized.

Definition at line 289 of file nvscisync.h.

◆ NvSciSyncObjConst

typedef const struct NvSciSyncObjRec* NvSciSyncObjConst

A reference, that is not modifiable, to a particular Synchronization Object.

Definition at line 295 of file nvscisync.h.

Enumeration Type Documentation

◆ NvSciSyncAccessPerm

Describes NvSciSyncObj access permissions.

Enumerator
NvSciSyncAccessPerm_WaitOnly 

This represents the capability to monitor an NvSciSyncObj as it progresses through points on its sync timeline.

NvSciSyncAccessPerm_SignalOnly 

This represents the capability to advance an NvSciSyncObj to its next point on its sync timeline.

NvSciSyncAccessPerm_WaitSignal 

This represents the capability to advance an NvSciSyncObj to its next point on its sync timeline and also monitor when that next point is reached.

NvSciSyncAccessPerm_Auto 

Usage of Auto permissions is restricted only for export/import APIs and shouldn't be used as valid value for NvSciSyncAttrKey_RequiredPerm Attribute.

Definition at line 315 of file nvscisync.h.

◆ NvSciSyncAttrKey

Describes the NvSciSync public attribute keys holding corresponding values specifying synchronization object constraints.

Input attribute keys specify desired synchronization object constraints and can be set/retrieved from unreconciled NvSciSyncAttrList using NvSciSyncAttrListSetAttrs()/ NvSciSyncAttrListGetAttrs() respectively. Output attribute key specify actual constraints computed by NvSciSync if reconciliation succeeds. Output attribute can be retrieved from reconciled NvSciSyncAttrList using NvSciSyncAttrListGetAttrs().

Enumerator
NvSciSyncAttrKey_LowerBound 

Specifies the lower bound - for NvSciSync internal use only.

NvSciSyncAttrKey_NeedCpuAccess 

(bool, inout) Specifies if CPU access is required.

NvSciSyncAttrKey_RequiredPerm 

(NvSciSyncAccessPerm, inout) Specifies the required access permissions.

If NvSciSyncAttrKey_NeedCpuAccess is true, the CPU will be offered at least these permissions. Any hardware accelerators that contribute to this NvSciSyncAttrList will be offered at least these permissions.

NvSciSyncAttrKey_ActualPerm 

(NvSciSyncAccessPerm, out) Actual permission granted after reconciliation.

Note
This key is read-only.
NvSciSyncAttrKey_WaiterContextInsensitiveFenceExports 

(bool, inout) Importing and then exporting an NvSciSyncFenceIpcExportDescriptor has no side effects and yields an identical NvSciSyncFenceIpcExportDescriptor even if the NvSciIpcEndpoints used for import and export are different from ones used for NvSciSyncAttrList transporting.

NvSciSyncAttrKey_WaiterRequireTimestamps 

(bool, inout) Specifies if timestamps are required.

Only valid for waiters.

NvSciSyncAttrKey_UpperBound 

Specifies the upper bound - for NvSciSync internal use only.

Definition at line 352 of file nvscisync.h.

Function Documentation

◆ NvSciSyncAttrListAndObjFreeDesc()

void NvSciSyncAttrListAndObjFreeDesc ( void *  attrListAndObjDescBuf)

Frees an NvSciSyncIpcExportAttrListAndObj descriptor returned by a successful call to NvSciSyncIpcExportAttrListAndObj.

Parameters
[in]attrListAndObjDescBufExported NvSciSyncIpcExportAttrListAndObj descriptor to be freed.
Returns
void

◆ NvSciSyncAttrListAppendUnreconciled()

NvSciError NvSciSyncAttrListAppendUnreconciled ( const NvSciSyncAttrList  inputUnreconciledAttrListArray[],
size_t  inputUnreconciledAttrListCount,
NvSciSyncAttrList newUnreconciledAttrList 
)

Appends multiple unreconciled NvSciSyncAttrLists together, forming a single new unreconciled NvSciSyncAttrList with a slot count equal to the sum of all the slot counts of NvSciSyncAttrList(s) in the input array.

Parameters
[in]inputUnreconciledAttrListArrayArray containing the unreconciled NvSciSyncAttrList(s) to be appended together. Valid value: Array of unreconciled NvSciSyncAttrList(s) where the array size is at least 1.
[in]inputUnreconciledAttrListCountNumber of unreconciled NvSciSyncAttrList(s) in inputUnreconciledAttrListArray. Valid value: inputUnreconciledAttrListCount is valid input if it is non-zero.
[out]newUnreconciledAttrListAppended NvSciSyncAttrList created out of the input unreconciled NvSciSyncAttrList(s). The output NvSciSyncAttrList is non-writable.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • inputUnreconciledAttrListArray is NULL
    • inputUnreconciledAttrListCount is 0
    • newUnreconciledAttrList is NULL
    • any of the input NvSciSyncAttrLists in inputUnreconciledAttrListArray are not unreconciled
    • not all the NvSciSyncAttrLists in inputUnreconciledAttrListArray are bound to the same NvSciSyncModule instance.
  • NvSciError_InsufficientMemory if there is insufficient system memory to create the new unreconciled NvSciSyncAttrList.
  • NvSciError_Overflow if the combined slot counts of all the input NvSciSyncAttrLists exceeds UINT64_MAX
  • NvSciError_InvalidState if no more references can be taken for NvSciSyncModule associated with the NvSciSyncAttrList in inputUnreconciledAttrListArray to create the new NvSciSyncAttrList.
  • Panics if any of the input NvSciSyncAttrLists are not valid

◆ NvSciSyncAttrListClone()

NvSciError NvSciSyncAttrListClone ( NvSciSyncAttrList  origAttrList,
NvSciSyncAttrList newAttrList 
)

Clones an NvSciSyncAttrList.

The cloned NvSciSyncAttrList will contain all the values of the original NvSciSyncAttrList. If the original NvSciSyncAttrList is unreconciled, then modification will be allowed on the cloned NvSciSyncAttrList using set attributes APIs even if the attributes had been set in the original NvSciSyncAttrList, but the calls to set attributes in either NvSciSyncAttrList will not affect the other.

Parameters
[in]origAttrListNvSciSyncAttrList to be cloned.
[out]newAttrListThe new NvSciSyncAttrList.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncAttrListCreate()

NvSciError NvSciSyncAttrListCreate ( NvSciSyncModule  module,
NvSciSyncAttrList attrList 
)

Creates a new, single-slot unreconciled NvSciSyncAttrList associated with the input NvSciSyncModule with empty NvSciSyncAttrKeys.

Parameters
[in]moduleThe NvSciSyncModule instance with which to associate the new NvSciSyncAttrList.
[out]attrListThe new NvSciSyncAttrList.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncAttrListDebugDump()

NvSciError NvSciSyncAttrListDebugDump ( NvSciSyncAttrList  attrList,
void **  buf,
size_t *  len 
)

Dumps the NvSciSyncAttrList into a binary descriptor.

Note
This API can be used for debugging purpose.
Parameters
[in]attrListNvSciSyncAttrList to create the blob from.
[out]bufA pointer to binary descriptor buffer.
[out]lenThe length of the binary descriptor buffer created.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncAttrListFree()

void NvSciSyncAttrListFree ( NvSciSyncAttrList  attrList)

Frees the NvSciSyncAttrList and removes its association with the NvSciSyncModule with which it was created.

Parameters
[in]attrListThe NvSciSyncAttrList to be freed.
Returns
void
  • Panics if attrList is not valid.

◆ NvSciSyncAttrListFreeDesc()

void NvSciSyncAttrListFreeDesc ( void *  descBuf)

Frees an exported NvSciSyncAttrList descriptor previously returned by any NvSciSyncAttrList exporting function.

Parameters
[in]descBufThe exported NvSciSyncAttrList descriptor to be freed. The valid value is non-NULL.
Returns
void

◆ NvSciSyncAttrListGetAttr()

NvSciError NvSciSyncAttrListGetAttr ( NvSciSyncAttrList  attrList,
NvSciSyncAttrKey  key,
const void **  value,
size_t *  len 
)

Gets the attribute value from the slot 0 of the passed NvSciSyncAttrList with the given NvSciSyncAttrKey.

If an NvSciSyncAttrKey was not set, this function will set *value to NULL and *len to 0.

Parameters
[in]attrListNvSciSyncAttrList to retrieve the NvSciSyncAttrKey and value from.
[in]keyNvSciSyncAttrKey for which value to retrieve. Valid value: key is a valid input if it is an input or input/output attribute and it is > NvSciSyncAttrKey_LowerBound and < NvSciSyncAttrKey_UpperBound
[out]valueA pointer to the location where the attribute value is written.
[out]lenLength of the value.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncAttrListGetAttrs()

NvSciError NvSciSyncAttrListGetAttrs ( NvSciSyncAttrList  attrList,
NvSciSyncAttrKeyValuePair pairArray,
size_t  pairCount 
)

Gets the value of NvSciSyncAttrKey from slot 0 of the input NvSciSyncAttrList.

The return values, stored in NvSciSyncAttrKeyValuePair, consist of const void* pointers to the attribute values from NvSciSyncAttrList. The application must not write to this data. If an attribute was never set, the corresponding value will be set to NULL and length to 0.

Parameters
[in]attrListNvSciSyncAttrList to retrieve the value for given NvSciSyncAttrKey(s) from
[in,out]pairArrayA pointer to the array of NvSciSyncAttrKeyValuePair. Valid value: pairArray is valid input if it is not NULL and key member of every NvSciSyncAttrKeyValuePair in the array > NvSciSyncAttrKey_LowerBound and < NvSciSyncAttrKey_UpperBound.
[in]pairCountThe number of elements/entries in pairArray. Valid value: pairCount is valid input if it is non-zero.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • any argument is NULL
    • pairCount is 0
    • any of the keys in pairArray is not a supported NvSciSyncAttrKey
  • Panics if attrList is not valid

◆ NvSciSyncAttrListGetSlotCount()

size_t NvSciSyncAttrListGetSlotCount ( NvSciSyncAttrList  attrList)

Gets the slot count per NvSciSyncAttrKey in a NvSciSyncAttrList.

Parameters
[in]attrListNvSciSyncAttrList to get the slot count from.
Returns
Number of slots or 0 if attrList is NULL or panic if attrList is not valid

◆ NvSciSyncAttrListIpcExportReconciled()

NvSciError NvSciSyncAttrListIpcExportReconciled ( const NvSciSyncAttrList  reconciledAttrList,
NvSciIpcEndpoint  ipcEndpoint,
void **  descBuf,
size_t *  descLen 
)

Transforms the reconciled NvSciSyncAttrList to an exportable reconciled NvSciSyncAttrList descriptor that can be transported by the application to any remote process as a serialized set of bytes over an NvSciIpc channel.

Parameters
[in]reconciledAttrListThe NvSciSyncAttrList to be exported.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller may send the exported reconciled NvSciSyncAttrList descriptor.
[out]descBufA pointer to the new reconciled NvSciSyncAttrList descriptor, which the caller can deallocate later using NvSciSyncAttrListFreeDesc().
[out]descLenThe size of the new reconciled NvSciSyncAttrList descriptor.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • any argument is NULL
    • ipcEndpoint is not a valid NvSciIpcEndpoint
    • reconciledAttrList does not correspond to a waiter or a signaler
    • reconciledAttrList is not a reconciled NvSciSyncAttrList
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_ResourceError if system lacks resource other than memory.
  • NvSciError_InvalidState if no more references can be taken for NvSciSyncModule associated with reconciledAttrList to create the new NvSciSyncAttrList.
  • Panic if reconciledAttrList is not valid

◆ NvSciSyncAttrListIpcExportUnreconciled()

NvSciError NvSciSyncAttrListIpcExportUnreconciled ( const NvSciSyncAttrList  unreconciledAttrListArray[],
size_t  unreconciledAttrListCount,
NvSciIpcEndpoint  ipcEndpoint,
void **  descBuf,
size_t *  descLen 
)

Transforms the input unreconciled NvSciSyncAttrList(s) to an exportable unreconciled NvSciSyncAttrList descriptor that can be transported by the application to any remote process as a serialized set of bytes over an NvSciIpc channel.

Parameters
[in]unreconciledAttrListArrayNvSciSyncAttrList(s) to be exported. Valid value: Array of valid NvSciSyncAttrList(s) where the array size is at least 1.
[in]unreconciledAttrListCountNumber of NvSciSyncAttrList(s) in unreconciledAttrListArray. Valid value: unreconciledAttrListCount is valid input if it is non-zero.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller may send the exported unreconciled NvSciSyncAttrList descriptor.
[out]descBufA pointer to the new unreconciled NvSciSyncAttrList descriptor, which the caller can deallocate later using NvSciSyncAttrListFreeDesc().
[out]descLenThe size of the new unreconciled NvSciSyncAttrList descriptor.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • unreconciledAttrListCount is 0
    • unreconciledAttrListArray is NULL
    • ipcEndpoint is not a valid NvSciIpcEndpoint
    • descBuf is NULL
    • descLen is NULL
    • any of the input NvSciSyncAttrLists is not unreconciled
    • Not all of the NvSciSyncAttrLists in unreconciledAttrListArray are bound to the same NvSciSyncModule instance.
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_InvalidState if no more references can be taken for the NvSciSyncModule associated with unreconciledAttrListArray.
  • NvSciError_Overflow if the combined slot count of all the unreconciled NvSciSyncAttrList exceeds UINT64_MAX
  • NvSciError_ResourceError if system lacks resource other than memory.
  • NvSciError_NoSpace if no space is left in transport buffer to append the key-value pair.
  • Panic if any of the input NvSciSyncAttrLists is not valid.

◆ NvSciSyncAttrListIpcImportReconciled()

NvSciError NvSciSyncAttrListIpcImportReconciled ( NvSciSyncModule  module,
NvSciIpcEndpoint  ipcEndpoint,
const void *  descBuf,
size_t  descLen,
const NvSciSyncAttrList  inputUnreconciledAttrListArray[],
size_t  inputUnreconciledAttrListCount,
NvSciSyncAttrList importedReconciledAttrList 
)

Translates an exported reconciled NvSciSyncAttrList descriptor (potentially received from any process) into a reconciled NvSciSyncAttrList.

It also validates that the reconciled NvSciSyncAttrList to be imported will be a reconciled NvSciSyncAttrList that is consistent with the constraints in an array of input unreconciled NvSciSyncAttrList(s). This is recommended while importing what is expected to be a reconciled NvSciSyncAttrList to cause NvSciSync to validate the reconciled NvSciSyncAttrList against the input unreconciled NvSciSyncAttrList(s), so that the importing process can be sure that an NvSciSyncObj will satisfy the input constraints.

Parameters
[in]moduleThe NvSciSyncModule instance with which to associate the imported NvSciSyncAttrList.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller receives the exported reconciled NvSciSyncAttrList descriptor.
[in]descBufThe reconciled NvSciSyncAttrList descriptor to be transformed into a reconciled NvSciSyncAttrList. Valid value: descBuf is valid if it is non-NULL.
[in]descLenThe size of the reconciled NvSciSyncAttrList descriptor. Valid value: descLen is valid if it is not 0.
[in]inputUnreconciledAttrListArrayThe array of NvSciSyncAttrLists against which the new NvSciSyncAttrList is to be validated. Valid value: Array of valid NvSciSyncAttrList(s)
[in]inputUnreconciledAttrListCountThe number of NvSciSyncAttrLists in inputUnreconciledAttrListArray. If inputUnreconciledAttrListCount is non-zero, then this operation will fail with an error unless all the constraints of all the NvSciSyncAttrLists in inputUnreconciledAttrListArray are met by the imported NvSciSyncAttrList. Valid value: [0, SIZE_MAX]
[out]importedReconciledAttrListImported NvSciSyncAttrList.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • module is NULL
    • ipcEndpoint is not a valid NvSciIpcEndpoint
    • the array of bytes indicated by descBuf and descLen do not constitute a valid exported NvSciSyncAttrList descriptor for a reconciled NvSciSyncAttrList
    • inputUnreconciledAttrListArray is NULL but inputUnreconciledAttrListCount is not 0
    • any of the NvSciSyncAttrLists in inputUnreconciledAttrListArray are not unreconciled
    • any of the NvSciSyncAttrLists in inputUnreconciledAttrListArray is not bound to module.
  • NvSciError_AttrListValidationFailed if the NvSciSyncAttrList to be imported either would not be a reconciled NvSciSyncAttrList or would not meet at least one of constraints in one of the input unreconciled NvSciSyncAttrLists.
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_InvalidState if no more references can be taken on the NvSciSyncModule.
  • NvSciError_Overflow if internal integer overflow is detected.
  • NvSciError_ResourceError if system lacks resource other than memory.
  • Panics if module or any of the input NvSciSyncAttrLists are not valid

◆ NvSciSyncAttrListIpcImportUnreconciled()

NvSciError NvSciSyncAttrListIpcImportUnreconciled ( NvSciSyncModule  module,
NvSciIpcEndpoint  ipcEndpoint,
const void *  descBuf,
size_t  descLen,
NvSciSyncAttrList importedUnreconciledAttrList 
)

Transforms an exported unreconciled NvSciSyncAttrList descriptor (potentially received from any process) into an unreconciled NvSciSyncAttrList.

Parameters
[in]moduleThe NvSciSyncModule instance with which to associate the imported NvSciSyncAttrList.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller receives the exported unreconciled NvSciSyncAttrList descriptor.
[in]descBufThe unreconciled NvSciSyncAttrList descriptor to be translated into an unreconciled NvSciSyncAttrList. It should be the result of NvSciSyncAttrListIpcExportUnreconciled Valid value: descBuf is valid input if it is non-NULL.
[in]descLenThe size of the unreconciled NvSciSyncAttrList descriptor. Valid value: descLen is valid input if it is not 0.
[out]importedUnreconciledAttrListImported unreconciled NvSciSyncAttrList.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncAttrListIsReconciled()

NvSciError NvSciSyncAttrListIsReconciled ( NvSciSyncAttrList  attrList,
bool *  isReconciled 
)

Checks if the NvSciSyncAttrList is reconciled.

Parameters
[in]attrListNvSciSyncAttrList to check.
[out]isReconciledA pointer to a boolean to store whether the attrList is reconciled or not.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncAttrListReconcile()

NvSciError NvSciSyncAttrListReconcile ( const NvSciSyncAttrList  inputArray[],
size_t  inputCount,
NvSciSyncAttrList newReconciledList,
NvSciSyncAttrList newConflictList 
)

Reconciles the input unreconciled NvSciSyncAttrLists into a new reconciled NvSciSyncAttrList.

On success, this API call allocates memory for the reconciled NvSciSyncAttrList which has to be freed by the caller using NvSciSyncAttrListFree(). On reconciliation failure, this API call allocates memory for the conflicting NvSciSyncAttrList which has to be freed by the caller using NvSciSyncAttrListFree().

Parameters
[in]inputArrayArray containing unreconciled NvSciSyncAttrLists to be reconciled. Valid value: Array of valid NvSciSyncAttrLists where the array size is at least 1
[in]inputCountThe number of unreconciled NvSciSyncAttrLists in inputArray. Valid value: inputCount is valid input if is non-zero.
[out]newReconciledListReconciled NvSciSyncAttrList. This field is populated only if the reconciliation succeeded.
[out]newConflictListUnreconciled NvSciSyncAttrList consisting of the key/value pairs which caused the reconciliation failure. This field is populated only if the reconciliation failed.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • inputCount is 0
    • any of the input NvSciSyncAttrLists are not unreconciled
    • not all the NvSciSyncAttrLists in inputArray are bound to the same NvSciSyncModule instance.
    • any of the attributes in any of the input NvSciSyncAttrLists has an invalid value for that attribute
    • inputArray is NULL
    • newReconciledList is NULL
  • newConflictList is NULL
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_InvalidState if a new NvSciSyncAttrList cannot be associated with the NvSciSyncModule associated with the NvSciSyncAttrList(s) in the given inputArray to create a new reconciled NvSciSyncAttrList
  • NvSciError_Overflow if internal integer overflow is detected.
  • NvSciError_ReconciliationFailed if reconciliation failed because of conflicting attributes
  • NvSciError_UnsupportedConfig if there is an attribute mismatch between signaler and waiters.
  • Panics if any of the input NvSciSyncAttrLists is not valid

◆ NvSciSyncAttrListReconcileAndObjAlloc()

NvSciError NvSciSyncAttrListReconcileAndObjAlloc ( const NvSciSyncAttrList  inputArray[],
size_t  inputCount,
NvSciSyncObj syncObj,
NvSciSyncAttrList newConflictList 
)

Reconciles the input Unreconciled NvSciSyncAttrList(s) into a new Reconciled NvSciSyncAttrList.

If successful, a Reconciled NvSciSyncAttrList will be associated with a newly-allocated NvSciSyncObj that satisfies all the constraints specified in the Reconciled NvSciSyncAttrList.

Note: This function serves as a convenience function that combines calls to NvSciSyncAttrListReconcile and NvSciSyncObjAlloc.

Parameters
[in]inputArrayArray containing the Unreconciled NvSciSyncAttrList(s) to reconcile. Valid value: Array of valid NvSciSyncAttrLists where the array size is at least 1
[in]inputCountNumber of Unreconciled NvSciSyncAttrLists in inputArray. Valid value: inputCount is valid input if is non-zero.
[out]syncObjThe new NvSciSyncObj.
[out]newConflictListUnreconciled NvSciSyncAttrList consisting of the key-value pairs which caused the reconciliation failure. Valid value: This parameter is a valid output parameter only if the return code is NvSciError_ReconciliationFailed
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • inputCount is 0
    • inputArray is NULL
    • syncObj is NULL
    • not all the NvSciSyncAttrLists in inputArray are bound to the same NvSciSyncModule instance
    • any of the attributes in any of the input NvSciSyncAttrLists has an invalid value for that attribute
    • if any of the NvSciSyncAttrList in attrList are not unreconciled
  • newConflictList is NULL
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_InvalidState if the newly created NvSciSyncObj cannot be associated with the NvSciSyncModule with which the NvSciSyncAttrList(s) in inputArray are associated.
  • NvSciError_ReconciliationFailed if reconciliation failed.
  • NvSciError_ResourceError if system lacks resource other than memory.
  • NvSciError_UnsupportedConfig if there is an NvSciSyncAttrList mismatch between Signaler and Waiters.
  • Panics if any of the input NvSciSyncAttrLists are not valid

◆ NvSciSyncAttrListSetAttrs()

NvSciError NvSciSyncAttrListSetAttrs ( NvSciSyncAttrList  attrList,
const NvSciSyncAttrKeyValuePair pairArray,
size_t  pairCount 
)

Sets the values for NvSciSyncAttrKey(s) in slot 0 of the input NvSciSyncAttrList.

Reads values only during the call, saving copies. Only allows writing attributes once, making them non writable in the NvSciSyncAttrList.

Parameters
[in]attrListAn unreconciled NvSciSyncAttrList containing the attribute key and value to set.
[in]pairArrayArray of NvSciSyncAttrKeyValuePair. Valid value: pairArray is valid input if it is not NULL and key member of every NvSciSyncAttrKeyValuePair in the array is an input or input/output attribute and it is > NvSciSyncAttrKey_LowerBound and < NvSciSyncAttrKey_UpperBound and value member of every NvSciSyncAttrKeyValuePair in the array is not NULL.
[in]pairCountThe number of elements/entries in pairArray. Valid value: pairCount is valid input if it is non-zero.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • pairArray is NULL
    • attrList is NULL
    • attrList is not unreconciled and/or not writable,
    • pairCount is 0
    • any of the keys in pairArray is not a supported public key
    • any of the values in pairArray is NULL
    • any of the len(s) in pairArray is invalid for a given attribute
    • any of the attributes to be written is non-writable in attrList
  • Panics if attrList is not valid

◆ NvSciSyncAttrListSlotGetAttrs()

NvSciError NvSciSyncAttrListSlotGetAttrs ( NvSciSyncAttrList  attrList,
size_t  slotIndex,
NvSciSyncAttrKeyValuePair pairArray,
size_t  pairCount 
)

Gets the value(s) of NvSciSyncAttrKey(s) from an NvSciSyncAttrList at given slot index in a multi-slot unreconciled NvSciSyncAttrList.

Note
When exporting an array containing multiple unreconciled NvSciSyncAttrLists, the importing endpoint still imports just one unreconciled NvSciSyncAttrList. This unreconciled NvSciSyncAttrList is referred to as a multi-slot NvSciSyncAttrList. It logically represents an array of NvSciSyncAttrLists, where each key has an array of values, one per slot.

The returned pairArray consist of const void* pointers to the actual attribute values from NvSciSyncAttrList. The application must not overwrite this data. If an attribute was never set, the corresponding value will be set to NULL and length to 0.

Parameters
[in]attrListNvSciSyncAttrList to retrieve the NvSciSyncAttrKey and value from.
[in]slotIndexIndex in the NvSciSyncAttrList. Valid value: 0 to slot count of NvSciSyncAttrList - 1.
[in,out]pairArrayArray of NvSciSyncAttrKeyValuePair. Holds the NvSciSyncAttrKey(s) passed into the function and returns an array of NvSciSyncAttrKeyValuePair structures. Valid value: pairArray is valid input if it is not NULL and key member of every NvSciSyncAttrKeyValuePair in the array > NvSciSyncAttrKey_LowerBound and < NvSciSyncAttrKey_UpperBound.
[in]pairCountIndicates the number of elements/entries in pairArray. Valid value: pairCount is valid input if it is non-zero.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • slotIndex is not a valid slot in attrList
    • attrList is NULL
    • pairArray is NULL
    • pairCount is 0
    • any of the keys in pairArray is not a NvSciSyncAttrKey
  • Panics if attrList is not valid

◆ NvSciSyncAttrListValidateReconciled()

NvSciError NvSciSyncAttrListValidateReconciled ( NvSciSyncAttrList  reconciledAttrList,
const NvSciSyncAttrList  inputUnreconciledAttrListArray[],
size_t  inputUnreconciledAttrListCount,
bool *  isReconciledListValid 
)

Validates a reconciled NvSciSyncAttrList against a set of input unreconciled NvSciSyncAttrLists.

Parameters
[in]reconciledAttrListReconciled NvSciSyncAttrList to be validated.
[in]inputUnreconciledAttrListArrayArray containing the unreconciled NvSciSyncAttrLists used for validation. Valid value: Array of valid unreconciled NvSciSyncAttrLists
[in]inputUnreconciledAttrListCountnumber of elements/indices in inputUnreconciledAttrListArray Valid value: [1, SIZE_MAX]
[out]isReconciledListValidA pointer to a boolean to store whether the reconciled NvSciSyncAttrList satisfies the parameters of set of unreconciled NvSciSyncAttrList(s) or not.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • inputUnreconciledAttrListArray is NULL
    • inputUnreconciledAttrListCount is 0
    • isReconciledListValid is NULL
    • any of the input NvSciSyncAttrLists in inputUnreconciledAttrListArray are not unreconciled
    • reconciledAttrList is NULL or not reconciled
    • not all the NvSciSyncAttrLists in inputUnreconciledAttrListArray and the reconciledAttrList are bound to the same NvSciSyncModule instance.
    • reconciled NvSciSyncAttrList does not satisfy the unreconciled NvSciSyncAttrLists requirements.
  • NvSciError_InsufficientMemory if there is insufficient system memory to create temporary data structures
  • NvSciError_Overflow if internal integer overflow occurs.
  • Panics if reconciledAttrList or any of the input unreconciled NvSciSyncAttrList are not valid.

◆ NvSciSyncCheckVersionCompatibility()

NvSciError NvSciSyncCheckVersionCompatibility ( uint32_t  majorVer,
uint32_t  minorVer,
bool *  isCompatible 
)

Checks if loaded library version is compatible with the supplied library build version.

This function checks the version of all dependent libraries and sets the output variable to true if all libraries are compatible, else sets output to false.

Parameters
[in]majorVerbuild major version. Valid value: valid if set to NvSciSyncMajorVersion
[in]minorVerbuild minor version. Valid value: valid if set to NvSciSyncMinorVersion
[out]isCompatiblepointer to the bool holding the result.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncCpuWaitContextAlloc()

NvSciError NvSciSyncCpuWaitContextAlloc ( NvSciSyncModule  module,
NvSciSyncCpuWaitContext newContext 
)

Allocates a new NvSciSyncCpuWaitContext.

Parameters
[in]moduleNvSciSyncModule instance with which to associate the new NvSciSyncCpuWaitContext.
[out]newContextThe new NvSciSyncCpuWaitContext.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncCpuWaitContextFree()

void NvSciSyncCpuWaitContextFree ( NvSciSyncCpuWaitContext  context)

Releases the NvSciSyncCpuWaitContext.

Parameters
[in]contextNvSciSyncCpuWaitContext to be freed.
Returns
void
  • Panics if NvSciSyncModule associated with context is not valid.

◆ NvSciSyncFenceClear()

void NvSciSyncFenceClear ( NvSciSyncFence syncFence)

Frees any resources allocated for the NvSciSyncFence.

Upon return, the memory pointed to by the NvSciSyncFence is guaranteed to be all zeros and thus the NvSciSyncFence is returned to the cleared state.

Parameters
[in,out]syncFenceA pointer to NvSciSyncFence.
Returns
void
  • Panics if the NvSciSyncObj associated with syncFence is not valid

◆ NvSciSyncFenceDup()

NvSciError NvSciSyncFenceDup ( const NvSciSyncFence srcSyncFence,
NvSciSyncFence dstSyncFence 
)

Duplicates the given NvSciSyncFence, such that any wait on duplicated NvSciSyncFence will complete at the same time as a wait on given NvSciSyncFence.

If the given NvSciSyncFence is in a cleared state, then so also will be the duplicated NvSciSyncFence. The given NvSciSyncFence will be cleared before the duplication. If the given NvSciSyncFence holds any reference on a NvSciSyncObj, then the duplicated NvSciSyncFence will create an additional reference on it.

Parameters
[in]srcSyncFenceNvSciSyncFence to duplicate.
[out]dstSyncFenceduplicated NvSciSyncFence.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncFenceGetTimestamp()

NvSciError NvSciSyncFenceGetTimestamp ( const NvSciSyncFence syncFence,
uint64_t *  timestampUS 
)

Read the timestamp associated with the NvSciSyncFence.

Parameters
[in]syncFenceobject of type NvSciSyncFence
[out]timestampUStime (in microseconds) when the NvSciSyncFence expired.
Returns
NvSciError
  • NvSciError_Success if successful
  • NvSciError_ClearedFence if syncFence is cleared
  • NvSciError_BadParameter if any of the following occurs:
    • any argument is NULL
    • syncFence is NULL or has no non NULL NvSciSyncObj associated
    • timestamps are not supported by NvSciSyncObj associated with
    • syncFence
    • syncFence does not support timestamps
  • Panics if NvSciSyncObj associated with syncFence is not valid.

◆ NvSciSyncFenceWait()

NvSciError NvSciSyncFenceWait ( const NvSciSyncFence syncFence,
NvSciSyncCpuWaitContext  context,
int64_t  timeoutUs 
)

Performs a synchronous wait on the NvSciSyncFence object until the NvSciSyncFence has been signaled or the timeout expires.

Any NvSciSyncCpuWaitContext may be used for waiting on any NvSciSyncFence provided they were created in the same NvSciSyncModule context. One NvSciSyncCpuWaitContext can be used to wait on only one NvSciSyncFence at a time but it can be used to wait on a different NvSciSyncFence at a different time.

Waiting on a cleared NvSciSyncFence is always not blocking.

Parameters
[in]syncFenceThe NvSciSyncFence to wait on.
[in]contextNvSciSyncCpuWaitContext holding resources needed to perform waiting.
[in]timeoutUsTimeout to wait for in micro seconds, -1 for infinite wait. Valid value: [-1, NvSciSyncFenceMaxTimeout]
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • syncFence is NULL
    • context is NULL
    • syncFence and context are associated with different NvSciSyncModule
    • timeoutUs is invalid
    • if caller doesn't have CPU wait permissions in NvSciSyncObj associated with syncFence
  • NvSciError_ResourceError if wait operation did not complete successfully.
  • NvSciError_Timeout if wait did not complete in the given timeout.
  • NvSciError_Overflow if the NvSciSyncFence's id or value are not in range supported by the primitive this NvSciSyncFence corresponds to.
  • Panics if any NvSciSyncObj associated with syncFence or context is not valid

◆ NvSciSyncIpcExportAttrListAndObj()

NvSciError NvSciSyncIpcExportAttrListAndObj ( NvSciSyncObj  syncObj,
NvSciSyncAccessPerm  permissions,
NvSciIpcEndpoint  ipcEndpoint,
void **  attrListAndObjDesc,
size_t *  attrListAndObjDescSize 
)

Exports an NvSciSyncAttrList and NvSciSyncObj into an NvSciIpc-transferable object binary descriptor pointed to by data.

The binary descriptor can subsequently be transferred to Waiters to create a matching NvSciSyncObj.

Note: This function serves as a convenience function that combines calls to NvSciSyncAttrListIpcExportReconciled and NvSciSyncObjIpcExport.

Parameters
[in]syncObjNvSciSyncObj to export.
[in]permissionsFlag indicating the expected NvSciSyncAccessPerm. Valid value: permissions is valid if it is set to NvSciSyncAccessPerm_WaitOnly or NvSciSyncAccessPerm_Auto.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller may send the exported NvSciSyncAttrList and NvSciSyncObj descriptor.
[out]attrListAndObjDescExported form of NvSciSyncAttrList and NvSciSyncObj shareable across an NvSciIpc channel.
[out]attrListAndObjDescSizeSize of the exported blob.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncIpcExportFence()

NvSciError NvSciSyncIpcExportFence ( const NvSciSyncFence syncFence,
NvSciIpcEndpoint  ipcEndpoint,
NvSciSyncFenceIpcExportDescriptor desc 
)

Exports the input NvSciSyncFence into a binary descriptor shareable across the NvSciIpc channel.

The resulting descriptor of a non-cleared NvSciSyncFence is associated with NvSciSyncObj associated with the NvSciSyncFence. After transporting the descriptor via an Ipc path, NvSciSync will be able to recognize that the NvSciSyncFence is associated with this NvSciSyncObj if NvSciSyncObj traversed the same Ipc path.

Parameters
[in]syncFenceA pointer to NvSciSyncFence object to be exported.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller may send the exported fence descriptor.
[out]descThe exported form of NvSciSyncFence shared across an NvSciIpc channel.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • any argument is NULL
    • ipcEndpoint is not a valid NvSciIpcEndpoint
  • Panics if syncFence is associated an invalid NvSciSyncObj

◆ NvSciSyncIpcImportAttrListAndObj()

NvSciError NvSciSyncIpcImportAttrListAndObj ( NvSciSyncModule  module,
NvSciIpcEndpoint  ipcEndpoint,
const void *  attrListAndObjDesc,
size_t  attrListAndObjDescSize,
NvSciSyncAttrList const  attrList[],
size_t  attrListCount,
NvSciSyncAccessPerm  minPermissions,
int64_t  timeoutUs,
NvSciSyncObj syncObj 
)

Creates an NvSciSyncObj based on the supplied binary descriptor returned from a successful call to NvSciSyncIpcExportAttrListAndObj that has not yet been freed via NvSciSyncAttrListAndObjFreeDesc.

It also validates Reconciled NvSciSyncAttrList against a set of Unreconciled NvSciSyncAttrLists to ensure that the Reconciled NvSciSyncAttrList satisfies the constraints of all the given Unreconciled NvSciSyncAttrLists.

This function is called from the Waiter after it receives the binary descriptor from the Signaler who has created the binary descriptor. Waiter will create its own NvSciSyncObj and return as output.

Note: This function serves as a convenience function that combines calls to NvSciSyncAttrListIpcImportReconciled and NvSciSyncObjIpcImport.

Parameters
[in]moduleA NvSciSyncModule to associate the imported NvSciSyncAttrList with.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller receives the exported NvSciSyncAttrList and NvSciSyncObj descriptor.
[in]attrListAndObjDescExported form of NvSciSyncAttrList and NvSciSyncObj received through NvSciIpc channel. Valid value: attrListAndObjDesc is valid if it is non-NULL.
[in]attrListAndObjDescSizeSize of the exported blob. Valid value: attrListAndObjDescSize is valid if it is not 0.
[in]attrListThe array of Unreconciled NvSciSyncAttrLists against which the new NvSciSyncAttrList is to be validated. Valid value: Array of valid NvSciSyncAttrList(s)
[in]attrListCountNumber of Unreconciled NvSciSyncAttrLists in the attrList array. Valid value: [0, SIZE_MAX]
[in]minPermissionsFlag indicating the expected NvSciSyncAccessPerm. Valid value: NvSciSyncAccessPerm_WaitOnly and NvSciSyncAccessPerm_Auto
[in]timeoutUsUnused
[out]syncObjWaiter's NvSciSyncObj.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • ipcEndpoint is invalid
    • attrListAndObjDesc is invalid
    • attrListAndObjDescSize is invalid
    • minPermissions is invalid
    • syncObj is NULL
    • input unreconciled NvSciSyncAttrLists' constraints are not satisfied by attributes of imported NvSciSyncObj.
    • attrList is NULL but attrListCount is not 0
    • if any of the NvSciSyncAttrList in attrList are not unreconciled
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_ResourceError if system lacks resource other than memory.
  • Panics if any of the following occurs:
    • module is not valid
    • any of the input Unreconciled NvSciSyncAttrLists are not valid

◆ NvSciSyncIpcImportFence()

NvSciError NvSciSyncIpcImportFence ( NvSciSyncObj  syncObj,
const NvSciSyncFenceIpcExportDescriptor desc,
NvSciSyncFence syncFence 
)

Fills in the NvSciSyncFence based on the input binary descriptor.

If the NvSciSyncFence descriptor does not describe a cleared NvSciSyncFence, then NvSciSync will validate if it corresponds to the NvSciSyncObj and it will associate the out NvSciSyncFence with the NvSciSyncObj.

The NvSciSyncFence will be cleared first, removing any previous reference to a NvSciSyncObj.

Parameters
[in]syncObjThe NvSciSyncObj.
[in]descThe exported form of NvSciSyncFence. Valid value: A binary descriptor produced by NvSciSyncIpcExportFence.
[out]syncFenceA pointer to NvSciSyncFence object.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncModuleClose()

void NvSciSyncModuleClose ( NvSciSyncModule  module)

Releases an instance of the NvSciSyncModule that was obtained through an earlier call to NvSciSyncModuleOpen().

Once an NvSciSyncModule is closed and all NvSciSyncAttrLists, NvSciSyncObjs, NvSciSyncCpuWaitContexts, NvSciSyncFences bound to that module instance are freed, the NvSciSyncModule instance will be de-initialized in the calling process. Until then the NvSciSyncModule will still be accessible from those objects still referencing it.

Parameters
[in]moduleThe NvSciSyncModule instance to close. The calling process must not pass this module to another NvSciSync API call.
Returns
void
  • Panics if module is invalid

◆ NvSciSyncModuleOpen()

NvSciError NvSciSyncModuleOpen ( NvSciSyncModule newModule)

Initializes and returns a new NvSciSyncModule with no NvSciSyncAttrLists, NvSciSyncCpuWaitContexts, NvSciSyncObjs or NvSciSyncFences bound to it.

Note
A process may call this function multiple times. Each successful invocation will yield a new NvSciSyncModule instance.
Parameters
[out]newModuleThe new NvSciSyncModule.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncObjAlloc()

NvSciError NvSciSyncObjAlloc ( NvSciSyncAttrList  reconciledList,
NvSciSyncObj syncObj 
)

Allocates and initializes a NvSciSyncObj that meets all the constraints specified in the given Reconciled NvSciSyncAttrList.

Note
This function does not take ownership of the reconciled NvSciSyncAttrList. The caller remains responsible for freeing the reconciled NvSciSyncAttrList. The caller may free the reconciled NvSciSyncAttrList any time after this function is called.
Parameters
[in]reconciledListA Reconciled NvSciSyncAttrList.
[out]syncObjThe allocated NvSciSyncObj.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncObjDup()

NvSciError NvSciSyncObjDup ( NvSciSyncObj  syncObj,
NvSciSyncObj dupObj 
)

Creates a new NvSciSyncObj holding a reference to the original resources to which the input NvSciSyncObj holds reference to.

The duplicated NvSciSyncObj is not a completely new NvSciSyncObj. Therefore, signaling and generating NvSciSyncFences from one affects the state of the other, because it is the same underlying NvSciSyncObj.

The resulting NvSciSyncObj must be freed separately by the user.

Parameters
[in]syncObjNvSciSyncObj to duplicate.
[out]dupObjDuplicated NvSciSyncObj.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncObjFree()

void NvSciSyncObjFree ( NvSciSyncObj  syncObj)

Destroys a valid NvSciSyncObj and frees any resources that were allocated for it.

Parameters
[in]syncObjNvSciSyncObj to be freed.
Returns
void

◆ NvSciSyncObjGenerateFence()

NvSciError NvSciSyncObjGenerateFence ( NvSciSyncObj  syncObj,
NvSciSyncFence syncFence 
)

Generates next point on sync timeline of an NvSciSyncObj and fills in the supplied NvSciSyncFence object.

This function can be used when the CPU is the Signaler.

Parameters
[in]syncObjA valid NvSciSyncObj.
[out]syncFenceNvSciSyncFence to be filled
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncObjGetAttrList()

NvSciError NvSciSyncObjGetAttrList ( NvSciSyncObj  syncObj,
NvSciSyncAttrList syncAttrList 
)

Retrieves the Reconciled NvSciSyncAttrList associated with an input NvSciSyncObj.

The retrieved Reconciled NvSciSyncAttrList is always read-only and the Attribute Key values in the NvSciSyncAttrList cannot be changed using the set attribute APIs. In addition, the returned NvSciSyncAttrList must not be freed.

Parameters
[in]syncObjHandle corresponding to NvSciSyncObj from which the NvSciSyncAttrList has to be retrieved.
[out]syncAttrListpointer to the retrieved NvSciSyncAttrList.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncObjIpcExport()

NvSciError NvSciSyncObjIpcExport ( NvSciSyncObj  syncObj,
NvSciSyncAccessPerm  permissions,
NvSciIpcEndpoint  ipcEndpoint,
NvSciSyncObjIpcExportDescriptor desc 
)

Exports an NvSciSyncObj into an NvSciIpc-transferable object binary descriptor.

The binary descriptor can be transferred to a Waiter to create a matching NvSciSyncObj.

Parameters
[in]syncObjA NvSciSyncObj to export.
[in]permissionsFlag indicating the expected NvSciSyncAccessPerm. Valid value: permissions is valid if it is set to NvSciSyncAccessPerm_WaitOnly or NvSciSyncAccessPerm_Auto.
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller intends to transfer the exported NvSciSyncObj descriptor.
[out]descNvSciSync fills in this caller-supplied descriptor with the exported form of NvSciSyncObj that is to be shared across an NvSciIpc channel.
Returns
NvSciError, the completion code of the operation:

◆ NvSciSyncObjIpcImport()

NvSciError NvSciSyncObjIpcImport ( NvSciIpcEndpoint  ipcEndpoint,
const NvSciSyncObjIpcExportDescriptor desc,
NvSciSyncAttrList  inputAttrList,
NvSciSyncAccessPerm  permissions,
int64_t  timeoutUs,
NvSciSyncObj syncObj 
)

Creates and returns an NvSciSyncObj based on the supplied binary descriptor describing an exported NvSciSyncObj.

This function is called from the Waiter after it receives the binary descriptor from the Signaler who has created and exported the binary descriptor. The Waiter will create its corresponding NvSciSyncObj and return the allocated NvSciSyncObj as output.

Note
This function does not take ownership of input NvSciSyncAttrList. The caller remains responsible for freeing input NvSciSyncAttrList. The caller may free input NvSciSyncAttrList any time after this function is called.
Parameters
[in]ipcEndpointThe NvSciIpcEndpoint through which the caller received the exported NvSciSyncObj descriptor.
[in]descThe exported form of NvSciSyncObj received through the NvSciIpc channel. Valid value: desc is valid if it is non-NULL
[in]inputAttrListThe reconciled NvSciSyncAttrList returned by NvSciSyncAttrListIpcImportReconciled.
[in]permissionsNvSciSyncAccessPerm indicating the expected access permissions. Valid value: NvSciSyncAccessPerm_WaitOnly and NvSciSyncAccessPerm_Auto
[in]timeoutUsUnused
[out]syncObjThe Waiter's NvSciSyncObj.
Returns
NvSciError, the completion code of the operation:
  • NvSciError_Success if successful.
  • NvSciError_BadParameter if any of the following occurs:
    • ipcEndpoint is invalid
    • desc is invalid
    • inputAttrList is NULL
    • permissions is invalid
    • syncObj is NULL
    • input unreconciled NvSciSyncAttrLists' constraints are not satisfied by attributes of imported NvSciSyncObj.
    • the NvSciSyncObjIpcExportDescriptor export descriptor corresponds to a descriptor generated by an incompatible NvSciSync library version
  • NvSciError_InsufficientMemory if memory allocation failed.
  • NvSciError_InvalidState if the imported NvSciSyncObj cannot be associated with the NvSciSyncModule associated with the reconciled input NvSciSyncAttrList.
  • NvSciError_ResourceError if system lacks resource other than memory.
  • Panics if syncObj or inputAttrList are not valid

◆ NvSciSyncObjSignal()

NvSciError NvSciSyncObjSignal ( NvSciSyncObj  syncObj)

Signals the NvSciSyncObj using the reconciled primitive that was allocated along with the NvSciSyncObj.

This function is called when the CPU is the Signaler.

Parameters
[in]syncObjA valid NvSciSyncObj to signal.
Returns
NvSciError, the completion code of the operation:

Variable Documentation

◆ NvSciSyncFenceInitializer

const NvSciSyncFence NvSciSyncFenceInitializer = {{0U}}
static

Defines the value used to zero-initialize the NvSciSyncFence object.

An NvSciSyncFence that is all zeroes is in a cleared state.

Definition at line 244 of file nvscisync.h.

◆ NvSciSyncFenceMaxTimeout

const int64_t NvSciSyncFenceMaxTimeout = (0x7fffffffffffffff / 1000)
static

Maximum supported timeout value.

NvSciSyncFenceWait() can wait for at most this many microseconds. This value also corresponds to infinite timeout.

Definition at line 177 of file nvscisync.h.

◆ NvSciSyncMajorVersion

const uint32_t NvSciSyncMajorVersion = 2U
static

NvSciSync major version number.

Definition at line 163 of file nvscisync.h.

◆ NvSciSyncMinorVersion

const uint32_t NvSciSyncMinorVersion = 0U
static

NvSciSync minor version number.

Definition at line 170 of file nvscisync.h.