1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */ 3 4#ifndef VCHIQ_IOCTLS_H 5#define VCHIQ_IOCTLS_H 6 7#include <linux/ioctl.h> 8 9#include "../../include/linux/raspberrypi/vchiq.h" 10 11#define VCHIQ_IOC_MAGIC 0xc4 12#define VCHIQ_INVALID_HANDLE (~0) 13 14struct vchiq_service_params { 15 int fourcc; 16 int __user (*callback)(enum vchiq_reason reason, 17 struct vchiq_header *header, 18 unsigned int handle, 19 void *bulk_userdata); 20 void __user *userdata; 21 short version; /* Increment for non-trivial changes */ 22 short version_min; /* Update for incompatible changes */ 23}; 24 25struct vchiq_create_service { 26 struct vchiq_service_params params; 27 int is_open; 28 int is_vchi; 29 unsigned int handle; /* OUT */ 30}; 31 32struct vchiq_queue_message { 33 unsigned int handle; 34 unsigned int count; 35 const struct vchiq_element __user *elements; 36}; 37 38struct vchiq_queue_bulk_transfer { 39 unsigned int handle; 40 void __user *data; 41 unsigned int size; 42 void __user *userdata; 43 enum vchiq_bulk_mode mode; 44}; 45 46struct vchiq_completion_data { 47 enum vchiq_reason reason; 48 struct vchiq_header __user *header; 49 void __user *service_userdata; 50 void __user *bulk_userdata; 51}; 52 53struct vchiq_await_completion { 54 unsigned int count; 55 struct vchiq_completion_data __user *buf; 56 unsigned int msgbufsize; 57 unsigned int msgbufcount; /* IN/OUT */ 58 void * __user *msgbufs; 59}; 60 61struct vchiq_dequeue_message { 62 unsigned int handle; 63 int blocking; 64 unsigned int bufsize; 65 void __user *buf; 66}; 67 68struct vchiq_get_config { 69 unsigned int config_size; 70 struct vchiq_config __user *pconfig; 71}; 72 73struct vchiq_set_service_option { 74 unsigned int handle; 75 enum vchiq_service_option option; 76 int value; 77}; 78 79struct vchiq_dump_mem { 80 void __user *virt_addr; 81 size_t num_bytes; 82}; 83 84#define VCHIQ_IOC_CONNECT _IO(VCHIQ_IOC_MAGIC, 0) 85#define VCHIQ_IOC_SHUTDOWN _IO(VCHIQ_IOC_MAGIC, 1) 86#define VCHIQ_IOC_CREATE_SERVICE \ 87 _IOWR(VCHIQ_IOC_MAGIC, 2, struct vchiq_create_service) 88#define VCHIQ_IOC_REMOVE_SERVICE _IO(VCHIQ_IOC_MAGIC, 3) 89#define VCHIQ_IOC_QUEUE_MESSAGE \ 90 _IOW(VCHIQ_IOC_MAGIC, 4, struct vchiq_queue_message) 91#define VCHIQ_IOC_QUEUE_BULK_TRANSMIT \ 92 _IOWR(VCHIQ_IOC_MAGIC, 5, struct vchiq_queue_bulk_transfer) 93#define VCHIQ_IOC_QUEUE_BULK_RECEIVE \ 94 _IOWR(VCHIQ_IOC_MAGIC, 6, struct vchiq_queue_bulk_transfer) 95#define VCHIQ_IOC_AWAIT_COMPLETION \ 96 _IOWR(VCHIQ_IOC_MAGIC, 7, struct vchiq_await_completion) 97#define VCHIQ_IOC_DEQUEUE_MESSAGE \ 98 _IOWR(VCHIQ_IOC_MAGIC, 8, struct vchiq_dequeue_message) 99#define VCHIQ_IOC_GET_CLIENT_ID _IO(VCHIQ_IOC_MAGIC, 9) 100#define VCHIQ_IOC_GET_CONFIG \ 101 _IOWR(VCHIQ_IOC_MAGIC, 10, struct vchiq_get_config) 102#define VCHIQ_IOC_CLOSE_SERVICE _IO(VCHIQ_IOC_MAGIC, 11) 103#define VCHIQ_IOC_USE_SERVICE _IO(VCHIQ_IOC_MAGIC, 12) 104#define VCHIQ_IOC_RELEASE_SERVICE _IO(VCHIQ_IOC_MAGIC, 13) 105#define VCHIQ_IOC_SET_SERVICE_OPTION \ 106 _IOW(VCHIQ_IOC_MAGIC, 14, struct vchiq_set_service_option) 107#define VCHIQ_IOC_DUMP_PHYS_MEM \ 108 _IOW(VCHIQ_IOC_MAGIC, 15, struct vchiq_dump_mem) 109#define VCHIQ_IOC_LIB_VERSION _IO(VCHIQ_IOC_MAGIC, 16) 110#define VCHIQ_IOC_CLOSE_DELIVERED _IO(VCHIQ_IOC_MAGIC, 17) 111#define VCHIQ_IOC_MAX 17 112 113#endif 114