1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Broadcom BM2835 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 };