* HISTORY
*/
-#include <sys/param.h>
+#include <sys/kernel.h>
#include <sys/tty.h>
#include <dev/ppc/cons.h>
/*
* 'Global' variables, shared only by this file and conf.c.
*/
-extern struct tty cons;
struct tty *km_tty[1] = { &cons };
/*
*/
int disableConsoleOutput;
-/*
- * 'Global' variables, shared only by this file and kmDevice.m.
- */
-int initialized = 0;
+static int initialized = 0;
+
+// Function prototypes
+extern d_open_t kmopen;
+extern d_close_t kmclose;
+extern d_read_t kmread;
+extern d_write_t kmwrite;
+extern d_ioctl_t kmioctl;
+extern d_getc_t kmgetc;
+extern d_putc_t kmputc;
+
+extern void kminit(void);
+
+// used by or implemented in the osfmk project
+extern void cnputcusr(char); // From osfmk
+extern int cngetc(void); // From osfmk
+extern void cons_cinput(char ch); // Used by osfmk
static int kmoutput(struct tty *tp);
static void kmtimeout(struct tty *tp);
extern void KeyboardOpen(void);
-int kminit()
+void
+kminit(void)
{
cons.t_dev = makedev(12, 0);
initialized = 1;
* cdevsw interface to km driver.
*/
int
-kmopen(
- dev_t dev,
- int flag,
- int devtype,
- struct proc *pp)
+kmopen(dev_t dev, int flag, __unused int devtype, struct proc *pp)
{
- int rtn;
int unit;
struct tty *tp;
struct winsize *wp;
tp->t_ispeed = tp->t_ospeed = TTYDEF_SPEED;
termioschars(&tp->t_termios);
ttsetwater(tp);
- } else if ((tp->t_state & TS_XCLUDE) && pp->p_ucred->cr_uid != 0)
+ } else if ((tp->t_state & TS_XCLUDE) && proc_suser(pp))
return EBUSY;
tp->t_state |= TS_CARR_ON; /* lie and say carrier exists and is on. */
}
int
-kmclose(
- dev_t dev,
- int flag,
- int mode,
- struct proc *p)
+kmclose(__unused dev_t dev, __unused int flag, __unused int mode,
+ __unused struct proc *p)
{
struct tty *tp;
}
int
-kmread(
- dev_t dev,
- struct uio *uio,
- int ioflag)
+kmread(__unused dev_t dev, struct uio *uio, int ioflag)
{
register struct tty *tp;
}
int
-kmwrite(
- dev_t dev,
- struct uio *uio,
- int ioflag)
+kmwrite(__unused dev_t dev, struct uio *uio, int ioflag)
{
register struct tty *tp;
}
int
-kmioctl(
- dev_t dev,
- int cmd,
- caddr_t data,
- int flag,
+kmioctl( __unused dev_t dev, u_long cmd, caddr_t data, int flag,
struct proc *p)
{
int error;
}
default:
error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p);
- if (error >= 0) {
+ if (ENOTTY != error)
return error;
- }
- error = ttioctl (tp, cmd, data, flag, p);
- if (error >= 0) {
- return error;
- }
- else {
- return ENOTTY;
- }
+ return ttioctl (tp, cmd, data, flag, p);
}
}
int
-kmputc(
- int c)
+kmputc(__unused dev_t dev, char c)
{
if( disableConsoleOutput)
}
int
-kmgetc(
- dev_t dev)
+kmgetc(__unused dev_t dev)
{
int c;
return c;
}
+#if 0
int
kmgetc_silent(
- dev_t dev)
+ __unused dev_t dev)
{
int c;
}
return c;
}
+#endif /* 0 */
/*
* Callouts from linesw.
#define KM_LOWAT_DELAY ((ns_time_t)1000)
static void
-kmstart(
- struct tty *tp)
+kmstart(struct tty *tp)
{
- extern int hz;
if (tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))
goto out;
if (tp->t_outq.c_cc == 0)
goto out;
tp->t_state |= TS_BUSY;
- if (tp->t_outq.c_cc > tp->t_lowat) {
- /*
- * Start immediately.
- */
- kmoutput(tp);
- }
- else {
- /*
- * Wait a bit...
- */
-#if 0
- /* FIXME */
- timeout(kmtimeout, tp, hz);
-#else
- kmoutput(tp);
-#endif
- }
+ kmoutput(tp);
+ return;
+
out:
- ttwwakeup(tp);
+ (*linesw[tp->t_line].l_start)(tp);
+ return;
}
static void
-kmtimeout( struct tty *tp)
+kmtimeout(struct tty *tp)
{
boolean_t funnel_state;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
kmoutput(tp);
- (void) thread_funnel_set(kernel_flock, FALSE);
+ (void) thread_funnel_set(kernel_flock, funnel_state);
}
static int
-kmoutput(
- struct tty *tp)
+kmoutput(struct tty *tp)
{
/*
* FIXME - to be grokked...copied from m68k km.c.
char buf[80];
char *cp;
int cc = -1;
- extern int hz;
-
while (tp->t_outq.c_cc > 0) {
cc = ndqb(&tp->t_outq, 0);
break;
cc = min(cc, sizeof buf);
(void) q_to_b(&tp->t_outq, buf, cc);
- for (cp = buf; cp < &buf[cc]; cp++) {
- kmputc(*cp & 0x7f);
- }
+ for (cp = buf; cp < &buf[cc]; cp++)
+ kmputc(tp->t_dev, *cp & 0x7f);
}
if (tp->t_outq.c_cc > 0) {
- timeout(kmtimeout, tp, hz);
+ timeout((timeout_fcn_t)kmtimeout, tp, hz);
}
tp->t_state &= ~TS_BUSY;
- ttwwakeup(tp);
+ (*linesw[tp->t_line].l_start)(tp);
return 0;
}
-cons_cinput(char ch)
+
+void cons_cinput(char ch)
{
struct tty *tp = &cons;
- boolean_t funnel_state;
-
(*linesw[tp->t_line].l_rint) (ch, tp);
-
}