|
|
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.