xref: /openbmc/linux/drivers/staging/vc04_services/vchiq-mmal/mmal-msg-port.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   * Broadcom BCM2835 V4L2 driver
4   *
5   * Copyright © 2013 Raspberry Pi (Trading) Ltd.
6   *
7   * Authors: Vincent Sanders @ Collabora
8   *          Dave Stevenson @ Broadcom
9   *		(now dave.stevenson@raspberrypi.org)
10   *          Simon Mellor @ Broadcom
11   *          Luke Diamand @ Broadcom
12   */
13  
14  /* MMAL_PORT_TYPE_T */
15  enum mmal_port_type {
16  	MMAL_PORT_TYPE_UNKNOWN = 0,	/* Unknown port type */
17  	MMAL_PORT_TYPE_CONTROL,		/* Control port */
18  	MMAL_PORT_TYPE_INPUT,		/* Input port */
19  	MMAL_PORT_TYPE_OUTPUT,		/* Output port */
20  	MMAL_PORT_TYPE_CLOCK,		/* Clock port */
21  };
22  
23  /* The port is pass-through and doesn't need buffer headers allocated */
24  #define MMAL_PORT_CAPABILITY_PASSTHROUGH                       0x01
25  /*
26   *The port wants to allocate the buffer payloads.
27   * This signals a preference that payload allocation should be done
28   * on this port for efficiency reasons.
29   */
30  #define MMAL_PORT_CAPABILITY_ALLOCATION                        0x02
31  /*
32   * The port supports format change events.
33   * This applies to input ports and is used to let the client know
34   * whether the port supports being reconfigured via a format
35   * change event (i.e. without having to disable the port).
36   */
37  #define MMAL_PORT_CAPABILITY_SUPPORTS_EVENT_FORMAT_CHANGE      0x04
38  
39  /*
40   * mmal port structure (MMAL_PORT_T)
41   *
42   * most elements are informational only, the pointer values for
43   * interogation messages are generally provided as additional
44   * structures within the message. When used to set values only the
45   * buffer_num, buffer_size and userdata parameters are writable.
46   */
47  struct mmal_port {
48  	u32 priv;	/* Private member used by the framework */
49  	u32 name;	/* Port name. Used for debugging purposes (RO) */
50  
51  	u32 type;	/* Type of the port (RO) enum mmal_port_type */
52  	u16 index;	/* Index of the port in its type list (RO) */
53  	u16 index_all;	/* Index of the port in the list of all ports (RO) */
54  
55  	u32 is_enabled;	/* Indicates whether the port is enabled or not (RO) */
56  	u32 format;	/* Format of the elementary stream */
57  
58  	u32 buffer_num_min;	/* Minimum number of buffers the port
59  				 *   requires (RO).  This is set by the
60  				 *   component.
61  				 */
62  
63  	u32 buffer_size_min;	/* Minimum size of buffers the port
64  				 * requires (RO).  This is set by the
65  				 * component.
66  				 */
67  
68  	u32 buffer_alignment_min;/* Minimum alignment requirement for
69  				  * the buffers (RO).  A value of
70  				  * zero means no special alignment
71  				  * requirements.  This is set by the
72  				  * component.
73  				  */
74  
75  	u32 buffer_num_recommended;	/* Number of buffers the port
76  					 * recommends for optimal
77  					 * performance (RO).  A value of
78  					 * zero means no special
79  					 * recommendation.  This is set
80  					 * by the component.
81  					 */
82  
83  	u32 buffer_size_recommended;	/* Size of buffers the port
84  					 * recommends for optimal
85  					 * performance (RO).  A value of
86  					 * zero means no special
87  					 * recommendation.  This is set
88  					 * by the component.
89  					 */
90  
91  	u32 buffer_num;	/* Actual number of buffers the port will use.
92  			 * This is set by the client.
93  			 */
94  
95  	u32 buffer_size; /* Actual maximum size of the buffers that
96  			  * will be sent to the port. This is set by
97  			  * the client.
98  			  */
99  
100  	u32 component;	/* Component this port belongs to (Read Only) */
101  
102  	u32 userdata;	/* Field reserved for use by the client */
103  
104  	u32 capabilities;	/* Flags describing the capabilities of a
105  				 * port (RO).  Bitwise combination of \ref
106  				 * portcapabilities "Port capabilities"
107  				 * values.
108  				 */
109  };
110