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

spk_types.h (6192B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef SPEAKUP_TYPES_H
      3#define SPEAKUP_TYPES_H
      4
      5/* This file includes all of the typedefs and structs used in speakup. */
      6
      7#include <linux/types.h>
      8#include <linux/fs.h>
      9#include <linux/errno.h>
     10#include <linux/delay.h>
     11#include <linux/wait.h>		/* for wait_queue */
     12#include <linux/init.h>		/* for __init */
     13#include <linux/module.h>
     14#include <linux/vt_kern.h>
     15#include <linux/spinlock.h>
     16#include <linux/mutex.h>
     17#include <linux/io.h>		/* for inb_p, outb_p, inb, outb, etc... */
     18#include <linux/device.h>
     19
     20enum var_type_t {
     21	VAR_NUM = 0,
     22	VAR_TIME,
     23	VAR_STRING,
     24	VAR_PROC
     25};
     26
     27enum {
     28	E_DEFAULT = 0,
     29	E_SET,
     30	E_INC,
     31	E_DEC,
     32	E_NEW_DEFAULT,
     33};
     34
     35/*
     36 * Note: add new members at the end, speakupmap.h depends on the values of the
     37 * enum starting from SPELL_DELAY (see inc_dec_var)
     38 */
     39enum var_id_t {
     40	VERSION = 0, SYNTH, SILENT, SYNTH_DIRECT,
     41	KEYMAP, CHARS,
     42	PUNC_SOME, PUNC_MOST, PUNC_ALL,
     43	DELIM, REPEATS, EXNUMBER,
     44	DELAY, TRIGGER, JIFFY, FULL, /* all timers must be together */
     45	BLEEP_TIME, CURSOR_TIME, BELL_POS,
     46	SAY_CONTROL, SAY_WORD_CTL, NO_INTERRUPT, KEY_ECHO,
     47	SPELL_DELAY, PUNC_LEVEL, READING_PUNC,
     48	ATTRIB_BLEEP, BLEEPS,
     49	RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG,
     50	DIRECT, PAUSE,
     51	CAPS_START, CAPS_STOP, CHARTAB, INFLECTION, FLUSH,
     52	MAXVARS
     53};
     54
     55typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch,
     56		u_short key);
     57
     58#define COLOR_BUFFER_SIZE 160
     59
     60struct spk_highlight_color_track {
     61	/* Count of each background color */
     62	unsigned int bgcount[8];
     63	/* Buffer for characters drawn with each background color */
     64	u16 highbuf[8][COLOR_BUFFER_SIZE];
     65	/* Current index into highbuf */
     66	unsigned int highsize[8];
     67	/* Reading Position for each color */
     68	u_long rpos[8], rx[8], ry[8];
     69	/* Real Cursor Y Position */
     70	ulong cy;
     71};
     72
     73struct st_spk_t {
     74	u_long reading_x, cursor_x;
     75	u_long reading_y, cursor_y;
     76	u_long reading_pos, cursor_pos;
     77	u_long go_x, go_pos;
     78	u_long w_top, w_bottom, w_left, w_right;
     79	u_char w_start, w_enabled;
     80	u_char reading_attr, old_attr;
     81	char parked, shut_up;
     82	struct spk_highlight_color_track ht;
     83	int tty_stopped;
     84};
     85
     86/* now some defines to make these easier to use. */
     87#define spk_shut_up (speakup_console[vc->vc_num]->shut_up)
     88#define spk_killed (speakup_console[vc->vc_num]->shut_up & 0x40)
     89#define spk_x (speakup_console[vc->vc_num]->reading_x)
     90#define spk_cx (speakup_console[vc->vc_num]->cursor_x)
     91#define spk_y (speakup_console[vc->vc_num]->reading_y)
     92#define spk_cy (speakup_console[vc->vc_num]->cursor_y)
     93#define spk_pos (speakup_console[vc->vc_num]->reading_pos)
     94#define spk_cp (speakup_console[vc->vc_num]->cursor_pos)
     95#define goto_pos (speakup_console[vc->vc_num]->go_pos)
     96#define goto_x (speakup_console[vc->vc_num]->go_x)
     97#define win_top (speakup_console[vc->vc_num]->w_top)
     98#define win_bottom (speakup_console[vc->vc_num]->w_bottom)
     99#define win_left (speakup_console[vc->vc_num]->w_left)
    100#define win_right (speakup_console[vc->vc_num]->w_right)
    101#define win_start (speakup_console[vc->vc_num]->w_start)
    102#define win_enabled (speakup_console[vc->vc_num]->w_enabled)
    103#define spk_attr (speakup_console[vc->vc_num]->reading_attr)
    104#define spk_old_attr (speakup_console[vc->vc_num]->old_attr)
    105#define spk_parked (speakup_console[vc->vc_num]->parked)
    106
    107struct st_var_header {
    108	char *name;
    109	enum var_id_t var_id;
    110	enum var_type_t var_type;
    111	void *p_val; /* ptr to programs variable to store value */
    112	void *data;  /* ptr to the vars data */
    113};
    114
    115struct num_var_t {
    116	char *synth_fmt;
    117	int default_val;
    118	int low;
    119	int high;
    120	short offset, multiplier; /* for fiddling rates etc. */
    121	char *out_str;  /* if synth needs char representation of number */
    122	int value;	/* current value */
    123};
    124
    125struct punc_var_t {
    126	enum var_id_t var_id;
    127	short value;
    128};
    129
    130struct string_var_t {
    131	char *default_val;
    132};
    133
    134struct var_t {
    135	enum var_id_t var_id;
    136	union {
    137		struct num_var_t n;
    138		struct string_var_t s;
    139	} u;
    140};
    141
    142struct st_bits_data { /* punc, repeats, word delim bits */
    143	char *name;
    144	char *value;
    145	short mask;
    146};
    147
    148struct synth_indexing {
    149	char *command;
    150	unsigned char lowindex;
    151	unsigned char highindex;
    152	unsigned char currindex;
    153};
    154
    155struct spk_synth;
    156
    157struct spk_io_ops {
    158	int (*synth_out)(struct spk_synth *synth, const char ch);
    159	int (*synth_out_unicode)(struct spk_synth *synth, u16 ch);
    160	void (*send_xchar)(struct spk_synth *synth, char ch);
    161	void (*tiocmset)(struct spk_synth *synth, unsigned int set, unsigned int clear);
    162	unsigned char (*synth_in)(struct spk_synth *synth);
    163	unsigned char (*synth_in_nowait)(struct spk_synth *synth);
    164	void (*flush_buffer)(struct spk_synth *synth);
    165	int (*wait_for_xmitr)(struct spk_synth *synth);
    166};
    167
    168struct spk_synth {
    169	struct list_head node;
    170
    171	const char *name;
    172	const char *version;
    173	const char *long_name;
    174	const char *init;
    175	char procspeech;
    176	char clear;
    177	int delay;
    178	int trigger;
    179	int jiffies;
    180	int full;
    181	int flush_time;
    182	int ser;
    183	char *dev_name;
    184	short flags;
    185	short startup;
    186	const int checkval; /* for validating a proper synth module */
    187	struct var_t *vars;
    188	int *default_pitch;
    189	int *default_vol;
    190	struct spk_io_ops *io_ops;
    191	int (*probe)(struct spk_synth *synth);
    192	void (*release)(struct spk_synth *synth);
    193	const char *(*synth_immediate)(struct spk_synth *synth,
    194				       const char *buff);
    195	void (*catch_up)(struct spk_synth *synth);
    196	void (*flush)(struct spk_synth *synth);
    197	int (*is_alive)(struct spk_synth *synth);
    198	int (*synth_adjust)(struct st_var_header *var);
    199	void (*read_buff_add)(u_char c);
    200	unsigned char (*get_index)(struct spk_synth *synth);
    201	struct synth_indexing indexing;
    202	int alive;
    203	struct attribute_group attributes;
    204
    205	void *dev;
    206};
    207
    208/*
    209 * module_spk_synth() - Helper macro for registering a speakup driver
    210 * @__spk_synth: spk_synth struct
    211 * Helper macro for speakup drivers which do not do anything special in module
    212 * init/exit. This eliminates a lot of boilerplate. Each module may only
    213 * use this macro once, and calling it replaces module_init() and module_exit()
    214 */
    215#define module_spk_synth(__spk_synth) \
    216	module_driver(__spk_synth, synth_add, synth_remove)
    217
    218struct speakup_info_t {
    219	spinlock_t spinlock;
    220	int port_tts;
    221	int flushing;
    222};
    223
    224struct bleep {
    225	short freq;
    226	unsigned long jiffies;
    227	int active;
    228};
    229#endif