1 /* 2 * A dummy STM device for stm/stm_source class testing. 3 * Copyright (c) 2014, Intel Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms and conditions of the GNU General Public License, 7 * version 2, as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * STM class implements generic infrastructure for System Trace Module devices 15 * as defined in MIPI STPv2 specification. 16 */ 17 18 #undef DEBUG 19 #include <linux/kernel.h> 20 #include <linux/module.h> 21 #include <linux/slab.h> 22 #include <linux/stm.h> 23 24 static ssize_t 25 dummy_stm_packet(struct stm_data *stm_data, unsigned int master, 26 unsigned int channel, unsigned int packet, unsigned int flags, 27 unsigned int size, const unsigned char *payload) 28 { 29 #ifdef DEBUG 30 u64 pl = 0; 31 32 if (payload) 33 pl = *(u64 *)payload; 34 35 if (size < 8) 36 pl &= (1ull << (size * 8)) - 1; 37 trace_printk("[%u:%u] [pkt: %x/%x] (%llx)\n", master, channel, 38 packet, size, pl); 39 #endif 40 return size; 41 } 42 43 static struct stm_data dummy_stm = { 44 .name = "dummy_stm", 45 .sw_start = 0x0000, 46 .sw_end = 0xffff, 47 .sw_nchannels = 0xffff, 48 .packet = dummy_stm_packet, 49 }; 50 51 static int dummy_stm_init(void) 52 { 53 return stm_register_device(NULL, &dummy_stm, THIS_MODULE); 54 } 55 56 static void dummy_stm_exit(void) 57 { 58 stm_unregister_device(&dummy_stm); 59 } 60 61 module_init(dummy_stm_init); 62 module_exit(dummy_stm_exit); 63 64 MODULE_LICENSE("GPL v2"); 65 MODULE_DESCRIPTION("dummy_stm device"); 66 MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>"); 67