|
|
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: * ! 24: * IOATACommand.h ! 25: * ! 26: */ ! 27: ! 28: class IOSyncer; ! 29: class IOATADevice; ! 30: class IOATACommand; ! 31: ! 32: typedef void (*ATACallback)(void *target, IOService *device, IOATACommand *ataCmd, void *refcon ); ! 33: ! 34: class IOATACommand : public OSObject ! 35: { ! 36: OSDeclareDefaultStructors(IOATACommand) ! 37: ! 38: friend class IOATAController; ! 39: friend class IOATADevice; ! 40: ! 41: public: ! 42: /* ! 43: * Methods to initialize an ATACommand ! 44: * ! 45: * Note: These methods are usually invoked by the device client to setup and ! 46: * submit an ATACommand. ! 47: */ ! 48: void clear(); ! 49: void setTaskfile( ATATaskfile *taskfile ); ! 50: void setATAPICmd( ATAPICmd *atapiCmd, IOMemoryDescriptor *senseData = NULL, UInt32 senseLength = 0 ); ! 51: void setPointers( IOMemoryDescriptor *desc, UInt32 transferCount, bool isWrite ); ! 52: void setTimeout( UInt32 timeout ); ! 53: void setCallback( void *target = 0, ATACallback ataDoneFn = 0, void *refcon = 0 ); ! 54: ATAReturnCode getResults( ATAResults *results ); ! 55: ! 56: /* ! 57: * Methods to submit/cancel an ATACommand ! 58: */ ! 59: bool execute(); ! 60: bool abort(); ! 61: ! 62: ! 63: /* ! 64: * Methods to interrogate an ATACommand ! 65: * ! 66: * Note: These methods are usually invoked by the controller driver to find out about ! 67: * the ATA Command. They may be also invoked by the device client to find out ! 68: * about completed command. ! 69: */ ! 70: IOATADevice *getDevice(); ! 71: IOATAController *getController(); ! 72: IOCommandQueue *getDeviceQueue(); ! 73: void getTaskfile( ATATaskfile *taskfile ); ! 74: void getATAPICmd( ATAPICmd *cdb, IOMemoryDescriptor **senseData = NULL, UInt32 *senseLength = NULL ); ! 75: void getPointers( IOMemoryDescriptor **desc, UInt32 *transferCount, bool *isWrite ); ! 76: UInt32 getTimeout(); ! 77: ATAProtocol getProtocol(); ! 78: UInt32 getResultMask(); ! 79: ! 80: ! 81: /* ! 82: * Methods to complete an ATACommand ! 83: * ! 84: * Note: These methods are usually invoked by the controller driver. ! 85: */ ! 86: void setResults( ATAResults *results ); ! 87: void complete(); ! 88: ! 89: /* ! 90: * Methods to address controller and client private per command data areas. ! 91: */ ! 92: void *getControllerData(); ! 93: void *getClientData(); ! 94: ! 95: /*------------------Methods private to the IOATACommand class-------------------------*/ ! 96: enum ATACommandFlags ! 97: { ! 98: atacmdTaskfileValid = 0x00000001, ! 99: atacmdPointersValid = 0x00000002, ! 100: atacmdResultsValid = 0x00000004, ! 101: atacmdCallbackValid = 0x00000008, ! 102: atacmdATAPIInfoValid = 0x00000010, ! 103: }; ! 104: ! 105: public: ! 106: void free(); ! 107: ! 108: private: ! 109: void setController( IOATAController *ctrlr ); ! 110: void setDevice( IOATADevice *dev ); ! 111: ! 112: private: ! 113: UInt32 flags; ! 114: ! 115: IOATAController *controller; ! 116: IOATADevice *device; ! 117: IOCommandQueue *deviceQueue; ! 118: ! 119: ATATaskfile taskfile; ! 120: ATAResults results; ! 121: UInt32 timeout; ! 122: ! 123: IOMemoryDescriptor *xferDesc; ! 124: UInt32 xferCount; ! 125: UInt32 xferDirection; ! 126: ! 127: ATAPICmd atapiCmd; ! 128: UInt32 senseLength; ! 129: IOMemoryDescriptor *senseData; ! 130: ! 131: union ! 132: { ! 133: struct ! 134: { ! 135: IOSyncer *syncer; ! 136: } sync; ! 137: struct ! 138: { ! 139: ATACallback ataDoneFn; ! 140: void *target; ! 141: void *refcon; ! 142: } async; ! 143: } completionInfo; ! 144: ! 145: UInt32 dataSize; ! 146: void *dataArea; ! 147: void *controllerData; ! 148: void *clientData; ! 149: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.