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