|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* ! 26: * Copyright (c) 1987, 1988 NeXT, Inc. ! 27: * ! 28: * HISTORY ! 29: * 7-Jan-93 Mac Gillon (mgillon) at NeXT ! 30: * Integrated POSIX support ! 31: * ! 32: * 12-Aug-87 John Seamons (jks) at NeXT ! 33: * Ported to NeXT. ! 34: */ ! 35: ! 36: /* ! 37: * Indirect driver for console. ! 38: */ ! 39: #import <sys/param.h> ! 40: #import <sys/systm.h> ! 41: #import <sys/conf.h> ! 42: #import <sys/ioctl.h> ! 43: #import <sys/tty.h> ! 44: #import <sys/proc.h> ! 45: #import <sys/uio.h> ! 46: #import <bsd/dev/ppc/cons.h> ! 47: ! 48: struct tty cons; ! 49: struct tty *constty; /* current console device */ ! 50: ! 51: /*ARGSUSED*/ ! 52: int ! 53: cnopen(dev, flag, devtype, pp) ! 54: dev_t dev; ! 55: int flag, devtype; ! 56: struct proc *pp; ! 57: { ! 58: dev_t device; ! 59: ! 60: if (constty) ! 61: device = constty->t_dev; ! 62: else ! 63: device = cons.t_dev; ! 64: return ((*cdevsw[major(device)].d_open)(device, flag, devtype, pp)); ! 65: } ! 66: ! 67: /*ARGSUSED*/ ! 68: int ! 69: cnclose(dev, flag, mode, pp) ! 70: dev_t dev; ! 71: int flag, mode; ! 72: struct proc *pp; ! 73: { ! 74: dev_t device; ! 75: ! 76: if (constty) ! 77: device = constty->t_dev; ! 78: else ! 79: device = cons.t_dev; ! 80: return ((*cdevsw[major(device)].d_close)(device, flag, mode, pp)); ! 81: } ! 82: ! 83: /*ARGSUSED*/ ! 84: int ! 85: cnread(dev, uio, ioflag) ! 86: dev_t dev; ! 87: struct uio *uio; ! 88: int ioflag; ! 89: { ! 90: dev_t device; ! 91: ! 92: if (constty) ! 93: device = constty->t_dev; ! 94: else ! 95: device = cons.t_dev; ! 96: return ((*cdevsw[major(device)].d_read)(device, uio, ioflag)); ! 97: } ! 98: ! 99: /*ARGSUSED*/ ! 100: int ! 101: cnwrite(dev, uio, ioflag) ! 102: dev_t dev; ! 103: struct uio *uio; ! 104: int ioflag; ! 105: { ! 106: dev_t device; ! 107: ! 108: if (constty) ! 109: device = constty->t_dev; ! 110: else ! 111: device = cons.t_dev; ! 112: return ((*cdevsw[major(device)].d_write)(device, uio, ioflag)); ! 113: } ! 114: ! 115: /*ARGSUSED*/ ! 116: int ! 117: cnioctl(dev, cmd, addr, flag, p) ! 118: dev_t dev; ! 119: int cmd; ! 120: caddr_t addr; ! 121: int flag; ! 122: struct proc *p; ! 123: { ! 124: dev_t device; ! 125: ! 126: if (constty) ! 127: device = constty->t_dev; ! 128: else ! 129: device = cons.t_dev; ! 130: /* ! 131: * Superuser can always use this to wrest control of console ! 132: * output from the "virtual" console. ! 133: */ ! 134: if (cmd == TIOCCONS && constty) { ! 135: int error = suser(p->p_ucred, (u_short *) NULL); ! 136: if (error) ! 137: return (error); ! 138: constty = NULL; ! 139: return (0); ! 140: } ! 141: return ((*cdevsw[major(device)].d_ioctl)(device, cmd, addr, flag, p)); ! 142: } ! 143: ! 144: /*ARGSUSED*/ ! 145: int ! 146: cnselect(dev, flag, p) ! 147: dev_t dev; ! 148: int flag; ! 149: struct proc *p; ! 150: { ! 151: dev_t device; ! 152: ! 153: if (constty) ! 154: device = constty->t_dev; ! 155: else ! 156: device = cons.t_dev; ! 157: return ((*cdevsw[major(device)].d_select)(device, flag, p)); ! 158: } ! 159: ! 160: int ! 161: cngetc() ! 162: { ! 163: dev_t device; ! 164: ! 165: if (constty) ! 166: device = constty->t_dev; ! 167: else ! 168: device = cons.t_dev; ! 169: return ((*cdevsw[major(device)].d_getc)(device)); ! 170: } ! 171: ! 172: /*ARGSUSED*/ ! 173: int ! 174: cnputc(c) ! 175: char c; ! 176: { ! 177: dev_t device; ! 178: ! 179: if (constty) ! 180: device = constty->t_dev; ! 181: else ! 182: device = cons.t_dev; ! 183: return ((*cdevsw[major(device)].d_putc)(device, c)); ! 184: } ! 185: ! 186: #if NCPUS > 1 ! 187: slave_cnenable() ! 188: { ! 189: /* FIXME: what to do here? */ ! 190: } ! 191: #endif NCPUS > 1 ! 192: ! 193: /* Send a debug char to modem port */ ! 194: #define LINE 1 ! 195: extern int scc_putc(int unit, int line, int c); ! 196: extern int scc_getc(int unit, int line, boolean_t wait, boolean_t raw); ! 197: ! 198: void ! 199: czputc(char c) ! 200: { ! 201: if (c == '\n') ! 202: (void) scc_putc(0 /* ignored */, LINE, '\r'); ! 203: ! 204: (void) scc_putc(0 /* ignored */, LINE, c); ! 205: } ! 206: ! 207: #include <stdarg.h> ! 208: #include <sys/subr_prf.h> ! 209: ! 210: void ! 211: kprintf( const char *format, ...) ! 212: { ! 213: extern int kdp_flag; ! 214: ! 215: if( kdp_flag & 2) { ! 216: ! 217: char buffer[256]; ! 218: char *sptr = buffer; ! 219: char *cptr = buffer; ! 220: va_list ap; ! 221: ! 222: va_start(ap, format); ! 223: prf(format, ap, TOSTR, (struct tty *)&sptr); ! 224: va_end(ap); ! 225: ! 226: while( cptr != sptr) ! 227: czputc( *cptr++); ! 228: } ! 229: } ! 230:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.