xref: /linux/drivers/hwtracing/stm/p_basic.c (revision 36ec807b627b4c0a0a382f0ae48eac7187d14b2b)
1a02509f3SAlexander Shishkin // SPDX-License-Identifier: GPL-2.0
2a02509f3SAlexander Shishkin /*
3a02509f3SAlexander Shishkin  * Basic framing protocol for STM devices.
4a02509f3SAlexander Shishkin  * Copyright (c) 2018, Intel Corporation.
5a02509f3SAlexander Shishkin  */
6a02509f3SAlexander Shishkin 
7a02509f3SAlexander Shishkin #include <linux/module.h>
8a02509f3SAlexander Shishkin #include <linux/device.h>
9a02509f3SAlexander Shishkin #include <linux/stm.h>
10a02509f3SAlexander Shishkin #include "stm.h"
11a02509f3SAlexander Shishkin 
12a02509f3SAlexander Shishkin static ssize_t basic_write(struct stm_data *data, struct stm_output *output,
13*ee27f44eSMikhail Lappo 			   unsigned int chan, const char *buf, size_t count,
14*ee27f44eSMikhail Lappo 			   struct stm_source_data *source)
15a02509f3SAlexander Shishkin {
16a02509f3SAlexander Shishkin 	unsigned int c = output->channel + chan;
17a02509f3SAlexander Shishkin 	unsigned int m = output->master;
18a02509f3SAlexander Shishkin 	const unsigned char nil = 0;
19a02509f3SAlexander Shishkin 	ssize_t sz;
20a02509f3SAlexander Shishkin 
21a02509f3SAlexander Shishkin 	sz = stm_data_write(data, m, c, true, buf, count);
22a02509f3SAlexander Shishkin 	if (sz > 0)
23a02509f3SAlexander Shishkin 		data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil);
24a02509f3SAlexander Shishkin 
25a02509f3SAlexander Shishkin 	return sz;
26a02509f3SAlexander Shishkin }
27a02509f3SAlexander Shishkin 
28a02509f3SAlexander Shishkin static const struct stm_protocol_driver basic_pdrv = {
29a02509f3SAlexander Shishkin 	.owner	= THIS_MODULE,
30a02509f3SAlexander Shishkin 	.name	= "p_basic",
31a02509f3SAlexander Shishkin 	.write	= basic_write,
32a02509f3SAlexander Shishkin };
33a02509f3SAlexander Shishkin 
34a02509f3SAlexander Shishkin static int basic_stm_init(void)
35a02509f3SAlexander Shishkin {
36a02509f3SAlexander Shishkin 	return stm_register_protocol(&basic_pdrv);
37a02509f3SAlexander Shishkin }
38a02509f3SAlexander Shishkin 
39a02509f3SAlexander Shishkin static void basic_stm_exit(void)
40a02509f3SAlexander Shishkin {
41a02509f3SAlexander Shishkin 	stm_unregister_protocol(&basic_pdrv);
42a02509f3SAlexander Shishkin }
43a02509f3SAlexander Shishkin 
44a02509f3SAlexander Shishkin module_init(basic_stm_init);
45a02509f3SAlexander Shishkin module_exit(basic_stm_exit);
46a02509f3SAlexander Shishkin 
47a02509f3SAlexander Shishkin MODULE_LICENSE("GPL v2");
48a02509f3SAlexander Shishkin MODULE_DESCRIPTION("Basic STM framing protocol driver");
49a02509f3SAlexander Shishkin MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>");
50