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