Annotation of kernel/bsd/dev/ppc/drvUSBCMD/Library/uslPipeState.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: /*
                     26:        File:           uslPipeState.c
                     27: 
                     28:        Contains:       xxx put contents here xxx
                     29: 
                     30:        Version:        xxx put version here xxx
                     31: 
                     32:        Copyright:      � 1998 by Apple Computer, Inc., all rights reserved.
                     33: 
                     34:        File Ownership:
                     35: 
                     36:                DRI:                            xxx put dri here xxx
                     37: 
                     38:                Other Contact:          xxx put other contact here xxx
                     39: 
                     40:                Technology:                     xxx put technology here xxx
                     41: 
                     42:        Writers:
                     43: 
                     44:                (BT)    Barry Twycross
                     45: 
                     46:        Change History (most recent first):
                     47: 
                     48:          <USB3>         8/13/98        BT              Add multibus support
                     49:          <USB2>         7/28/98        BT              Fix spurious errors
                     50:          <USB1>         4/26/98        BT              first checked in
                     51: */
                     52: 
                     53: #include "../USB.h"
                     54: #include "../USBpriv.h"
                     55: 
                     56: #include "uslpriv.h"
                     57: #include "../uimpriv.h"
                     58: 
                     59: 
                     60: void uslSetPipeStall(USBPipeRef ref)
                     61: {
                     62: pipe *thisPipe;
                     63: OSStatus err = noErr;
                     64:        err = findPipe(ref, &thisPipe);
                     65:        if(thisPipe != nil)
                     66:        {
                     67:                if(thisPipe->state == kUSBActive)
                     68:                {
                     69:                        thisPipe->state = kUSBStalled;
                     70:                }
                     71:                else if(thisPipe->state == kUSBIdle)
                     72:                {
                     73:                        thisPipe->state = kUSBIdleStalled;
                     74:                }
                     75:        }
                     76: 
                     77: }
                     78: 
                     79: OSStatus USBAbortPipeByReference(USBReference refIn)
                     80: {
                     81: pipe *thisPipe;
                     82: USBReference ref;
                     83: OSStatus err = noErr;
                     84: 
                     85:        do{
                     86:                        /* Is this a device ref ? */
                     87:                ref = getPipeZero(refIn);
                     88:                if(ref == 0)
                     89:                {
                     90:                                /* No, is it a pipe ref? */
                     91:                        ref = refIn;
                     92:                }
                     93:                        /* Find the pipe struct */
                     94:                err = findPipe(ref, &thisPipe);
                     95:                if(thisPipe == nil)
                     96:                {
                     97:                        break;
                     98:                }
                     99:                
                    100:                err = UIMAbortEndpoint(thisPipe->bus, thisPipe->devAddress, thisPipe->endPt, thisPipe->direction);
                    101:        }while(0);
                    102: 
                    103:        return(err);
                    104: }
                    105: 
                    106: OSStatus USBClearPipeStallByReference(USBPipeRef ref)
                    107: {
                    108: pipe *thisPipe;
                    109: OSStatus err = noErr;
                    110: 
                    111:        do{
                    112:                        /* Note this can't be a device ref, they're automatically cleared */
                    113:                        /* Find the pipe struct */
                    114:                err = findPipe(ref, &thisPipe);
                    115:                if(err != kUSBPipeStalledError)
                    116:                {
                    117:                        break;
                    118:                }
                    119:                                
                    120:                err = UIMClearEndPointStall(thisPipe->bus, thisPipe->devAddress, thisPipe->endPt, thisPipe->direction);
                    121:                if(err == noErr)
                    122:                {
                    123:                        if(thisPipe->state == kUSBIdleStalled)
                    124:                        {
                    125:                                thisPipe->state = kUSBIdle;
                    126:                        }
                    127:                        else
                    128:                        {
                    129:                                thisPipe->state = kUSBActive;
                    130:                        }
                    131:                }       
                    132:        }while(0);
                    133: 
                    134:        return(err);
                    135: }
                    136: 
                    137: OSStatus USBSetPipeIdleByReference(USBPipeRef ref)
                    138: {
                    139: pipe *thisPipe;
                    140: OSStatus err = noErr;
                    141: 
                    142:        do{
                    143:                        /* Note this can't be a device ref, they're automatically cleared */
                    144:                        /* Find the pipe struct */
                    145:                err = findPipe(ref, &thisPipe);
                    146:                if(thisPipe == nil)
                    147:                {
                    148:                        break;
                    149:                }
                    150:                
                    151:                err = noErr;
                    152:                
                    153:                if(thisPipe->state == kUSBStalled)
                    154:                {
                    155:                        thisPipe->state = kUSBIdleStalled;
                    156:                }
                    157:                else
                    158:                {
                    159:                        thisPipe->state = kUSBIdle;
                    160:                }
                    161:        }while(0);
                    162: 
                    163:        return(err);
                    164: }
                    165: 
                    166: OSStatus USBSetPipeActiveByReference(USBPipeRef ref)
                    167: {
                    168: pipe *thisPipe;
                    169: OSStatus err = noErr;
                    170: 
                    171:        do{
                    172:                        /* Note this can't be a device ref, they're automatically cleared */
                    173:                        /* Find the pipe struct */
                    174:                err = findPipe(ref, &thisPipe);
                    175:                if(thisPipe == nil)
                    176:                {
                    177:                        break;
                    178:                }
                    179: 
                    180:                if(thisPipe->state == kUSBIdleStalled)
                    181:                {
                    182:                        thisPipe->state = kUSBStalled;
                    183:                        // do nothing, err is stalled err.
                    184:                }
                    185:                else if(thisPipe->state == kUSBStalled)
                    186:                {
                    187:                        // do nothing, err is stalled err.
                    188:                }
                    189:                else if(thisPipe->state == kUSBIdle)
                    190:                {
                    191:                        thisPipe->state = kUSBActive;
                    192:                        err = noErr;
                    193:                }
                    194: 
                    195:        }while(0);
                    196: 
                    197:        return(err);
                    198: }
                    199: 
                    200: 
                    201: 
                    202: OSStatus USBResetPipeByReference(USBReference refIn)
                    203: {
                    204: pipe *thisPipe;
                    205: USBReference ref;
                    206: OSStatus err = noErr;
                    207: 
                    208:        do{
                    209:                        /* Is this a device ref ? */
                    210:                ref = getPipeZero(refIn);
                    211:                if(ref == 0)
                    212:                {
                    213:                                /* No, is it a pipe ref? */
                    214:                        ref = refIn;
                    215:                }
                    216:                        /* Find the pipe struct */
                    217:                err = findPipe(ref, &thisPipe);
                    218:                if(thisPipe == nil)
                    219:                {
                    220:                        break;
                    221:                }
                    222:                if(err == kUSBPipeStalledError)
                    223:                {
                    224:                        err = USBClearPipeStallByReference(ref);
                    225:                }
                    226:                else
                    227:                {
                    228:                        err = noErr;
                    229:                }
                    230:                if(err == noErr)
                    231:                {
                    232:                        thisPipe->state = kUSBActive;
                    233:                }
                    234: 
                    235:        }while(0);
                    236: 
                    237:        return(err);
                    238: }
                    239: 
                    240: OSStatus USBClosePipeByReference(USBPipeRef ref)
                    241: {
                    242: pipe *thisPipe;
                    243: OSStatus err = noErr;
                    244: 
                    245:        do{
                    246:                        /* Note this can't be a device ref, they're automatically cleared */
                    247:                        /* Find the pipe struct */
                    248:                err = findPipe(ref, &thisPipe);
                    249:                if(thisPipe == nil)
                    250:                {
                    251:                        break;
                    252:                }
                    253:                
                    254:                err = uslClosePipe(recoverPipeIdx(ref));
                    255:        }while(0);
                    256: 
                    257:        return(err);
                    258: }
                    259: 
                    260: 
                    261: OSStatus USBGetPipeStatusByReference(USBReference refIn, USBPipeState *state)
                    262: {
                    263: pipe *thisPipe;
                    264: USBReference ref;
                    265: OSStatus err = noErr;
                    266: 
                    267:        do{
                    268:                        /* Is this a device ref ? */
                    269:                ref = getPipeZero(refIn);
                    270:                if(ref == 0)
                    271:                {
                    272:                                /* No, is it a pipe ref? */
                    273:                        ref = refIn;
                    274:                }
                    275:                        /* Find the pipe struct */
                    276:                err = findPipe(ref, &thisPipe);
                    277:                if(thisPipe == nil)
                    278:                {
                    279:                        break;
                    280:                }
                    281:                
                    282:                if(thisPipe->state == kUSBIdleStalled)
                    283:                {
                    284:                        *state = kUSBStalled;
                    285:                }
                    286:                else
                    287:                {
                    288:                        *state = thisPipe->state;
                    289:                }
                    290:                
                    291:        }while(0);
                    292: 
                    293:        return(err);
                    294: }
                    295: 
                    296: 
                    297: 

unix.superglobalmegacorp.com

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