Files
linux-nv-oot/include/soc/tegra/camrtc-capture-messages.h
fraunak 59fa283238 camera: Add ISP floorsweeping support to Linux
This commit implements T264 ISP floorsweeping functionality in the Linux
kernel driver, extending the existing RCE firmware implementation to
provide transparent ISP unit redirection at the kernel level.

Changes:
- Add isp_capture_query_availability_mask_probe() function to query ISP
  availability mask from RCE firmware during driver probe via IVC
- Add isp_capture_find_first_available() helper function to find the
  first available ISP unit from a bitmask for HW assignment
- Integrate floorsweeping logic into isp_get_nvhost_device() to handle
  SW-to-HW ISP unit mapping with thread-safe assignment
- Add isp_capture_get_capabilities() function to expose ISP availability
  to userspace via new IOCTL (ISP_CAPTURE_GET_CAPABILITIES)
- Add probe-time caching of ISP availability mask to avoid repeated IVC
  queries during runtime
- Add comprehensive error handling and safety mechanisms for unknown
  configurations

Implementation details:
- Uses CAPTURE_ISP_FUSE_QUERY_REQ/RESP IVC messages for querying RCE
- Maintains SW-to-HW ISP unit mapping array protected by mutex
- The SW-to-HW mappings persist for the driver's lifetime, given that
  multiple channels make use of the same SW unit ID's and we do not
  have tracking of all open channels during runtime
- Integrates with existing ISP setup flow before buffer allocation
- Maintains backward compatibility with non-T264 hardware
- Conservative approach: blocks requests when no ISP units are available

Floorsweeping logic (handled by RCE firmware, exposed as bitmask):
- Mask bit N set = ISP N available (not fused off)
- Mask bit N clear = ISP N fused off (unavailable)
- Examples:
  - 0x3 (0b11): Both ISP0/ISP1 available (no floorsweeping)
  - 0x1 (0b01): Only ISP0 available → all requests map to ISP0
  - 0x2 (0b10): Only ISP1 available → all requests map to ISP1
  - 0x0: No ISP units available (block all requests)

Benefits:
- Transparent operation for applications using fusacapture library
- Automatic ISP unit redirection without API changes
- Improved hardware yield by supporting single-ISP configurations
- Robust error handling and safety mechanisms
- Minimal performance overhead with probe-time caching

The implementation complements the existing RCE firmware floorsweeping
support and provides a complete end-to-end solution for T264 ISP
floorsweeping across all software layers.

Bug 5640706

Change-Id: If85ee3178e857394300479dd42e636f5f5d3bd23
Signed-off-by: fraunak <fraunak@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3491180
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Evgeny Kornev <ekornev@nvidia.com>
Reviewed-by: Kalle Jokiniemi <kjokiniemi@nvidia.com>
Reviewed-by: Semi Malinen <smalinen@nvidia.com>
Tested-by: Akihiro Mizusawa <amizusawa@nvidia.com>
2025-11-25 13:12:39 -08:00

