Blame include/ntapi/nt_tty.h

dd89bb
#ifndef _NT_TTY_H_
dd89bb
#define _NT_TTY_H_
dd89bb
dd89bb
/**
dd89bb
 *  tty api:
dd89bb
 *  -----------
dd89bb
 *  this header describes the tty interfaces that are used
dd89bb
 *  by native applications and libraries to communicate with
dd89bb
 *  ntctty, the project's native subsystem and pty server.
dd89bb
**/
dd89bb
dd89bb
#include <psxtypes/psxtypes.h>
dd89bb
#include "nt_object.h"
dd89bb
#include "nt_port.h"
dd89bb
#include "nt_termios.h"
dd89bb
dd89bb
typedef enum _nt_tty_opcode {
dd89bb
	NT_TTY_CLIENT_OPCODE_BASE	= 0x40000,
dd89bb
	/* primary connection */
dd89bb
	NT_TTY_CLIENT_SESSION_CONNECT	= NT_TTY_CLIENT_OPCODE_BASE,
dd89bb
	NT_TTY_CLIENT_SESSION_DISCONNECT,
dd89bb
	NT_TTY_CLIENT_SESSION_QUERY,
dd89bb
	NT_TTY_CLIENT_SESSION_SET,
dd89bb
	/* process registration */
dd89bb
	NT_TTY_CLIENT_PROCESS_REGISTER,
dd89bb
	NT_TTY_CLIENT_PROCESS_UNREGISTER,
dd89bb
	/* session information */
dd89bb
	NT_TTY_QUERY_INFORMATION_SERVER,
dd89bb
	NT_TTY_QUERY_INFORMATION_SESSION,
dd89bb
	NT_TTY_QUERY_INFORMATION_PROCESS,
dd89bb
	NT_TTY_QUERY_INFORMATION_THREAD,
dd89bb
	NT_TTY_QUERY_INFORMATION_SECTION,
dd89bb
	NT_TTY_QUERY_INFORMATION_PTY,
dd89bb
	/* peer daemon calls */
dd89bb
	NT_TTY_REQUEST_PEER,
dd89bb
	NT_TTY_SIGNAL_PEER,
dd89bb
	/* pty */
dd89bb
	NT_TTY_PTY_OPEN,
dd89bb
	NT_TTY_PTY_CLOSE,
dd89bb
	NT_TTY_PTY_READ,
dd89bb
	NT_TTY_PTY_WRITE,
dd89bb
	NT_TTY_PTY_QUERY,
dd89bb
	NT_TTY_PTY_SET,
dd89bb
	NT_TTY_PTY_FCNTL,
dd89bb
	NT_TTY_PTY_IOCTL,
dd89bb
	NT_TTY_PTY_CANCEL,
dd89bb
	NT_TTY_PTY_PEEK,
dd89bb
	/* virtual mount system */
dd89bb
	NT_TTY_VMS_QUERY,
dd89bb
	NT_TTY_VMS_REQUEST,
dd89bb
	/* exclusive upper limit */
dd89bb
	NT_TTY_CLIENT_OPCODE_CAP
dd89bb
} nt_tty_opcode;
dd89bb
dd89bb
dd89bb
typedef enum _nt_tty_session_type {
dd89bb
	NT_TTY_SESSION_PRIMARY,
dd89bb
	NT_TTY_SESSION_PRIVATE
dd89bb
} nt_tty_session_type;
dd89bb
dd89bb
dd89bb
typedef enum _nt_tty_info_class {
dd89bb
	NT_TTY_SESSION_INFORMATION,
dd89bb
	NT_TTY_INFORMATION_CAP
dd89bb
} nt_tty_info_class;
dd89bb
dd89bb
dd89bb
typedef enum _nt_pty_info_class {
dd89bb
	NT_PTY_BASIC_INFORMATION,
dd89bb
	NT_PTY_CLIENT_INFORMATION,
dd89bb
	NT_PTY_INFORMATION_CAP
dd89bb
} nt_pty_info_class;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_msg_info {
dd89bb
	uintptr_t	msg_id;
dd89bb
	uint32_t	opcode;
dd89bb
	int32_t		status;
dd89bb
	void *		reserved;
dd89bb
} nt_tty_msg_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_register_info {
dd89bb
	uintptr_t	process_id;
dd89bb
	uintptr_t	thread_id;
dd89bb
	uintptr_t	flags;
dd89bb
	uintptr_t	reserved;
dd89bb
} nt_tty_register_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_server_info {
dd89bb
	nt_port_attr	attr;
dd89bb
	intptr_t	pid;
dd89bb
	intptr_t	tid;
dd89bb
} nt_tty_server_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_vms_info {
dd89bb
	void *		hroot;
dd89bb
	uint32_t	hash;
dd89bb
	uint32_t	flags;
dd89bb
	int64_t		key;
dd89bb
	nt_guid		vms_guid;
dd89bb
	nt_port_keys	vms_keys;
dd89bb
} nt_tty_vms_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_peer_info {
dd89bb
	uint32_t	opcode;
dd89bb
	uint32_t	flags;
dd89bb
	nt_guid		service;
dd89bb
	nt_port_attr	peer;
dd89bb
} nt_tty_peer_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_sigctl_info {
dd89bb
	void *			hpty;
dd89bb
	nt_guid			guid;
dd89bb
	nt_luid			luid;
dd89bb
	uint32_t		ctlcode;
dd89bb
	int32_t			cccode;
dd89bb
	nt_client_id		cid;
dd89bb
	uintptr_t		ctxarg[4];
dd89bb
	struct tty_termios	terminfo;
dd89bb
	struct tty_winsize	winsize;
dd89bb
	nt_iosb			iosb;
dd89bb
} nt_tty_sigctl_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_fd_info {
dd89bb
	void *		hpty;
dd89bb
	void *		section;
dd89bb
	void *		section_addr;
dd89bb
	size_t		section_size;
dd89bb
	nt_guid		guid;
dd89bb
	nt_luid		luid;
dd89bb
	uint32_t	access;
dd89bb
	uint32_t	flags;
dd89bb
	uint32_t	share;
dd89bb
	uint32_t	options;
dd89bb
	intptr_t	state;
dd89bb
	void *		hevent[2];
dd89bb
} nt_pty_fd_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_io_info {
dd89bb
	void *		hpty;
dd89bb
	void *		hevent;
dd89bb
	void *		reserved;
dd89bb
	void *		apc_routine;
dd89bb
	void *		apc_context;
dd89bb
	nt_iosb *	riosb;
dd89bb
	void *		raddr;
dd89bb
	nt_iosb		iosb;
dd89bb
	off_t		offset;
dd89bb
	size_t		nbytes;
dd89bb
	uint32_t	key;
dd89bb
	uint32_t	npending;
dd89bb
	nt_guid		guid;
dd89bb
	nt_luid		luid;
dd89bb
} nt_pty_io_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_client_info {
dd89bb
	uintptr_t	any[4];
dd89bb
} nt_pty_client_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_session_info {
dd89bb
	int32_t		pid;
dd89bb
	int32_t		pgid;
dd89bb
	int32_t		sid;
dd89bb
	int32_t		reserved;
dd89bb
} nt_tty_session_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_register_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_register_info	reginfo;
dd89bb
	} data;
