MMAL_3-15-2015
mmal_vc_msgs.h
Go to the documentation of this file.
1 /*
2 Copyright (c) 2012, Broadcom Europe Ltd
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
7  * Redistributions of source code must retain the above copyright
8  notice, this list of conditions and the following disclaimer.
9  * Redistributions in binary form must reproduce the above copyright
10  notice, this list of conditions and the following disclaimer in the
11  documentation and/or other materials provided with the distribution.
12  * Neither the name of the copyright holder nor the
13  names of its contributors may be used to endorse or promote products
14  derived from this software without specific prior written permission.
15 
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 
28 #ifndef MMAL_VC_MSGS_H
29 #define MMAL_VC_MSGS_H
30 
36 #include "interface/vcos/vcos.h"
37 #include "interface/mmal/mmal.h"
38 #include "mmal_vc_api.h"
39 
40 #define MMAL_CONTROL_FOURCC() VCHIQ_MAKE_FOURCC('m','m','a','l')
41 
42 /* Major version indicates binary backwards compatiblity */
43 #define WORKER_VER_MAJOR 16
44 #define WORKER_VER_MINIMUM 10
45 /* Minor version is not used normally.
46  */
47 #define WORKER_VER_MINOR 1
48 #ifndef WORKER_VER_MINIMUM
49 #endif
50 
51 #define VIDEOCORE_PREFIX "vc"
52 
53 #define MMAL_MAX_PORTS 8
55 #define MMAL_WORKER_MAX_MSG_LEN 512
56 #define MMAL_VC_CORE_STATS_NAME_MAX 32
61 #define MMAL_WORKER_MSG_LEN 28
62 
66 #define MMAL_FORMAT_EXTRADATA_MAX_SIZE 128
67 
70 #define MMAL_VC_SHORT_DATA 128
71 
75 /* Please update the array in mmal_vc_msgnames.c if this is updated.
76  */
77 typedef enum {
78  MMAL_WORKER_QUIT = 1,
79  MMAL_WORKER_SERVICE_CLOSED,
80  MMAL_WORKER_GET_VERSION,
81  MMAL_WORKER_COMPONENT_CREATE,
82  MMAL_WORKER_COMPONENT_DESTROY,
83  MMAL_WORKER_COMPONENT_ENABLE,
84  MMAL_WORKER_COMPONENT_DISABLE,
85  MMAL_WORKER_PORT_INFO_GET,
86  MMAL_WORKER_PORT_INFO_SET,
87  MMAL_WORKER_PORT_ACTION,
88  MMAL_WORKER_BUFFER_FROM_HOST,
89  MMAL_WORKER_BUFFER_TO_HOST,
90  MMAL_WORKER_GET_STATS,
91  MMAL_WORKER_PORT_PARAMETER_SET,
92  MMAL_WORKER_PORT_PARAMETER_GET,
93  MMAL_WORKER_EVENT_TO_HOST,
94  MMAL_WORKER_GET_CORE_STATS_FOR_PORT,
95  MMAL_WORKER_OPAQUE_ALLOCATOR,
96  /* VC debug mode only - due to security, denial of service implications */
97  MMAL_WORKER_CONSUME_MEM,
98  MMAL_WORKER_LMK,
99  MMAL_WORKER_OPAQUE_ALLOCATOR_DESC,
100  MMAL_WORKER_DRM_GET_LHS32,
101  MMAL_WORKER_DRM_GET_TIME,
102  MMAL_WORKER_BUFFER_FROM_HOST_ZEROLEN,
103  MMAL_WORKER_PORT_FLUSH,
104  MMAL_WORKER_HOST_LOG,
105  MMAL_WORKER_COMPACT,
106  MMAL_WORKER_MSG_LAST
108 
111 typedef struct
112 {
113  uint32_t magic;
114  uint32_t msgid;
115  struct MMAL_CONTROL_SERVICE_T *control_service;
117  union {
118  struct MMAL_WAITER_T *waiter;
119  } u;
120 
121  MMAL_STATUS_T status;
122  /* Make sure this structure is 64 bit aligned */
123  uint32_t dummy;
125 
126 /* Make sure mmal_worker_msg_header will preserve 64 bits alignment */
127 vcos_static_assert(!(sizeof(mmal_worker_msg_header) & 0x7));
128 
129 /* Message structures sent to worker thread.
130  */
131 
135 typedef struct
136 {
137  mmal_worker_msg_header header;
139 vcos_static_assert(sizeof(mmal_worker_service_closed) <= MMAL_WORKER_MSG_LEN);
140 
142 typedef struct
143 {
144  mmal_worker_msg_header header;
145  uint32_t flags;
146  uint32_t major;
147  uint32_t minor;
148  uint32_t minimum;
150 
152 typedef struct
153 {
154  mmal_worker_msg_header header;
155  void *client_component;
156  char name[128];
157  uint32_t pid;
159 
163 typedef struct
164 {
165  mmal_worker_msg_header header;
166  MMAL_STATUS_T status;
167  uint32_t component_handle;
168  uint32_t input_num;
169  uint32_t output_num;
170  uint32_t clock_num;
172 vcos_static_assert(sizeof(mmal_worker_component_create_reply) <= MMAL_WORKER_MAX_MSG_LEN);
173 
176 typedef struct
177 {
178  mmal_worker_msg_header header;
179  uint32_t component_handle;
181 
184 typedef struct
185 {
186  mmal_worker_msg_header header;
187  uint32_t component_handle;
189 
192 typedef struct
193 {
194  mmal_worker_msg_header header;
195  uint32_t component_handle;
197 
200 typedef struct
201 {
202  mmal_worker_msg_header header;
203  uint32_t component_handle;
205  uint32_t index;
207 vcos_static_assert(sizeof(mmal_worker_port_info_get) <= MMAL_WORKER_MAX_MSG_LEN);
208 
211 typedef struct
212 {
213  mmal_worker_msg_header header;
214  uint32_t component_handle;
216  uint32_t index;
217  MMAL_PORT_T port;
218  MMAL_ES_FORMAT_T format;
220  uint8_t extradata[MMAL_FORMAT_EXTRADATA_MAX_SIZE];
222 vcos_static_assert(sizeof(mmal_worker_port_info_set) <= MMAL_WORKER_MAX_MSG_LEN);
223 
225 typedef struct
226 {
227  mmal_worker_msg_header header;
229  uint32_t component_handle;
231  uint32_t index;
232  int32_t found;
233  uint32_t port_handle;
234  MMAL_PORT_T port;
235  MMAL_ES_FORMAT_T format;
237  uint8_t extradata[MMAL_FORMAT_EXTRADATA_MAX_SIZE];
239 vcos_static_assert(sizeof(mmal_worker_port_info) <= MMAL_WORKER_MAX_MSG_LEN);
240 
241 typedef struct
242 {
243  mmal_worker_msg_header header;
244  MMAL_STATUS_T status;
246 
247 typedef struct
248 {
249  mmal_worker_msg_header header;
250  MMAL_STATUS_T status;
251  uint8_t secret[32];
253 vcos_static_assert(sizeof(mmal_worker_drm_get_lhs32_reply) <= MMAL_WORKER_MAX_MSG_LEN);
254 
255 typedef struct
256 {
257  mmal_worker_msg_header header;
258  MMAL_STATUS_T status;
259  uint32_t time;
261 vcos_static_assert(sizeof(mmal_worker_drm_get_time_reply) <= MMAL_WORKER_MAX_MSG_LEN);
262 
265 {
274 };
275 
278 typedef struct
279 {
280  mmal_worker_msg_header header;
281  uint32_t component_handle;
282  uint32_t port_handle;
283  enum MMAL_WORKER_PORT_ACTIONS action;
284 
286  union {
287  struct {
288  MMAL_PORT_T port;
289  } enable;
290  struct {
291  uint32_t component_handle;
292  uint32_t port_handle;
293  } connect;
294  } param;
295 
297 vcos_static_assert(sizeof(mmal_worker_port_action) <= MMAL_WORKER_MAX_MSG_LEN);
298 
299 #define MMAL_WORKER_PORT_PARAMETER_SPACE 96
300 
301 #define MMAL_WORKER_PORT_PARAMETER_SET_MAX \
302  (MMAL_WORKER_PORT_PARAMETER_SPACE*sizeof(uint32_t)+sizeof(MMAL_PARAMETER_HEADER_T))
303 
304 #define MMAL_WORKER_PORT_PARAMETER_GET_MAX MMAL_WORKER_PORT_PARAMETER_SET_MAX
305 
308 typedef struct
309 {
310  mmal_worker_msg_header header;
311  uint32_t component_handle;
312  uint32_t port_handle;
314  uint32_t space[MMAL_WORKER_PORT_PARAMETER_SPACE];
316 vcos_static_assert(sizeof(mmal_worker_port_param_set) <= MMAL_WORKER_MAX_MSG_LEN);
317 
320 typedef struct
321 {
322  mmal_worker_msg_header header;
323  uint32_t component_handle;
324  uint32_t port_handle;
326  uint32_t space[MMAL_WORKER_PORT_PARAMETER_SPACE];
328 vcos_static_assert(sizeof(mmal_worker_port_param_get) <= MMAL_WORKER_MAX_MSG_LEN);
329 
330 typedef struct
331 {
332  mmal_worker_msg_header header;
333  uint32_t component_handle;
334  uint32_t port_handle;
337 
340 typedef struct
341 {
342  mmal_worker_msg_header header;
345  uint32_t space[MMAL_WORKER_PORT_PARAMETER_SPACE];
347 vcos_static_assert(sizeof(mmal_worker_port_param_get_reply) <= MMAL_WORKER_MAX_MSG_LEN);
348 
354 {
355  uint32_t magic;
356  uint32_t component_handle;
357  uint32_t port_handle;
361 };
362 
369 {
370  mmal_worker_msg_header header;
371 
376 
383 
386  MMAL_BUFFER_HEADER_TYPE_SPECIFIC_T buffer_header_type_specific;
387 
388  MMAL_BOOL_T is_zero_copy;
389  MMAL_BOOL_T has_reference;
390 
395  uint8_t short_data[MMAL_VC_SHORT_DATA];
396 
398 vcos_static_assert(sizeof(mmal_worker_buffer_from_host) <= MMAL_WORKER_MAX_MSG_LEN);
399 
403 #define MMAL_WORKER_EVENT_SPACE 256
404 
411 {
412  mmal_worker_msg_header header;
413 
414  struct MMAL_COMPONENT_T *client_component;
415  uint32_t port_type;
416  uint32_t port_num;
417 
418  uint32_t cmd;
419  uint32_t length;
420  uint8_t data[MMAL_WORKER_EVENT_SPACE];
421  MMAL_BUFFER_HEADER_T *delayed_buffer; /* Only used to remember buffer for bulk rx */
423 vcos_static_assert(sizeof(mmal_worker_event_to_host) <= MMAL_WORKER_MAX_MSG_LEN);
424 
425 typedef struct
426 {
427  mmal_worker_msg_header header;
428  MMAL_VC_STATS_T stats;
429  uint32_t reset;
431 vcos_static_assert(sizeof(mmal_worker_stats) <= MMAL_WORKER_MAX_MSG_LEN);
432 
433 typedef enum {
434  MMAL_WORKER_OPAQUE_MEM_ALLOC,
435  MMAL_WORKER_OPAQUE_MEM_RELEASE,
436  MMAL_WORKER_OPAQUE_MEM_ACQUIRE,
437  MMAL_WORKER_OPAQUE_MEM_MAX = 0x7fffffff,
438 } MMAL_WORKER_OPAQUE_MEM_OP;
439 
440 typedef struct
441 {
442  mmal_worker_msg_header header;
443  MMAL_WORKER_OPAQUE_MEM_OP op;
444  uint32_t handle;
445  MMAL_STATUS_T status;
446  char description[32];
448 
449 /*
450  * Per-port core statistics
451  */
452 typedef struct
453 {
454  mmal_worker_msg_header header;
455  uint32_t component_index;
456  uint32_t port_index;
457  MMAL_PORT_TYPE_T type;
458  MMAL_CORE_STATS_DIR dir;
459  MMAL_BOOL_T reset;
461 
462 typedef struct
463 {
464  mmal_worker_msg_header header;
465  MMAL_STATUS_T status;
466  MMAL_STATS_RESULT_T result;
468  char component_name[MMAL_VC_CORE_STATS_NAME_MAX];
470 
471 typedef struct
472 {
473  mmal_worker_msg_header header;
474  MMAL_STATUS_T status;
475  /* The amount of memory to reserve */
476  uint32_t size;
477  /* Handle to newly allocated memory or MEM_HANDLE_INVALD on failure */
478  uint32_t handle;
480 vcos_static_assert(sizeof(mmal_worker_consume_mem) <= MMAL_WORKER_MAX_MSG_LEN);
481 
482 typedef struct
483 {
484  mmal_worker_msg_header header;
485  MMAL_STATUS_T status;
486  uint32_t mode;
487  uint32_t duration;
489 vcos_static_assert(sizeof(mmal_worker_compact) <= MMAL_WORKER_MAX_MSG_LEN);
490 
491 typedef struct
492 {
493  mmal_worker_msg_header header;
494  /* Message text to add to the circular buffer */
495  char msg[MMAL_WORKER_MAX_MSG_LEN - sizeof(mmal_worker_msg_header)];
497 vcos_static_assert(sizeof(mmal_worker_host_log) <= MMAL_WORKER_MAX_MSG_LEN);
498 
499 typedef struct
500 {
501  mmal_worker_msg_header header;
502  /* The memory allocation size to pass to lmk, as if in a response to an
503  * allocation for this amount of memory. */
504  uint32_t alloc_size;
506 vcos_static_assert(sizeof(mmal_worker_lmk) <= MMAL_WORKER_MAX_MSG_LEN);
507 
508 static inline void mmal_vc_buffer_header_to_msg(mmal_worker_buffer_from_host *msg,
509  MMAL_BUFFER_HEADER_T *header)
510 {
511  msg->buffer_header.cmd = header->cmd;
512  msg->buffer_header.offset = header->offset;
513  msg->buffer_header.length = header->length;
514  msg->buffer_header.flags = header->flags;
515  msg->buffer_header.pts = header->pts;
516  msg->buffer_header.dts = header->dts;
517  msg->buffer_header.alloc_size = header->alloc_size;
518  msg->buffer_header.data = header->data;
519  msg->buffer_header_type_specific = *header->type;
520 }
521 
522 static inline void mmal_vc_msg_to_buffer_header(MMAL_BUFFER_HEADER_T *header,
524 {
525  header->cmd = msg->buffer_header.cmd;
526  header->offset = msg->buffer_header.offset;
527  header->length = msg->buffer_header.length;
528  header->flags = msg->buffer_header.flags;
529  header->pts = msg->buffer_header.pts;
530  header->dts = msg->buffer_header.dts;
531  *header->type = msg->buffer_header_type_specific;
532 }
533 
534 #endif
535 
Definition: mmal_vc_msgs.h:247
struct MMAL_DRIVER_BUFFER_T drvbuf
Definition: mmal_vc_msgs.h:375
uint32_t component_handle
Definition: mmal_vc_msgs.h:203
Definition: mmal_vc_msgs.h:152
Definition: mmal_common.h:64
uint32_t component_handle
Definition: mmal_vc_msgs.h:333
Definition: mmal_vc_msgs.h:267
Definition: mmal_vc_msgs.h:340
#define MMAL_VC_SHORT_DATA
Definition: mmal_vc_msgs.h:70
uint32_t index
Definition: mmal_vc_msgs.h:231
MMAL_PARAMETER_HEADER_T param
Definition: mmal_vc_msgs.h:325
uint32_t input_num
Definition: mmal_vc_msgs.h:168
MMAL_PORT_TYPE_T port_type
Definition: mmal_vc_msgs.h:230
MMAL_PORT_TYPE_T port_type
Definition: mmal_vc_msgs.h:215
uint32_t clock_num
Definition: mmal_vc_msgs.h:170
uint32_t port_handle
Definition: mmal_vc_msgs.h:233
MMAL_WORKER_CMD_T
Definition: mmal_vc_msgs.h:77
Definition: mmal_vc_msgs.h:499
uint32_t component_handle
Definition: mmal_vc_msgs.h:214
Definition: mmal_vc_msgs.h:211
MMAL_PARAMETER_HEADER_T param
Definition: mmal_vc_msgs.h:313
Definition: mmal_vc_msgs.h:200
uint32_t alloc_size
Definition: mmal_buffer.h:80
uint32_t component_handle
Definition: mmal_vc_msgs.h:311
Definition: mmal_format.h:125
Definition: mmal_vc_msgs.h:462
#define MMAL_WORKER_EVENT_SPACE
Definition: mmal_vc_msgs.h:403
Definition: mmal_vc_msgs.h:176
Definition: mmal_vc_msgs.h:225
Definition: mmal_port.h:79
MMAL_PORT_TYPE_T
Definition: mmal_port.h:45
#define MMAL_VC_CORE_STATS_NAME_MAX
Definition: mmal_vc_msgs.h:56
Definition: mmal_vc_msgs.h:271
int32_t found
Definition: mmal_vc_msgs.h:232
Definition: mmal_vc_msgs.h:410
MMAL_PORT_TYPE_T port_type
Definition: mmal_vc_msgs.h:204
Definition: mmal_vc_msgs.h:163
#define MMAL_FORMAT_EXTRADATA_MAX_SIZE
Definition: mmal_vc_msgs.h:66
Definition: mmal_vc_client_priv.h:43
struct MMAL_DRIVER_BUFFER_T drvbuf_ref
Definition: mmal_vc_msgs.h:382
MMAL_STATS_RESULT_T
Definition: mmal_vc_api.h:140
Definition: mmal_vc_msgs.h:270
struct mmal_worker_buffer_from_host mmal_worker_buffer_from_host
MMAL_BUFFER_HEADER_TYPE_SPECIFIC_T * type
Definition: mmal_buffer.h:95
int64_t dts
Definition: mmal_buffer.h:90
MMAL_WORKER_PORT_ACTIONS
Definition: mmal_vc_msgs.h:264
uint32_t index
Definition: mmal_vc_msgs.h:216
Definition: mmal_vc_msgs.h:241
MMAL_PARAMETER_HEADER_T param
Definition: mmal_vc_msgs.h:335
Definition: mmal_component.h:48
Definition: mmal_vc_msgs.h:353
Definition: mmal_vc_msgs.h:482
uint32_t cmd
Definition: mmal_buffer.h:75
Definition: mmal_vc_msgs.h:255
Definition: mmal_vc_msgs.h:425
Definition: mmal_vc_msgs.h:471
Definition: mmal_vc_msgs.h:142
uint32_t length
Definition: mmal_buffer.h:81
uint32_t component_handle
Definition: mmal_vc_msgs.h:187
Definition: mmal_vc_msgs.h:330
uint32_t index
Definition: mmal_vc_msgs.h:205
Definition: mmal_parameters_common.h:86
Definition: mmal_vc_msgs.h:273
Definition: mmal_vc_msgs.h:308
struct MMAL_VC_CLIENT_BUFFER_CONTEXT_T * client_context
Definition: mmal_vc_msgs.h:360
Definition: mmal_vc_msgs.h:266
Definition: mmal_vc_msgs.h:368
Definition: mmal_format.h:96
Definition: mmal_vc_msgs.h:320
#define MMAL_WORKER_MSG_LEN
Definition: mmal_vc_msgs.h:61
uint32_t port_handle
Definition: mmal_vc_msgs.h:334
uint32_t offset
Definition: mmal_buffer.h:83
int64_t pts
Definition: mmal_buffer.h:88
MMAL_BUFFER_HEADER_T buffer_header
Definition: mmal_vc_msgs.h:385
uint32_t component_handle
Definition: mmal_vc_msgs.h:229
Definition: mmal_vc_msgs.h:272
Definition: mmal_vc_msgs.h:135
uint8_t * data
Definition: mmal_buffer.h:78
uint32_t port_handle
Definition: mmal_vc_msgs.h:312
struct mmal_worker_event_to_host mmal_worker_event_to_host
Definition: mmal_vc_msgs.h:491
uint32_t flags
Definition: mmal_buffer.h:85
MMAL_PARAMETER_HEADER_T param
Definition: mmal_vc_msgs.h:344
uint32_t component_handle
Definition: mmal_vc_msgs.h:195
Definition: mmal_buffer.h:69
uint32_t dummy
Definition: mmal_vc_msgs.h:123
uint32_t pid
Definition: mmal_vc_msgs.h:157
Definition: mmal_vc_msgs.h:268
uint32_t output_num
Definition: mmal_vc_msgs.h:169
uint32_t component_handle
Definition: mmal_vc_msgs.h:323
uint32_t port_handle
Definition: mmal_vc_msgs.h:357
uint32_t component_handle
Definition: mmal_vc_msgs.h:179
Definition: mmal_buffer.h:56
uint32_t port_num
Definition: mmal_component.h:78
Definition: mmal_vc_msgs.h:184
uint32_t port_handle
Definition: mmal_vc_msgs.h:324
uint32_t payload_in_message
Definition: mmal_vc_msgs.h:394
MMAL_STATUS_T
Definition: mmal_types.h:46
MMAL_STATUS_T status
Definition: mmal_vc_msgs.h:343
Definition: mmal_vc_msgs.h:452
Definition: mmal_vc_msgs.h:192
Definition: mmal_vc_api.h:68
uint32_t component_handle
Definition: mmal_vc_msgs.h:356
Definition: mmal_vc_msgs.h:269
Definition: mmal_vc_msgs.h:278
Definition: mmal_vc_msgs.h:440
Definition: mmal_vc_msgs.h:111
MMAL_STATUS_T status
Definition: mmal_vc_msgs.h:228