cregit-Linux how code gets into the kernel

Release 4.14 arch/m68k/emu/nfcon.c

Directory: arch/m68k/emu
/*
 * ARAnyM console driver
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file COPYING in the main directory of this archive
 * for more details.
 */

#include <linux/module.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/slab.h>
#include <linux/err.h>
#include <linux/uaccess.h>
#include <linux/io.h>

#include <asm/natfeat.h>


static int stderr_id;

static struct tty_port nfcon_tty_port;

static struct tty_driver *nfcon_tty_driver;


static void nfputs(const char *str, unsigned int count) { char buf[68]; unsigned long phys = virt_to_phys(buf); buf[64] = 0; while (count > 64) { memcpy(buf, str, 64); nf_call(stderr_id, phys); str += 64; count -= 64; } memcpy(buf, str, count); buf[count] = 0; nf_call(stderr_id, phys); }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel8188.04%150.00%
Geert Uytterhoeven1111.96%150.00%
Total92100.00%2100.00%


static void nfcon_write(struct console *con, const char *str, unsigned int count) { nfputs(str, count); }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel27100.00%1100.00%
Total27100.00%1100.00%


static struct tty_driver *nfcon_device(struct console *con, int *index) { *index = 0; return (con->flags & CON_ENABLED) ? nfcon_tty_driver : NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel35100.00%1100.00%
Total35100.00%1100.00%

static struct console nf_console = { .name = "nfcon", .write = nfcon_write, .device = nfcon_device, .flags = CON_PRINTBUFFER, .index = -1, };
static int nfcon_tty_open(struct tty_struct *tty, struct file *filp) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel19100.00%1100.00%
Total19100.00%1100.00%


static void nfcon_tty_close(struct tty_struct *tty, struct file *filp) { }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel15100.00%1100.00%
Total15100.00%1100.00%


static int nfcon_tty_write(struct tty_struct *tty, const unsigned char *buf, int count) { nfputs(buf, count); return count; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel30100.00%1100.00%
Total30100.00%1100.00%


static int nfcon_tty_put_char(struct tty_struct *tty, unsigned char ch) { char temp[2] = { ch, 0 }; nf_call(stderr_id, virt_to_phys(temp)); return 1; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel3792.50%150.00%
Geert Uytterhoeven37.50%150.00%
Total40100.00%2100.00%


static int nfcon_tty_write_room(struct tty_struct *tty) { return 64; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel14100.00%1100.00%
Total14100.00%1100.00%

static const struct tty_operations nfcon_tty_ops = { .open = nfcon_tty_open, .close = nfcon_tty_close, .write = nfcon_tty_write, .put_char = nfcon_tty_put_char, .write_room = nfcon_tty_write_room, }; #ifndef MODULE
static int __init nf_debug_setup(char *arg) { if (strcmp(arg, "nfcon")) return 0; stderr_id = nf_get_id("NF_STDERR"); if (stderr_id) { nf_console.flags |= CON_ENABLED; register_console(&nf_console); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel51100.00%1100.00%
Total51100.00%1100.00%

early_param("debug", nf_debug_setup); #endif /* !MODULE */
static int __init nfcon_init(void) { int res; stderr_id = nf_get_id("NF_STDERR"); if (!stderr_id) return -ENODEV; nfcon_tty_driver = alloc_tty_driver(1); if (!nfcon_tty_driver) return -ENOMEM; tty_port_init(&nfcon_tty_port); nfcon_tty_driver->driver_name = "nfcon"; nfcon_tty_driver->name = "nfcon"; nfcon_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM; nfcon_tty_driver->subtype = SYSTEM_TYPE_TTY; nfcon_tty_driver->init_termios = tty_std_termios; nfcon_tty_driver->flags = TTY_DRIVER_REAL_RAW; tty_set_operations(nfcon_tty_driver, &nfcon_tty_ops); tty_port_link_device(&nfcon_tty_port, nfcon_tty_driver, 0); res = tty_register_driver(nfcon_tty_driver); if (res) { pr_err("failed to register nfcon tty driver\n"); put_tty_driver(nfcon_tty_driver); tty_port_destroy(&nfcon_tty_port); return res; } if (!(nf_console.flags & CON_ENABLED)) register_console(&nf_console); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel13485.90%133.33%
Jiri Slaby2214.10%266.67%
Total156100.00%3100.00%


static void __exit nfcon_exit(void) { unregister_console(&nf_console); tty_unregister_driver(nfcon_tty_driver); put_tty_driver(nfcon_tty_driver); tty_port_destroy(&nfcon_tty_port); }

Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel2580.65%150.00%
Jiri Slaby619.35%150.00%
Total31100.00%2100.00%

module_init(nfcon_init); module_exit(nfcon_exit); MODULE_LICENSE("GPL");

Overall Contributors

PersonTokensPropCommitsCommitProp
Roman Zippel60392.34%125.00%
Jiri Slaby335.05%250.00%
Geert Uytterhoeven172.60%125.00%
Total653100.00%4100.00%
Directory: arch/m68k/emu
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.