162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __CHAN_USER_H__
762306a36Sopenharmony_ci#define __CHAN_USER_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <init.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct chan_opts {
1262306a36Sopenharmony_ci	void (*const announce)(char *dev_name, int dev);
1362306a36Sopenharmony_ci	char *xterm_title;
1462306a36Sopenharmony_ci	int raw;
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistruct chan_ops {
1862306a36Sopenharmony_ci	char *type;
1962306a36Sopenharmony_ci	void *(*init)(char *, int, const struct chan_opts *);
2062306a36Sopenharmony_ci	int (*open)(int, int, int, void *, char **);
2162306a36Sopenharmony_ci	void (*close)(int, void *);
2262306a36Sopenharmony_ci	int (*read)(int, char *, void *);
2362306a36Sopenharmony_ci	int (*write)(int, const char *, int, void *);
2462306a36Sopenharmony_ci	int (*console_write)(int, const char *, int);
2562306a36Sopenharmony_ci	int (*window_size)(int, void *, unsigned short *, unsigned short *);
2662306a36Sopenharmony_ci	void (*free)(void *);
2762306a36Sopenharmony_ci	int winch;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciextern const struct chan_ops fd_ops, null_ops, port_ops, pts_ops, pty_ops,
3162306a36Sopenharmony_ci	tty_ops, xterm_ops;
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciextern void generic_close(int fd, void *unused);
3462306a36Sopenharmony_ciextern int generic_read(int fd, char *c_out, void *unused);
3562306a36Sopenharmony_ciextern int generic_write(int fd, const char *buf, int n, void *unused);
3662306a36Sopenharmony_ciextern int generic_console_write(int fd, const char *buf, int n);
3762306a36Sopenharmony_ciextern int generic_window_size(int fd, void *unused, unsigned short *rows_out,
3862306a36Sopenharmony_ci			       unsigned short *cols_out);
3962306a36Sopenharmony_ciextern void generic_free(void *data);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct tty_port;
4262306a36Sopenharmony_ciextern void register_winch(int fd,  struct tty_port *port);
4362306a36Sopenharmony_ciextern void register_winch_irq(int fd, int tty_fd, int pid,
4462306a36Sopenharmony_ci			       struct tty_port *port, unsigned long stack);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#define __channel_help(fn, prefix) \
4762306a36Sopenharmony_ci__uml_help(fn, prefix "[0-9]*=<channel description>\n" \
4862306a36Sopenharmony_ci"    Attach a console or serial line to a host channel.  See\n" \
4962306a36Sopenharmony_ci"    http://user-mode-linux.sourceforge.net/old/input.html for a complete\n" \
5062306a36Sopenharmony_ci"    description of this switch.\n\n" \
5162306a36Sopenharmony_ci);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#endif
54