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:
NvSciSyncMajorVersion
NvSciSyncMinorVersion
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... | |
Macros | |
#define | PACK_SYNC(__Declaration__, ...) __pragma(pack(push, 1)) __Declaration__,##__VA_ARGS__ __pragma(pack(pop)) |
#define | NvSciSyncAccessPerm_WaitOnly ((uint64_t)1U << 0U) |
This represents the capability to wait on an NvSciSyncObj as it progresses through points on its sync timeline. More... | |
#define | NvSciSyncAccessPerm_SignalOnly ((uint64_t)1U << 1U) |
This represents the capability to advance an NvSciSyncObj to its next point on its sync timeline. More... | |
#define | NvSciSyncAccessPerm_WaitSignal (NvSciSyncAccessPerm_WaitOnly | NvSciSyncAccessPerm_SignalOnly) |
This represents the capability to advance an NvSciSyncObj to its next point on its sync timeline and also wait until that next point is reached. More... | |
#define | NvSciSyncAccessPerm_Auto ((uint64_t)1U << 63U) |
Usage of Auto permissions is restricted only for export/import APIs and shouldn't be used as valid value for NvSciSyncAttrKey_RequiredPerm Attribute. 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 NvSciSyncFence | NvSciSyncFence |
Defines the opaque 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... | |
typedef uint64_t | NvSciSyncAccessPerm |
Describes NvSciSyncObj access permissions. More... | |
typedef enum NvSciSyncAttrValPrimitiveTypeRec | NvSciSyncAttrValPrimitiveType |
Alias for enum NvSciSyncAttrValPrimitiveTypeRec. More... | |
Functions | |
PACK_SYNC (typedef struct { uint64_t timestamp;uint32_t statusEngine;uint16_t subframe;uint16_t status;}) NvSciSyncTaskStatus | |
A single slot in the task status buffer. More... | |
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) |
Closes 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 whether 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 of the given 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 which is no longer writable. 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 | 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 which is no longer writable. 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 | NvSciSyncFenceExtractFence (const NvSciSyncFence *syncFence, uint64_t *id, uint64_t *value) |
Extracts the id and value from the input NvSciSyncFence. More... | |
NvSciError | NvSciSyncFenceUpdateFence (NvSciSyncObj syncObj, uint64_t id, uint64_t value, NvSciSyncFence *syncFence) |
Populates the input NvSciSyncFence based on the input id and value. More... | |
NvSciError | NvSciSyncFenceAddTimestampSlot (NvSciSyncFence *syncFence, uint32_t timestampSlot) |
Sets the current timestamp slot index in the NvSciSyncFence. More... | |
NvSciError | NvSciSyncFenceAddTaskStatusSlot (NvSciSyncFence *syncFence, uint32_t taskStatusSlot) |
Sets the current task status slot index to the NvSciSyncFence. More... | |
NvSciError | NvSciSyncFenceExtractTimestampSlot (NvSciSyncFence *syncFence, uint32_t *timeStampSlot) |
Reads the current timestamp slot index from the 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 | NvSciSyncObjValidate (NvSciSyncObj syncObj) |
Validates the NvSciSyncObj satisfies the constraints of the NvSciSyncAttrList that it is associated with. 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 | NvSciSyncFenceGetTaskStatus (const NvSciSyncFence *syncFence, NvSciSyncTaskStatus *taskStatus) |
Reads the task status associated with the NvSciSyncFence and stores it in the user provided out parameter. 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 the loaded library version is compatible with the version the application was compiled against. More... | |
NvSciError | NvSciSyncObjAttachPeer (NvSciSyncObj syncObj, const NvSciSyncAttrList inputArray[], size_t inputCount) |
Allows remote peer NvSciIpcEndpoint to gain access to already allocated NvSciSyncObj. More... | |
NvSciError | NvSciSyncFillC2cAttrs (NvSciSyncAttrList unrecAttrList, NvSciSyncAccessPerm permissions) |
Fills appropriate attributes for C2C copy in the input NvSciSyncAttrList. More... | |
NvSciError | NvSciSyncAttrListValidateReconciledAgainstAttrs (NvSciSyncAttrList reconciledAttrList, const NvSciSyncAttrKeyValuePair *pairArray, size_t pairCount, NvSciSyncAccessPerm permissions) |
Validates reconciledAttrList against the set of input attributes that the user has set in the unreconciled NvSciSyncAttrList(s). More... | |
NvSciError | NvSciSyncFenceWaitWithMode (const NvSciSyncFence *syncFence, NvSciSyncCpuWaitContext context, int64_t timeoutUs, NvSciSyncWaitMode waitMode) |
Performs a synchronous wait on the NvSciSyncFence object until the NvSciSyncFence has been signaled or the timeout expires. More... | |
Variables | |
static const uint32_t | NvSciSyncMajorVersion = 2U |
NvSciSync major version number. More... | |
static const uint32_t | NvSciSyncMinorVersion = 8U |
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... | |
#define NvSciSyncAccessPerm_Auto ((uint64_t)1U << 63U) |
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 373 of file nvscisync.h.
#define NvSciSyncAccessPerm_SignalOnly ((uint64_t)1U << 1U) |
This represents the capability to advance an NvSciSyncObj to its next point on its sync timeline.
Definition at line 356 of file nvscisync.h.
#define NvSciSyncAccessPerm_WaitOnly ((uint64_t)1U << 0U) |
This represents the capability to wait on an NvSciSyncObj as it progresses through points on its sync timeline.
Definition at line 346 of file nvscisync.h.
#define NvSciSyncAccessPerm_WaitSignal (NvSciSyncAccessPerm_WaitOnly | NvSciSyncAccessPerm_SignalOnly) |
This represents the capability to advance an NvSciSyncObj to its next point on its sync timeline and also wait until that next point is reached.
Definition at line 364 of file nvscisync.h.
#define PACK_SYNC | ( | __Declaration__, | |
... | |||
) | __pragma(pack(push, 1)) __Declaration__,##__VA_ARGS__ __pragma(pack(pop)) |
Definition at line 176 of file nvscisync.h.
typedef uint64_t NvSciSyncAccessPerm |
typedef struct NvSciSyncAttrListRec* NvSciSyncAttrList |
A container constituting an NvSciSyncAttrList which contains:
Definition at line 330 of file nvscisync.h.
Alias for enum NvSciSyncAttrValPrimitiveTypeRec.
Definition at line 461 of file nvscisync.h.
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 223 of file nvscisync.h.
typedef struct NvSciSyncFence NvSciSyncFence |
Defines the opaque NvSciSyncFence.
This structure describes a synchronization primitive snapshot that must be reached to release the waiters.
Unlike NvSciSyncAttrList and NvSciSyncObj objects, applications are responsible for the memory management of NvSciSyncFences.
Every NvSciSyncFence must be initialized to all zeros after its storage is allocated before the first time it is passed to any NvSciSync API calls. NvSciSyncFenceInitializer can be used for this, or memset(), or any other mechanism for zeroing memory.
Every NvSciSyncFence not in a cleared state holds a reference to the NvSciSyncObj it is related to, preventing that NvSciSyncObj from being deleted. It also contains id and value of the synchronization primitive corresponding to the desired snapshot.
In case if the corresponding NvSciSyncObj supports timestamps, this structure also contains information about the memory location of the timestamp of the event unblocking the NvSciSyncFence.
This structure also contains information about the memory location of the status of the task triggering the event unblocking the NvSciSyncFence.
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.
Definition at line 211 of file nvscisync.h.
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.
The object will also hold a buffer containing the task statuses of the tasks signaling this Object.
A reference to a particular Synchronization Object.
Definition at line 311 of file nvscisync.h.
typedef const struct NvSciSyncObjRec* NvSciSyncObjConst |
A reference, that is not modifiable, to a particular Synchronization Object.
Definition at line 317 of file nvscisync.h.
enum NvSciSyncAttrKey |
Describes the NvSciSync public attribute keys holding the corresponding values specifying synchronization object constraints.
Input attribute keys specify desired synchronization object constraints and can be set/retrieved from the unreconciled NvSciSyncAttrList using NvSciSyncAttrListSetAttrs()/NvSciSyncAttrListGetAttrs() respectively. Output attribute keys specify actual constraints computed by NvSciSync if reconciliation succeeds. Output attribute keys can be retrieved from a 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. During reconciliation, reconciler sets value of this key to true in the reconciled NvSciSyncAttrList if any of the unreconciled NvSciSyncAttrList(s) involved in reconciliation that is owned by the reconciler has this key set to true, otherwise it is set to false in reconciled NvSciSyncAttrList. If the user sets it to true in the unreconciled list but does not set NvSciSyncAttrKey_PrimitiveInfo, then NvSciSync will add the following values to NvSciSyncAttrKey_PrimitiveInfo attribute just before reconciliation or exporting unreconciled attribute list:
When importing the reconciled NvSciSyncAttrList NvSciSync will set the key to OR of values of this key in unreconciled NvSciSyncAttrList(s) relayed by the peer. During validation of reconciled NvSciSyncAttrList against input unreconciled NvSciSyncAttrList(s), validation succeeds if value of this attribute in the reconciled NvSciSyncAttrList is true provided any of the input unreconciled NvSciSyncAttrList(s) owned by the peer set it to true OR if value of this attribute in the reconciled NvSciSyncAttrList is false provided all of the input unreconciled NvSciSyncAttrList(s) owned by the peer set it to false. |
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.
It represents the cumulative permissions of the NvSciSyncAttrKey_RequiredPerm in all NvSciSyncAttrLists being reconciled. The reconciliation fails if any of the following conditions are met:
If NvSciSyncObj is obtained by calling NvSciSyncObjAlloc(), NvSciSyncAttrKey_ActualPerm is set to NvSciSyncAccessPerm_WaitSignal in the reconciled NvSciSyncAttrList corresponding to it since allocated NvSciSyncObj gets wait-signal permissions by default. For any peer importing the NvSciSyncObj, this key is set in the reconciled NvSciSyncAttrList to the sum of NvSciSyncAttrKey_RequiredPerm requested by the peer and all peers relaying their NvSciSyncAttrList export descriptors via it. During validation of reconciled NvSciSyncAttrList against input unreconciled NvSciSyncAttrList(s), validation succeeds only if NvSciSyncAttrKey_ActualPerm in reconciled is bigger or equal than NvSciSyncAttrKey_RequiredPerm of all the input unreconciled NvSciSyncAttrLists. |
NvSciSyncAttrKey_WaiterContextInsensitiveFenceExports | (bool, inout) Importing and then exporting an NvSciSyncFenceIpcExportDescriptor has no side effects and yields an identical NvSciSyncFenceIpcExportDescriptor even if the NvSciIpcEndpoint(s) used for import and export are different from ones used for exporting/importing NvSciSyncAttrList(s). If this attribute key is set to false, this indicates that the NvSciSyncFenceIpcExportDescriptor must be exported through the same IPC path as the NvSciSyncObj. Otherwise if set to true, this indicates that the NvSciSyncFenceIpcExportDescriptor must be exported via NvSciIpc through the first peer that was part of the IPC path travelled through by the NvSciSyncObj (but not necessarily an identical path). During reconciliation, this key is set to true in reconciled NvSciSyncAttrList if any one of the input NvSciSyncAttrList has this set to true. |
NvSciSyncAttrKey_WaiterRequireTimestamps | (bool, inout) Specifies if timestamps are required. If the waiter wishes to read timestamps then the NvSciSyncAttrKey_NeedCpuAccess key should be set to true. During reconciliation, reconciler sets value of this key to true in the reconciled NvSciSyncAttrList if any of the unreconciled NvSciSyncAttrList(s) involved in reconciliation has NvSciSyncAttrKey_RequiredPerm set to NvSciSyncAccessPerm_WaitOnly/NvSciSyncAccessPerm_WaitSignal and NvSciSyncAttrKey_NeedCpuAccess is set to true, otherwise it is set to false in reconciled NvSciSyncAttrList. |
NvSciSyncAttrKey_RequireDeterministicFences | (bool, inout) Specifies if deterministic primitives are required. This allows for the possibility of generating fences on the waiter's side without needing to import them. This means that the Signaler will increment the instance 0 of the primitive in NvSciSyncObj by 1 at each submission. During reconciliation, this key is set to true in the reconciled NvSciSyncAttrList if any one of the input NvSciSyncAttrList(s) has this set to true. |
NvSciSyncAttrKey_NumTimestampSlots | (uint32_t, out) Specifies the total number of slots in the timestamps buffer. This allows the user to iterate over the slots by incrementing the current slot index modulo _NumTimestampsSlots. During reconciliation, the value of this key is set to the number of slots in the timestamps buffer. If timestamps are not required by this attribute list, then the value of this key is undefined. |
NvSciSyncAttrKey_NumTaskStatusSlots | (uint32_t, out) Specifies the total number of slots in the task status buffer. This allows the user to iterate over the slots by incrementing the current slot index modulo _NumTaskStatusSlots. During reconciliation, the value of this key is set to the number of slots in the task status buffer. If task status is not required by this attribute list, then the value of this key will be 0. |
NvSciSyncAttrKey_MaxPrimitiveValue | (uint64_t, out) Specifies the maximum value of the reconciled primitive. During reconciliation, value of this key is set to UINT64_MAX if the reconciled primitive type is 64bit-SysmemSemaphore, otherwise value of the key is set to UINT32_MAX |
NvSciSyncAttrKey_PrimitiveInfo | (NvSciSyncAttrValPrimitiveType[], inout) supported primitive types. If set, the value of this key is used in reconciliation and determines the primitive type backing the NvSciSyncObj. If this key is not set, then it has no impact on reconciliation. During reconciliation, the reconciler sets the value of this key to the reconciled primitive type. The reconciliation will fail if this key is set to value which does not intersect with values of primitive type set internally by user mode drivers or NvSciSync. During validation of a reconciled NvSciSyncAttrList against input unreconciled NvSciSyncAttrList(s), validation succeeds if the NvSciSyncAttrValPrimitiveType in NvSciSyncAttrKey_PrimitiveInfo of the reconciled NvSciSyncAttrList is present in NvSciSyncAttrKey_PrimitiveInfo or any of the internal attributes related to NvSciSyncAttrValPrimitiveType of the input unreconciled NvSciSyncAttrLists. |
NvSciSyncAttrKey_PeerLocationInfo | (NvSciBufPeerLocationInfo[], inout) An attribute indicating location information of late peer which are going to gain access to the allocated NvSciSyncObj using NvSciSyncObjAttachPeer() API. |
NvSciSyncAttrKey_GpuId | (NvSciRmGpuId[], inout) GpuID of the GPU in the system that will access the semaphore buffer. |
NvSciSyncAttrKey_PeerHwEngineArray | (NvSciBufPeerHwEngine[], inout) An attribute indicating engine information of late peer which are going to gain access to the allocated NvSciSyncObj using NvSciSyncObjAttachPeer() API. |
NvSciSyncAttrKey_UpperBound | Specifies the upper bound - for NvSciSync internal use only. |
Definition at line 475 of file nvscisync.h.
Types of synchronization primitives.
Definition at line 420 of file nvscisync.h.
Status of the signaler's task that signals a particular NvSciSyncFence.
This is defined as an enum but will be kept in a 16-bit field of a slot in the shared task status buffer.
A value outside of range defined here is an engine specific failure.
Definition at line 387 of file nvscisync.h.
enum NvSciSyncWaitMode |
Modes of CPU waiting.
Enumerator | |
---|---|
NvSciSyncWaitMode_Default | same behavior as with NvSciSyncFenceWait() |
NvSciSyncWaitMode_BusyWithYield | Polling with processor yielding. |
NvSciSyncWaitMode_BusyNoYield | Polling with spin, no yielding. |
NvSciSyncWaitMode_Blocking | Blocked wait, released by a trigger, like an interrupt. |
Definition at line 682 of file nvscisync.h.
void NvSciSyncAttrListAndObjFreeDesc | ( | void * | attrListAndObjDescBuf | ) |
Frees an NvSciSyncIpcExportAttrListAndObj descriptor returned by a successful call to NvSciSyncIpcExportAttrListAndObj.
Does nothing for NULL.
[in] | attrListAndObjDescBuf | Exported NvSciSyncIpcExportAttrListAndObj descriptor to be freed. |
Usage considerations
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 which is no longer writable.
[in] | inputUnreconciledAttrListArray | Array 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] | inputUnreconciledAttrListCount | Number of unreconciled NvSciSyncAttrList(s) in inputUnreconciledAttrListArray. Valid value: inputUnreconciledAttrListCount is valid input if it is non-zero. |
[out] | newUnreconciledAttrList | Appended NvSciSyncAttrList created out of the input unreconciled NvSciSyncAttrList(s). The output NvSciSyncAttrList is non-writable. |
Usage considerations
NvSciError NvSciSyncAttrListClone | ( | NvSciSyncAttrList | origAttrList, |
NvSciSyncAttrList * | newAttrList | ||
) |
Clones an NvSciSyncAttrList.
The cloned NvSciSyncAttrList will contain slot count, reconciliation type and all the attribute 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.
[in] | origAttrList | NvSciSyncAttrList to be cloned. |
[out] | newAttrList | The new NvSciSyncAttrList. |
Usage considerations
NvSciError NvSciSyncAttrListCreate | ( | NvSciSyncModule | module, |
NvSciSyncAttrList * | attrList | ||
) |
Creates a new, single-slot unreconciled NvSciSyncAttrList associated with the input NvSciSyncModule with empty NvSciSyncAttrKeys.
[in] | module | The NvSciSyncModule instance with which to associate the new NvSciSyncAttrList. |
[out] | attrList | The new NvSciSyncAttrList. |
Usage considerations
void NvSciSyncAttrListFree | ( | NvSciSyncAttrList | attrList | ) |
Frees the NvSciSyncAttrList and removes its association with the NvSciSyncModule with which it was created.
[in] | attrList | The NvSciSyncAttrList to be freed. |
Usage considerations
void NvSciSyncAttrListFreeDesc | ( | void * | descBuf | ) |
Frees an exported NvSciSyncAttrList descriptor previously returned by any NvSciSyncAttrList exporting function.
[in] | descBuf | The exported NvSciSyncAttrList descriptor to be freed. The valid value is non-NULL. |
Usage considerations
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.
[in] | attrList | NvSciSyncAttrList to retrieve the NvSciSyncAttrKey and value from. |
[in] | key | NvSciSyncAttrKey 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] | value | A pointer to the location where the attribute value is written. |
[out] | len | Length of the value. |
Usage considerations
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.
[in] | attrList | NvSciSyncAttrList to retrieve the value for given NvSciSyncAttrKey(s) from |
[in,out] | pairArray | A 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] | pairCount | The number of elements/entries in pairArray. Valid value: pairCount is valid input if it is non-zero. |
Usage considerations
size_t NvSciSyncAttrListGetSlotCount | ( | NvSciSyncAttrList | attrList | ) |
Gets the slot count of the given NvSciSyncAttrList.
[in] | attrList | NvSciSyncAttrList to get the slot count from. |
Usage considerations
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.
[in] | reconciledAttrList | The NvSciSyncAttrList to be exported. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller may send the exported reconciled NvSciSyncAttrList descriptor. |
[out] | descBuf | A pointer to the new reconciled NvSciSyncAttrList descriptor, which the caller can deallocate later using NvSciSyncAttrListFreeDesc(). |
[out] | descLen | The size of the new reconciled NvSciSyncAttrList descriptor. |
Usage considerations
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.
[in] | unreconciledAttrListArray | NvSciSyncAttrList(s) to be exported. Valid value: Array of valid NvSciSyncAttrList(s) where the array size is at least 1. |
[in] | unreconciledAttrListCount | Number of NvSciSyncAttrList(s) in unreconciledAttrListArray. Valid value: unreconciledAttrListCount is valid input if it is non-zero. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller may send the exported unreconciled NvSciSyncAttrList descriptor. |
[out] | descBuf | A pointer to the new unreconciled NvSciSyncAttrList descriptor, which the caller can deallocate later using NvSciSyncAttrListFreeDesc(). |
[out] | descLen | The size of the new unreconciled NvSciSyncAttrList descriptor. |
Usage considerations
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.
[in] | module | The NvSciSyncModule instance with which to associate the imported NvSciSyncAttrList. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller receives the exported reconciled NvSciSyncAttrList descriptor. |
[in] | descBuf | The reconciled NvSciSyncAttrList descriptor to be transformed into a reconciled NvSciSyncAttrList. Valid value: descBuf is valid if it is non-NULL. |
[in] | descLen | The size of the reconciled NvSciSyncAttrList descriptor. Valid value: descLen is valid if it is not 0. |
[in] | inputUnreconciledAttrListArray | The array of NvSciSyncAttrLists against which the new NvSciSyncAttrList is to be validated. Valid value: Array of valid NvSciSyncAttrList(s) |
[in] | inputUnreconciledAttrListCount | The 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] | importedReconciledAttrList | Imported NvSciSyncAttrList. |
Usage considerations
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 which is no longer writable.
[in] | module | The NvSciSyncModule instance with which to associate the imported NvSciSyncAttrList. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller receives the exported unreconciled NvSciSyncAttrList descriptor. |
[in] | descBuf | The 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] | descLen | The size of the unreconciled NvSciSyncAttrList descriptor. Valid value: descLen is valid input if it is not 0. |
[out] | importedUnreconciledAttrList | Imported unreconciled NvSciSyncAttrList. |
Usage considerations
NvSciError NvSciSyncAttrListIsReconciled | ( | NvSciSyncAttrList | attrList, |
bool * | isReconciled | ||
) |
Checks whether the NvSciSyncAttrList is reconciled.
[in] | attrList | NvSciSyncAttrList to check. |
[out] | isReconciled | A pointer to a boolean to store whether the attrList is reconciled or not. |
Usage considerations
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().
[in] | inputArray | Array containing unreconciled NvSciSyncAttrLists to be reconciled. Valid value: Array of valid NvSciSyncAttrLists where the array size is at least 1 |
[in] | inputCount | The number of unreconciled NvSciSyncAttrLists in inputArray. Valid value: inputCount is valid input if is non-zero. |
[out] | newReconciledList | Reconciled NvSciSyncAttrList. This field is populated only if the reconciliation succeeded. |
[out] | newConflictList | Unreconciled NvSciSyncAttrList consisting of the key/value pairs which caused the reconciliation failure. This field is populated only if the reconciliation failed. |
Usage considerations
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.
[in] | inputArray | Array containing the unreconciled NvSciSyncAttrList(s) to reconcile. Valid value: Array of valid NvSciSyncAttrLists where the array size is at least 1 |
[in] | inputCount | Number of unreconciled NvSciSyncAttrLists in inputArray. Valid value: inputCount is valid input if is non-zero. |
[out] | syncObj | The new NvSciSyncObj. |
[out] | newConflictList | unreconciled 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 |
Usage considerations
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.
[in] | attrList | An unreconciled NvSciSyncAttrList containing the attribute key and value to set. |
[in] | pairArray | Array 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] | pairCount | The number of elements/entries in pairArray. Valid value: pairCount is valid input if it is non-zero. |
Usage considerations
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.
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.
[in] | attrList | NvSciSyncAttrList to retrieve the NvSciSyncAttrKey and value from. |
[in] | slotIndex | Index in the NvSciSyncAttrList. Valid value: 0 to slot count of NvSciSyncAttrList - 1. |
[in,out] | pairArray | Array 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] | pairCount | Indicates the number of elements/entries in pairArray. Valid value: pairCount is valid input if it is non-zero. |
Usage considerations
NvSciError NvSciSyncAttrListValidateReconciled | ( | NvSciSyncAttrList | reconciledAttrList, |
const NvSciSyncAttrList | inputUnreconciledAttrListArray[], | ||
size_t | inputUnreconciledAttrListCount, | ||
bool * | isReconciledListValid | ||
) |
Validates a reconciled NvSciSyncAttrList against a set of input unreconciled NvSciSyncAttrLists.
[in] | reconciledAttrList | Reconciled NvSciSyncAttrList to be validated. |
[in] | inputUnreconciledAttrListArray | Array containing the unreconciled NvSciSyncAttrLists used for validation. Valid value: Array of valid unreconciled NvSciSyncAttrLists |
[in] | inputUnreconciledAttrListCount | number of elements/indices in inputUnreconciledAttrListArray Valid value: [1, SIZE_MAX] |
[out] | isReconciledListValid | A pointer to a boolean to store whether the reconciled NvSciSyncAttrList satisfies the parameters of set of unreconciled NvSciSyncAttrList(s) or not. |
Usage considerations
NvSciError NvSciSyncAttrListValidateReconciledAgainstAttrs | ( | NvSciSyncAttrList | reconciledAttrList, |
const NvSciSyncAttrKeyValuePair * | pairArray, | ||
size_t | pairCount, | ||
NvSciSyncAccessPerm | permissions | ||
) |
Validates reconciledAttrList against the set of input attributes that the user has set in the unreconciled NvSciSyncAttrList(s).
This API provides the safety mechanism to detect and report any reconciliation errors
[in] | reconciledAttrList | Unused |
[in] | pairArray | Unused |
[in] | pairCount | Unused |
[in] | permissions | Unused |
Usage considerations
NvSciError NvSciSyncCheckVersionCompatibility | ( | uint32_t | majorVer, |
uint32_t | minorVer, | ||
bool * | isCompatible | ||
) |
Checks if the loaded library version is compatible with the version the application was compiled against.
This function checks the version of all dependent libraries and sets the output variable to true if all libraries are compatible and all in parameters valid, else sets output to false.
[in] | majorVer | build major version. Valid value: valid if set to NvSciSyncMajorVersion |
[in] | minorVer | build minor version. Valid value: valid if set to <= NvSciSyncMinorVersion |
[out] | isCompatible | pointer to the bool holding the result. |
Usage considerations
NvSciError NvSciSyncCpuWaitContextAlloc | ( | NvSciSyncModule | module, |
NvSciSyncCpuWaitContext * | newContext | ||
) |
Allocates a new NvSciSyncCpuWaitContext.
[in] | module | NvSciSyncModule instance with which to associate the new NvSciSyncCpuWaitContext. |
[out] | newContext | The new NvSciSyncCpuWaitContext. |
Usage considerations
void NvSciSyncCpuWaitContextFree | ( | NvSciSyncCpuWaitContext | context | ) |
Releases the NvSciSyncCpuWaitContext.
[in] | context | NvSciSyncCpuWaitContext to be freed. |
Usage considerations
NvSciError NvSciSyncFenceAddTaskStatusSlot | ( | NvSciSyncFence * | syncFence, |
uint32_t | taskStatusSlot | ||
) |
Sets the current task status slot index to the NvSciSyncFence.
[in,out] | syncFence | object of type NvSciSyncFence |
[in] | taskStatusSlot | index of the task status slot to set in NvSciSyncFence. Valid value: [0, number-of-task-status-slots - 1] |
Usage considerations
NvSciError NvSciSyncFenceAddTimestampSlot | ( | NvSciSyncFence * | syncFence, |
uint32_t | timestampSlot | ||
) |
Sets the current timestamp slot index in the NvSciSyncFence.
[in,out] | syncFence | object of type NvSciSyncFence |
[in] | timestampSlot | index of the timestamp slot to set in NvSciSyncFence. Valid value: [0, number-of-timestamp-slots - 1] |
Usage considerations
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.
[in,out] | syncFence | A pointer to NvSciSyncFence. |
Usage considerations
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.
[in] | srcSyncFence | NvSciSyncFence to duplicate. |
[out] | dstSyncFence | duplicated NvSciSyncFence. |
Usage considerations
NvSciError NvSciSyncFenceExtractFence | ( | const NvSciSyncFence * | syncFence, |
uint64_t * | id, | ||
uint64_t * | value | ||
) |
Extracts the id and value from the input NvSciSyncFence.
[in] | syncFence | NvSciSyncFence from which the id and value should be retrieved |
[out] | id | NvSciSyncFence id |
[out] | value | NvSciSyncFence value |
Usage considerations
NvSciError NvSciSyncFenceExtractTimestampSlot | ( | NvSciSyncFence * | syncFence, |
uint32_t * | timeStampSlot | ||
) |
Reads the current timestamp slot index from the NvSciSyncFence.
[in] | syncFence | object of type NvSciSyncFence |
[out] | timestampSlot | index of the timestmp slot in NvSciSyncFence. |
Usage considerations
NvSciError NvSciSyncFenceGetTaskStatus | ( | const NvSciSyncFence * | syncFence, |
NvSciSyncTaskStatus * | taskStatus | ||
) |
Reads the task status associated with the NvSciSyncFence and stores it in the user provided out parameter.
[in] | syncFence | object of type NvSciSyncFence |
[out] | taskStatus | user provided struct to store the result |
Usage considerations
NvSciError NvSciSyncFenceGetTimestamp | ( | const NvSciSyncFence * | syncFence, |
uint64_t * | timestampUS | ||
) |
Read the timestamp associated with the NvSciSyncFence.
This function can be used when the CPU is the waiter.
[in] | syncFence | object of type NvSciSyncFence |
[out] | timestampUS | time (in microseconds) when the NvSciSyncFence expired. |
Usage considerations
NvSciError NvSciSyncFenceUpdateFence | ( | NvSciSyncObj | syncObj, |
uint64_t | id, | ||
uint64_t | value, | ||
NvSciSyncFence * | syncFence | ||
) |
Populates the input NvSciSyncFence based on the input id and value.
This new NvSciSyncFence is associated with the input NvSciSyncObj. The input NvSciSyncFence is cleared before being populated with the new data.
The task status slot associated with this fence will be 0. It is recommended to not use this interface when using task status buffer.
[in] | syncObj | valid NvSciSyncObj |
[in] | id | NvSciSyncFence identifier Valid value: [0, UINT32_MAX-1] for NvSciSyncAttrValPrimitiveType_Syncpoint. [0, value returned by NvSciSyncObjGetNumPrimitives()-1] for NvSciSyncAttrValPrimitiveType_SysmemSemaphore and NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b. |
[in] | value | NvSciSyncFence value Valid value: [0, UINT32_MAX] for NvSciSyncAttrValPrimitiveType_Syncpoint and NvSciSyncAttrValPrimitiveType_SysmemSemaphore. [0, UINT64_MAX] for NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b. |
[in,out] | syncFence | NvSciSyncFence to populate |
Usage considerations
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 and expired NvSciSyncFence is always not blocking.
[in] | syncFence | The NvSciSyncFence to wait on. |
[in] | context | NvSciSyncCpuWaitContext holding resources needed to perform waiting. |
[in] | timeoutUs | Timeout to wait for in micro seconds, -1 for infinite wait. Valid value: [-1, NvSciSyncFenceMaxTimeout] |
Usage considerations
NvSciError NvSciSyncFenceWaitWithMode | ( | const NvSciSyncFence * | syncFence, |
NvSciSyncCpuWaitContext | context, | ||
int64_t | timeoutUs, | ||
NvSciSyncWaitMode | waitMode | ||
) |
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 and expired NvSciSyncFence is always not blocking.
The user can choose details of the waiting procedure for better performance. Syncpoints only support NvSciSyncWaitMode_Blocking which is also the default. Semaphores support:
[in] | syncFence | The NvSciSyncFence to wait on. |
[in] | context | NvSciSyncCpuWaitContext holding resources needed to perform waiting. |
[in] | timeoutUs | Timeout to wait for in micro seconds, -1 for infinite wait. Valid value: [-1, NvSciSyncFenceMaxTimeout] |
[in] | waitMode | Chooses the method of waiting. Valid value: One of NvSciSyncWaitMode values |
Usage considerations
NvSciError NvSciSyncFillC2cAttrs | ( | NvSciSyncAttrList | unrecAttrList, |
NvSciSyncAccessPerm | permissions | ||
) |
Fills appropriate attributes for C2C copy in the input NvSciSyncAttrList.
[in] | unrecAttrList | attribute list to be filled |
[in] | permissions | Permissions to be set in the attribute list |
Usage considerations
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.
[in] | syncObj | NvSciSyncObj to export. |
[in] | permissions | Flag indicating the expected NvSciSyncAccessPerm. Valid value: permissions is valid if it is set to NvSciSyncAccessPerm_WaitOnly or NvSciSyncAccessPerm_Auto. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller may send the exported NvSciSyncAttrList and NvSciSyncObj descriptor. |
[out] | attrListAndObjDesc | Exported form of NvSciSyncAttrList and NvSciSyncObj shareable across an NvSciIpc channel. |
[out] | attrListAndObjDescSize | Size of the exported blob. |
Usage considerations
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.
[in] | syncFence | A pointer to NvSciSyncFence object to be exported. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller may send the exported fence descriptor. |
[out] | desc | The exported form of NvSciSyncFence shared across an NvSciIpc channel. |
Usage considerations
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 input 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.
[in] | module | A NvSciSyncModule to associate the imported NvSciSyncAttrList with. |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller receives the exported NvSciSyncAttrList and NvSciSyncObj descriptor. |
[in] | attrListAndObjDesc | Exported form of NvSciSyncAttrList and NvSciSyncObj received through NvSciIpc channel. Valid value: attrListAndObjDesc is valid if it is non-NULL. |
[in] | attrListAndObjDescSize | Size of the exported blob. Valid value: attrListAndObjDescSize is valid if it is bigger or equal sizeof(NvSciSyncObjIpcExportDescriptor). |
[in] | attrList | The array of unreconciled NvSciSyncAttrLists against which the new NvSciSyncAttrList is to be validated. Valid value: Array of valid NvSciSyncAttrList(s) |
[in] | attrListCount | Number of unreconciled NvSciSyncAttrLists in the attrList array. Valid value: [0, SIZE_MAX] |
[in] | minPermissions | Flag indicating the expected NvSciSyncAccessPerm. Valid value: NvSciSyncAccessPerm_WaitOnly and NvSciSyncAccessPerm_Auto |
[in] | timeoutUs | Unused |
[out] | syncObj | Waiter's NvSciSyncObj. |
Usage considerations
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.
[in] | syncObj | The NvSciSyncObj. |
[in] | desc | The exported form of NvSciSyncFence. Valid value: A binary descriptor produced by NvSciSyncIpcExportFence. |
[out] | syncFence | A pointer to NvSciSyncFence object. |
Usage considerations
void NvSciSyncModuleClose | ( | NvSciSyncModule | module | ) |
Closes 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.
[in] | module | The NvSciSyncModule instance to close. The calling process must not pass this module to another NvSciSync API call. |
Usage considerations
NvSciError NvSciSyncModuleOpen | ( | NvSciSyncModule * | newModule | ) |
Initializes and returns a new NvSciSyncModule with no NvSciSyncAttrLists, NvSciSyncCpuWaitContexts, NvSciSyncObjs or NvSciSyncFences bound to it.
[out] | newModule | The new NvSciSyncModule. |
Usage considerations
NvSciError NvSciSyncObjAlloc | ( | NvSciSyncAttrList | reconciledList, |
NvSciSyncObj * | syncObj | ||
) |
Allocates and initializes a NvSciSyncObj that meets all the constraints specified in the given reconciled NvSciSyncAttrList.
The resulting object will hold a buffer of 1024 slots for holding tasks status.
[in] | reconciledList | A reconciled NvSciSyncAttrList. |
[out] | syncObj | The allocated NvSciSyncObj. |
Usage considerations
NvSciError NvSciSyncObjAttachPeer | ( | NvSciSyncObj | syncObj, |
const NvSciSyncAttrList | inputArray[], | ||
size_t | inputCount | ||
) |
Allows remote peer NvSciIpcEndpoint to gain access to already allocated NvSciSyncObj.
Provided that the allocated NvSciSyncObj meets the requirements provided by the input unreconciled attribute list of remote peer interested in gaining access to input NvSciSyncObj. On success, the NvSciSyncObj is exportable to remote peer NvSciIpcEndpoints whose unreconciled NvSciSyncAttrList was provided as input to this function.
[in] | syncObj | The NvSciSyncObj whose access needs to be granted |
[in] | inputArray | list of unreconciled NvSciSyncAttrList imported from remote peers who wants access to the input NvSciSyncObj |
[in] | inputCount | Count of unreconciled NvSciSyncAttrList provided in input unreconciledLists |
Usage considerations
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.
[in] | syncObj | NvSciSyncObj to duplicate. |
[out] | dupObj | Duplicated NvSciSyncObj. |
Usage considerations
void NvSciSyncObjFree | ( | NvSciSyncObj | syncObj | ) |
Destroys a valid NvSciSyncObj and frees any resources that were allocated for it.
[in] | syncObj | NvSciSyncObj to be freed. |
Usage considerations
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.
[in] | syncObj | A valid NvSciSyncObj. |
[out] | syncFence | NvSciSyncFence to be filled |
Usage considerations
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.
[in] | syncObj | Handle corresponding to NvSciSyncObj from which the NvSciSyncAttrList has to be retrieved. |
[out] | syncAttrList | pointer to the retrieved NvSciSyncAttrList. |
Usage considerations
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.
[in] | syncObj | A NvSciSyncObj to export. |
[in] | permissions | Flag indicating the expected NvSciSyncAccessPerm. Valid value: any value of NvSciSyncAccessPerm |
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller intends to transfer the exported NvSciSyncObj descriptor. |
[out] | desc | NvSciSync fills in this caller-supplied descriptor with the exported form of NvSciSyncObj that is to be shared across an NvSciIpc channel. |
Usage considerations
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.
[in] | ipcEndpoint | The NvSciIpcEndpoint through which the caller received the exported NvSciSyncObj descriptor. |
[in] | desc | The exported form of NvSciSyncObj received through the NvSciIpc channel. Valid value: desc is valid if it is non-NULL |
[in] | inputAttrList | The reconciled NvSciSyncAttrList returned by NvSciSyncAttrListIpcImportReconciled. |
[in] | permissions | NvSciSyncAccessPerm indicating the expected access permissions. Valid value: any value of NvSciSyncAccessPerm |
[in] | timeoutUs | Unused |
[out] | syncObj | The Waiter's NvSciSyncObj. |
Usage considerations
NvSciError NvSciSyncObjSignal | ( | NvSciSyncObj | syncObj | ) |
Signals the NvSciSyncObj using the reconciled primitive that was allocated along with the NvSciSyncObj.
If the signal operation fails, then the timestamp value is undefined. This function is called when the CPU is the Signaler.
[in] | syncObj | A valid NvSciSyncObj to signal. |
Usage considerations
NvSciError NvSciSyncObjValidate | ( | NvSciSyncObj | syncObj | ) |
Validates the NvSciSyncObj satisfies the constraints of the NvSciSyncAttrList that it is associated with.
[in] | syncObj | Unused |
Usage considerations
PACK_SYNC | ( | typedef struct { uint64_t timestamp;uint32_t statusEngine;uint16_t subframe;uint16_t status;} | ) |
A single slot in the task status buffer.
|
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 266 of file nvscisync.h.
|
static |
Maximum supported timeout value.
NvSciSyncFenceWait() can wait for at most this many microseconds. This value also corresponds to infinite timeout.
Definition at line 198 of file nvscisync.h.
|
static |
|
static |