Annotation of XNU/bsd/dev/i386/cons.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /* 
                     23:  * Copyright (c) 1987, 1988 NeXT, Inc.
                     24:  *
                     25:  * HISTORY
                     26:  *  7-Jan-93  Mac Gillon (mgillon) at NeXT
                     27:  *     Integrated POSIX support
                     28:  *
                     29:  * 12-Aug-87  John Seamons (jks) at NeXT
                     30:  *     Ported to NeXT.
                     31:  */ 
                     32: 
                     33: /*
                     34:  * Indirect driver for console.
                     35:  */
                     36: #import <sys/param.h>
                     37: #import <sys/systm.h>
                     38: #import <sys/conf.h>
                     39: #import <sys/ioctl.h>
                     40: #import <sys/tty.h>
                     41: #import <sys/proc.h>
                     42: #import <sys/uio.h>
                     43: 
                     44: struct tty     cons;
                     45: struct tty     *constty;               /* current console device */
                     46: 
                     47: /*ARGSUSED*/
                     48: int
                     49: cnopen(dev, flag, devtype, pp)
                     50:        dev_t dev;
                     51:        int flag, devtype;
                     52:        struct proc *pp;
                     53: {
                     54:        dev_t device;
                     55: 
                     56:        if (constty)
                     57:            device = constty->t_dev;
                     58:        else
                     59:            device = cons.t_dev;
                     60:        return ((*cdevsw[major(device)].d_open)(device, flag, devtype, pp));
                     61: }
                     62: 
                     63: /*ARGSUSED*/
                     64: int
                     65: cnclose(dev, flag, mode, pp)
                     66:        dev_t dev;
                     67:        int flag, mode;
                     68:        struct proc *pp;
                     69: {
                     70:        dev_t device;
                     71: 
                     72:        if (constty)
                     73:            device = constty->t_dev;
                     74:        else
                     75:            device = cons.t_dev;
                     76:        return ((*cdevsw[major(device)].d_close)(device, flag, mode, pp));
                     77: }
                     78: 
                     79: /*ARGSUSED*/
                     80: int
                     81: cnread(dev, uio, ioflag)
                     82:        dev_t dev;
                     83:        struct uio *uio;
                     84:        int ioflag;
                     85: {
                     86:        dev_t device;
                     87: 
                     88:        if (constty)
                     89:            device = constty->t_dev;
                     90:        else
                     91:            device = cons.t_dev;
                     92:        return ((*cdevsw[major(device)].d_read)(device, uio, ioflag));
                     93: }
                     94: 
                     95: /*ARGSUSED*/
                     96: int
                     97: cnwrite(dev, uio, ioflag)
                     98:        dev_t dev;
                     99:        struct uio *uio;
                    100:        int ioflag;
                    101: {
                    102:     dev_t device;
                    103: 
                    104:        if (constty)
                    105:            device = constty->t_dev;
                    106:        else
                    107:            device = cons.t_dev;
                    108:     return ((*cdevsw[major(device)].d_write)(device, uio, ioflag));
                    109: }
                    110: 
                    111: /*ARGSUSED*/
                    112: int
                    113: cnioctl(dev, cmd, addr, flag, p)
                    114:        dev_t dev;
                    115:        int cmd;
                    116:        caddr_t addr;
                    117:        int flag;
                    118:        struct proc *p;
                    119: {
                    120:        dev_t device;
                    121: 
                    122:        if (constty)
                    123:            device = constty->t_dev;
                    124:        else
                    125:            device = cons.t_dev;
                    126:        /*
                    127:         * Superuser can always use this to wrest control of console
                    128:         * output from the "virtual" console.
                    129:         */
                    130:        if (cmd == TIOCCONS && constty) {
                    131:                int error = suser(p->p_ucred, (u_short *) NULL);
                    132:                if (error)
                    133:                        return (error);
                    134:                constty = NULL;
                    135:                return (0);
                    136:        }
                    137:        return ((*cdevsw[major(device)].d_ioctl)(device, cmd, addr, flag, p));
                    138: }
                    139: 
                    140: /*ARGSUSED*/
                    141: int
                    142: cnselect(dev, flag, p)
                    143:        dev_t dev;
                    144:        int flag;
                    145:        struct proc *p;
                    146: {
                    147:        dev_t device;
                    148: 
                    149:        if (constty)
                    150:            device = constty->t_dev;
                    151:        else
                    152:            device = cons.t_dev;
                    153:        return ((*cdevsw[major(device)].d_select)(device, flag, p));
                    154: }
                    155: 
                    156: #if 0  /* FIXME  - using OSFMK console driver for the moment */
                    157: int
                    158: cngetc()
                    159: {
                    160:        dev_t device;
                    161: 
                    162:        if (constty)
                    163:            device = constty->t_dev;
                    164:        else
                    165:            device = cons.t_dev;
                    166:        return ((*cdevsw[major(device)].d_getc)(device));
                    167: }
                    168: 
                    169: /*ARGSUSED*/
                    170: int
                    171: cnputc(c)
                    172:        char c;
                    173: {
                    174:        dev_t device;
                    175: 
                    176:        if (constty)
                    177:            device = constty->t_dev;
                    178:        else
                    179:            device = cons.t_dev;
                    180:        return ((*cdevsw[major(device)].d_putc)(device, c));
                    181: }
                    182: #endif
                    183: 
                    184: #if    NCPUS > 1
                    185: slave_cnenable()
                    186: {
                    187:        /* FIXME: what to do here? */
                    188: }
                    189: #endif NCPUS > 1
                    190: 
                    191: #if 0
                    192: void
                    193: kprintf( const char *format, ...)
                    194: {
                    195:         /* on PPC this outputs to the serial line */
                    196:         /* nop on intel ... [email protected] */
                    197: 
                    198: }
                    199: #endif
                    200: 
                    201: /*
                    202:  * Write message to console; create an alert panel if no text-type window
                    203:  * currently exists. Caller must call alert_done() when finished.
                    204:  * The height and width arguments are not used; they are provided for 
                    205:  * compatibility with the 68k version of alert().
                    206:  */
                    207: int 
                    208: alert(
                    209:        int width, 
                    210:        int height, 
                    211:        const char *title, 
                    212:        const char *msg, 
                    213:        int p1, 
                    214:        int p2, 
                    215:        int p3, 
                    216:        int p4, 
                    217:        int p5, 
                    218:        int p6, 
                    219:        int p7, 
                    220:        int p8)
                    221: {
                    222:        char smsg[200];
                    223:        
                    224:        sprintf(smsg, msg,  p1, p2, p3, p4, p5, p6, p7, p8);
                    225: #if FIXME  /* [ */
                    226:        /* DoAlert(title, smsg); */
                    227: #else
                    228:        printf("%s\n",smsg);
                    229: #endif  /* FIXME ] */
                    230: 
                    231:        return 0;
                    232: }
                    233: 
                    234: int 
                    235: alert_done()
                    236: {
                    237:        /* DoRestore(); */
                    238:        return 0;
                    239: }
                    240: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.