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.
This commit is contained in:
Serge Vakulenko
2015-10-08 11:34:20 -07:00
parent 61cc452f1b
commit 793e6052bd
5 changed files with 50 additions and 36 deletions

View File

@@ -108,7 +108,6 @@ main()
startup();
printf ("\n%s", version);
kconfig();
cnidentify();
/*
* Set up system process 0 (swapper).

View File

@@ -14,49 +14,48 @@
#include <machine/uart.h>
#include <machine/usb_uart.h>
dev_t console_device = -1;
struct tty cnttys [1];
void cninit()
int cnopen(dev_t cn, int flag, int mode)
{
console_device = makedev(CONS_MAJOR, CONS_MINOR);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_open(dev, flag, mode);
}
void cnidentify()
int cnclose (dev_t cn, int flag, int mode)
{
//printf ("console: %s (%d,%d)\n", cdevname(console_device),
// CONS_MAJOR, CONS_MINOR);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_close(dev, flag, mode);
}
int cnopen(dev_t dev, int flag, int mode)
int cnread(dev_t cn, struct uio *uio, int flag)
{
return cdevsw[CONS_MAJOR].d_open(console_device, flag, mode);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_read(dev, uio, flag);
}
int cnclose (dev_t dev, int flag, int mode)
int cnwrite(dev_t cn, struct uio *uio, int flag)
{
return cdevsw[CONS_MAJOR].d_close(console_device, flag, mode);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_write(dev, uio, flag);
}
int cnread(dev_t dev,register struct uio *uio, int flag)
int cnselect(dev_t cn, int rw)
{
return cdevsw[CONS_MAJOR].d_read(console_device, uio, flag);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_select(dev, rw);
}
int cnwrite(dev_t dev,register struct uio *uio, int flag)
int cnioctl(dev_t cn, u_int cmd, caddr_t addr, int flag)
{
return cdevsw[CONS_MAJOR].d_write(console_device, uio, flag);
}
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);
int cnselect(dev_t dev, int rw)
{
return cdevsw[CONS_MAJOR].d_select(console_device, rw);
}
int cnioctl(dev_t dev, register u_int cmd, caddr_t addr, int flag)
{
return cdevsw[CONS_MAJOR].d_ioctl(console_device, cmd, addr, flag);
return cdevsw[CONS_MAJOR].d_ioctl(dev, cmd, addr, flag);
}
/*
@@ -65,7 +64,9 @@ int cnioctl(dev_t dev, register u_int cmd, caddr_t addr, int flag)
void cnputc(char c)
{
if (cdevsw[CONS_MAJOR].r_write) {
cdevsw[CONS_MAJOR].r_write(console_device, c);
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]);
@@ -78,10 +79,12 @@ void cnputc(char c)
/*
* Receive a symbol from console terminal.
*/
int cngetc ()
int cngetc()
{
if (cdevsw[CONS_MAJOR].r_read) {
return cdevsw[CONS_MAJOR].r_read(console_device);
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);
}

View File

@@ -19,7 +19,9 @@
#define CPU_TIMO_WAIT_WDONE 10
#define CPU_TIMO_WAIT_WSTOP 11
#define CPU_TIMO_WAIT_WIDLE 12
#define CPU_MAXID 13 /* number of valid machdep ids */
#define CPU_FREQ_KHZ 13 /* processor clock in kHz */
#define CPU_BUS_KHZ 14 /* i/o bus clock in kHz */
#define CPU_MAXID 15 /* number of valid machdep ids */
#ifndef KERNEL
#define CTL_MACHDEP_NAMES { \
@@ -36,5 +38,7 @@
{ "sd_timeout_wait_wdone", CTLTYPE_INT }, \
{ "sd_timeout_wait_wstop", CTLTYPE_INT }, \
{ "sd_timeout_wait_widle", CTLTYPE_INT }, \
{ "cpu_khz", CTLTYPE_INT }, \
{ "bus_khz", CTLTYPE_INT }, \
}
#endif

View File

@@ -404,10 +404,6 @@ startup()
#if CONS_MAJOR == UARTUSB_MAJOR
usbinit();
#endif
#if CONS_MAJOR == HXTFT_MAJOR
hx8357_init();
#endif
cninit();
/* Get total RAM size. */
physmem = BMXDRMSZ;

View File

@@ -290,14 +290,15 @@ cpu_sysctl (name, namelen, oldp, oldlenp, newp, newlen)
void *newp;
size_t newlen;
{
int i;
int i, khz;
dev_t dev;
switch (name[0]) {
case CPU_CONSDEV:
if (namelen != 1)
return ENOTDIR;
return sysctl_rdstruct (oldp, oldlenp, newp,
&cnttys[0].t_dev, sizeof &cnttys[0].t_dev);
dev = makedev(CONS_MAJOR, CONS_MINOR);
return sysctl_rdstruct (oldp, oldlenp, newp, &dev, sizeof dev);
#if NTMSCP > 0
case CPU_TMSCP:
/* All sysctl names at this level are terminal */
@@ -356,6 +357,17 @@ cpu_sysctl (name, namelen, oldp, oldlenp, newp, newlen)
case CPU_TIMO_WAIT_WIDLE:
return sysctl_int(oldp, oldlenp, newp, newlen, &sd_timo_wait_widle);
case CPU_FREQ_KHZ:
if (namelen != 1)
return ENOTDIR;
khz = CPU_KHZ;
return sysctl_rdstruct (oldp, oldlenp, newp, &khz, sizeof khz);
case CPU_BUS_KHZ:
if (namelen != 1)
return ENOTDIR;
khz = BUS_KHZ;
return sysctl_rdstruct (oldp, oldlenp, newp, &khz, sizeof khz);
default:
return EOPNOTSUPP;
}