|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1998-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) 1998 Apple Computer, Inc. All rights reserved. ! 24: * ! 25: * HISTORY ! 26: * ! 27: */ ! 28: ! 29: ! 30: #ifndef _IOKIT_IOUSBPIPE_H ! 31: #define _IOKIT_IOUSBPIPE_H ! 32: ! 33: #include <IOKit/IOService.h> ! 34: #include <IOKit/IOMemoryDescriptor.h> ! 35: ! 36: #include <IOKit/usb/USB.h> ! 37: ! 38: #include <IOKit/usb/IOUSBController.h> ! 39: ! 40: /*! ! 41: @class IOUSBPipe ! 42: @abstract The object representing an open pipe for a device. ! 43: */ ! 44: class IOUSBPipe : public OSObject ! 45: { ! 46: OSDeclareDefaultStructors(IOUSBPipe) ! 47: ! 48: protected: ! 49: ! 50: const IOUSBEndpointDescriptor * _descriptor; ! 51: IOUSBController::Endpoint _endpoint; // tidied up version of descriptor ! 52: IOUSBController * _controller; ! 53: USBDeviceAddress _address; ! 54: UInt8 _status; // stalled, active ! 55: ! 56: virtual void free(); ! 57: ! 58: public: ! 59: ! 60: virtual bool initToEndpoint(const IOUSBEndpointDescriptor *endpoint, UInt8 speed, ! 61: USBDeviceAddress address, IOUSBController * controller); ! 62: static IOUSBPipe *toEndpoint(const IOUSBEndpointDescriptor *endpoint, UInt8 speed, ! 63: USBDeviceAddress address, IOUSBController * controller); ! 64: ! 65: // Controlling pipe state ! 66: /*! ! 67: @function status ! 68: Get the current state of the pipe (kIOUSBPipeStalled if stalled or 0 if active). ! 69: We clear a pipe stall as soon as it is detected, so in practice this routine ! 70: always returns zero ! 71: */ ! 72: virtual UInt8 status(void); ! 73: /*! ! 74: @function abort ! 75: abort a pipe, causing all outstanding I/O to complete ! 76: with return code kIOReturnAborted ! 77: */ ! 78: virtual IOReturn abort(void); ! 79: /*! ! 80: @function reset ! 81: reset a pipe, causing all outstanding I/O to complete ! 82: with return code kIOReturnAborted, and clear any stall. ! 83: */ ! 84: virtual IOReturn reset(void); ! 85: /*! ! 86: @function clearStall ! 87: clear any stall. ! 88: */ ! 89: virtual IOReturn clearStall(void); ! 90: ! 91: // ! 92: // Transferring Data ! 93: // ! 94: ! 95: // Transfer data over Bulk or Interrupt pipes. ! 96: /*! ! 97: @function read ! 98: Read from an interrupt or bulk endpoint ! 99: @param buffer place to put the transferred data ! 100: @param completion describes action to take when buffer has been filled ! 101: @param bytesRead returns total bytes read for synchronous reads ! 102: */ ! 103: virtual IOReturn read(IOMemoryDescriptor * buffer, ! 104: IOUSBCompletion * completion = 0, ! 105: IOByteCount * bytesRead = 0); ! 106: ! 107: /*! ! 108: @function write ! 109: Write to an interrupt or bulk endpoint ! 110: @param buffer place to get the transferred data ! 111: @param completion describes action to take when buffer has been emptied ! 112: */ ! 113: virtual IOReturn write(IOMemoryDescriptor * buffer, ! 114: IOUSBCompletion * completion = 0); ! 115: ! 116: // Transfer data over Isochronous pipes ! 117: /*! ! 118: @function read ! 119: Read from an isochronous endpoint ! 120: @param buffer place to put the transferred data ! 121: @param frameStart USB frame number of the frame to start transfer ! 122: @param numFrames Number of frames to transfer ! 123: @param frameList Bytes to transfer and result for each frame ! 124: @param completion describes action to take when buffer has been filled ! 125: */ ! 126: virtual IOReturn read(IOMemoryDescriptor * buffer, ! 127: UInt64 frameStart, UInt32 numFrames, IOUSBIsocFrame *frameList, ! 128: IOUSBIsocCompletion * completion = 0); ! 129: /*! ! 130: @function write ! 131: Write to an interrupt or bulk endpoint ! 132: @param buffer place to get the transferred data ! 133: @param frameStart USB frame number of the frame to start transfer ! 134: @param numFrames Number of frames to transfer ! 135: @param frameList Bytes to transfer and result for each frame ! 136: @param completion describes action to take when buffer has been emptied ! 137: */ ! 138: virtual IOReturn write(IOMemoryDescriptor * buffer, ! 139: UInt64 frameStart, UInt32 numFrames, IOUSBIsocFrame *frameList, ! 140: IOUSBIsocCompletion * completion = 0); ! 141: ! 142: /*! ! 143: @function controlRequest ! 144: Make a control request ! 145: There are two versions of this method, one uses a simple void * ! 146: to point to the data portion of the transfer, the other uses an ! 147: IOMemoryDescriptor to point to the data. ! 148: @param request parameter block for the control request ! 149: @param completion describes action to take when the request has been executed ! 150: */ ! 151: // Do a control request over a Control pipe, using a memory descriptor ! 152: virtual IOReturn controlRequest(IOUSBDevRequestDesc *request, ! 153: IOUSBCompletion *completion = 0); ! 154: ! 155: // Do a control request over a Control pipe, using a simple buffer ! 156: virtual IOReturn controlRequest(IOUSBDevRequest *request, ! 157: IOUSBCompletion *completion = 0); ! 158: ! 159: /*! ! 160: @function GetBandwidthAvailable ! 161: Returns the available bandwidth (in bytes) per frame for ! 162: isochronous transfers. ! 163: @result maximum number of bytes that a new iso pipe could transfer ! 164: per frame given current allocations. ! 165: */ ! 166: virtual UInt32 GetBandwidthAvailable(); ! 167: ! 168: /*! ! 169: @function GetFrameNumber ! 170: Returns the full current frame number of the bus the device is ! 171: attached to ! 172: @result The frame number. ! 173: */ ! 174: virtual UInt64 GetFrameNumber(); ! 175: ! 176: // Return cached pointer to an associated descriptor. ! 177: // Don't free returned pointer. ! 178: /*! ! 179: @function findNextAssociatedDescriptor ! 180: Find the next descriptor of the requested type associated with the endpoint. ! 181: @param current Descriptor to start searching from, NULL to start from beginning of list. ! 182: @param type Descriptor type to search for, or kUSBAnyDesc to return any descriptor type. ! 183: */ ! 184: virtual const IOUSBDescriptorHeader * ! 185: findNextAssociatedDescriptor(const void *current, UInt8 type); ! 186: ! 187: /*! ! 188: @function endpoint ! 189: returns a pointer to the Endpoint structure for the pipe. ! 190: */ ! 191: const IOUSBController::Endpoint * endpoint(); ! 192: /*! ! 193: @function endpointDescriptor ! 194: returns the endpoint descriptor for the pipe. ! 195: */ ! 196: const IOUSBEndpointDescriptor * endpointDescriptor(); ! 197: /*! ! 198: @function direction ! 199: returns the direction of the pipe:kUSBOut/kUSBIn for a bulk or interrupt pipe, ! 200: kUSBAnyDirn for a control pipe. ! 201: */ ! 202: UInt8 direction(); ! 203: /*! ! 204: @function type ! 205: returns the pipe type: kUSBControl, kUSBBulk or kUSBInterrupt. ! 206: */ ! 207: UInt8 type(); ! 208: /*! ! 209: @function endpointNumber ! 210: returns the endpoint number in the device that the pipe is connected to. ! 211: */ ! 212: UInt8 endpointNumber(); ! 213: /*! ! 214: @function address ! 215: returns the bus address of the pipe's device ! 216: */ ! 217: virtual USBDeviceAddress address(void); ! 218: }; ! 219: ! 220: #endif /* _IOKIT_IOUSBPIPE_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.