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

line.h (3083B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* 
      3 * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
      4 */
      5
      6#ifndef __LINE_H__
      7#define __LINE_H__
      8
      9#include <linux/list.h>
     10#include <linux/workqueue.h>
     11#include <linux/tty.h>
     12#include <linux/interrupt.h>
     13#include <linux/spinlock.h>
     14#include <linux/mutex.h>
     15#include "chan_user.h"
     16#include "mconsole_kern.h"
     17
     18/* There's only two modifiable fields in this - .mc.list and .driver */
     19struct line_driver {
     20	const char *name;
     21	const char *device_name;
     22	const short major;
     23	const short minor_start;
     24	const short type;
     25	const short subtype;
     26	const char *read_irq_name;
     27	const char *write_irq_name;
     28	struct mc_device mc;
     29	struct tty_driver *driver;
     30};
     31
     32struct line {
     33	struct tty_port port;
     34	int valid;
     35
     36	int read_irq, write_irq;
     37
     38	char *init_str;
     39	struct list_head chan_list;
     40	struct chan *chan_in, *chan_out;
     41
     42	/*This lock is actually, mostly, local to*/
     43	spinlock_t lock;
     44	int throttled;
     45	/* Yes, this is a real circular buffer.
     46	 * XXX: And this should become a struct kfifo!
     47	 *
     48	 * buffer points to a buffer allocated on demand, of length
     49	 * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/
     50	char *buffer;
     51	char *head;
     52	char *tail;
     53
     54	int sigio;
     55	struct delayed_work task;
     56	const struct line_driver *driver;
     57};
     58
     59extern void line_close(struct tty_struct *tty, struct file * filp);
     60extern int line_open(struct tty_struct *tty, struct file *filp);
     61extern int line_install(struct tty_driver *driver, struct tty_struct *tty,
     62	struct line *line);
     63extern void line_cleanup(struct tty_struct *tty);
     64extern void line_hangup(struct tty_struct *tty);
     65extern int line_setup(char **conf, unsigned nlines, char **def,
     66		      char *init, char *name);
     67extern int line_write(struct tty_struct *tty, const unsigned char *buf,
     68		      int len);
     69extern unsigned int line_chars_in_buffer(struct tty_struct *tty);
     70extern void line_flush_buffer(struct tty_struct *tty);
     71extern void line_flush_chars(struct tty_struct *tty);
     72extern unsigned int line_write_room(struct tty_struct *tty);
     73extern void line_throttle(struct tty_struct *tty);
     74extern void line_unthrottle(struct tty_struct *tty);
     75
     76extern char *add_xterm_umid(char *base);
     77extern int line_setup_irq(int fd, int input, int output, struct line *line,
     78			  void *data);
     79extern void line_close_chan(struct line *line);
     80extern int register_lines(struct line_driver *line_driver,
     81			  const struct tty_operations *driver,
     82			  struct line *lines, int nlines);
     83extern int setup_one_line(struct line *lines, int n, char *init,
     84			  const struct chan_opts *opts, char **error_out);
     85extern void close_lines(struct line *lines, int nlines);
     86
     87extern int line_config(struct line *lines, unsigned int sizeof_lines,
     88		       char *str, const struct chan_opts *opts,
     89		       char **error_out);
     90extern int line_id(char **str, int *start_out, int *end_out);
     91extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n,
     92		       char **error_out);
     93extern int line_get_config(char *dev, struct line *lines,
     94			   unsigned int sizeof_lines, char *str,
     95			   int size, char **error_out);
     96
     97#endif