File Index
Files and directories
Sign in
FILE

vchiq.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/raspberrypi/vchiq.h C
  1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
  2/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
  3
  4#ifndef VCHIQ_H
  5#define VCHIQ_H
  6
  7#define VCHIQ_MAKE_FOURCC(x0, x1, x2, x3) \
  8			(((x0) << 24) | ((x1) << 16) | ((x2) << 8) | (x3))
  9
 10enum vchiq_reason {
 11	VCHIQ_SERVICE_OPENED,         /* service, -, -             */
 12	VCHIQ_SERVICE_CLOSED,         /* service, -, -             */
 13	VCHIQ_MESSAGE_AVAILABLE,      /* service, header, -        */
 14	VCHIQ_BULK_TRANSMIT_DONE,     /* service, -, bulk_userdata */
 15	VCHIQ_BULK_RECEIVE_DONE,      /* service, -, bulk_userdata */
 16	VCHIQ_BULK_TRANSMIT_ABORTED,  /* service, -, bulk_userdata */
 17	VCHIQ_BULK_RECEIVE_ABORTED    /* service, -, bulk_userdata */
 18};
 19
 20enum vchiq_bulk_mode {
 21	VCHIQ_BULK_MODE_CALLBACK,
 22	VCHIQ_BULK_MODE_BLOCKING,
 23	VCHIQ_BULK_MODE_NOCALLBACK,
 24	VCHIQ_BULK_MODE_WAITING		/* Reserved for internal use */
 25};
 26
 27enum vchiq_service_option {
 28	VCHIQ_SERVICE_OPTION_AUTOCLOSE,
 29	VCHIQ_SERVICE_OPTION_SLOT_QUOTA,
 30	VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA,
 31	VCHIQ_SERVICE_OPTION_SYNCHRONOUS,
 32	VCHIQ_SERVICE_OPTION_TRACE
 33};
 34
 35struct vchiq_header {
 36	/* The message identifier - opaque to applications. */
 37	int msgid;
 38
 39	/* Size of message data. */
 40	unsigned int size;
 41
 42	char data[];           /* message */
 43};
 44
 45struct vchiq_element {
 46	const void __user *data;
 47	unsigned int size;
 48};
 49
 50struct vchiq_instance;
 51struct vchiq_state;
 52
 53struct vchiq_service_base {
 54	int fourcc;
 55	int (*callback)(struct vchiq_instance *instance,
 56			enum vchiq_reason reason,
 57			struct vchiq_header *header,
 58			unsigned int handle,
 59			void *cb_data, void __user *cb_userdata);
 60	void *userdata;
 61};
 62
 63struct vchiq_completion_data_kernel {
 64	enum vchiq_reason reason;
 65	struct vchiq_header *header;
 66	void *service_userdata;
 67	void *cb_data;
 68	void  __user *cb_userdata;
 69};
 70
 71struct vchiq_service_params_kernel {
 72	int fourcc;
 73	int (*callback)(struct vchiq_instance *instance,
 74			enum vchiq_reason reason,
 75			struct vchiq_header *header,
 76			unsigned int handle,
 77			void *cb_data, void __user *cb_userdata);
 78	void *userdata;
 79	short version;       /* Increment for non-trivial changes */
 80	short version_min;   /* Update for incompatible changes */
 81};
 82
 83extern int vchiq_initialise(struct vchiq_state *state,
 84			    struct vchiq_instance **pinstance);
 85extern int vchiq_shutdown(struct vchiq_instance *instance);
 86extern int vchiq_connect(struct vchiq_instance *instance);
 87extern int vchiq_open_service(struct vchiq_instance *instance,
 88			      const struct vchiq_service_params_kernel *params,
 89			      unsigned int *pservice);
 90extern int vchiq_close_service(struct vchiq_instance *instance,
 91			       unsigned int service);
 92extern int vchiq_use_service(struct vchiq_instance *instance, unsigned int service);
 93extern int vchiq_release_service(struct vchiq_instance *instance,
 94				 unsigned int service);
 95extern void vchiq_msg_queue_push(struct vchiq_instance *instance, unsigned int handle,
 96				 struct vchiq_header *header);
 97extern void vchiq_release_message(struct vchiq_instance *instance, unsigned int service,
 98				  struct vchiq_header *header);
 99extern int vchiq_queue_kernel_message(struct vchiq_instance *instance, unsigned int handle,
100				      void *data, unsigned int size);
101extern int vchiq_bulk_transmit(struct vchiq_instance *instance, unsigned int service,
102			       const void *data, unsigned int size, void *userdata,
103			       enum vchiq_bulk_mode mode);
104extern int vchiq_bulk_receive(struct vchiq_instance *instance, unsigned int service,
105			      void *data, unsigned int size, void *userdata,
106			      enum vchiq_bulk_mode mode);
107extern void *vchiq_get_service_userdata(struct vchiq_instance *instance, unsigned int service);
108extern int vchiq_get_peer_version(struct vchiq_instance *instance, unsigned int handle,
109				  short *peer_version);
110extern struct vchiq_header *vchiq_msg_hold(struct vchiq_instance *instance, unsigned int handle);
111
112#endif /* VCHIQ_H */
~/ Read-only file preview.