xref: /openbmc/linux/drivers/hwtracing/stm/p_basic.c (revision a02509f3)
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 
basic_write(struct stm_data * data,struct stm_output * output,unsigned int chan,const char * buf,size_t count)12a02509f3SAlexander Shishkin static ssize_t basic_write(struct stm_data *data, struct stm_output *output,
13a02509f3SAlexander Shishkin 			   unsigned int chan, const char *buf, size_t count)
14a02509f3SAlexander Shishkin {
15a02509f3SAlexander Shishkin 	unsigned int c = output->channel + chan;
16a02509f3SAlexander Shishkin 	unsigned int m = output->master;
17a02509f3SAlexander Shishkin 	const unsigned char nil = 0;
18a02509f3SAlexander Shishkin 	ssize_t sz;
19a02509f3SAlexander Shishkin 
20a02509f3SAlexander Shishkin 	sz = stm_data_write(data, m, c, true, buf, count);
21a02509f3SAlexander Shishkin 	if (sz > 0)
22a02509f3SAlexander Shishkin 		data->packet(data, m, c, STP_PACKET_FLAG, 0, 0, &nil);
23a02509f3SAlexander Shishkin 
24a02509f3SAlexander Shishkin 	return sz;
25a02509f3SAlexander Shishkin }
26a02509f3SAlexander Shishkin 
27a02509f3SAlexander Shishkin static const struct stm_protocol_driver basic_pdrv = {
28a02509f3SAlexander Shishkin 	.owner	= THIS_MODULE,
29a02509f3SAlexander Shishkin 	.name	= "p_basic",
30a02509f3SAlexander Shishkin 	.write	= basic_write,
31a02509f3SAlexander Shishkin };
32a02509f3SAlexander Shishkin 
basic_stm_init(void)33a02509f3SAlexander Shishkin static int basic_stm_init(void)
34a02509f3SAlexander Shishkin {
35a02509f3SAlexander Shishkin 	return stm_register_protocol(&basic_pdrv);
36a02509f3SAlexander Shishkin }
37a02509f3SAlexander Shishkin 
basic_stm_exit(void)38a02509f3SAlexander Shishkin static void basic_stm_exit(void)
39a02509f3SAlexander Shishkin {
40a02509f3SAlexander Shishkin 	stm_unregister_protocol(&basic_pdrv);
41a02509f3SAlexander Shishkin }
42a02509f3SAlexander Shishkin 
43a02509f3SAlexander Shishkin module_init(basic_stm_init);
44a02509f3SAlexander Shishkin module_exit(basic_stm_exit);
45a02509f3SAlexander Shishkin 
46a02509f3SAlexander Shishkin MODULE_LICENSE("GPL v2");
47a02509f3SAlexander Shishkin MODULE_DESCRIPTION("Basic STM framing protocol driver");
48a02509f3SAlexander Shishkin MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>");
49