Annotation of kernel/bsd/netat/adsp_misc.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: 
                     25: #include       <adsp_local.h>
                     26: extern atlock_t adspgen_lock;
                     27: 
                     28: 
                     29: struct qlink {
                     30:        struct qlink *qlinkp;
                     31: };
                     32: 
                     33: /* ----------------------------------------------------------------------
                     34:  * void qAddToEnd(void *qhead, void *qelem)
                     35:  * 
                     36:  * INPUTS:
                     37:  *             Ptr             to ptr to 1st item in queue
                     38:  *             Ptr             to item to add to end of queue
                     39:  * OUTPUTS:
                     40:  *             none
                     41:  *
                     42:  * Assumptions: The link field is the FIRST field of the qelem structure.
                     43:  * ----------------------------------------------------------------------
                     44:  */
                     45: int qAddToEnd(qhead, qelem)
                     46:        struct qlink **qhead;
                     47:        struct qlink *qelem;
                     48: {
                     49:        /* define our own type to access the next field. NOTE THAT THE "NEXT"
                     50:          * FIELD IS ASSUMED TO BE THE FIRST FIELD OF THE STRUCTURE
                     51:         */
                     52: 
                     53: 
                     54:        int dummy = 0;
                     55:        register struct qlink *q;
                     56: 
                     57:        /* Scan the linked list to the end and update the previous
                     58:          * element next field. (do that protocted).
                     59:          */
                     60: 
                     61:        q = *qhead;
                     62:        if (q) {
                     63:                while (q->qlinkp) {
                     64:                        /* are we about to link to ourself */
                     65:                        if (q == qelem)
                     66:                                goto breakit;
                     67:                        q = q->qlinkp;
                     68:                }
                     69:                q->qlinkp = qelem;
                     70:        }
                     71:        else {
                     72:                *qhead = qelem;
                     73:        }
                     74:        qelem->qlinkp = (struct qlink *) 0;
                     75: breakit:
                     76: #ifdef NOTDEF
                     77:        DPRINTF("%s: qhead=%x added elem=%x\n","qAddToEnd", qhead, qelem);
                     78: #endif
                     79:        return 0;
                     80: }
                     81: 
                     82: 
                     83: 
                     84: /* ----------------------------------------------------------------------
                     85:  *  qfind_m
                     86:  *     void* qfind_m(void *qhead, void NPTR match, ProcPtr compare_fnx)
                     87:  *  
                     88:  *  Hunt down a linked list of queue elements calling the compare 
                     89:  *  function on each item. When the compare function returns true, 
                     90:  *  return ptr to the queue element.
                     91:  * 
                     92:  * 
                     93:  *  INPUTS:
                     94:  *             qhead   Address of ptr to first item in queue
                     95:  *             match   
                     96:  *             compare_fnx
                     97:  *  OUTPUTS:
                     98:  *             D0 & A0 Ptr to queue element or NIL
                     99:  *  REGISTERS:
                    100:  *     D0,D1,A0,A1
                    101:  * ----------------------------------------------------------------------
                    102:  */
                    103: void* qfind_m(qhead, match, compare_fnx)
                    104:        CCBPtr  qhead;
                    105:        void  *match;
                    106:        ProcPtr compare_fnx;
                    107: {
                    108:        int s;
                    109:        CCBPtr queue_item = qhead;
                    110: 
                    111:        ATDISABLE(s, adspgen_lock);
                    112:        while (queue_item) { 
                    113:                if ((*compare_fnx)(queue_item,match)) 
                    114:                        break;
                    115:                
                    116:                queue_item = queue_item->ccbLink;
                    117:        }
                    118:        ATENABLE(s, adspgen_lock);
                    119: 
                    120:        return (queue_item);
                    121: }

unix.superglobalmegacorp.com

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