/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Broadcom BM2835 V4L2 driver
 *
 * Copyright © 2013 Raspberry Pi (Trading) Ltd.
 *
 * Authors: Vincent Sanders <vincent.sanders@collabora.co.uk>
 *          Dave Stevenson <dsteve@broadcom.com>
 *          Simon Mellor <simellor@broadcom.com>
 *          Luke Diamand <luked@broadcom.com>
 */

/* MMAL_PORT_TYPE_T */
enum mmal_port_type {
	MMAL_PORT_TYPE_UNKNOWN = 0,  /**< Unknown port type */
	MMAL_PORT_TYPE_CONTROL,      /**< Control port */
	MMAL_PORT_TYPE_INPUT,        /**< Input port */
	MMAL_PORT_TYPE_OUTPUT,       /**< Output port */
	MMAL_PORT_TYPE_CLOCK,        /**< Clock port */
};

/** The port is pass-through and doesn't need buffer headers allocated */
#define MMAL_PORT_CAPABILITY_PASSTHROUGH                       0x01
/** The port wants to allocate the buffer payloads.
 * This signals a preference that payload allocation should be done
 * on this port for efficiency reasons.
 */
#define MMAL_PORT_CAPABILITY_ALLOCATION                        0x02
/** The port supports format change events.
 * This applies to input ports and is used to let the client know
 * whether the port supports being reconfigured via a format
 * change event (i.e. without having to disable the port).
 */
#define MMAL_PORT_CAPABILITY_SUPPORTS_EVENT_FORMAT_CHANGE      0x04

/* mmal port structure (MMAL_PORT_T)
 *
 * most elements are informational only, the pointer values for
 * interogation messages are generally provided as additional
 * structures within the message. When used to set values only the
 * buffer_num, buffer_size and userdata parameters are writable.
 */
struct mmal_port {
	u32 priv; /* Private member used by the framework */
	u32 name; /* Port name. Used for debugging purposes (RO) */

	u32 type;      /* Type of the port (RO) enum mmal_port_type */
	u16 index;     /* Index of the port in its type list (RO) */
	u16 index_all; /* Index of the port in the list of all ports (RO) */

	u32 is_enabled; /* Indicates whether the port is enabled or not (RO) */
	u32 format; /* Format of the elementary stream */

	u32 buffer_num_min; /* Minimum number of buffers the port
			     *   requires (RO).  This is set by the
			     *   component.
			     */

	u32 buffer_size_min; /* Minimum size of buffers the port
			      * requires (RO).  This is set by the
			      * component.
			      */

	u32 buffer_alignment_min; /* Minimum alignment requirement for
				   * the buffers (RO).  A value of
				   * zero means no special alignment
				   * requirements.  This is set by the
				   * component.
				   */

	u32 buffer_num_recommended;  /* Number of buffers the port
				      * recommends for optimal
				      * performance (RO).  A value of
				      * zero means no special
				      * recommendation.  This is set
				      * by the component.
				      */

	u32 buffer_size_recommended; /* Size of buffers the port
				      * recommends for optimal
				      * performance (RO).  A value of
				      * zero means no special
				      * recommendation.  This is set
				      * by the component.
				      */

	u32 buffer_num; /* Actual number of buffers the port will use.
			 * This is set by the client.
			 */

	u32 buffer_size; /* Actual maximum size of the buffers that
			  * will be sent to the port. This is set by
			  * the client.
			  */

	u32 component; /* Component this port belongs to (Read Only) */

	u32 userdata; /* Field reserved for use by the client */

	u32 capabilities; /* Flags describing the capabilities of a
			   * port (RO).  Bitwise combination of \ref
			   * portcapabilities "Port capabilities"
			   * values.
			   */

};
