diff --git a/include/uapi/fastrpc_shared.h b/include/uapi/fastrpc_shared.h new file mode 100644 index 0000000000..4c0fd38bec --- /dev/null +++ b/include/uapi/fastrpc_shared.h @@ -0,0 +1,285 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ +/* + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef FASTRPC_IOCTL_H +#define FASTRPC_IOCTL_H + +#include +#include + +#define remote_arg_t union remote_arg +/* Map and unmap IOCTL methods reserved memory size for future extensions */ +#define MAP_RESERVED_NUM (14) +#define UNMAP_RESERVED_NUM (10) + +#define FASTRPC_IOCTL_INVOKE _IOWR('R', 1, struct fastrpc_ioctl_invoke) +#define FASTRPC_IOCTL_MMAP _IOWR('R', 2, struct fastrpc_ioctl_mmap) +#define FASTRPC_IOCTL_MUNMAP _IOWR('R', 3, struct fastrpc_ioctl_munmap) +#define FASTRPC_IOCTL_MMAP_64 _IOWR('R', 14, struct fastrpc_ioctl_mmap_64) +#define FASTRPC_IOCTL_MUNMAP_64 _IOWR('R', 15, struct fastrpc_ioctl_munmap_64) +#define FASTRPC_IOCTL_INVOKE_FD _IOWR('R', 4, struct fastrpc_ioctl_invoke_fd) +#define FASTRPC_IOCTL_SETMODE _IOWR('R', 5, uint32_t) +#define FASTRPC_IOCTL_INIT _IOWR('R', 6, struct fastrpc_ioctl_init) +#define FASTRPC_IOCTL_INVOKE_ATTRS \ + _IOWR('R', 7, struct fastrpc_ioctl_invoke_attrs) +#define FASTRPC_IOCTL_GETINFO _IOWR('R', 8, uint32_t) +//#define FASTRPC_IOCTL_GETPERF _IOWR('R', 9, struct fastrpc_ioctl_perf) +#define FASTRPC_IOCTL_INIT_ATTRS _IOWR('R', 10, struct fastrpc_ioctl_init_attrs) +#define FASTRPC_IOCTL_INVOKE_CRC _IOWR('R', 11, struct fastrpc_ioctl_invoke_crc) +#define FASTRPC_IOCTL_CONTROL _IOWR('R', 12, struct fastrpc_ioctl_control) +#define FASTRPC_IOCTL_MUNMAP_FD _IOWR('R', 13, struct fastrpc_ioctl_munmap_fd) +#define FASTRPC_IOCTL_GET_DSP_INFO \ + _IOWR('R', 17, struct fastrpc_ioctl_capability) +#define FASTRPC_IOCTL_INVOKE2 _IOWR('R', 18, struct fastrpc_ioctl_invoke2) +#define FASTRPC_IOCTL_MEM_MAP _IOWR('R', 19, struct fastrpc_ioctl_mem_map) +#define FASTRPC_IOCTL_MEM_UNMAP _IOWR('R', 20, struct fastrpc_ioctl_mem_unmap) +#define FASTRPC_IOCTL_INVOKE_PERF \ + _IOWR('R', 21, struct fastrpc_ioctl_invoke_perf) +#define FASTRPC_IOCTL_NOTIF_RSP \ + _IOWR('R', 22, struct fastrpc_ioctl_notif_rsp) +#define FASTRPC_IOCTL_DSPSIGNAL_CREATE _IOWR('R', 23, struct fastrpc_ioctl_dspsignal_create) +#define FASTRPC_IOCTL_DSPSIGNAL_DESTROY _IOWR('R', 24, struct fastrpc_ioctl_dspsignal_destroy) +#define FASTRPC_IOCTL_DSPSIGNAL_SIGNAL _IOWR('R', 25, struct fastrpc_ioctl_dspsignal_signal) +#define FASTRPC_IOCTL_DSPSIGNAL_WAIT _IOWR('R', 26, struct fastrpc_ioctl_dspsignal_wait) +#define FASTRPC_IOCTL_DSPSIGNAL_CANCEL_WAIT \ + _IOWR('R', 27, struct fastrpc_ioctl_dspsignal_cancel_wait) + +struct fastrpc_mem_map { + int fd; /* ion fd */ + int offset; /* buffer offset */ + uint32_t flags; /* flags defined in enum fastrpc_map_flags */ + int attrs; /* buffer attributes used for SMMU mapping */ + uintptr_t vaddrin; /* buffer virtual address */ + size_t length; /* buffer length */ + uint64_t vaddrout; /* [out] remote virtual address */ +}; + +struct fastrpc_mem_unmap { + int fd; /* ion fd */ + uint64_t vaddr; /* remote process (dsp) virtual address */ + size_t length; /* buffer size */ +}; + +struct fastrpc_ctrl_latency { + uint32_t enable; /* latency control enable */ + uint32_t latency; /* latency request in us */ +}; + +struct fastrpc_ctrl_kalloc { + uint32_t kalloc_support; /* Remote memory allocation from kernel */ +}; + +struct fastrpc_ctrl_wakelock { + uint32_t enable; /* wakelock control enable */ +}; + +struct fastrpc_ctrl_pm { + uint32_t timeout; /* timeout(in ms) for PM to keep system awake */ +}; + +struct fastrpc_ctrl_smmu { + uint32_t sharedcb; /* Set to SMMU share context bank */ +}; + +struct fastrpc_ioctl_invoke { + uint32_t handle; /* remote handle */ + uint32_t sc; /* scalars describing the data */ + remote_arg_t *pra; /* remote arguments list */ +}; + +struct fastrpc_ioctl_invoke_fd { + struct fastrpc_ioctl_invoke inv; + int *fds; /* fd list */ +}; + +struct fastrpc_ioctl_invoke_attrs { + struct fastrpc_ioctl_invoke inv; + int *fds; /* fd list */ + unsigned int *attrs; /* attribute list */ +}; + +struct fastrpc_ioctl_invoke_crc { + struct fastrpc_ioctl_invoke inv; + int *fds; /* fd list */ + unsigned int *attrs; /* attribute list */ + unsigned int *crc; +}; + +struct fastrpc_ioctl_invoke_perf { + struct fastrpc_ioctl_invoke inv; + int *fds; + unsigned int *attrs; + unsigned int *crc; + uint64_t *perf_kernel; + uint64_t *perf_dsp; +}; + +struct fastrpc_ioctl_invoke_async { + struct fastrpc_ioctl_invoke inv; + int *fds; /* fd list */ + unsigned int *attrs; /* attribute list */ + unsigned int *crc; + uint64_t *perf_kernel; + uint64_t *perf_dsp; + struct fastrpc_async_job *job; /* async job*/ +}; + +struct fastrpc_ioctl_invoke_async_no_perf { + struct fastrpc_ioctl_invoke inv; + int *fds; /* fd list */ + unsigned int *attrs; /* attribute list */ + unsigned int *crc; + struct fastrpc_async_job *job; /* async job*/ +}; + +struct fastrpc_ioctl_async_response { + uint64_t jobid;/* job id generated by user */ + int result; /* result from DSP */ + uint64_t *perf_kernel; + uint64_t *perf_dsp; + uint32_t handle; + uint32_t sc; +}; + +struct fastrpc_ioctl_notif_rsp { + int domain; /* Domain of User PD */ + int session; /* Session ID of User PD */ + uint32_t status; /* Status of the process */ +}; + +struct fastrpc_ioctl_invoke2 { + uint32_t req; /* type of invocation request */ + uintptr_t invparam; /* invocation request param */ + uint32_t size; /* size of invocation param */ + int err; /* reserved */ +}; + +struct fastrpc_ioctl_init { + uint32_t flags; /* one of FASTRPC_INIT_* macros */ + uintptr_t file; /* pointer to elf file */ + uint32_t filelen; /* elf file length */ + int32_t filefd; /* ION fd for the file */ + uintptr_t mem; /* mem for the PD */ + uint32_t memlen; /* mem length */ + int32_t memfd; /* ION fd for the mem */ +}; + +struct fastrpc_ioctl_init_attrs { + struct fastrpc_ioctl_init init; + int attrs; + unsigned int siglen; +}; + +struct fastrpc_ioctl_munmap { + uintptr_t vaddrout; /* address to unmap */ + size_t size; /* size */ +}; + +struct fastrpc_ioctl_munmap_64 { + uint64_t vaddrout; /* address to unmap */ + size_t size; /* size */ +}; + +struct fastrpc_ioctl_mmap { + int fd; /* ion fd */ + uint32_t flags; /* flags for dsp to map with */ + uintptr_t vaddrin; /* optional virtual address */ + size_t size; /* size */ + uintptr_t vaddrout; /* dsps virtual address */ +}; + +struct fastrpc_ioctl_mmap_64 { + int fd; /* ion fd */ + uint32_t flags; /* flags for dsp to map with */ + uint64_t vaddrin; /* optional virtual address */ + size_t size; /* size */ + uint64_t vaddrout; /* dsps virtual address */ +}; + +struct fastrpc_ioctl_munmap_fd { + int fd; /* fd */ + uint32_t flags; /* control flags */ + uintptr_t va; /* va */ + ssize_t len; /* length */ +}; + +struct fastrpc_ioctl_dspsignal_create { + uint32_t signal_id; /* Signal ID */ + uint32_t flags; /* Flags, currently unused */ +}; + +struct fastrpc_ioctl_dspsignal_destroy { + uint32_t signal_id; /* Signal ID */ +}; + +struct fastrpc_ioctl_dspsignal_signal { + uint32_t signal_id; /* Signal ID */ +}; + +struct fastrpc_ioctl_dspsignal_wait { + uint32_t signal_id; /* Signal ID */ + uint32_t timeout_usec; /* Timeout in microseconds. UINT32_MAX for an infinite wait */ +}; + +struct fastrpc_ioctl_dspsignal_cancel_wait { + uint32_t signal_id; /* Signal ID */ +}; + +/* map memory to DSP device */ +struct fastrpc_ioctl_mem_map { + int version; /* Initial version 0 */ + union { + struct fastrpc_mem_map m; + int reserved[MAP_RESERVED_NUM]; + }; +}; + +/* unmap memory to DSP device */ +struct fastrpc_ioctl_mem_unmap { + int version; /* Initial version 0 */ + union { + struct fastrpc_mem_unmap um; + int reserved[UNMAP_RESERVED_NUM]; + }; +}; + +struct fastrpc_ioctl_control { + uint32_t req; + union { + struct fastrpc_ctrl_latency lp; + struct fastrpc_ctrl_kalloc kalloc; + struct fastrpc_ctrl_wakelock wp; + struct fastrpc_ctrl_pm pm; + struct fastrpc_ctrl_smmu smmu; + }; +}; + +struct fastrpc_ioctl_capability { + uint32_t domain; + uint32_t attribute_ID; + uint32_t capability; +}; + +union fastrpc_ioctl_param { + struct fastrpc_ioctl_invoke_async inv; + struct fastrpc_ioctl_mem_map mem_map; + struct fastrpc_ioctl_mem_unmap mem_unmap; + struct fastrpc_ioctl_mmap mmap; + struct fastrpc_ioctl_mmap_64 mmap64; + struct fastrpc_ioctl_munmap munmap; + struct fastrpc_ioctl_munmap_64 munmap64; + struct fastrpc_ioctl_munmap_fd munmap_fd; + struct fastrpc_ioctl_init_attrs init; + struct fastrpc_ioctl_control cp; + struct fastrpc_ioctl_capability cap; + struct fastrpc_ioctl_invoke2 inv2; + struct fastrpc_ioctl_dspsignal_signal sig; + struct fastrpc_ioctl_dspsignal_wait wait; + struct fastrpc_ioctl_dspsignal_create cre; + struct fastrpc_ioctl_dspsignal_destroy des; + struct fastrpc_ioctl_dspsignal_cancel_wait canc; +}; + +#endif