Annotation of driverkit/libDriver/User/getDevPort.c, revision 1.1.1.1

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: /*     Copyright (c) 1992 NeXT Computer, Inc.  All rights reserved. 
                     25:  * 
                     26:  * getDevPort.c - Get device ports from Config.
                     27:  *
                     28:  * HISTORY
                     29:  * 25-Jun-92    Doug Mitchell at NeXT
                     30:  *      Created. 
                     31:  */
                     32:  
                     33: #import <driverkit/driverServer.h>
                     34: #import <driverkit/userConfigServer.h>
                     35: #import <driverkit/generalFuncs.h>
                     36: #import <mach/mach_error.h>
                     37: #import <bsd/sys/types.h>
                     38: #import <mach/mach.h>
                     39: #import <servers/bootstrap.h>
                     40: #import <servers/netname.h>
                     41: #import <bsd/libc.h>
                     42: 
                     43: #define        DPRINT_DEBUG    0
                     44: #if    DPRINT_DEBUG
                     45: #define        dprintf(x,a,b,c,d,e)  IOLog(x,a,b,c,d,e)
                     46: #else  DPRINT_DEBUG
                     47: #define        dprintf(x,a,b,c,d,e)
                     48: #endif DPRINT_DEBUG
                     49: 
                     50: #define        LOG_SERVICE_NAMES       0
                     51: 
                     52: /*
                     53:  * look up all of a driver's devicePorts. returns # of ports found in
                     54:  * *numDevicePorts.
                     55:  * Returns IO_CNF_SUCCESS normally (even if no ports found); 
                     56:  * IO_CNF_BOOTSTRAP on other error.
                     57:  */
                     58: IOConfigReturn IOGetDevicePorts(int maxDevices,
                     59:        const char *driverName,         // for error logging only 
                     60:        port_t *devicePorts,            // returned
                     61:        int *numDevicePorts,            // returned
                     62:        port_t *driverSigPort)          // returned
                     63: {
                     64:        int             i;
                     65:        name_array_t    service_names;
                     66:        unsigned int    service_cnt;
                     67:        name_array_t    server_names;
                     68:        unsigned int    server_cnt;
                     69:        bool_array_t    service_active;
                     70:        unsigned int    service_active_cnt;
                     71:        kern_return_t   krtn;
                     72:        int             port_index = 0;
                     73:        
                     74:        *numDevicePorts = 0;
                     75:        
                     76:        /*
                     77:         * Get some basic communication ports.
                     78:         */
                     79:        krtn = bootstrap_look_up(bootstrap_port, 
                     80:                SIG_PORT_NAME,
                     81:                driverSigPort);
                     82:        if(krtn) {
                     83:                IOLog("%s: can't find %s: %s\n", driverName,
                     84:                        SIG_PORT_NAME, mach_error_string(krtn));
                     85:                return IO_CNF_BOOTSTRAP;
                     86:        }
                     87:         
                     88:        /*
                     89:         * Look for our device ports, provided to us by Config.
                     90:         */
                     91:        krtn = bootstrap_info(bootstrap_port, 
                     92:                &service_names, 
                     93:                &service_cnt,
                     94:                &server_names, 
                     95:                &server_cnt, 
                     96:                &service_active, 
                     97:                &service_active_cnt);
                     98:        if (krtn != BOOTSTRAP_SUCCESS) {
                     99:                IOLog("%s: bootstrap_info: %s", driverName,
                    100:                        mach_error_string(krtn));
                    101:                return IO_CNF_BOOTSTRAP;
                    102:        }
                    103: 
                    104:        /*
                    105:         * Search for dev_port_XXX. Later - versions and dev_index via
                    106:         * dev_port_to_type().
                    107:         */
                    108:        dprintf("%s: service_cnt %d\n", driverName, service_cnt, 3,4,5);
                    109:        for (i = 0; i < service_cnt; i++) {
                    110: #if    LOG_SERVICE_NAMES
                    111:                printf("%s: service_name %s\n", driverName, service_names[i],
                    112:                        4,5);
                    113: #endif LOG_SERVICE_NAMES
                    114:                if(strncmp(service_names[i], 
                    115:                    "dev_port_", strlen("dev_port_")) == 0) {
                    116:                        dprintf("%s: port %s found\n", 
                    117:                                driverName, service_names[i], 3,4,5);
                    118:                        
                    119:                        /*
                    120:                         * Get the dev_port. 
                    121:                         */
                    122:                        krtn = bootstrap_look_up(bootstrap_port,
                    123:                                service_names[i],
                    124:                                &devicePorts[port_index]);
                    125:                        if(krtn) {
                    126:                                IOLog("%s: bootstrap_look_up: %s",
                    127:                                        driverName, mach_error_string(krtn));
                    128:                                return IO_CNF_BOOTSTRAP;
                    129:                        }
                    130:                        else {
                    131:                                if(++port_index > maxDevices) {
                    132:                                        IOLog("%s: num_devices exceeded\n",
                    133:                                                driverName);
                    134:                                        *numDevicePorts = port_index;
                    135:                                        return IO_CNF_SUCCESS;
                    136:                                }
                    137:                        }
                    138:                }       /* device port found */
                    139:        }               /* for each port in bootstrap server */
                    140:        
                    141:        dprintf("%s: %d devPorts found\n", driverName, port_index, 3,4,5);
                    142:        *numDevicePorts = port_index;
                    143:        return IO_CNF_SUCCESS;
                    144: }
                    145: 

unix.superglobalmegacorp.com

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