NvSciIpc Changes#
This topic describes the customer-visible changes to the NvSciIpc
and NvSciEvent public headers between DRIVE OS 6.5.4.2 and DriveOS
7.2.5.0. The release exposes the configuration-blob / endpoint-access
query API declarations outside the QNX-only guard (per-function
descriptions remain QNX-specific in 7.2.5.0), and deprecates the
OS-specific legacy event entry points in favor of the unified
NvSciEventService library.
NvSciIpcEndpointAccessInfo Promoted to Cross-OS API#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
No. Source changes are required. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
The cfg-blob declarations were exposed outside the __QNX__ guard
so the public surface is visible on Linux (advertised by the
@version 1.5 minor-version bump). The per-function descriptions
still call out a QNX-only implementation in 7.2.5.0. Linux behavioral
support is tracked separately. The gid field was switched to a
fixed-width type to avoid dependence on system gid_t width, and a
uid field is added to unify the auth model with the
uid / gid pair used elsewhere in DriveOS.
Steps to Migrate
Update
NvSciIpcEndpointAccessInfoconsumers to use the new fixed-width fields:NvSciIpcEndpointAccessInfo info; gid_t g = info.gid; /* gid_t */
becomes:
NvSciIpcEndpointAccessInfo info; uint32_t g = info.gid; /* now uint32_t */ uint32_t u = info.uid; /* new field */
Audit item rather than a compile-time hook:
gid_t→uint32_tmay surface a compiler warning at sites that take&info.gidand pass it wheregid_t *is expected, but the appendeduidfield will not consistently fire a diagnostic — designated initializers leave trailing aggregate members zero-initialized without warning. Treat this as a struct-layout / initializer audit item: review every site that initializes, copies, memcpys, or type-punsNvSciIpcEndpointAccessInfoand populateuidexplicitly when the value is meaningful.Drop the
__QNX__guard around references to the cfg-blob APIs:#if defined(__QNX__) NvSciError e = NvSciIpcOpenCfgBlob(); #endif
becomes:
NvSciError e = NvSciIpcOpenCfgBlob();
Callers that gate behavior on the NvSciIpc API minor version should raise the requested minor:
NvSciIpcCheckVersionCompatibility(1U, 4U, &compat);
becomes:
NvSciIpcCheckVersionCompatibility(1U, 5U, &compat);
New Endpoint Sentinel Macros#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
New sentinel macros |
Yes |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
Provides explicit “no IRQ” / “no IID” sentinel values so callers can detect endpoints that do not expose an interrupt or interrupt id.
Steps to Migrate
Replace any hand-rolled invalid-IRQ / invalid-IID checks with the new sentinels. NvSciIpcEndpointAccessInfo exposes the IRQ and IID under the irq and id fields:
if (info.irq == NVSCIIPC_INVALID_IRQ) { /* endpoint has no interrupt */ } if (info.id == NVSCIIPC_INVALID_IID) { /* endpoint has no interrupt id */ }
NvSciIpcGetEndpointAccessInfo Precondition Simplification#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
The documented precondition of |
No. The source rebuilds, but runtime behavior changed. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
NvSciIpcInit() now opens and initialises the configuration on the
caller’s behalf. NvSciIpcGetEndpointAccessInfo() only checks that
init completed and then queries access information. The explicit
caller-side NvSciIpcOpenCfgBlob() / NvSciIpcCloseCfgBlob()
pair around NvSciIpcGetEndpointAccessInfo() is no
longer required.
Steps to Migrate
The explicit cfg-blob open / close pair around
NvSciIpcGetEndpointAccessInfobecomes optional:NvSciIpcInit(); NvSciIpcOpenCfgBlob(); NvSciIpcGetEndpointAccessInfo(name, &info); NvSciIpcCloseCfgBlob();
can be simplified to:
NvSciIpcInit(); NvSciIpcGetEndpointAccessInfo(name, &info);
Legacy OS-Specific Event APIs Deprecation#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
Yes |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
DriveOS is consolidating event handling onto NvSciEventService for
future safety qualification. The OS-specific legacy entry points remain
functional in 7.2.5.0 but will be removed in a later release.
Steps to Migrate
Migrate event handling from the legacy OS-specific entry points to the NvSciEventService library:
NvSciIpcSetQnxPulseParamSafe(handle, coid, prio, code); NvSciIpcWaitEventQnx(chid, timeoutUs, sizeof(pulse), &pulse);becomes:
NvSciEventNotifier *notifier = NULL; NvSciIpcGetEventNotifier(handle, ¬ifier); eventLoopService->WaitForEvent(notifier, timeoutUs);
Wait API Threading and Polling Semantics#
Target Changes |
Backward Compatible |
Platform |
OS |
|---|---|---|---|
|
No. Source rebuilds, but runtime behavior changed. |
SR |
QNX |
Migration Path
Orin to Thor
Migration Release Path
6.5.4.2 to 7.2.5.0
Migration Rationale
Documentation correction reflecting the actual implementation: the
calling thread itself drains pending notifiers before the blocking
call returns. The microseconds == 0 poll mode was already supported
by the implementation. The documentation is updated to publish this contract.
Steps to Migrate
Customers who relied on the previous “some thread” wording to infer cross-thread notifier delivery should re-validate their threading model.
Use the documented zero-timeout poll mode for non-blocking event servicing in a poll loop:
// Non-blocking poll: drains pending events and returns immediately. eventLoopService->WaitForMultipleEventsExt(eventService, notifierArray, count, 0, newEventArray);