Skip to content

Commit

Permalink
Add sysctl parameters to query the CPU and i/o bus frequency:
Browse files Browse the repository at this point in the history
machdep.cpu_khz and machdep.bus_khz.
Fix bug in machdep.console_device parameter.
  • Loading branch information
sergev committed Oct 8, 2015
1 parent 61cc452 commit 793e605
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 35 deletions.
1 change: 0 additions & 1 deletion sys/kernel/init_main.c
Expand Up @@ -108,7 +108,6 @@ main()
startup();
printf ("\n%s", version);
kconfig();
cnidentify();

/*
* Set up system process 0 (swapper).
Expand Down
55 changes: 29 additions & 26 deletions sys/pic32/cons.c
Expand Up @@ -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);

void cnidentify()
{
//printf ("console: %s (%d,%d)\n", cdevname(console_device),
// CONS_MAJOR, CONS_MINOR);
return cdevsw[CONS_MAJOR].d_open(dev, flag, mode);
}

int cnopen(dev_t dev, int flag, int mode)
int cnclose (dev_t cn, int flag, int mode)
{
return cdevsw[CONS_MAJOR].d_open(console_device, flag, mode);
}
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);

int cnclose (dev_t dev, int flag, int mode)
{
return cdevsw[CONS_MAJOR].d_close(console_device, flag, mode);
return cdevsw[CONS_MAJOR].d_close(dev, flag, mode);
}

int cnread(dev_t dev,register struct uio *uio, int flag)
int cnread(dev_t cn, struct uio *uio, int flag)
{
return cdevsw[CONS_MAJOR].d_read(console_device, uio, flag);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);

return cdevsw[CONS_MAJOR].d_read(dev, uio, flag);
}

int cnwrite(dev_t dev,register struct uio *uio, int flag)
int cnwrite(dev_t cn, struct uio *uio, int flag)
{
return cdevsw[CONS_MAJOR].d_write(console_device, uio, flag);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);

return cdevsw[CONS_MAJOR].d_write(dev, uio, flag);
}

int cnselect(dev_t dev, int rw)
int cnselect(dev_t cn, int rw)
{
return cdevsw[CONS_MAJOR].d_select(console_device, rw);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);

return cdevsw[CONS_MAJOR].d_select(dev, rw);
}

int cnioctl(dev_t dev, register u_int cmd, caddr_t addr, int flag)
int cnioctl(dev_t cn, u_int cmd, caddr_t addr, int flag)
{
return cdevsw[CONS_MAJOR].d_ioctl(console_device, cmd, addr, flag);
dev_t dev = makedev(CONS_MAJOR, CONS_MINOR);

return cdevsw[CONS_MAJOR].d_ioctl(dev, cmd, addr, flag);
}

/*
Expand All @@ -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]);
Expand All @@ -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);
}
Expand Down
6 changes: 5 additions & 1 deletion sys/pic32/cpu.h
Expand Up @@ -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 { \
Expand All @@ -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
4 changes: 0 additions & 4 deletions sys/pic32/machdep.c
Expand Up @@ -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;
Expand Down
18 changes: 15 additions & 3 deletions sys/pic32/sysctl.c
Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 793e605

Please sign in to comment.