dd89bb
} nt_tty_register_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_server_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_server_info	srvinfo;
dd89bb
	} data;
dd89bb
} nt_tty_server_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_vms_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_vms_info		vmsinfo;
dd89bb
	} data;
dd89bb
} nt_tty_vms_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_peer_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_peer_info	peerinfo;
dd89bb
	} data;
dd89bb
} nt_tty_peer_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_fd_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_pty_fd_info		fdinfo;
dd89bb
	} data;
dd89bb
} nt_pty_fd_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_io_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_pty_io_info		ioinfo;
dd89bb
	} data;
dd89bb
} nt_pty_io_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_sigctl_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_sigctl_info	ctlinfo;
dd89bb
	} data;
dd89bb
} nt_pty_sigctl_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_session_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_session_info	sessioninfo;
dd89bb
	} data;
dd89bb
} nt_tty_session_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_port_msg {
dd89bb
	nt_port_message			header;
dd89bb
	nt_tty_msg_info			ttyinfo;
dd89bb
	union {
dd89bb
		nt_tty_register_info	reginfo;
dd89bb
		nt_tty_vms_info		vmsinfo;
dd89bb
		nt_tty_peer_info	peerinfo;
dd89bb
		nt_tty_sigctl_info	ctlinfo;
dd89bb
		nt_pty_fd_info		fdinfo;
dd89bb
		nt_pty_io_info		ioinfo;
dd89bb
		nt_pty_client_info	clientinfo;
dd89bb
		nt_tty_session_info	sessioninfo;
dd89bb
	};
dd89bb
} nt_tty_port_msg;
dd89bb
dd89bb
dd89bb
__assert_aligned_size(nt_tty_msg_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_register_info,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_vms_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_peer_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_sigctl_info,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_fd_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_io_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_register_msg,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_vms_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_peer_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_sigctl_msg,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_fd_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_io_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_port_msg,		__SIZEOF_POINTER__);
dd89bb
dd89bb
dd89bb
/* tty session */
dd89bb
typedef int32_t __stdcall	ntapi_tty_create_session(
dd89bb
	__out	void **			hport,
dd89bb
	__out	nt_port_name *		port_name,
dd89bb
	__in	nt_tty_session_type	type,
dd89bb
	__in	const nt_guid *		guid		__optional,
dd89bb
	__in	wchar16_t *		image_name	__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_join_session(
dd89bb
	__out	void **			hport,
dd89bb
	__out	nt_port_name *		port_name,
dd89bb
	__in	nt_port_attr *		port_attr,
dd89bb
	__in	nt_tty_session_type	type);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_connect(
dd89bb
	__out	void **			hport,
dd89bb
	__in	wchar16_t *		tty_port_name,
dd89bb
	__in	int32_t			impersonation_level);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_client_session_query(
dd89bb
	__in	void *			hport,
dd89bb
	__out	nt_tty_session_info *	sessioninfo);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_client_session_set(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_tty_session_info *	sessioninfo);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_client_process_register(
dd89bb
	__in	void *			hport,
dd89bb
	__in	uintptr_t		process_id,
dd89bb
	__in	uintptr_t		thread_id,
dd89bb
	__in	uintptr_t		flags,
dd89bb
	__in	nt_large_integer *	reserved);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_tty_query_information_server(
dd89bb
	__in	void *			hport,
dd89bb
	__out	nt_tty_server_info *	srvinfo);
dd89bb
dd89bb
dd89bb
/* pty api */
dd89bb
typedef struct nt_pty_context nt_pty;
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_open(
dd89bb
	__in	void *			hport,
dd89bb
	__out	nt_pty **		pty,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	nt_object_attributes*	obj_attr,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	uint32_t		share_access,
dd89bb
	__in	uint32_t		open_options);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_reopen(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_pty *		pty);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_pty_close(
dd89bb
	__in	nt_pty *		pty);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_read(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in	void *			hevent		__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine	__optional,
dd89bb
	__in	void *			apc_context	__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__out	void *			buffer,
dd89bb
	__in	uint32_t		nbytes,
dd89bb
	__in	nt_large_integer *	offset		__optional,
dd89bb
	__in	uint32_t *		key		__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_pty_write(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in 	void *			hevent		__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine	__optional,
dd89bb
	__in	void * 			apc_context	__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	void * 			buffer,
dd89bb
	__in	uint32_t		nbytes,
dd89bb
	__in	nt_large_integer *	offset		__optional,
dd89bb
	__in	uint32_t *		key		__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_fcntl(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in	void *			hevent			__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine		__optional,
dd89bb
	__in	void *			apc_context		__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	uint32_t		fs_control_code,
dd89bb
	__in	void *			input_buffer		__optional,
dd89bb
	__in	uint32_t		input_buffer_length,
dd89bb
	__out	void *			output_buffer		__optional,
dd89bb
	__in	uint32_t		output_buffer_length);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_ioctl(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in	void *			hevent			__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine		__optional,
dd89bb
	__in	void *			apc_context		__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	uint32_t		io_control_code,
dd89bb
	__in	void *			input_buffer		__optional,
dd89bb
	__in	uint32_t		input_buffer_length,
dd89bb
	__out	void *			output_buffer		__optional,
dd89bb
	__in	uint32_t		output_buffer_length);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_query(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__out	nt_io_status_block *	iosb,
dd89bb
	__out	void *			pty_info,
dd89bb
	__in	uint32_t		pty_info_length,
dd89bb
	__in	nt_pty_info_class	pty_info_class);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_set(
dd89bb
	__in	nt_pty *		hfile,
dd89bb
	__out	nt_io_status_block *	iosb,
dd89bb
	__in	void *			pty_info,
dd89bb
	__in	uint32_t		pty_info_length,
dd89bb
	__in	nt_pty_info_class	pty_info_class);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_cancel(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__out	nt_iosb *		iosb);
dd89bb
dd89bb
dd89bb
/* peer daemon calls */
dd89bb
typedef int32_t __stdcall ntapi_tty_request_peer(
dd89bb
	__in	void *		hport,
dd89bb
	__in	int32_t		opcode,
dd89bb
	__in	uint32_t	flags,
dd89bb
	__in	const nt_guid *	service,
dd89bb
	__in	nt_port_attr *	peer);
dd89bb
dd89bb
dd89bb
/* virtual mount system */
dd89bb
typedef int32_t __stdcall	ntapi_tty_vms_query(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_tty_vms_info *	vmsinfo);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_vms_request(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_tty_vms_info *	vmsinfo);
dd89bb
dd89bb
#endif