2435 lines
85 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/* SPDX-FileCopyrightText: Copyright (c) 2016-2025 NVIDIA CORPORATION & AFFILIATES.
* All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*/
/**
* @file camrtc-capture-messages.h
*
* @brief Capture control and Capture IVC messages
*/
#ifndef INCLUDE_CAMRTC_CAPTURE_MESSAGES_H
#define INCLUDE_CAMRTC_CAPTURE_MESSAGES_H
#include "camrtc-capture.h"
#pragma GCC diagnostic error "-Wpadded"
/**
* @brief Standard message header for all capture and capture-control IVC messages.
*
* Control Requests not associated with a specific channel
* will use an opaque transaction ID rather than channel_id.
* The transaction ID in the response message is copied from
* the request message.
*/
struct CAPTURE_MSG_HEADER {
/** Message identifier (See @ref CapCtrlMsgType). */
uint32_t msg_id;
/** @anon_union */
union {
/**
* @anon_union_member
* Capture channel ID [0, UINT32_MAX]. Used when the message
* is related to a specific capture channel. The channel ID
* must be a valid ID previously assigned by RCE FW.
*/
uint32_t channel_id;
/**
* @anon_union_member
* Transaction id [0, UINT32_MAX]. Used when the message is not
* related to a specific capture channel. The transaction ID in
* a request message must be unique and may not collide with any
* existing channel ID. The transaction in a response message
* must match the transaction ID of the associated request.
*/
uint32_t transaction;
};
} CAPTURE_IVC_ALIGN;
/**
* @defgroup CapCtrlMsgType Message types for capture-control IVC channel messages
*
* The capture-control IVC channel is established during boot using the
* @ref CAMRTC_HSP_CH_SETUP command. The IVC channel is bi-directional
* and can be used to carry out control operations on RCE firmware. Each
* control operation consists of a request message and an associated
* response message.
*
* The overall message structure is defined by @ref CAPTURE_CONTROL_MSG
* and the structure is the same for both requests and responses. Each control
* message consists of a common @ref CAPTURE_MSG_HEADER followed by message
* specific data.
*
* The type of a message is identified by @ref CAPTURE_MSG_HEADER::msg_id.
*
* Requests and responses may be associated with a logical channel. All
* requests on the same logical channel must be strictly serialized, so
* that only a single request may be pending at any time. Requests and
* responses must specify the logical channel ID in the
* @ref CAPTURE_MSG_HEADER::channel_id. The channel ID is assigned by
* RCE FW when the logical channel is created.
*
* Requests and responses that are not associated with a specific logical
* channel must instead specify a transaction ID in
* @ref CAPTURE_MSG_HEADER::transaction. The transaction ID must be unique
* for each request and must not collide with any existing channel ID.
* A response message must use the same transaction ID as the associated
* request message. Examples of control messages that are not associated
* with an existing logical channel are messages that are used to
* establish a new logical channel. There are also other control operations
* that are not specific to a logical channel.
*
* @{
*/
/**
* @defgroup ViCapCtrlMsgType Message types for VI capture channel control messages
*
* Capture channel control messages are used to set up, reset, and release
* channels for capturing images from an imaging stream source, as well as
* execute other control operations on the VI capture channel.
*
* See @ref CapCtrlMsgType for more information on the message protocol.
*
* @{
*/
/**
* @brief VI capture channel setup request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* allocate a VI capture channel and associated resources.
*
* @pre The capture-control IVC channel has been set up during
* boot using the @ref CAMRTC_HSP_CH_SETUP command.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_SETUP_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_CHANNEL_SETUP_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_SETUP_RESP
*/
#define CAPTURE_CHANNEL_SETUP_REQ MK_U32(0x1E)
/**
* @brief VI or CoE capture channel setup response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CHANNEL_SETUP_REQ or @ref CAPTURE_COE_CHANNEL_SETUP_REQ
* message.
*
* @pre A @ref CAPTURE_CHANNEL_SETUP_REQ or @ref CAPTURE_COE_CHANNEL_SETUP_REQ message
* has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_SETUP_RESP
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" =
* @ref CAPTURE_CHANNEL_SETUP_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::transaction "transaction"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_SETUP_RESP_MSG
*/
#define CAPTURE_CHANNEL_SETUP_RESP MK_U32(0x11)
/**
* @brief VI capture channel reset request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* reset a VI capture channel. The client must also send a @ref
* CAPTURE_RESET_BARRIER_IND message on the @em capture IVC channel
* in order to define a boundary between capture requests submitted
* before the reset and requests submitted after it.
*
* When RCE FW receives the @ref CAPTURE_CHANNEL_RESET_REQ message, it
* will cancel all capture requests in the channel queue upto the @ref
* CAPTURE_RESET_BARRIER_IND message. The response is sent after the
* RCE side channel cleanup is complete. If the reset barrier is not
* received within 5 ms, all requests currently in the queue will be
* cleared and a @ref CAPTURE_ERROR_TIMEOUT error will be reported
* in the response message.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_RESET_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_RESET_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_RESET_RESP
*/
#define CAPTURE_CHANNEL_RESET_REQ MK_U32(0x12)
/**
* @brief VI capture channel reset response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CHANNEL_RESET_REQ message.
*
* @pre A @ref CAPTURE_CHANNEL_RESET_REQ message has been sent to the
* logical channel.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_RESET_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_RESET_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_RESET_RESP_MSG
*/
#define CAPTURE_CHANNEL_RESET_RESP MK_U32(0x13)
/**
* @brief VI capture channel release request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* release a VI capture channel. Cancels all pending capture
* requests.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_RELEASE_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_RELEASE_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_RELEASE_RESP
*/
#define CAPTURE_CHANNEL_RELEASE_REQ MK_U32(0x14)
/**
* @brief VI capture channel release response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CHANNEL_RELEASE_REQ message.
*
* @pre A @ref CAPTURE_CHANNEL_RELEASE_REQ message has been sent to the
* logical channel.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_RELEASE_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_RELEASE_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_RELEASE_RESP_MSG
*/
#define CAPTURE_CHANNEL_RELEASE_RESP MK_U32(0x15)
/** @} */
/**
* @defgroup ViCapCtrlMsgTypeNonsafe Message types for VI capture channel control messages (non-safety)
* @{
*/
#define CAPTURE_COMPAND_CONFIG_REQ MK_U32(0x16)
#define CAPTURE_COMPAND_CONFIG_RESP MK_U32(0x17)
#define CAPTURE_PDAF_CONFIG_REQ MK_U32(0x18)
#define CAPTURE_PDAF_CONFIG_RESP MK_U32(0x19)
#define CAPTURE_SYNCGEN_ENABLE_REQ MK_U32(0x1A)
#define CAPTURE_SYNCGEN_ENABLE_RESP MK_U32(0x1B)
#define CAPTURE_SYNCGEN_DISABLE_REQ MK_U32(0x1C)
#define CAPTURE_SYNCGEN_DISABLE_RESP MK_U32(0x1D)
/** @} */
/**
* @defgroup CoeCapCtrlMsgType Message types for CoE capture channel control messages
*
* Capture channel control messages are used to set up, reset, and release
* channels for capturing images from an Ethernet imaging stream source, as well as
* execute other control operations on the CoE capture channel.
*
* @{
*/
/**
* @brief CoE capture channel setup request.
*
* This is a "capture control message" to allocate a CoE capture channel and
* associated resources.
*
* @pre The capture-control IVC channel has been set up during
* boot using the @ref CAMRTC_HSP_CH_SETUP command.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_CHANNEL_SETUP_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_COE_CHANNEL_SETUP_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_SETUP_RESP
*/
#define CAPTURE_COE_CHANNEL_SETUP_REQ MK_U32(0x1F)
/**
* @brief CoE capture channel reset request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* reset a CoE capture channel.
*
* When RCE FW receives the @ref CAPTURE_COE_CHANNEL_RESET_REQ message, it
* will cancel all capture requests in the channel queue. The response is sent
* after the RCE side channel cleanup is complete.
*
* @pre A CoE capture channel has been set up with
* @ref CAPTURE_COE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_CHANNEL_RESET_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_COE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_COE_CHANNEL_RESET_REQ_MSG
*
* @par Response
* - @ref CAPTURE_COE_CHANNEL_RESET_RESP
*/
#define CAPTURE_COE_CHANNEL_RESET_REQ MK_U32(0x28)
/**
* @brief CoE capture channel reset response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_COE_CHANNEL_RESET_REQ message.
*
* @pre A @ref CAPTURE_COE_CHANNEL_RESET_REQ message has been sent to the
* logical channel.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_CHANNEL_RESET_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_COE_CHANNEL_RESET_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_COE_CHANNEL_RESET_RESP_MSG
*/
#define CAPTURE_COE_CHANNEL_RESET_RESP MK_U32(0x29)
/**
* @brief CoE capture channel release request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* release a CoE capture channel. Cancels all pending capture
* requests.
*
* @pre A CoE capture channel has been set up with
* @ref CAPTURE_COE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_CHANNEL_RELEASE_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_COE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_COE_CHANNEL_RELEASE_REQ_MSG
*
* @par Response
* - @ref CAPTURE_COE_CHANNEL_RELEASE_RESP
*/
#define CAPTURE_COE_CHANNEL_RELEASE_REQ MK_U32(0x2A)
/**
* @brief CoE capture channel release response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_COE_CHANNEL_RELEASE_REQ message.
*
* @pre A @ref CAPTURE_COE_CHANNEL_RELEASE_REQ message has been sent to the
* logical channel.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_CHANNEL_RELEASE_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_COE_CHANNEL_RELEASE_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_COE_CHANNEL_RELEASE_RESP_MSG
*/
#define CAPTURE_COE_CHANNEL_RELEASE_RESP MK_U32(0x2B)
/** @} */
/**
* @defgroup IspCapCtrlMsgType Message types for ISP capture-control IVC channel messages.
* @{
*/
/**
* @brief ISP capture channel setup request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* allocate an ISP capture channel and associated resources.
*
* @pre The capture-control IVC channel has been set up during
* boot using the @ref CAMRTC_HSP_CH_SETUP command.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_ISP_SETUP_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_CHANNEL_ISP_SETUP_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_ISP_SETUP_RESP
*/
#define CAPTURE_CHANNEL_ISP_SETUP_REQ MK_U32(0x20)
/**
* @brief ISP capture channel setup response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CHANNEL_ISP_SETUP_REQ message.
*
* @pre A @ref CAPTURE_CHANNEL_ISP_SETUP_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_ISP_SETUP_RESP
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::transaction "transaction"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_SETUP_ISP_RESP_MSG
*/
#define CAPTURE_CHANNEL_ISP_SETUP_RESP MK_U32(0x21)
/**
* @brief ISP capture channel reset request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* reset an ISP capture channel. The client must also send a @ref
* CAPTURE_ISP_RESET_BARRIER_IND message on the @em capture IVC channel
* in order to define a boundary between capture requests submitted
* before the reset and requests submitted after it.
*
* When RCE FW receives the @ref CAPTURE_CHANNEL_ISP_RESET_REQ message,
* it will cancel all requests in the channel queue upto the @ref
* CAPTURE_ISP_RESET_BARRIER_IND message. The response is sent after the
* RCE side channel cleanup is complete. If the reset barrier is not
* received within 5 ms, all requests currently in the queue will be
* cleared and a @ref CAPTURE_ERROR_TIMEOUT error will be reported
* in the response message.
*
* @pre An ISP capture channel has been set up with
* @ref CAPTURE_CHANNEL_ISP_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_ISP_RESET_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_ISP_RESET_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_ISP_RESET_RESP
*/
#define CAPTURE_CHANNEL_ISP_RESET_REQ MK_U32(0x22)
/**
* @brief ISP capture channel reset response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CHANNEL_ISP_RESET_REQ message.
*
* @pre A @ref CAPTURE_CHANNEL_ISP_RESET_REQ message has been sent
* to the logical channel.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_ISP_RESET_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_RESET_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_ISP_RESET_RESP_MSG
*/
#define CAPTURE_CHANNEL_ISP_RESET_RESP MK_U32(0x23)
/**
* @brief ISP capture channel release request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* release an ISP capture channel. Cancels all pending requests.
*
* @pre An ISP capture channel has been set up with
* @ref CAPTURE_CHANNEL_ISP_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CHANNEL_ISP_RELEASE_RESP
*/
#define CAPTURE_CHANNEL_ISP_RELEASE_REQ MK_U32(0x24)
/**
* @brief ISP capture channel release response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ message.
*
* @pre A @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ message has been sent
* to the logical channel.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CHANNEL_ISP_RELEASE_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CHANNEL_ISP_RELEASE_RESP_MSG
*/
#define CAPTURE_CHANNEL_ISP_RELEASE_RESP MK_U32(0x25)
/**
* @brief ISP fuse register query request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* query the ISP fuse register value from RCE firmware. This
* message is used to determine which ISP units are enabled
* or disabled based on hardware fusing.
*
* @pre The capture-control IVC channel has been set up during
* boot using the @ref CAMRTC_HSP_CH_SETUP command.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_FUSE_QUERY_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_ISP_FUSE_QUERY_REQ_MSG
*
* @par Response
* - @ref CAPTURE_ISP_FUSE_QUERY_RESP
*/
#define CAPTURE_ISP_FUSE_QUERY_REQ MK_U32(0x26)
/**
* @brief ISP fuse register query response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_ISP_FUSE_QUERY_REQ message.
*
* @pre A @ref CAPTURE_ISP_FUSE_QUERY_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_FUSE_QUERY_RESP
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" =
* @ref CAPTURE_ISP_FUSE_QUERY_REQ@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::transaction "transaction"
*
* @par Payload
* - @ref CAPTURE_ISP_FUSE_QUERY_RESP_MSG
*/
#define CAPTURE_ISP_FUSE_QUERY_RESP MK_U32(0x27)
/** @} */
/** @} */
/**
* @defgroup CapMsgType Message types for capture channel IVC messages.
*
* The capture IVC channel is established during boot using the
* @ref CAMRTC_HSP_CH_SETUP command. The IVC channel is bi-directional
* but the usage is asynchronous. The channel is used for sending
* capture requests, ISP requests, and ISP program requests to RCE FW.
* RCE FW in turn will send asynchronous status indications when the
* requests complete. Multiple requests can be in progress in parallel.
*
* The overall message structure is defined by @ref CAPTURE_MSG and the
* structure is the same for both requests and indications. Each message
* consists of a common @ref CAPTURE_MSG_HEADER followed by message
* specific data.
*
* The type of a message is identified by @ref CAPTURE_MSG_HEADER::msg_id.
*
* Requests on the same logical channel will be executed in the order they
* were submitted and status indications will be sent back in the same order.
* Request ordering is not guaranteed between different logical channels.
* Requests and indications must specify the logical channel ID in the
* @ref CAPTURE_MSG_HEADER::channel_id. The channel ID is assigned by
* RCE FW when the logical channel is created.
*
* @{
*/
/**
* @defgroup ViCapMsgType Message types for VI capture request messages and indications.
*
* Capture channel messages are used to submit capture requests and to
* receive status indications pertaining to submitted requests.
*
* @{
*/
/**
* @brief Submit a new capture request on a VI capture channel.
*
* This is a @ref CapMsgType "capture channel message" to
* submit a VI capture request. The capture request provides
* a reference to a @ref capture_descriptor in shared memory,
* containing the detailed parameters for the capture. The request
* is asynchronous and will be queued by RCE for execution.
*
* Capture completion is indicated to downstream engines by
* incrementing the <em>progress syncpoint</em> (see @ref
* capture_channel_config::progress_sp) a pre-calculated number of
* times (2 + <em>number of sub-frames</em>). The first increment
* occurs at @em start-of-frame and the last increment occurs at
* @em end-of-frame. In between, the syncpoint is incremented once
* for each completed @em subframe. The number of @em subframes
* used in the capture is chosen by the client and is implemented
* by programming flush points for the output buffer (see
* @ref vi_channel_config::flush_enable,
* @ref vi_channel_config::flush_periodic,
* @ref vi_channel_config::flush, and
* @ref vi_channel_config::flush_first. When the @em end-of-frame
* increment occurs, the optional @ref capture_descriptor::engine_status
* record is guaranteed to be populated if a buffer for it was
* provided by the client.
*
* If @ref CAPTURE_FLAG_STATUS_REPORT_ENABLE
* is set in @ref capture_descriptor::capture_flags, RCE will store
* the capture status into @ref capture_descriptor::status. RCE will
* also send a @ref CAPTURE_STATUS_IND message to indicate that the
* capture was completed. The capture status record contains information
* about the capture, such as CSI frame number, start-of-frame and
* end-of-frame timestamps, a general success or fail status,
* as well as a detailed record of any errors detected.
*
* If @ref CAPTURE_FLAG_ERROR_REPORT_ENABLE is set in
* @ref capture_descriptor::capture_flags, RCE will send a
* @ref CAPTURE_STATUS_IND message upon an error, even if
* @ref CAPTURE_FLAG_STATUS_REPORT_ENABLE is not set.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_REQUEST_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_REQUEST_REQ_MSG
*
* @par Response
* - @ref CAPTURE_STATUS_IND (asynchronous)
*/
#define CAPTURE_REQUEST_REQ MK_U32(0x01)
/**
* @brief Capture status indication.
*
* This is a @ref CapMsgType "capture channel message"
* received in response to a @ref CAPTURE_REQUEST_REQ message
* when the capture request has been completed and the
* capture status record has been written into
* @ref capture_descriptor::status.
*
* @pre A @ref CAPTURE_REQUEST_REQ has been sent with
* @ref CAPTURE_FLAG_STATUS_REPORT_ENABLE or
* @ref CAPTURE_FLAG_ERROR_REPORT_ENABLE set in
* @ref capture_descriptor::capture_flags.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_STATUS_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_STATUS_IND_MSG
*/
#define CAPTURE_STATUS_IND MK_U32(0x02)
/**
* @brief VI capture channel reset barrier indication.
*
* This is a @ref CapMsgType "capture channel message" sent on
* the @em capture IVC channel in conjuncation with a
* @ref CAPTURE_CHANNEL_RESET_REQ message sent on the
* <em>capture-control</em> IVC channel to reset a VI capture channel.
* This indication defines a boundary between capture requests
* submitted before the reset request and capture requests submitted
* after it. Capture requests submitted after the reset request are
* not affected by the reset operation.
*
* @pre A VI capture channel has been set up with a
* @ref CAPTURE_CHANNEL_SETUP_REQ and a
* @ref CAPTURE_CHANNEL_RESET_REQ
* has been sent to the channel.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_RESET_BARRIER_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*/
#define CAPTURE_RESET_BARRIER_IND MK_U32(0x03)
/** @} */
/**
* @defgroup IspCapMsgType Message types for ISP capture channel IVC messages.
* @{
*/
/**
* @brief Submit a new ISP request on an ISP capture channel.
*
* This is a @ref CapMsgType "capture channel message" to
* submit an ISP request. The ISP request message provides
* a reference to a @ref isp_capture_descriptor in shared memory,
* containing the detailed parameters for the request. The request
* is asynchronous and will be queued by RCE for execution.
*
* ISP request completion is indicated to downstream engines by
* incrementing the <em>progress syncpoint</em> (see @ref
* capture_channel_config::progress_sp) a pre-calculated number of
* times (1 + <em>number of sub-frames</em>). The syncpoint is
* incremented once for each completed @em subframe and once
* when the task is complete. The number of @em subframes
* used in the capture is chosen by the client and is implemented
* by programming the height if the subframe into
* @ref surface_configs::slice_height in @ref isp_capture_descriptor.
* When the last <em>progress syncpoint</em> increment of the frame
* occurs, the optional @ref isp_capture_descriptor::engine_status
* record is guaranteed to be populated if a buffer for it was
* provided by the client.
*
* If @ref CAPTURE_ISP_FLAG_STATUS_REPORT_ENABLE
* is set in @ref isp_capture_descriptor::capture_flags, RCE will store
* the capture status into @ref isp_capture_descriptor::status. RCE will
* also send a @ref CAPTURE_ISP_STATUS_IND message to indicate that the
* ISP request was completed. The status record contains information
* about the capture, such as frame number, a general success or fail
* status, as well as more details of detected errors.
*
* If @ref CAPTURE_ISP_FLAG_ERROR_REPORT_ENABLE is set in
* @ref isp_capture_descriptor::capture_flags, RCE will send a
* @ref CAPTURE_ISP_STATUS_IND message upon an error, even if
* @ref CAPTURE_ISP_FLAG_STATUS_REPORT_ENABLE is not set.
*
* If @ref CAPTURE_ISP_FLAG_ISP_PROGRAM_BINDING
* is set in @ref isp_capture_descriptor::capture_flags, the
* @ref CAPTURE_ISP_STATUS_IND message is replaced by the
* @ref CAPTURE_ISP_EX_STATUS_IND message which combines the separate
* @ref CAPTURE_ISP_STATUS_IND and @ref CAPTURE_ISP_PROGRAM_STATUS_IND
* messages into a single message.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_ISP_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_REQUEST_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_ISP_REQUEST_REQ_MSG
*
* @par Response
* - @ref CAPTURE_ISP_STATUS_IND (asynchronous)
* - @ref CAPTURE_ISP_EX_STATUS_IND (asynchronous)
*/
#define CAPTURE_ISP_REQUEST_REQ MK_U32(0x04)
/**
* @brief ISP request status indication.
*
* This is a @ref CapMsgType "capture channel message"
* received in response to a @ref CAPTURE_ISP_REQUEST_REQ
* message when the ISP request has been completed and the
* capture status record has been written into
* @ref isp_capture_descriptor::status.
*
* @pre A @ref CAPTURE_ISP_REQUEST_REQ has been sent with
* @ref CAPTURE_ISP_FLAG_STATUS_REPORT_ENABLE or
* @ref CAPTURE_ISP_FLAG_ERROR_REPORT_ENABLE set in
* @ref isp_capture_descriptor::capture_flags.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_STATUS_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_ISP_STATUS_IND_MSG
*/
#define CAPTURE_ISP_STATUS_IND MK_U32(0x05)
/**
* @brief Submit a new ISP program on an ISP capture channel.
*
* This is a @ref CapMsgType "capture channel message" to submit
* an ISP program request. The ISP program request message provides
* a reference to a @ref isp_program_descriptor in shared memory,
* containing detailed ISP programming. The ISP program will be
* used for multiple ISP processing requests until superceded
* by a newer ISP program.
*
* Once the ISP program is expired and RCE FW has deleted all
* references to it, it will send the asynchronous @ref
* CAPTURE_ISP_PROGRAM_STATUS_IND back to indicate that the
* ISP program buffer can be released.
*
* If the ISP program has been associated with a single ISP request
* by setting the @ref CAPTURE_ISP_FLAG_ISP_PROGRAM_BINDING flag
* in the @ref isp_capture_descriptor::capture_flags field of
* a @ref CAPRURE_ISP_REQUEST_REQ "ISP request message", the
* @ref CAPTURE_ISP_PROGRAM_STATUS_IND message is replaced by the
* @ref CAPTURE_ISP_EX_STATUS_IND message which combines the separate
* @ref CAPTURE_ISP_STATUS_IND and @ref CAPTURE_ISP_PROGRAM_STATUS_IND
* messages into a single message.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_ISP_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_PROGRAM_REQUEST_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_ISP_PROGRAM_REQUEST_REQ_MSG
*
* @par Response
* - @ref CAPTURE_ISP_PROGRAM_STATUS_IND (asynchronous)
* - @ref CAPTURE_ISP_EX_STATUS_IND (asynchronous)
*/
#define CAPTURE_ISP_PROGRAM_REQUEST_REQ MK_U32(0x06)
/**
* @brief ISP program status indication.
*
* This is a @ref CapMsgType "capture channel message" received
* in response to a @ref CAPTURE_ISP_PROGRAM_REQUEST_REQ
* message when the ISP program is no longer in use by RCE FW
* and the ISP program status record has been written into
* @ref isp_program_descriptor::isp_program_status. The ISP
* program buffer can be discarded after this message has been
* received.
*
* @pre A @ref CAPTURE_ISP_PROGRAM_REQUEST_REQ has been sent
* and the ISP program has been bound to a single ISP request
* by setting the @ref CAPTURE_ISP_FLAG_ISP_PROGRAM_BINDING
* flag in @ref isp_capture_descriptor::capture_flags.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_PROGRAM_STATUS_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_ISP_PROGRAM_STATUS_IND_MSG
*/
#define CAPTURE_ISP_PROGRAM_STATUS_IND MK_U32(0x07)
/**
* @brief ISP capture channel reset barrier indication.
*
* This is a @ref CapMsgType "capture channel message" sent on
* the @em capture IVC channel in conjuncation with a
* @ref CAPTURE_CHANNEL_ISP_RESET_REQ message sent on the
* <em>capture-control</em> IVC channel to reset an ISP capture
* channel. This indication defines a boundary between ISP requests
* submitted before the reset request and capture ISP requests submitted
* after it. ISP requests submitted after the reset request are
* not affected by the reset operation.
*
* @pre A VI capture channel has been set up with a
* @ref CAPTURE_CHANNEL_ISP_SETUP_REQ and a
* @ref CAPTURE_CHANNEL_ISP_RESET_REQ
* has been sent to the channel.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_RESET_BARRIER_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*/
#define CAPTURE_ISP_RESET_BARRIER_IND MK_U32(0x08)
/**
* @brief ISP extended request status indication.
*
* This is a @ref CapMsgType "capture channel message" received in response
* to a @ref CAPTURE_ISP_REQUEST_REQ message when the ISP request has been
* completed and the capture status record has been written into
* @ref isp_capture_descriptor::status.
*
* This message also signals the expiration of an ISP program submitted
* earlier with an @ref ISP_PROGRAM_REQUEST_REQ "ISP program request
* message" and bound explicitly to the associated ISP request by setting
* the @ref CAPTURE_ISP_FLAG_ISP_PROGRAM_BINDING flag in
* @ref isp_capture_descriptor::capture_flags and specifying the
* @ref CAPTURE_ISP_PROGRAM_REQUEST_REQ_MSG::buffer_index "buffer index"
* of the ISP program in @ref isp_capture_descriptor::program_buffer_index.
*
* @pre A @ref CAPTURE_ISP_REQUEST_REQ has been sent with
* @ref CAPTURE_ISP_FLAG_STATUS_REPORT_ENABLE and
* @ref CAPTURE_ISP_FLAG_ISP_PROGRAM_BINDING set in
* @ref isp_capture_descriptor::capture_flags.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_ISP_STATUS_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_ISP_STATUS_IND_MSG
*/
#define CAPTURE_ISP_EX_STATUS_IND MK_U32(0x09)
/** @} */
/** @} */
/**
* @defgroup CoeCapMsgType Message types for CoE capture request messages and indications.
*
* Capture channel messages are used to submit capture requests and to
* receive status indications pertaining to submitted requests.
*
* @{
*/
/**
* @brief Submit a new capture request on a CoE capture channel.
*
* This is a @ref CapMsgType "capture channel message" to
* submit a CoE capture request. The capture request provides all the information
* needed to submit a capture request to the Ethernet engine, like DMA address of the buffer,
* buffer size, etc.
*
* The capture request is sent asynchronously and is queued by RCE for execution.
* Status of the request is indicated with @ref CAPTURE_COE_STATUS_IND message.
*
* @pre A CoE capture channel has been set up with
* @ref CAPTURE_COE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_REQUEST
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER
* "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_COE_REQUEST_MSG
*
* @par Response
* - @ref CAPTURE_COE_STATUS_IND (asynchronous)
*/
#define CAPTURE_COE_REQUEST MK_U32(0x0A)
/**
* @brief Capture status indication for CoE capture channel.
*
* This is a @ref CapMsgType "capture channel message"
* received in response to a @ref CAPTURE_COE_REQUEST message
* when the capture request has been completed.
* It is sent asynchronously whenever capture request completion is signalled by a HW.
*
* @pre A @ref CAPTURE_COE_REQUEST has been sent.
*
* @par Header
* - @ref CAPTURE_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_COE_STATUS_IND
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_COE_REQUEST_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_COE_STATUS_IND_MSG
*/
#define CAPTURE_COE_STATUS_IND MK_U32(0x0B)
/** @} */
/**
* @brief Invalid message type. This can be used to respond to an invalid request.
*/
#define CAPTURE_MSG_ID_INVALID MK_U32(0xFFFFFFFF)
/**
* @brief Invalid channel id. Used when channel is not specified.
*/
#define CAPTURE_CHANNEL_ID_INVALID MK_U32(0xFFFFFFFF)
typedef uint32_t capture_result;
/**
* @defgroup CapErrorCodes Unsigned 32-bit return values for the capture-control IVC messages.
* @{
*/
/** Request succeeded */
#define CAPTURE_OK MK_U32(0)
/** Request failed: invalid parameter */
#define CAPTURE_ERROR_INVALID_PARAMETER MK_U32(1)
/** Request failed: insufficient memory */
#define CAPTURE_ERROR_NO_MEMORY MK_U32(2)
/** Request failed: service busy */
#define CAPTURE_ERROR_BUSY MK_U32(3)
/** Request failed: not supported */
#define CAPTURE_ERROR_NOT_SUPPORTED MK_U32(4)
/** Request failed: not initialized */
#define CAPTURE_ERROR_NOT_INITIALIZED MK_U32(5)
/** Request failed: overflow */
#define CAPTURE_ERROR_OVERFLOW MK_U32(6)
/** Request failed: no resource available */
#define CAPTURE_ERROR_NO_RESOURCES MK_U32(7)
/** Request failed: timeout */
#define CAPTURE_ERROR_TIMEOUT MK_U32(8)
/** Request failed: service in invalid state */
#define CAPTURE_ERROR_INVALID_STATE MK_U32(9)
/** @} */
/** @brief Message data for @ref CAPTURE_CHANNEL_SETUP_REQ message */
struct CAPTURE_CHANNEL_SETUP_REQ_MSG {
/** Capture channel configuration. */
struct capture_channel_config channel_config;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_SETUP_RESP message */
struct CAPTURE_CHANNEL_SETUP_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Capture channel identifier for the new channel [0, UINT32_MAX]. */
uint32_t channel_id;
/** 1-hot encoded bitmask indicating the allocated VI hardware
* channel [0, 0xFFFFFFFFF ]. LSB is VI channel 0.
*/
uint64_t vi_channel_mask;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_COE_CHANNEL_SETUP_REQ message */
struct CAPTURE_COE_CHANNEL_SETUP_REQ_MSG {
/** Capture channel configuration. */
struct capture_coe_channel_config channel_config;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_COE_REQUEST message. */
struct CAPTURE_COE_REQUEST_MSG {
/** Index of the buffer to be captured, for tacking by KMD. */
uint32_t buffer_index;
/** Length of the buffer to be captured. */
uint32_t buf_len;
/** DMA address of the buffer to be captured. */
iova_t buf_mgbe_iova;
} CAPTURE_IVC_ALIGN;
/**
* @defgroup CapResetFlags VI Capture channel reset flags
* @{
*/
/** Reset the channel without waiting for frame-end first. */
#define CAPTURE_CHANNEL_RESET_FLAG_IMMEDIATE MK_U32(0x01)
/** @} */
/** @brief Message data for @ref CAPTURE_CHANNEL_RESET_REQ message */
struct CAPTURE_CHANNEL_RESET_REQ_MSG {
/** See @ref CapResetFlags "reset flags". */
uint32_t reset_flags;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RESET_RESP message */
struct CAPTURE_CHANNEL_RESET_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RESET_REQ message */
struct CAPTURE_COE_CHANNEL_RESET_REQ_MSG {
/** Placeholder. Unused */
uint32_t reset_flags;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RESET_RESP message */
struct CAPTURE_COE_CHANNEL_RESET_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RELEASE_REQ message */
struct CAPTURE_COE_CHANNEL_RELEASE_REQ_MSG {
/** Placeholder. Unused */
uint32_t reset_flags;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RELEASE_RESP message */
struct CAPTURE_COE_CHANNEL_RELEASE_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RELEASE_REQ message */
struct CAPTURE_CHANNEL_RELEASE_REQ_MSG {
/** Unused */
uint32_t reset_flags;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_RELEASE_RESP message */
struct CAPTURE_CHANNEL_RELEASE_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Configure the piece-wise linear function used by the VI companding module.
*
* The companding table is shared by all capture channels and must be
* configured before enabling companding for a specific capture. Each channel
* can explicitly enable processing by the companding unit i.e the channels can
* opt-out of the global companding config. See @ref CapErrorCodes "Capture request return codes"
* for more details on the return values.
*/
struct CAPTURE_COMPAND_CONFIG_REQ_MSG {
/** VI companding configuration */
struct vi_compand_config compand_config;
} CAPTURE_IVC_ALIGN;
/**
* @brief VI Companding unit configuration response message.
*
* Informs the client the status of VI companding unit configuration request.
* A return value of CAPTURE_OK in the result field indicates the request
* message succeeded. Any other value indicates an error.
*/
struct CAPTURE_COMPAND_CONFIG_RESP_MSG {
/** Companding config setup result. See @ref CapErrorCodes "Return values". */
capture_result result;
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Configure the Phase Detection Auto Focus (PDAF) pattern.
*/
struct CAPTURE_PDAF_CONFIG_REQ_MSG {
/** PDAF configuration data */
struct vi_pdaf_config pdaf_config;
} CAPTURE_IVC_ALIGN;
/**
* @brief Configure PDAF unit response message
*
* Returns the status PDAF unit configuration request.
* A return value of CAPTURE_OK in the result field indicates the request
* message succeeded. Any other value indicates an error. See
* @ref CapErrorCodes "Capture request return codes" for more details on
* the return values.
*/
struct CAPTURE_PDAF_CONFIG_RESP_MSG {
/** PDAF config setup result. See @ref CapErrorCodes "Return values". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/*
* @brief Enable SLVS-EC synchronization
*
* Enable the generation of XVS and XHS synchronization signals for a
* SLVS-EC sensor.
*/
struct CAPTURE_SYNCGEN_ENABLE_REQ_MSG {
/** Syncgen unit */
uint32_t unit;
/** Reserved */
uint32_t pad__;
/** VI SYNCGEN unit configuration */
struct vi_syncgen_config syncgen_config;
} CAPTURE_IVC_ALIGN;
/**
* @brief Enable SLVS-EC synchronization response message.
*
* Returns the status of enable SLVS-EC synchronization request.
* A return value of CAPTURE_OK in the result field indicates the request
* message succeeded. Any other value indicates an error. See
* @ref CapErrorCodes "Capture request return codes" for more details on
* the return values.
*/
struct CAPTURE_SYNCGEN_ENABLE_RESP_MSG {
/** Syncgen unit */
uint32_t unit;
/** Syncgen enable request result. See @ref CapErrorCodes "Return values". */
capture_result result;
} CAPTURE_IVC_ALIGN;
/**
* @brief Disable SLVS-EC synchronization
*
* Disable the generation of XVS and XHS synchronization signals for a
* SLVS-EC sensor.
*/
struct CAPTURE_SYNCGEN_DISABLE_REQ_MSG {
/** Syncgen unit */
uint32_t unit;
/** See SyncgenDisableFlags "Syncgen disable flags" */
uint32_t syncgen_disable_flags;
/**
* @defgroup SyncgenDisableFlags Syncgen disable flags
* @{
*/
/** Disable SYNCGEN without waiting for frame end */
#define CAPTURE_SYNCGEN_DISABLE_FLAG_IMMEDIATE MK_U32(0x01)
/** @} */
} CAPTURE_IVC_ALIGN;
/**
* @brief Disable SLVS-EC synchronization response message.
*
* Returns the status of the SLVS-EC synchronization request message.
* A return value of CAPTURE_OK in the result field indicates the request
* message succeeded. Any other value indicates an error. See
* @ref CapErrorCodes "Capture request return codes" for more details on
* the return values.
*/
struct CAPTURE_SYNCGEN_DISABLE_RESP_MSG {
/** Syncgen unit */
uint32_t unit;
/** Syncgen disable request result .See @ref CapErrorCodes "Return values". */
capture_result result;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_PHY_STREAM_OPEN_REQ message.
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*
*/
struct CAPTURE_PHY_STREAM_OPEN_REQ_MSG {
/** @ref NvCsiStream "NvCSI Stream ID" */
uint32_t stream_id;
/** @ref NvCsiPort "CSI Port" */
uint32_t csi_port;
/** See @ref NvPhyType "NvCSI Physical stream type" */
uint32_t phy_type;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_PHY_STREAM_OPEN_RESP message.
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
struct CAPTURE_PHY_STREAM_OPEN_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_PHY_STREAM_CLOSE_REQ message.
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
struct CAPTURE_PHY_STREAM_CLOSE_REQ_MSG {
/** @ref NvCsiStream "NvCSI Stream ID" */
uint32_t stream_id;
/** @ref NvCsiPort "CSI Port" */
uint32_t csi_port;
/** See @ref NvPhyType "NvCSI Physical stream type" */
uint32_t phy_type;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_PHY_STREAM_CLOSE_RESP message.
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
struct CAPTURE_PHY_STREAM_CLOSE_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Physical stream dump registers request message. (Debug only)
*/
struct CAPTURE_PHY_STREAM_DUMPREGS_REQ_MSG {
/** NVCSI stream Id */
uint32_t stream_id;
/** NVCSI port */
uint32_t csi_port;
} CAPTURE_IVC_ALIGN;
/**
* @brief Physical stream dump registers response message. (Debug only)
*/
struct CAPTURE_PHY_STREAM_DUMPREGS_RESP_MSG {
/** Stream dump registers request status. See @ref CapErrorCodes "Return values". */
uint32_t result;
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ message.
*/
struct CAPTURE_CSI_STREAM_SET_CONFIG_REQ_MSG {
/** @ref NvCsiStream "NvCSI Stream ID" */
uint32_t stream_id;
/** @ref NvCsiPort "CSI Port" */
uint32_t csi_port;
/** See @ref NvCsiConfigFlags "NVCSI Configuration Flags" */
uint32_t config_flags;
/** Reserved */
uint32_t pad32__;
/**
* NVCSI brick configuration. Configuration is present if
* flag @ref NVCSI_CONFIG_FLAG_BRICK is set in @ref config_flags.
*/
struct nvcsi_brick_config brick_config;
/**
* NVCSI CIL (brick partition) configuration. Configuration is present
* if flag @ref NVCSI_CONFIG_FLAG_CIL is set in @ref config_flags.
*/
struct nvcsi_cil_config cil_config;
/**
* User-defined error configuration. Configuration is present if
* flag @ref NVCSI_CONFIG_FLAG_ERROR is set in @ref config_flags.
*/
struct nvcsi_error_config error_config;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_CSI_STREAM_SET_CONFIG_RESP message.
*/
struct CAPTURE_CSI_STREAM_SET_CONFIG_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ message.
*/
struct CAPTURE_CSI_STREAM_SET_PARAM_REQ_MSG {
/** @ref NvCsiStream "NvCSI Stream ID" */
uint32_t stream_id;
/** @ref NvCsiVirtualChannel "CSI Virtual Channel ID" */
uint32_t virtual_channel_id;
/** @ref NvCsiParamType "NVCSI parameter type". */
uint32_t param_type;
/** Reserved */
uint32_t pad32__;
/** @anon_union */
union {
/**
* DPCM configuration for an NVCSI stream. Present if
* @ref param_type is @ref NVCSI_PARAM_TYPE_DPCM. (non-safety)
* @anon_union_member
*/
struct nvcsi_dpcm_config dpcm_config;
/**
* NVCSI watchdog timer configugration. Present if
* @ref param_type is @ref NVCSI_PARAM_TYPE_WATCHDOG.
* @anon_union_member
*/
struct nvcsi_watchdog_config watchdog_config;
};
} CAPTURE_IVC_ALIGN;
/**
* @brief Message data for @ref CAPTURE_CSI_STREAM_SET_PARAM_RESP message.
*/
struct CAPTURE_CSI_STREAM_SET_PARAM_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief NVCSI test pattern generator (TPG) stream config request message.
*/
struct CAPTURE_CSI_STREAM_TPG_SET_CONFIG_REQ_MSG {
/** TPG configuration */
union nvcsi_tpg_config tpg_config;
} CAPTURE_IVC_ALIGN;
/**
* @brief NVCSI TPG stream config response message.
*/
struct CAPTURE_CSI_STREAM_TPG_SET_CONFIG_RESP_MSG {
/** Set TPG config request status. See @ref CapErrorCodes "Return values". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Start NVCSI TPG streaming request message.
*/
struct CAPTURE_CSI_STREAM_TPG_START_REQ_MSG {
/** NVCSI stream Id */
uint32_t stream_id;
/** NVCSI stream virtual channel id */
uint32_t virtual_channel_id;
/** TPG rate configuration */
struct nvcsi_tpg_rate_config tpg_rate_config;
} CAPTURE_IVC_ALIGN;
/**
* @brief Start NVCSI TPG streaming response message.
*/
struct CAPTURE_CSI_STREAM_TPG_START_RESP_MSG {
/** TPG start request status. See @ref CapErrorCodes "Return values". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Start NVCSI TPG streaming at specified frame rate request message.
*
* This message is similar to CAPTURE_CSI_STREAM_TPG_START_REQ_MSG. Here the frame rate
* and clock is specified using which the TPG rate config will be calculated.
*/
struct CAPTURE_CSI_STREAM_TPG_START_RATE_REQ_MSG {
/** NVCSI stream Id */
uint32_t stream_id;
/** NVCSI stream virtual channel id */
uint32_t virtual_channel_id;
/** TPG frame rate in Hz */
uint32_t frame_rate;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief NVCSI TPG stream start at a specified frame rate response message.
*/
struct CAPTURE_CSI_STREAM_TPG_START_RATE_RESP_MSG {
/** TPG start rate request status. See @ref CapErrorCodes "Return values". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @defgroup NvCsiTpgGain gain ratio settings that can be set to frame generated by NVCSI TPG.
* @{
*/
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_EIGHT_TO_ONE MK_U8(0) /* 8:1 gain */
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_FOUR_TO_ONE MK_U8(1) /* 4:1 gain */
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_TWO_TO_ONE MK_U8(2) /* 2:1 gain */
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_NONE MK_U8(3) /* 1:1 gain */
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_HALF MK_U8(4) /* 0.5:1 gain */
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_ONE_FOURTH MK_U8(5) /* 0.25:1 gain */
#define CAPTURE_CSI_STREAM_TPG_GAIN_RATIO_ONE_EIGHTH MK_U8(6) /* 0.125:1 gain */
/** @} */
/**
* @brief Apply gain ratio on specified VC of the desired CSI stream.
*
* This message is request to apply gain on specified vc, and it be
* applied on next frame.
*/
struct CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_REQ_MSG {
/** NVCSI stream Id */
uint32_t stream_id;
/** NVCSI stream virtual channel id */
uint32_t virtual_channel_id;
/** Gain ratio */
uint32_t gain_ratio;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief NVCSI TPG stream start at a specified frame rate response message.
*/
struct CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_RESP_MSG {
/** TPG apply gain request status. See @ref CapErrorCodes "Return values". */
uint32_t result;
/** Reserved */
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Stop NVCSI TPG streaming request message.
*/
struct CAPTURE_CSI_STREAM_TPG_STOP_REQ_MSG {
/** NVCSI stream Id */
uint32_t stream_id;
/** NVCSI stream virtual channel id */
uint32_t virtual_channel_id;
} CAPTURE_IVC_ALIGN;
/**
* @brief Stop NVCSI TPG streaming response message.
*/
struct CAPTURE_CSI_STREAM_TPG_STOP_RESP_MSG {
/** Stop TPG steaming request status. See @ref CapErrorCodes "Return values". */
uint32_t result;
uint32_t pad32__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Max number of events
*/
#define VI_NUM_INJECT_EVENTS 10U
/**
* @brief Event injection configuration.
*
* A capture request must be sent before this message
*/
struct CAPTURE_CHANNEL_EI_REQ_MSG {
/** Event data used for event injection */
struct event_inject_msg events[VI_NUM_INJECT_EVENTS];
/** Number of error events */
uint8_t num_events;
/** Reserved */
uint8_t pad__[7];
} CAPTURE_IVC_ALIGN;
/**
* @brief Acknowledge Event Injection request
*/
struct CAPTURE_CHANNEL_EI_RESP_MSG {
/** Stop TPG steaming request status. See @ref CapErrorCodes "Return values". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/**
* @brief Event injection channel reset request.
*/
struct CAPTURE_CHANNEL_EI_RESET_REQ_MSG {
/** Reserved */
uint8_t pad__[8];
} CAPTURE_IVC_ALIGN;
/**
* @brief Acknowledge Event injection channel reset request.
*/
struct CAPTURE_CHANNEL_EI_RESET_RESP_MSG {
/** Event injection channel reset request result. See @ref CapErrorCodes "Return values". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/**
* @addtogroup CapCtrlMsgType
* @{
*/
/**
* @defgroup PhyStreamMsgType NVCSI PHY Control Message Types
* @{
*/
/**
* @brief CSI stream open request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* open a CSI stream.
*
* This message is deprecated and should not be used. The client
* should instead set the @ref CAPTURE_CHANNEL_FLAG_CSI in
* @ref capture_channel_config::channel_flags and provide the
* @ref csi_stream_config "CSI stream configuration" in
* @ref capture_channel_config::csi_stream.
*
* @pre The capture-control IVC channel has been set up during
* boot using the @ref CAMRTC_HSP_CH_SETUP command.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_PHY_STREAM_OPEN_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_PHY_STREAM_OPEN_REQ_MSG
*
* @par Response
* - @ref CAPTURE_PHY_STREAM_OPEN_RESP
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
#define CAPTURE_PHY_STREAM_OPEN_REQ MK_U32(0x36)
/**
* @brief CSI stream open response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_PHY_STREAM_OPEN_REQ message.
*
* This message is deprecated and should not be used. See
* @ref CAPTURE_PHY_STREAM_OPEN_REQ.
*
* @pre A @ref CAPTURE_PHY_STREAM_OPEN_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_PHY_STREAM_OPEN_RESP
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" =
* @ref CAPTURE_PHY_STREAM_OPEN_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::transaction "transaction"
*
* @par Payload
* - @ref CAPTURE_PHY_STREAM_OPEN_RESP_MSG
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
#define CAPTURE_PHY_STREAM_OPEN_RESP MK_U32(0x37)
/**
* @brief CSI stream close request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* close a CSI stream.
*
* This message is deprecated and should not be used. The client
* should instead set the @ref CAPTURE_CHANNEL_FLAG_CSI in
* @ref capture_channel_config::channel_flags and provide the
* @ref csi_stream_config "CSI stream configuration" in
* @ref capture_channel_config::csi_stream. The CSI stream will
* then be closed when the VI capture channel is closed.
*
* @pre A CSI stream has been opened with the
* @ref CAPTURE_PHY_STREAM_OPEN_REQ message.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_PHY_STREAM_CLOSE_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_PHY_STREAM_CLOSE_REQ_MSG
*
* @par Response
* - @ref CAPTURE_PHY_STREAM_CLOSE_RESP
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
#define CAPTURE_PHY_STREAM_CLOSE_REQ MK_U32(0x38)
/**
* @brief CSI stream close response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_PHY_STREAM_CLOSE_REQ message.
*
* This message is deprecated and should not be used. See
* @ref CAPTURE_PHY_STREAM_CLOSE_REQ.
*
* @pre A @ref CAPTURE_PHY_STREAM_CLOSE_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_PHY_STREAM_CLOSE_RESP
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" =
* @ref CAPTURE_PHY_STREAM_CLOSE_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::transaction "transaction"
*
* @par Payload
* - @ref CAPTURE_PHY_STREAM_CLOSE_RESP_MSG
*
* @deprecated
* This message may be removed in the future. The client should populate
* @ref capture_channel_config::csi_stream instead.
*/
#define CAPTURE_PHY_STREAM_CLOSE_RESP MK_U32(0x39)
/** @} */
/**
* @defgroup PhyStreamDebugMsgType NVCSI Phy Debug Message types (non-safety)
* @{
*/
#define CAPTURE_PHY_STREAM_DUMPREGS_REQ MK_U32(0x3C)
#define CAPTURE_PHY_STREAM_DUMPREGS_RESP MK_U32(0x3D)
/** @} */
/**
* @defgroup NvCsiMsgType NVCSI Configuration Message Types
* @{
*/
/**
* @brief CSI stream set configuration request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* set CSI stream configuration.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CSI_STREAM_SET_CONFIG_RESP
*/
#define CAPTURE_CSI_STREAM_SET_CONFIG_REQ MK_U32(0x40)
/**
* @brief CSI stream set configuration response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ message.
*
* @pre A @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CSI_STREAM_SET_CONFIG_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CSI_STREAM_SET_CONFIG_RESP_MSG
*/
#define CAPTURE_CSI_STREAM_SET_CONFIG_RESP MK_U32(0x41)
/**
* @brief CSI stream set parameters request.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* set CSI stream parameters.
*
* @pre A VI capture channel has been set up with
* @ref CAPTURE_CHANNEL_SETUP_REQ.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CHANNEL_SETUP_RESP_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ_MSG
*
* @par Response
* - @ref CAPTURE_CSI_STREAM_SET_PARAM_RESP
*/
#define CAPTURE_CSI_STREAM_SET_PARAM_REQ MK_U32(0x42)
/**
* @brief CSI stream set parameters response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ message.
*
* @pre A @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_CSI_STREAM_SET_PARAM_RESP
* - @ref CAPTURE_MSG_HEADER::channel_id "channel_id" =
* @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::channel_id "channel_id"
*
* @par Payload
* - @ref CAPTURE_CSI_STREAM_SET_PARAM_RESP_MSG
*/
#define CAPTURE_CSI_STREAM_SET_PARAM_RESP MK_U32(0x43)
/** @} */
/**
* @defgroup NvCsiTpgMsgType NVCSI TPG Configuration Message Types
* @{
*/
#define CAPTURE_CSI_STREAM_TPG_SET_CONFIG_REQ MK_U32(0x44)
#define CAPTURE_CSI_STREAM_TPG_SET_CONFIG_RESP MK_U32(0x45)
#define CAPTURE_CSI_STREAM_TPG_START_REQ MK_U32(0x46)
#define CAPTURE_CSI_STREAM_TPG_START_RESP MK_U32(0x47)
#define CAPTURE_CSI_STREAM_TPG_STOP_REQ MK_U32(0x48)
#define CAPTURE_CSI_STREAM_TPG_STOP_RESP MK_U32(0x49)
#define CAPTURE_CSI_STREAM_TPG_START_RATE_REQ MK_U32(0x4A)
#define CAPTURE_CSI_STREAM_TPG_START_RATE_RESP MK_U32(0x4B)
#define CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_REQ MK_U32(0x4C)
#define CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_RESP MK_U32(0x4D)
/** @} */
/**
* @defgroup ViEiCapCtrlMsgType VI Event Injection Message Types (non-safety)
* @{
*/
#define CAPTURE_CHANNEL_EI_REQ MK_U32(0x50)
#define CAPTURE_CHANNEL_EI_RESP MK_U32(0x51)
#define CAPTURE_CHANNEL_EI_RESET_REQ MK_U32(0x52)
#define CAPTURE_CHANNEL_EI_RESET_RESP MK_U32(0x53)
/** @} */
/**
* @addtogroup ViCapCtrlMsgType
* @{
*/
/**
* @brief Override VI CHANSEL safety error masks.
*
* This is a @ref CapCtrlMsgType "capture control message" to
* override the default VI CHANSEL safety error masks on all
* active VI units.
*
* @pre The capture-control IVC channel has been set up during
* boot using the @ref CAMRTC_HSP_CH_SETUP command.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" = <em>unique ID</em>
*
* @par Payload
* - @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ_MSG
*
* @par Response
* - @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP
*/
#define CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ MK_U32(0x54)
/**
* @brief Override VI CHANSEL safety error masks response.
*
* This is a @ref CapCtrlMsgType "capture control message" received in
* response to a @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ message.
*
* @pre A @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ message has been sent.
*
* @par Header
* - @ref CAPTURE_CONTROL_MSG@b::@ref CAPTURE_MSG_HEADER "header"
* - @ref CAPTURE_MSG_HEADER::msg_id "msg_id" = @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP
* - @ref CAPTURE_MSG_HEADER::transaction "transaction" =
* @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ_MSG@b::@ref CAPTURE_MSG_HEADER "header"@b::@ref CAPTURE_MSG_HEADER::transaction "transaction"
*
* @par Payload
* - @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP_MSG
*/
#define CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP MK_U32(0x55)
/** @} */
/** @} */
/**
* @addtogroup ViCapCtrlMsgs
* @{
*/
/** @brief Message data for @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ message */
struct CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ_MSG {
/** VI CHANSEL safety error mask configuration */
struct vi_hsm_chansel_error_mask_config hsm_chansel_error_config;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP message */
struct CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP_MSG {
/** Request result. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @} */
/** @brief Message data for @ref CAPTURE_CHANNEL_ISP_SETUP_REQ message */
struct CAPTURE_CHANNEL_ISP_SETUP_REQ_MSG {
/** ISP channel configuration. */
struct capture_channel_isp_config channel_config;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_ISP_SETUP_RESP message */
struct CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** ISP channel identifier for the new channel [0, UINT32_MAX]. */
uint32_t channel_id;
} CAPTURE_IVC_ALIGN;
typedef struct CAPTURE_CHANNEL_ISP_RESET_REQ_MSG
CAPTURE_CHANNEL_ISP_RESET_REQ_MSG;
typedef struct CAPTURE_CHANNEL_ISP_RESET_RESP_MSG
CAPTURE_CHANNEL_ISP_RESET_RESP_MSG;
typedef struct CAPTURE_CHANNEL_ISP_RELEASE_REQ_MSG
CAPTURE_CHANNEL_ISP_RELEASE_REQ_MSG;
typedef struct CAPTURE_CHANNEL_ISP_RELEASE_RESP_MSG
CAPTURE_CHANNEL_ISP_RELEASE_RESP_MSG;
/** @brief Message data for @ref CAPTURE_CHANNEL_ISP_RESET_REQ message */
struct CAPTURE_CHANNEL_ISP_RESET_REQ_MSG {
/** Unused */
uint32_t reset_flags;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_ISP_RESET_RESP message */
struct CAPTURE_CHANNEL_ISP_RESET_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ message */
struct CAPTURE_CHANNEL_ISP_RELEASE_REQ_MSG {
/** Unused */
uint32_t reset_flags;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_CHANNEL_ISP_RELEASE_RESP message */
struct CAPTURE_CHANNEL_ISP_RELEASE_RESP_MSG {
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_ISP_FUSE_QUERY_REQ message */
struct CAPTURE_ISP_FUSE_QUERY_REQ_MSG {
/** Reserved - no parameters needed for fuse query */
uint32_t pad__;
/** Reserved */
uint32_t pad2__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_ISP_FUSE_QUERY_RESP message */
struct CAPTURE_ISP_FUSE_QUERY_RESP_MSG {
/**
* ISP availability mask calculated from fuse register:
* Each bit represents an ISP unit (bit 0 = ISP0, bit 1 = ISP1, etc.)
* 1 = ISP available, 0 = ISP fused off
* Examples:
* 0x3: Both ISP0 and ISP1 available
* 0x2: Only ISP1 available (ISP0 fused off)
* 0x1: Only ISP0 available (ISP1 fused off)
*/
uint32_t isp_available_mask;
/** Request result code. See @ref CapErrorCodes "result codes". */
capture_result result;
} CAPTURE_IVC_ALIGN;
/**
* @brief Message frame for capture-control IVC channel.
*
* This structure describes a common message format for all capture channel
* IVC messages. The message format includes a message header that is common
* to all messages, followed by a message-specific message data. The message
* data is represented as an anonymous union of message structures.
*/
struct CAPTURE_CONTROL_MSG {
/** Common capture control channel message header */
struct CAPTURE_MSG_HEADER header;
/** @anon_union */
union {
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_SETUP_REQ message */
struct CAPTURE_CHANNEL_SETUP_REQ_MSG channel_setup_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_SETUP_RESP message */
struct CAPTURE_CHANNEL_SETUP_RESP_MSG channel_setup_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COE_CHANNEL_SETUP_RESP message */
struct CAPTURE_COE_CHANNEL_SETUP_REQ_MSG channel_coe_setup_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_RESET_REQ message */
struct CAPTURE_CHANNEL_RESET_REQ_MSG channel_reset_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_RESET_RESP message */
struct CAPTURE_CHANNEL_RESET_RESP_MSG channel_reset_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COE_CHANNEL_RESET_REQ message */
struct CAPTURE_COE_CHANNEL_RESET_REQ_MSG channel_coe_reset_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COE_CHANNEL_RESET_RESP message */
struct CAPTURE_COE_CHANNEL_RESET_RESP_MSG channel_coe_reset_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COE_CHANNEL_RELEASE_REQ message */
struct CAPTURE_COE_CHANNEL_RELEASE_REQ_MSG channel_coe_release_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COE_CHANNEL_RELEASE_RESP message */
struct CAPTURE_COE_CHANNEL_RELEASE_RESP_MSG channel_coe_release_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_RELEASE_REQ message */
struct CAPTURE_CHANNEL_RELEASE_REQ_MSG channel_release_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_RELEASE_RESP message */
struct CAPTURE_CHANNEL_RELEASE_RESP_MSG channel_release_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COMPAND_CONFIG_REQ message (non-safety) */
struct CAPTURE_COMPAND_CONFIG_REQ_MSG compand_config_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_COMPAND_CONFIG_RESP message (non-safety) */
struct CAPTURE_COMPAND_CONFIG_RESP_MSG compand_config_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PDAF_CONFIG_REQ message (non-safety) */
struct CAPTURE_PDAF_CONFIG_REQ_MSG pdaf_config_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PDAF_CONFIG_RESP message (non-safety) */
struct CAPTURE_PDAF_CONFIG_RESP_MSG pdaf_config_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_SYNCGEN_ENABLE_REQ message (non-safety) */
struct CAPTURE_SYNCGEN_ENABLE_REQ_MSG syncgen_enable_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_SYNCGEN_ENABLE_RESP message (non-safety) */
struct CAPTURE_SYNCGEN_ENABLE_RESP_MSG syncgen_enable_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_SYNCGEN_DISABLE_REQ message (non-safety) */
struct CAPTURE_SYNCGEN_DISABLE_REQ_MSG syncgen_disable_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_SYNCGEN_DISABLE_RESP message (non-safety) */
struct CAPTURE_SYNCGEN_DISABLE_RESP_MSG syncgen_disable_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PHY_STREAM_OPEN_REQ message */
struct CAPTURE_PHY_STREAM_OPEN_REQ_MSG phy_stream_open_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PHY_STREAM_OPEN_RESP message */
struct CAPTURE_PHY_STREAM_OPEN_RESP_MSG phy_stream_open_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PHY_STREAM_CLOSE_REQ message */
struct CAPTURE_PHY_STREAM_CLOSE_REQ_MSG phy_stream_close_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PHY_STREAM_CLOSE_RESP message */
struct CAPTURE_PHY_STREAM_CLOSE_RESP_MSG phy_stream_close_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PHY_STREAM_DUMPREGS_REQ message (non-safety) */
struct CAPTURE_PHY_STREAM_DUMPREGS_REQ_MSG
phy_stream_dumpregs_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_PHY_STREAM_DUMPREGS_RESP message (non-safety) */
struct CAPTURE_PHY_STREAM_DUMPREGS_RESP_MSG
phy_stream_dumpregs_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_SET_CONFIG_REQ message */
struct CAPTURE_CSI_STREAM_SET_CONFIG_REQ_MSG
csi_stream_set_config_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_SET_CONFIG_RESP message */
struct CAPTURE_CSI_STREAM_SET_CONFIG_RESP_MSG
csi_stream_set_config_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_SET_PARAM_REQ message */
struct CAPTURE_CSI_STREAM_SET_PARAM_REQ_MSG
csi_stream_set_param_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_SET_PARAM_RESP message */
struct CAPTURE_CSI_STREAM_SET_PARAM_RESP_MSG
csi_stream_set_param_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_SET_CONFIG_REQ message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_SET_CONFIG_REQ_MSG
csi_stream_tpg_set_config_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_SET_CONFIG_RESP message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_SET_CONFIG_RESP_MSG
csi_stream_tpg_set_config_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_START_REQ message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_START_REQ_MSG
csi_stream_tpg_start_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_START_RESP message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_START_RESP_MSG
csi_stream_tpg_start_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_STOP_REQ message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_STOP_REQ_MSG
csi_stream_tpg_stop_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_STOP_RESP message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_STOP_RESP_MSG
csi_stream_tpg_stop_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_START_RATE_REQ message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_START_RATE_REQ_MSG
csi_stream_tpg_start_rate_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_START_RATE_RESP message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_START_RATE_RESP_MSG
csi_stream_tpg_start_rate_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_REQ message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_REQ_MSG
csi_stream_tpg_apply_gain_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_RESP message (non-safety) */
struct CAPTURE_CSI_STREAM_TPG_APPLY_GAIN_RESP_MSG
csi_stream_tpg_apply_gain_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_EI_REQ message (non-safety) */
struct CAPTURE_CHANNEL_EI_REQ_MSG ei_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_EI_RESP message (non-safety) */
struct CAPTURE_CHANNEL_EI_RESP_MSG ei_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_EI_RESET_REQ message (non-safety) */
struct CAPTURE_CHANNEL_EI_RESET_REQ_MSG ei_reset_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_EI_RESET_RESP message (non-safety) */
struct CAPTURE_CHANNEL_EI_RESET_RESP_MSG ei_reset_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_ISP_SETUP_REQ message */
struct CAPTURE_CHANNEL_ISP_SETUP_REQ_MSG channel_isp_setup_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_ISP_SETUP_RESP message */
struct CAPTURE_CHANNEL_ISP_SETUP_RESP_MSG channel_isp_setup_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_ISP_RESET_REQ message */
struct CAPTURE_CHANNEL_ISP_RESET_REQ_MSG channel_isp_reset_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_ISP_RESET_RESP message */
struct CAPTURE_CHANNEL_ISP_RESET_RESP_MSG channel_isp_reset_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_ISP_RELEASE_REQ message */
struct CAPTURE_CHANNEL_ISP_RELEASE_REQ_MSG channel_isp_release_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_CHANNEL_ISP_RELEASE_RESP message */
struct CAPTURE_CHANNEL_ISP_RELEASE_RESP_MSG channel_isp_release_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ message */
struct CAPTURE_HSM_CHANSEL_ERROR_MASK_REQ_MSG hsm_chansel_mask_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP message */
struct CAPTURE_HSM_CHANSEL_ERROR_MASK_RESP_MSG hsm_chansel_mask_resp;
/** @anon_union_member */
/** Message data for @ref CAPTURE_ISP_FUSE_QUERY_REQ message */
struct CAPTURE_ISP_FUSE_QUERY_REQ_MSG isp_fuse_query_req;
/** @anon_union_member */
/** Message data for @ref CAPTURE_ISP_FUSE_QUERY_RESP message */
struct CAPTURE_ISP_FUSE_QUERY_RESP_MSG isp_fuse_query_resp;
};
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_REQUEST_REQ message. */
struct CAPTURE_REQUEST_REQ_MSG {
/**
* Buffer index identifying the location of a capture descriptor:
* struct @ref capture_descriptor *desc =
* @ref capture_channel_config::requests "requests" +
* buffer_index * @ref capture_channel_config::request_size "request_size";
*/
uint32_t buffer_index;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_STATUS_IND message. */
struct CAPTURE_STATUS_IND_MSG {
/**
* Buffer index identifying the location of a capture descriptor:
* struct @ref capture_descriptor *desc =
* @ref capture_channel_config::requests "requests" +
* buffer_index * @ref capture_channel_config::request_size "request_size";
*/
uint32_t buffer_index;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_COE_STATUS_IND message. */
struct CAPTURE_COE_STATUS_IND_MSG {
/**
* Buffer index to match against capture request to which
* this completion corresponds to.
*/
uint32_t buffer_index;
/**
* CoE capture error indicating some Ethernet packets carrying image data were lost.
*/
#define CAPTURE_STATUS_COE_PACKET_LOSS MK_U32(2)
/**
* CoE capture error indicating Start Of Frame packet was never received.
*/
#define CAPTURE_STATUS_COE_SOF_MISSED MK_U32(3)
/**
* CoE capture error indicating a frame with an unexpected sequence number was received.
* Could be caused by losing EOF packet as an example.
*/
#define CAPTURE_STATUS_COE_DISCONTINUITY MK_U32(4)
/**
* CoE capture error indicating SW has aborted the capture (did not wait for all
* network packets carrying the frame data to be received).
*/
#define CAPTURE_STATUS_COE_ABORTED MK_U32(5)
/** Capture status to indicate to the host
* Valid range: [ @ref CAPTURE_STATUS_UNKNOWN,
* @ref CAPTURE_STATUS_SUCCESS,
* @ref CAPTURE_STATUS_COE_*]
*/
uint32_t capture_status;
/**
* Timestamp of the SOF event in nanoseconds.
* Valid range: [0, UINT64_MAX].
*/
uint64_t timestamp_sof_ns;
/**
* Timestamp of the EOF event in nanoseconds.
* Valid range: [0, UINT64_MAX].
*/
uint64_t timestamp_eof_ns;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_ISP_REQUEST_REQ message. */
struct CAPTURE_ISP_REQUEST_REQ_MSG {
/**
* Buffer index identifying the location of an ISP capture descriptor:
* struct @ref isp_capture_descriptor *desc =
* @ref capture_isp_channel_config::requests "requests" +
* buffer_index * @ref capture_isp_channel_config::request_size
* "request_size";
*/
uint32_t buffer_index;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
typedef struct CAPTURE_ISP_REQUEST_REQ_MSG CAPTURE_ISP_REQUEST_REQ_MSG;
/** @brief Message data for @ref CAPTURE_ISP_STATUS_IND message. */
struct CAPTURE_ISP_STATUS_IND_MSG {
/**
* Buffer index identifying the location of an ISP capture descriptor:
* struct @ref isp_capture_descriptor *desc =
* @ref capture_isp_channel_config::requests "requests" +
* buffer_index * @ref capture_isp_channel_config::request_size
* "request_size";
*/
uint32_t buffer_index;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
typedef struct CAPTURE_ISP_STATUS_IND_MSG CAPTURE_ISP_STATUS_IND_MSG;
/** @brief Message data for @ref CAPTURE_ISP_EX_STATUS_IND message. */
struct CAPTURE_ISP_EX_STATUS_IND_MSG {
/**
* Buffer index identifying the location of an ISP capture descriptor:
* struct @ref isp_capture_descriptor *desc =
* @ref capture_isp_channel_config::requests "requests" +
* buffer_index * @ref capture_isp_channel_config::request_size
* "request_size";
*/
uint32_t process_buffer_index;
/**
* Buffer index identifying the location of an ISP program descriptor:
* struct @ref isp_program_descriptor *pdesc =
* @ref capture_isp_channel_config::programs "programs" +
* buffer_index * @ref capture_isp_channel_config::program_size
* "program_size";
*/
uint32_t program_buffer_index;
} CAPTURE_IVC_ALIGN;
/** @brief Message data for @ref CAPTURE_ISP_PROGRAM_REQUEST_REQ message. */
struct CAPTURE_ISP_PROGRAM_REQUEST_REQ_MSG {
/**
* Buffer index identifying the location of an ISP program descriptor:
* struct @ref isp_program_descriptor *desc =
* @ref capture_isp_channel_config::programs "programs" +
* buffer_index * @ref capture_isp_channel_config::program_size
* "program_size";
*/
uint32_t buffer_index;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
typedef struct CAPTURE_ISP_PROGRAM_REQUEST_REQ_MSG
CAPTURE_ISP_PROGRAM_REQUEST_REQ_MSG;
/** @brief Message data for @ref CAPTURE_ISP_PROGRAM_STATUS_IND message. */
struct CAPTURE_ISP_PROGRAM_STATUS_IND_MSG {
/**
* Buffer index identifying the location of an ISP program descriptor:
* struct @ref isp_program_descriptor *desc =
* @ref capture_isp_channel_config::programs "programs" +
* buffer_index * @ref capture_isp_channel_config::program_size
* "program_size";
*/
uint32_t buffer_index;
/** Reserved */
uint32_t pad__;
} CAPTURE_IVC_ALIGN;
typedef struct CAPTURE_ISP_PROGRAM_STATUS_IND_MSG CAPTURE_ISP_PROGRAM_STATUS_IND_MSG;
/**
* @brief Message frame for capture IVC channel.
*/
struct CAPTURE_MSG {
struct CAPTURE_MSG_HEADER header;
/** @anon_union */
union {
/** @anon_union_member */
struct CAPTURE_REQUEST_REQ_MSG capture_request_req;
/** @anon_union_member */
struct CAPTURE_COE_REQUEST_MSG capture_coe_req;
/** @anon_union_member */
struct CAPTURE_STATUS_IND_MSG capture_status_ind;
/** @anon_union_member */
struct CAPTURE_COE_STATUS_IND_MSG capture_coe_status_ind;
/** @anon_union_member */
CAPTURE_ISP_REQUEST_REQ_MSG capture_isp_request_req;
/** @anon_union_member */
CAPTURE_ISP_STATUS_IND_MSG capture_isp_status_ind;
/** @anon_union_member */
struct CAPTURE_ISP_EX_STATUS_IND_MSG capture_isp_ex_status_ind;
/** @anon_union_member */
CAPTURE_ISP_PROGRAM_REQUEST_REQ_MSG
capture_isp_program_request_req;
/** @anon_union_member */
CAPTURE_ISP_PROGRAM_STATUS_IND_MSG
capture_isp_program_status_ind;
};
} CAPTURE_IVC_ALIGN;
#pragma GCC diagnostic ignored "-Wpadded"
#endif /* INCLUDE_CAMRTC_CAPTURE_MESSAGES_H */