#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/ioctl.h>
#include <sys/tty.h>
#include <sys/proc.h>
#include <sys/uio.h>
struct tty cons;
struct tty *constty;
int cnopen(__unused dev_t dev, int flag, int devtype, struct proc *pp);
int cnclose(__unused dev_t dev, int flag, int mode, struct proc *pp);
int cnread(__unused dev_t dev, struct uio *uio, int ioflag);
int cnwrite(__unused dev_t dev, struct uio *uio, int ioflag);
int cnioctl(__unused dev_t dev, int cmd, caddr_t addr, int flg, struct proc *p);
int cnselect(__unused dev_t dev, int flag, void * wql, struct proc *p);
void slave_cnenable(void);
int alert(
__unused int width,
__unused int height,
__unused const char *title,
const char *msg,
int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8);
int alert_done(void);
int
cnopen(__unused dev_t dev, int flag, int devtype, struct proc *pp)
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
error = (*cdevsw[major(device)].d_open)(device, flag, devtype, pp);
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
int
cnclose(__unused dev_t dev, int flag, int mode, struct proc *pp)
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
error = (*cdevsw[major(device)].d_close)(device, flag, mode, pp);
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
int
cnread(__unused dev_t dev, struct uio *uio, int ioflag)
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
error = (*cdevsw[major(device)].d_read)(device, uio, ioflag);
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
int
cnwrite(__unused dev_t dev, struct uio *uio, int ioflag)
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
error = (*cdevsw[major(device)].d_write)(device, uio, ioflag);
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
int
cnioctl(__unused dev_t dev, int cmd, caddr_t addr, int flag, struct proc *p)
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
if ((unsigned) cmd == TIOCCONS && constty) {
error = proc_suser(p);
if (error) {
goto out;
}
constty = NULL;
error = 0;
goto out;
}
error = (*cdevsw[major(device)].d_ioctl)(device, cmd, addr, flag, p);
out:
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
int
cnselect(__unused dev_t dev, int flag, void * wql, struct proc *p)
{
dev_t device;
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
return ((*cdevsw[major(device)].d_select)(device, flag, wql, p));
}
#if 0
int
cngetc()
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
error = (*cdevsw[major(device)].d_getc)(device);
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
int
cnputc(c)
char c;
{
dev_t device;
boolean_t funnel_state;
int error;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
if (constty)
device = constty->t_dev;
else
device = cons.t_dev;
error = (*cdevsw[major(device)].d_putc)(device, c);
thread_funnel_set(kernel_flock, funnel_state);
return(error);
}
#endif
void
slave_cnenable(void)
{
}
#if 0
void
kprintf( const char *format, ...)
{
}
#endif
int
alert(
__unused int width,
__unused int height,
__unused const char *title,
const char *msg,
int p1,
int p2,
int p3,
int p4,
int p5,
int p6,
int p7,
int p8)
{
char smsg[200];
sprintf(smsg, msg, p1, p2, p3, p4, p5, p6, p7, p8);
#if FIXME
#else
printf("%s\n",smsg);
#endif
return 0;
}
int
alert_done(void)
{
return 0;
}