Annotation of kernel/bsd/dev/ppc/drvUSBCMD/Library/uslPipeState.c, revision 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.