1*e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
27f62fe8aSKai Vehmanen /*
37f62fe8aSKai Vehmanen  * cmt-speech interface definitions
47f62fe8aSKai Vehmanen  *
57f62fe8aSKai Vehmanen  * Copyright (C) 2008,2009,2010 Nokia Corporation. All rights reserved.
67f62fe8aSKai Vehmanen  *
77f62fe8aSKai Vehmanen  * Contact: Kai Vehmanen <[email protected]>
87f62fe8aSKai Vehmanen  * Original author: Peter Ujfalusi <[email protected]>
97f62fe8aSKai Vehmanen  */
107f62fe8aSKai Vehmanen 
117f62fe8aSKai Vehmanen #ifndef _CS_PROTOCOL_H
127f62fe8aSKai Vehmanen #define _CS_PROTOCOL_H
137f62fe8aSKai Vehmanen 
147f62fe8aSKai Vehmanen #include <linux/types.h>
157f62fe8aSKai Vehmanen #include <linux/ioctl.h>
167f62fe8aSKai Vehmanen 
177f62fe8aSKai Vehmanen /* chardev parameters */
187f62fe8aSKai Vehmanen #define CS_DEV_FILE_NAME		"/dev/cmt_speech"
197f62fe8aSKai Vehmanen 
207f62fe8aSKai Vehmanen /* user-space API versioning */
217f62fe8aSKai Vehmanen #define CS_IF_VERSION			2
227f62fe8aSKai Vehmanen 
237f62fe8aSKai Vehmanen /* APE kernel <-> user space messages */
247f62fe8aSKai Vehmanen #define CS_CMD_SHIFT			28
257f62fe8aSKai Vehmanen #define CS_DOMAIN_SHIFT			24
267f62fe8aSKai Vehmanen 
277f62fe8aSKai Vehmanen #define CS_CMD_MASK			0xff000000
287f62fe8aSKai Vehmanen #define CS_PARAM_MASK			0xffffff
297f62fe8aSKai Vehmanen 
307f62fe8aSKai Vehmanen #define CS_CMD(id, dom) \
317f62fe8aSKai Vehmanen 	(((id) << CS_CMD_SHIFT) | ((dom) << CS_DOMAIN_SHIFT))
327f62fe8aSKai Vehmanen 
337f62fe8aSKai Vehmanen #define CS_ERROR			CS_CMD(1, 0)
347f62fe8aSKai Vehmanen #define CS_RX_DATA_RECEIVED		CS_CMD(2, 0)
357f62fe8aSKai Vehmanen #define CS_TX_DATA_READY		CS_CMD(3, 0)
367f62fe8aSKai Vehmanen #define CS_TX_DATA_SENT			CS_CMD(4, 0)
377f62fe8aSKai Vehmanen 
387f62fe8aSKai Vehmanen /* params to CS_ERROR indication */
397f62fe8aSKai Vehmanen #define CS_ERR_PEER_RESET		0
407f62fe8aSKai Vehmanen 
417f62fe8aSKai Vehmanen /* ioctl interface */
427f62fe8aSKai Vehmanen 
437f62fe8aSKai Vehmanen /* parameters to CS_CONFIG_BUFS ioctl */
447f62fe8aSKai Vehmanen #define CS_FEAT_TSTAMP_RX_CTRL		(1 << 0)
457f62fe8aSKai Vehmanen #define CS_FEAT_ROLLING_RX_COUNTER	(2 << 0)
467f62fe8aSKai Vehmanen 
477f62fe8aSKai Vehmanen /* parameters to CS_GET_STATE ioctl */
487f62fe8aSKai Vehmanen #define CS_STATE_CLOSED			0
497f62fe8aSKai Vehmanen #define CS_STATE_OPENED			1 /* resource allocated */
507f62fe8aSKai Vehmanen #define CS_STATE_CONFIGURED		2 /* data path active */
517f62fe8aSKai Vehmanen 
527f62fe8aSKai Vehmanen /* maximum number of TX/RX buffers */
537f62fe8aSKai Vehmanen #define CS_MAX_BUFFERS_SHIFT		4
547f62fe8aSKai Vehmanen #define CS_MAX_BUFFERS			(1 << CS_MAX_BUFFERS_SHIFT)
557f62fe8aSKai Vehmanen 
567f62fe8aSKai Vehmanen /* Parameters for setting up the data buffers */
577f62fe8aSKai Vehmanen struct cs_buffer_config {
587f62fe8aSKai Vehmanen 	__u32 rx_bufs;	/* number of RX buffer slots */
597f62fe8aSKai Vehmanen 	__u32 tx_bufs;	/* number of TX buffer slots */
607f62fe8aSKai Vehmanen 	__u32 buf_size;	/* bytes */
617f62fe8aSKai Vehmanen 	__u32 flags;	/* see CS_FEAT_* */
627f62fe8aSKai Vehmanen 	__u32 reserved[4];
637f62fe8aSKai Vehmanen };
647f62fe8aSKai Vehmanen 
657f62fe8aSKai Vehmanen /*
665023a5caSSebastian Reichel  * struct for monotonic timestamp taken when the
675023a5caSSebastian Reichel  * last control command was received
685023a5caSSebastian Reichel  */
695023a5caSSebastian Reichel struct cs_timestamp {
705023a5caSSebastian Reichel 	__u32 tv_sec;  /* seconds */
715023a5caSSebastian Reichel 	__u32 tv_nsec; /* nanoseconds */
725023a5caSSebastian Reichel };
735023a5caSSebastian Reichel 
745023a5caSSebastian Reichel /*
757f62fe8aSKai Vehmanen  * Struct describing the layout and contents of the driver mmap area.
767f62fe8aSKai Vehmanen  * This information is meant as read-only information for the application.
777f62fe8aSKai Vehmanen  */
787f62fe8aSKai Vehmanen struct cs_mmap_config_block {
797f62fe8aSKai Vehmanen 	__u32 reserved1;
807f62fe8aSKai Vehmanen 	__u32 buf_size;		/* 0=disabled, otherwise the transfer size */
817f62fe8aSKai Vehmanen 	__u32 rx_bufs;		/* # of RX buffers */
827f62fe8aSKai Vehmanen 	__u32 tx_bufs;		/* # of TX buffers */
837f62fe8aSKai Vehmanen 	__u32 reserved2;
847f62fe8aSKai Vehmanen 	/* array of offsets within the mmap area for each RX and TX buffer */
857f62fe8aSKai Vehmanen 	__u32 rx_offsets[CS_MAX_BUFFERS];
867f62fe8aSKai Vehmanen 	__u32 tx_offsets[CS_MAX_BUFFERS];
877f62fe8aSKai Vehmanen 	__u32 rx_ptr;
887f62fe8aSKai Vehmanen 	__u32 rx_ptr_boundary;
897f62fe8aSKai Vehmanen 	__u32 reserved3[2];
905023a5caSSebastian Reichel 	/* enabled with CS_FEAT_TSTAMP_RX_CTRL */
915023a5caSSebastian Reichel 	struct cs_timestamp tstamp_rx_ctrl;
927f62fe8aSKai Vehmanen };
937f62fe8aSKai Vehmanen 
947f62fe8aSKai Vehmanen #define CS_IO_MAGIC		'C'
957f62fe8aSKai Vehmanen 
967f62fe8aSKai Vehmanen #define CS_IOW(num, dtype)	_IOW(CS_IO_MAGIC, num, dtype)
977f62fe8aSKai Vehmanen #define CS_IOR(num, dtype)	_IOR(CS_IO_MAGIC, num, dtype)
987f62fe8aSKai Vehmanen #define CS_IOWR(num, dtype)	_IOWR(CS_IO_MAGIC, num, dtype)
997f62fe8aSKai Vehmanen #define CS_IO(num)		_IO(CS_IO_MAGIC, num)
1007f62fe8aSKai Vehmanen 
1017f62fe8aSKai Vehmanen #define CS_GET_STATE		CS_IOR(21, unsigned int)
1027f62fe8aSKai Vehmanen #define CS_SET_WAKELINE		CS_IOW(23, unsigned int)
1037f62fe8aSKai Vehmanen #define CS_GET_IF_VERSION	CS_IOR(30, unsigned int)
1047f62fe8aSKai Vehmanen #define CS_CONFIG_BUFS		CS_IOW(31, struct cs_buffer_config)
1057f62fe8aSKai Vehmanen 
1067f62fe8aSKai Vehmanen #endif /* _CS_PROTOCOL_H */
107