Files
retrobsd/sys/pic32/cons.c
Serge Vakulenko 793e6052bd Add sysctl parameters to query the CPU and i/o bus frequency:
machdep.cpu_khz and machdep.bus_khz.
Fix bug in machdep.console_device parameter.
2015-10-08 11:34:20 -07:00

92 lines
2.1 KiB
C

/*
* UART driver for PIC32.
*
* Copyright (c) 1986 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
#include <sys/param.h>
#include <sys/conf.h>
#include <sys/user.h>
#include <sys/ioctl.h>
#include <sys/tty.h>
#include <sys/systm.h>
#include <machine/uart.h>
#include <machine/usb_uart.h>
struct tty cnttys [1];
int cnopen(dev_t cn, int flag, int mode)
{
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_open(dev, flag, mode);
}
int cnclose (dev_t cn, int flag, int mode)
{
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_close(dev, flag, mode);
}
int cnread(dev_t cn, struct uio *uio, int flag)
{
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_read(dev, uio, flag);
}
int cnwrite(dev_t cn, struct uio *uio, int flag)
{
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_write(dev, uio, flag);
}
int cnselect(dev_t cn, int rw)
{
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_select(dev, rw);
}
int cnioctl(dev_t cn, u_int cmd, caddr_t addr, int flag)
{
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_ioctl(dev, cmd, addr, flag);
}
/*
* Put a symbol on console terminal.
*/
void cnputc(char c)
{
if (cdevsw[CONS_MAJOR].r_write) {
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
cdevsw[CONS_MAJOR].r_write(dev, c);
} else {
putc(c, &cdevsw[CONS_MAJOR].d_ttys[CONS_MINOR].t_outq);
ttstart(&cdevsw[CONS_MAJOR].d_ttys[CONS_MINOR]);
ttyflush(&cdevsw[CONS_MAJOR].d_ttys[CONS_MINOR],0);
}
if(c=='\n')
cnputc('\r');
}
/*
* Receive a symbol from console terminal.
*/
int cngetc()
{
if (cdevsw[CONS_MAJOR].r_read) {
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].r_read(dev);
} else {
return getc(&cdevsw[CONS_MAJOR].d_ttys[CONS_MINOR].t_rawq);
}
}