cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

console.c (1772B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Simple kernel console driver for STM devices
      4 * Copyright (c) 2014, Intel Corporation.
      5 *
      6 * STM console will send kernel messages over STM devices to a trace host.
      7 */
      8
      9#include <linux/kernel.h>
     10#include <linux/module.h>
     11#include <linux/console.h>
     12#include <linux/slab.h>
     13#include <linux/stm.h>
     14
     15static int stm_console_link(struct stm_source_data *data);
     16static void stm_console_unlink(struct stm_source_data *data);
     17
     18static struct stm_console {
     19	struct stm_source_data	data;
     20	struct console		console;
     21} stm_console = {
     22	.data	= {
     23		.name		= "console",
     24		.nr_chans	= 1,
     25		.link		= stm_console_link,
     26		.unlink		= stm_console_unlink,
     27	},
     28};
     29
     30static void
     31stm_console_write(struct console *con, const char *buf, unsigned len)
     32{
     33	struct stm_console *sc = container_of(con, struct stm_console, console);
     34
     35	stm_source_write(&sc->data, 0, buf, len);
     36}
     37
     38static int stm_console_link(struct stm_source_data *data)
     39{
     40	struct stm_console *sc = container_of(data, struct stm_console, data);
     41
     42	strcpy(sc->console.name, "stm_console");
     43	sc->console.write = stm_console_write;
     44	sc->console.flags = CON_ENABLED | CON_PRINTBUFFER;
     45	register_console(&sc->console);
     46
     47	return 0;
     48}
     49
     50static void stm_console_unlink(struct stm_source_data *data)
     51{
     52	struct stm_console *sc = container_of(data, struct stm_console, data);
     53
     54	unregister_console(&sc->console);
     55}
     56
     57static int stm_console_init(void)
     58{
     59	return stm_source_register_device(NULL, &stm_console.data);
     60}
     61
     62static void stm_console_exit(void)
     63{
     64	stm_source_unregister_device(&stm_console.data);
     65}
     66
     67module_init(stm_console_init);
     68module_exit(stm_console_exit);
     69
     70MODULE_LICENSE("GPL v2");
     71MODULE_DESCRIPTION("stm_console driver");
     72MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@linux.intel.com>");