xref: /freebsd/sys/dev/vt/vt_consolectl.c (revision fdafd315ad0d0f28a11b9fb4476a9ab059c62b92)
127cf7d04SAleksandr Rybalko /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
427cf7d04SAleksandr Rybalko  * Copyright (c) 2009 The FreeBSD Foundation
527cf7d04SAleksandr Rybalko  *
627cf7d04SAleksandr Rybalko  * This software was developed by Ed Schouten under sponsorship from the
727cf7d04SAleksandr Rybalko  * FreeBSD Foundation.
827cf7d04SAleksandr Rybalko  *
927cf7d04SAleksandr Rybalko  * Redistribution and use in source and binary forms, with or without
1027cf7d04SAleksandr Rybalko  * modification, are permitted provided that the following conditions
1127cf7d04SAleksandr Rybalko  * are met:
1227cf7d04SAleksandr Rybalko  * 1. Redistributions of source code must retain the above copyright
1327cf7d04SAleksandr Rybalko  *    notice, this list of conditions and the following disclaimer.
1427cf7d04SAleksandr Rybalko  * 2. Redistributions in binary form must reproduce the above copyright
1527cf7d04SAleksandr Rybalko  *    notice, this list of conditions and the following disclaimer in the
1627cf7d04SAleksandr Rybalko  *    documentation and/or other materials provided with the distribution.
1727cf7d04SAleksandr Rybalko  *
1827cf7d04SAleksandr Rybalko  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1927cf7d04SAleksandr Rybalko  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2027cf7d04SAleksandr Rybalko  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2127cf7d04SAleksandr Rybalko  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2227cf7d04SAleksandr Rybalko  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2327cf7d04SAleksandr Rybalko  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2427cf7d04SAleksandr Rybalko  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2527cf7d04SAleksandr Rybalko  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2627cf7d04SAleksandr Rybalko  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2727cf7d04SAleksandr Rybalko  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2827cf7d04SAleksandr Rybalko  * SUCH DAMAGE.
2927cf7d04SAleksandr Rybalko  */
3027cf7d04SAleksandr Rybalko 
3127cf7d04SAleksandr Rybalko #include <sys/param.h>
3227cf7d04SAleksandr Rybalko #include <sys/consio.h>
3327cf7d04SAleksandr Rybalko #include <sys/kernel.h>
3427cf7d04SAleksandr Rybalko #include <sys/systm.h>
3527cf7d04SAleksandr Rybalko 
3627cf7d04SAleksandr Rybalko #include <dev/vt/vt.h>
3727cf7d04SAleksandr Rybalko 
3827cf7d04SAleksandr Rybalko static d_ioctl_t	consolectl_ioctl;
3927cf7d04SAleksandr Rybalko 
4027cf7d04SAleksandr Rybalko static struct cdevsw consolectl_cdevsw = {
4127cf7d04SAleksandr Rybalko 	.d_version	= D_VERSION,
4227cf7d04SAleksandr Rybalko 	.d_ioctl	= consolectl_ioctl,
4327cf7d04SAleksandr Rybalko 	.d_name		= "consolectl",
4427cf7d04SAleksandr Rybalko };
4527cf7d04SAleksandr Rybalko 
4627cf7d04SAleksandr Rybalko static int
consolectl_ioctl(struct cdev * dev,u_long cmd,caddr_t data,int flag,struct thread * td)4727cf7d04SAleksandr Rybalko consolectl_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag,
4827cf7d04SAleksandr Rybalko     struct thread *td)
4927cf7d04SAleksandr Rybalko {
5027cf7d04SAleksandr Rybalko 
5127cf7d04SAleksandr Rybalko 	switch (cmd) {
5227cf7d04SAleksandr Rybalko 	case CONS_GETVERS:
5327cf7d04SAleksandr Rybalko 		*(int*)data = 0x200;
5427cf7d04SAleksandr Rybalko 		return 0;
5527cf7d04SAleksandr Rybalko 	case CONS_MOUSECTL: {
5627cf7d04SAleksandr Rybalko 		mouse_info_t *mi = (mouse_info_t*)data;
5727cf7d04SAleksandr Rybalko 
5827cf7d04SAleksandr Rybalko 		sysmouse_process_event(mi);
5927cf7d04SAleksandr Rybalko 		return (0);
6027cf7d04SAleksandr Rybalko 	}
6127cf7d04SAleksandr Rybalko 	default:
6216aa1f09SAleksandr Rybalko #ifdef VT_CONSOLECTL_DEBUG
6327cf7d04SAleksandr Rybalko 		printf("consolectl: unknown ioctl: %c:%lx\n",
6427cf7d04SAleksandr Rybalko 		    (char)IOCGROUP(cmd), IOCBASECMD(cmd));
6516aa1f09SAleksandr Rybalko #endif
6627cf7d04SAleksandr Rybalko 		return (ENOIOCTL);
6727cf7d04SAleksandr Rybalko 	}
6827cf7d04SAleksandr Rybalko }
6927cf7d04SAleksandr Rybalko 
7027cf7d04SAleksandr Rybalko static void
consolectl_drvinit(void * unused)7127cf7d04SAleksandr Rybalko consolectl_drvinit(void *unused)
7227cf7d04SAleksandr Rybalko {
7327cf7d04SAleksandr Rybalko 
7459644098SEd Maste 	if (!vty_enabled(VTY_VT))
75b229e472SAleksandr Rybalko 		return;
7627cf7d04SAleksandr Rybalko 	make_dev(&consolectl_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
7727cf7d04SAleksandr Rybalko 	    "consolectl");
7827cf7d04SAleksandr Rybalko }
7927cf7d04SAleksandr Rybalko 
8027cf7d04SAleksandr Rybalko SYSINIT(consolectl, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, consolectl_drvinit, NULL);
81