FILE
mmal-vchiq.h
File preview with syntax highlighting.
linux-6.19.14/drivers/platform/raspberrypi/vchiq-mmal/mmal-vchiq.h
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 * MMAL interface to VCHIQ message passing 14 */ 15 16#ifndef MMAL_VCHIQ_H 17#define MMAL_VCHIQ_H 18 19#include "mmal-common.h" 20#include "mmal-msg-format.h" 21 22#define MAX_PORT_COUNT 4 23 24/* Maximum size of the format extradata. */ 25#define MMAL_FORMAT_EXTRADATA_MAX_SIZE 128 26 27struct vchiq_mmal_instance; 28struct device; 29 30enum vchiq_mmal_es_type { 31 MMAL_ES_TYPE_UNKNOWN, /**< Unknown elementary stream type */ 32 MMAL_ES_TYPE_CONTROL, /**< Elementary stream of control commands */ 33 MMAL_ES_TYPE_AUDIO, /**< Audio elementary stream */ 34 MMAL_ES_TYPE_VIDEO, /**< Video elementary stream */ 35 MMAL_ES_TYPE_SUBPICTURE /**< Sub-picture elementary stream */ 36}; 37 38struct vchiq_mmal_port_buffer { 39 unsigned int num; /* number of buffers */ 40 u32 size; /* size of buffers */ 41 u32 alignment; /* alignment of buffers */ 42}; 43 44struct vchiq_mmal_port; 45 46typedef void (*vchiq_mmal_buffer_cb)(struct vchiq_mmal_instance *instance, 47 struct vchiq_mmal_port *port, 48 int status, struct mmal_buffer *buffer); 49 50struct vchiq_mmal_port { 51 bool enabled; 52 u32 handle; 53 u32 type; /* port type, cached to use on port info set */ 54 u32 index; /* port index, cached to use on port info set */ 55 56 /* component port belongs to, allows simple deref */ 57 struct vchiq_mmal_component *component; 58 59 struct vchiq_mmal_port *connected; /* port connected to */ 60 61 /* buffer info */ 62 struct vchiq_mmal_port_buffer minimum_buffer; 63 struct vchiq_mmal_port_buffer recommended_buffer; 64 struct vchiq_mmal_port_buffer current_buffer; 65 66 /* stream format */ 67 struct mmal_es_format_local format; 68 /* elementary stream format */ 69 union mmal_es_specific_format es; 70 71 /* data buffers to fill */ 72 struct list_head buffers; 73 /* lock to serialise adding and removing buffers from list */ 74 spinlock_t slock; 75 76 /* Count of buffers the VPU has yet to return */ 77 atomic_t buffers_with_vpu; 78 /* callback on buffer completion */ 79 vchiq_mmal_buffer_cb buffer_cb; 80 /* callback context */ 81 void *cb_ctx; 82}; 83 84struct vchiq_mmal_component { 85 bool in_use; 86 bool enabled; 87 u32 handle; /* VideoCore handle for component */ 88 u32 inputs; /* Number of input ports */ 89 u32 outputs; /* Number of output ports */ 90 u32 clocks; /* Number of clock ports */ 91 struct vchiq_mmal_port control; /* control port */ 92 struct vchiq_mmal_port input[MAX_PORT_COUNT]; /* input ports */ 93 struct vchiq_mmal_port output[MAX_PORT_COUNT]; /* output ports */ 94 struct vchiq_mmal_port clock[MAX_PORT_COUNT]; /* clock ports */ 95 u32 client_component; /* Used to ref back to client struct */ 96}; 97 98int vchiq_mmal_init(struct device *dev, struct vchiq_mmal_instance **out_instance); 99int vchiq_mmal_finalise(struct vchiq_mmal_instance *instance); 100 101/* Initialise a mmal component and its ports 102 * 103 */ 104int vchiq_mmal_component_init(struct vchiq_mmal_instance *instance, 105 const char *name, struct vchiq_mmal_component **component_out); 106 107int vchiq_mmal_component_finalise(struct vchiq_mmal_instance *instance, 108 struct vchiq_mmal_component *component); 109 110int vchiq_mmal_component_enable(struct vchiq_mmal_instance *instance, 111 struct vchiq_mmal_component *component); 112 113int vchiq_mmal_component_disable(struct vchiq_mmal_instance *instance, 114 struct vchiq_mmal_component *component); 115 116/* enable a mmal port 117 * 118 * enables a port and, if a buffer callback provided, enqueues buffer 119 * headers as appropriate for the port. 120 */ 121int vchiq_mmal_port_enable(struct vchiq_mmal_instance *instance, 122 struct vchiq_mmal_port *port, 123 vchiq_mmal_buffer_cb buffer_cb); 124 125/* disable a port 126 * 127 * disable a port will dequeue any pending buffers 128 */ 129int vchiq_mmal_port_disable(struct vchiq_mmal_instance *instance, 130 struct vchiq_mmal_port *port); 131 132int vchiq_mmal_port_parameter_set(struct vchiq_mmal_instance *instance, 133 struct vchiq_mmal_port *port, 134 u32 parameter, 135 void *value, 136 u32 value_size); 137 138int vchiq_mmal_port_parameter_get(struct vchiq_mmal_instance *instance, 139 struct vchiq_mmal_port *port, 140 u32 parameter, 141 void *value, 142 u32 *value_size); 143 144int vchiq_mmal_port_set_format(struct vchiq_mmal_instance *instance, 145 struct vchiq_mmal_port *port); 146 147int vchiq_mmal_port_connect_tunnel(struct vchiq_mmal_instance *instance, 148 struct vchiq_mmal_port *src, 149 struct vchiq_mmal_port *dst); 150 151int vchiq_mmal_version(struct vchiq_mmal_instance *instance, 152 u32 *major_out, 153 u32 *minor_out); 154 155int vchiq_mmal_submit_buffer(struct vchiq_mmal_instance *instance, 156 struct vchiq_mmal_port *port, 157 struct mmal_buffer *buf); 158 159int mmal_vchi_buffer_init(struct vchiq_mmal_instance *instance, 160 struct mmal_buffer *buf); 161int mmal_vchi_buffer_cleanup(struct mmal_buffer *buf); 162#endif /* MMAL_VCHIQ_H */
~/
Read-only file preview.