Home | History | Annotate | Line # | Download | only in dev
ite_compat.c revision 1.4.16.1
      1  1.4.16.1  gehenna /*	$NetBSD: ite_compat.c,v 1.4.16.1 2002/05/19 07:41:30 gehenna Exp $	*/
      2       1.2   scottr 
      3       1.2   scottr /*
      4       1.2   scottr  * Copyright (C) 2000 Scott Reynolds
      5       1.2   scottr  * All rights reserved.
      6       1.2   scottr  *
      7       1.2   scottr  * Redistribution and use in source and binary forms, with or without
      8       1.2   scottr  * modification, are permitted provided that the following conditions
      9       1.2   scottr  * are met:
     10       1.2   scottr  * 1. Redistributions of source code must retain the above copyright
     11       1.2   scottr  *    notice, this list of conditions and the following disclaimer.
     12       1.2   scottr  * 2. Redistributions in binary form must reproduce the above copyright
     13       1.2   scottr  *    notice, this list of conditions and the following disclaimer in the
     14       1.2   scottr  *    documentation and/or other materials provided with the distribution.
     15       1.2   scottr  * 3. The name of the author may not be used to endorse or promote products
     16       1.2   scottr  *    derived from this software without specific prior written permission.
     17       1.2   scottr  *
     18       1.2   scottr  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19       1.2   scottr  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20       1.2   scottr  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21       1.2   scottr  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22       1.2   scottr  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23       1.2   scottr  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24       1.2   scottr  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25       1.2   scottr  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26       1.2   scottr  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27       1.2   scottr  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28       1.2   scottr  */
     29       1.2   scottr 
     30       1.2   scottr /*
     31       1.2   scottr  * The main thing to realize about this emulator is that the old console
     32       1.2   scottr  * emulator was largely compatible with the DEC VT-220.  Since the
     33       1.2   scottr  * wsdiplay driver has a more complete emulation of that terminal, it's
     34       1.2   scottr  * reasonable to pass virtually everything up to that driver without
     35       1.2   scottr  * modification.
     36       1.2   scottr  */
     37       1.2   scottr 
     38       1.2   scottr #include "ite.h"
     39       1.2   scottr #include "wsdisplay.h"
     40       1.2   scottr 
     41       1.2   scottr #include <sys/param.h>
     42       1.2   scottr #include <sys/systm.h>
     43       1.2   scottr #include <sys/conf.h>
     44       1.2   scottr #include <sys/device.h>
     45       1.2   scottr #include <sys/ioctl.h>
     46       1.3   scottr #include <sys/ttycom.h>
     47       1.2   scottr 
     48       1.2   scottr #include <dev/cons.h>
     49       1.2   scottr 
     50       1.2   scottr #include <machine/cpu.h>
     51       1.2   scottr #include <machine/iteioctl.h>
     52       1.2   scottr 
     53  1.4.16.1  gehenna dev_type_open(iteopen);
     54  1.4.16.1  gehenna dev_type_close(iteclose);
     55  1.4.16.1  gehenna dev_type_read(iteread);
     56  1.4.16.1  gehenna dev_type_write(itewrite);
     57  1.4.16.1  gehenna dev_type_ioctl(iteioctl);
     58  1.4.16.1  gehenna dev_type_tty(itetty);
     59  1.4.16.1  gehenna dev_type_poll(itepoll);
     60  1.4.16.1  gehenna 
     61  1.4.16.1  gehenna const struct cdevsw ite_cdevsw = {
     62  1.4.16.1  gehenna 	iteopen, iteclose, iteread, itewrite, iteioctl,
     63  1.4.16.1  gehenna 	nostop, itetty, itepoll, nommap, D_TTY
     64  1.4.16.1  gehenna };
     65  1.4.16.1  gehenna 
     66  1.4.16.1  gehenna #if NWSDISPLAY > 0
     67  1.4.16.1  gehenna extern const struct cdevsw wsdisplay_cdevsw;
     68  1.4.16.1  gehenna #endif
     69  1.4.16.1  gehenna 
     70       1.2   scottr void		iteattach __P((int));
     71       1.2   scottr 
     72       1.2   scottr static int	ite_initted = 0;
     73       1.2   scottr static int	ite_bell_freq = 1880;
     74       1.2   scottr static int	ite_bell_length = 10;
     75       1.2   scottr static int	ite_bell_volume = 100;
     76       1.2   scottr 
     77       1.2   scottr 
     78       1.2   scottr /*ARGSUSED*/
     79       1.2   scottr void
     80       1.2   scottr iteattach(n)
     81       1.2   scottr 	int n;
     82       1.2   scottr {
     83       1.2   scottr #if NWSDISPLAY > 0
     84       1.2   scottr 	int maj;
     85       1.2   scottr 
     86  1.4.16.1  gehenna 	maj = cdevsw_lookup_major(&wsdisplay_cdevsw);
     87  1.4.16.1  gehenna 	KASSERT(maj != -1);
     88       1.2   scottr 
     89       1.2   scottr 	if (maj != major(cn_tab->cn_dev))
     90       1.2   scottr 		return;
     91       1.2   scottr 
     92       1.2   scottr 	ite_initted = 1;
     93       1.2   scottr #endif
     94       1.2   scottr }
     95       1.2   scottr 
     96       1.2   scottr /*
     97       1.2   scottr  * Tty handling functions
     98       1.2   scottr  */
     99       1.2   scottr 
    100       1.2   scottr /*ARGSUSED*/
    101       1.2   scottr int
    102       1.2   scottr iteopen(dev, mode, devtype, p)
    103       1.2   scottr 	dev_t dev;
    104       1.2   scottr 	int mode;
    105       1.2   scottr 	int devtype;
    106       1.2   scottr 	struct proc *p;
    107       1.2   scottr {
    108       1.3   scottr 	return ite_initted ? (0) : (ENXIO);
    109       1.2   scottr }
    110       1.2   scottr 
    111       1.2   scottr /*ARGSUSED*/
    112       1.2   scottr int
    113       1.2   scottr iteclose(dev, flag, mode, p)
    114       1.2   scottr 	dev_t dev;
    115       1.2   scottr 	int flag;
    116       1.2   scottr 	int mode;
    117       1.2   scottr 	struct proc *p;
    118       1.2   scottr {
    119       1.3   scottr 	return ite_initted ? (0) : (ENXIO);
    120       1.2   scottr }
    121       1.2   scottr 
    122       1.2   scottr /*ARGSUSED*/
    123       1.2   scottr int
    124       1.2   scottr iteread(dev, uio, flag)
    125       1.2   scottr 	dev_t dev;
    126       1.2   scottr 	struct uio *uio;
    127       1.2   scottr 	int flag;
    128       1.2   scottr {
    129       1.2   scottr 	return ite_initted ?
    130  1.4.16.1  gehenna 	    (*wsdisplay_cdevsw.d_read)(cn_tab->cn_dev, uio, flag) : (ENXIO);
    131       1.2   scottr }
    132       1.2   scottr 
    133       1.2   scottr /*ARGSUSED*/
    134       1.2   scottr int
    135       1.2   scottr itewrite(dev, uio, flag)
    136       1.2   scottr 	dev_t dev;
    137       1.2   scottr 	struct uio *uio;
    138       1.2   scottr 	int flag;
    139       1.2   scottr {
    140       1.2   scottr 	return ite_initted ?
    141  1.4.16.1  gehenna 	    (*wsdisplay_cdevsw.d_write)(cn_tab->cn_dev, uio, flag) : (ENXIO);
    142       1.2   scottr }
    143       1.2   scottr 
    144       1.2   scottr /*ARGSUSED*/
    145       1.2   scottr struct tty *
    146       1.2   scottr itetty(dev)
    147       1.2   scottr 	dev_t dev;
    148       1.2   scottr {
    149  1.4.16.1  gehenna 	return ite_initted ? (*wsdisplay_cdevsw.d_tty)(cn_tab->cn_dev) : (NULL);
    150       1.2   scottr }
    151       1.2   scottr 
    152       1.2   scottr /*ARGSUSED*/
    153       1.2   scottr int
    154       1.2   scottr iteioctl(dev, cmd, addr, flag, p)
    155       1.2   scottr 	dev_t dev;
    156       1.2   scottr 	u_long cmd;
    157       1.2   scottr 	caddr_t addr;
    158       1.2   scottr 	int flag;
    159       1.2   scottr 	struct proc *p;
    160       1.2   scottr {
    161       1.2   scottr 	if (!ite_initted)
    162       1.2   scottr 		return (ENXIO);
    163       1.2   scottr 
    164       1.2   scottr 	switch (cmd) {
    165       1.2   scottr 	case ITEIOC_RINGBELL:
    166       1.2   scottr 		return mac68k_ring_bell(ite_bell_freq,
    167       1.2   scottr 		    ite_bell_length, ite_bell_volume);
    168       1.2   scottr 	case ITEIOC_SETBELL:
    169       1.2   scottr 		{
    170       1.2   scottr 			struct bellparams *bp = (void *)addr;
    171       1.2   scottr 
    172       1.2   scottr 			/* Do some sanity checks. */
    173       1.2   scottr 			if (bp->freq < 10 || bp->freq > 40000)
    174       1.2   scottr 				return (EINVAL);
    175       1.2   scottr 			if (bp->len < 0 || bp->len > 3600)
    176       1.2   scottr 				return (EINVAL);
    177       1.2   scottr 			if (bp->vol < 0 || bp->vol > 100)
    178       1.2   scottr 				return (EINVAL);
    179       1.2   scottr 
    180       1.2   scottr 			ite_bell_freq = bp->freq;
    181       1.2   scottr 			ite_bell_length = bp->len;
    182       1.2   scottr 			ite_bell_volume = bp->vol;
    183       1.2   scottr 			return (0);
    184       1.2   scottr 		}
    185       1.2   scottr 	case ITEIOC_GETBELL:
    186       1.2   scottr 		{
    187       1.2   scottr 			struct bellparams *bp = (void *)addr;
    188       1.2   scottr 
    189       1.2   scottr 			ite_bell_freq = bp->freq;
    190       1.2   scottr 			ite_bell_length = bp->len;
    191       1.2   scottr 			ite_bell_volume = bp->vol;
    192       1.2   scottr 			return (0);
    193       1.2   scottr 		}
    194       1.2   scottr 	default:
    195  1.4.16.1  gehenna 		return ((*wsdisplay_cdevsw.d_ioctl)(cn_tab->cn_dev, cmd,
    196  1.4.16.1  gehenna 						    addr, flag, p));
    197       1.2   scottr 	}
    198       1.2   scottr 
    199       1.2   scottr 	return (ENOTTY);
    200       1.4      scw }
    201       1.4      scw 
    202       1.4      scw /*ARGSUSED*/
    203       1.4      scw int
    204       1.4      scw itepoll(dev, events, p)
    205       1.4      scw 	dev_t dev;
    206       1.4      scw 	int events;
    207       1.4      scw 	struct proc *p;
    208       1.4      scw {
    209       1.4      scw 	return ite_initted ?
    210  1.4.16.1  gehenna 	    (*wsdisplay_cdevsw.d_poll)(cn_tab->cn_dev, events, p) : (ENXIO);
    211       1.2   scottr }
    212