Annotation of XNU/iokit/IOKit/storage/ata/IOATAPIHDDrive.h, revision 1.1

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) 1999 Apple Computer, Inc.  All rights reserved. 
        !            24:  *
        !            25:  * IOATAPIHDDrive.h - Generic ATAPI Direct-Access driver.
        !            26:  *
        !            27:  * HISTORY
        !            28:  * Sep 2, 1999 jliu - Ported from AppleATAPIDrive.
        !            29:  */
        !            30: 
        !            31: #ifndef        _IOATAPIHDDRIVE_H
        !            32: #define        _IOATAPIHDDRIVE_H
        !            33: 
        !            34: #include <IOKit/IOTypes.h>
        !            35: #include <IOKit/storage/ata/IOATAHDDrive.h>
        !            36: #include <IOKit/storage/IOCDTypes.h>
        !            37: 
        !            38: // ATAPI (inquiry) device type.
        !            39: //
        !            40: enum IOATAPIDeviceType
        !            41: {
        !            42:        kIOATAPIDeviceTypeDirectAccess = 0x00,
        !            43:        kIOATAPIDeviceTypeCDROM        = 0x05,
        !            44: };
        !            45: 
        !            46: // ATAPI packet commands.
        !            47: //
        !            48: enum {
        !            49:        kIOATAPICommandTestUnitReady   = 0x00,
        !            50:        kIOATAPICommandFormatUnit      = 0x04,
        !            51:        kIOATAPICommandWrite           = 0xaa,
        !            52:        kIOATAPICommandRead            = 0xa8,
        !            53:        kIOATAPICommandStartStopUnit   = 0x1b,
        !            54:        kIOATAPICommandPreventAllow    = 0x1e,
        !            55:        kIOATAPICommandReadTOC         = 0x43,
        !            56: 
        !            57:         // for audio support
        !            58:         kIOATAPICommandPlayAudio       = 0x45,
        !            59:         kIOATAPICommandPlayAudioMSF    = 0x47,
        !            60:         kIOATAPICommandPauseResume     = 0x4b,
        !            61:         kIOATAPICommandModeSense       = 0x5a,
        !            62:         kIOATAPICommandModeSelect      = 0x55,
        !            63:         kIOATAPICommandReadSubChannel  = 0x42,
        !            64:         kIOATAPICommandReadHeader      = 0x44,
        !            65:         kIOATAPICommandReadCD          = 0xbe,
        !            66: };
        !            67: 
        !            68: // ATAPI feature register flags.
        !            69: //
        !            70: enum {
        !            71:        kIOATAPIFeaturesDMA            = 0x01,
        !            72:        kIOATAPIFeaturesOverlay        = 0x02,
        !            73: };
        !            74: 
        !            75: #define kIOATAPIMaxTransfer   65534
        !            76: 
        !            77: 
        !            78: // ==========================================================================
        !            79: // IOATAPIHDDrive
        !            80: // ==========================================================================
        !            81: 
        !            82: class IOATAPIHDDrive : public IOATAHDDrive
        !            83: {
        !            84:     OSDeclareDefaultStructors(IOATAPIHDDrive)
        !            85: 
        !            86: protected:
        !            87:        char                   _vendor[9];
        !            88:        char                   _product[17];
        !            89:        bool                   _mediaPresent;
        !            90:        bool                   _isRemovable;
        !            91:        ATAProtocol            _atapiProtocol;
        !            92: 
        !            93:        //-----------------------------------------------------------------------
        !            94:        // Selects a command protocol to use. The argument specifies whether
        !            95:        // the device supports DMA mode.
        !            96: 
        !            97:        virtual void           selectCommandProtocol(bool useDMA);
        !            98: 
        !            99:        //-----------------------------------------------------------------------
        !           100:        // Issues an ATAPI Start/Stop Unit command.
        !           101: 
        !           102:        virtual IOReturn       doStartStop(bool doStart);
        !           103: 
        !           104:        //-----------------------------------------------------------------------
        !           105:        // Given the device type from the ATAPI Inquiry data, returns true if
        !           106:        // the device type is supported by this driver.
        !           107: 
        !           108:        virtual bool           matchATAPIDeviceType(UInt8 type);
        !           109: 
        !           110:        //-----------------------------------------------------------------------
        !           111:        // Setup a ATATaskFile for an ATAPI packet command from the parameters 
        !           112:        // given.
        !           113:        
        !           114:        virtual void           setupPacketTaskFile(ATATaskfile * taskfile,
        !           115:                                                ATAProtocol   protocol,
        !           116:                                                UInt16        byteCount);
        !           117: 
        !           118:        //-----------------------------------------------------------------------
        !           119:        // Create a generic ATAPI command object.
        !           120: 
        !           121:        virtual IOATACommand * atapiCommand(ATAPICmd *   packetCommand,
        !           122:                                 IOMemoryDescriptor * transferBuffer = 0,
        !           123:                                 IOMemoryDescriptor * senseData = 0);
        !           124: 
        !           125:        //-----------------------------------------------------------------------
        !           126:        // Allocates and return an IOATACommand to perform a read/write operation.
        !           127: 
        !           128:        virtual IOATACommand * atapiCommandReadWrite(IOMemoryDescriptor * buffer,
        !           129:                                                  UInt32               block,
        !           130:                                                  UInt32               nblks);
        !           131: 
        !           132:        //-----------------------------------------------------------------------
        !           133:        // ATAPI Start/Stop Unit command (1B).
        !           134: 
        !           135:        virtual IOATACommand * atapiCommandStartStopUnit(
        !           136:                                        IOMemoryDescriptor * senseData,
        !           137:                                        bool                 doStart,
        !           138:                                        bool                 doLoadEject,
        !           139:                                        bool                 immediate);
        !           140: 
        !           141:        //-----------------------------------------------------------------------
        !           142:        // ATAPI Prevent/Allow medium removal command (1E).
        !           143: 
        !           144:        virtual IOATACommand * atapiCommandPreventAllowRemoval(bool doLock);
        !           145: 
        !           146:        //-----------------------------------------------------------------------
        !           147:        // ATAPI Test Unit Ready command (00).
        !           148: 
        !           149:        virtual IOATACommand * atapiCommandTestUnitReady(
        !           150:                                        IOMemoryDescriptor * senseData);
        !           151: 
        !           152:        //-----------------------------------------------------------------------
        !           153:        // ATAPI Read TOC command (43).
        !           154: 
        !           155:        virtual IOATACommand * atapiCommandReadTOC(
        !           156:                                 IOMemoryDescriptor * buffer,
        !           157:                                 tocFormat            format,
        !           158:                                 UInt8                startTrackSession);
        !           159: 
        !           160:        //----------------------------------------------------------------------
        !           161:         // ATAPI Play Audio command (45).
        !           162: 
        !           163:         virtual IOATACommand * atapiCommandPlayAudio(
        !           164:                                 UInt32 start_lba,
        !           165:                                 UInt32 len_lba);
        !           166: 
        !           167:         //----------------------------------------------------------------------
        !           168:         // ATAPI Play Audio command (47).
        !           169: 
        !           170:         virtual IOATACommand * atapiCommandPlayAudioMSF(
        !           171:                                 UInt32 start_msf,
        !           172:                                 UInt32 end_msf);
        !           173: 
        !           174:         //----------------------------------------------------------------------
        !           175:         // ATAPI Pause/Resume command (4b).
        !           176: 
        !           177:         virtual IOATACommand * atapiCommandPauseResume(
        !           178:                                 bool resume);
        !           179: 
        !           180:         //----------------------------------------------------------------------
        !           181:         // ATAPI Mode Sense command (5a).
        !           182: 
        !           183:         virtual IOATACommand * atapiCommandModeSense(
        !           184:                                 IOMemoryDescriptor * buffer,
        !           185:                                 UInt8 pageCode);
        !           186: 
        !           187:         //----------------------------------------------------------------------
        !           188:         // ATAPI Mode Select command (55).
        !           189: 
        !           190:         virtual IOATACommand * atapiCommandModeSelect(
        !           191:                                 IOMemoryDescriptor * buffer,
        !           192:                                 UInt8 pageCode);
        !           193: 
        !           194:         //----------------------------------------------------------------------
        !           195:         // ATAPI Read Subchannel command (42).
        !           196: 
        !           197:         virtual IOATACommand * atapiCommandReadSubChannel(
        !           198:                                 IOMemoryDescriptor * buffer,
        !           199:                                 UInt8 dataFormat,
        !           200:                                 UInt8 trackNumber,
        !           201:                                 bool subQ);
        !           202: 
        !           203:         //----------------------------------------------------------------------
        !           204:         // ATAPI Read Header command (44).
        !           205: 
        !           206:         virtual IOATACommand * atapiCommandReadHeader(
        !           207:                                 IOMemoryDescriptor * buffer,
        !           208:                                 UInt32 address);
        !           209: 
        !           210:         //----------------------------------------------------------------------
        !           211:         // ATAPI Read CD command (be).
        !           212: 
        !           213:         virtual IOATACommand * atapiCommandReadCD(
        !           214:                                 IOMemoryDescriptor * buffer,
        !           215:                                 UInt32 address,     
        !           216:                                 UInt32 length,      
        !           217:                                 UInt8 sector,
        !           218:                                 UInt8 header,
        !           219:                                 UInt8 error,
        !           220:                                 UInt8 data);
        !           221: 
        !           222:        //-----------------------------------------------------------------------
        !           223:        // Overrides the method in IOATAHDDrive and returns an IOATAPIHDDriveNub
        !           224:        // instance.
        !           225: 
        !           226:     virtual IOService *           instantiateNub();
        !           227: 
        !           228:        //-----------------------------------------------------------------------
        !           229:        // Overrides the method in IOATAHDDrive. Inspect the ATAPI device.
        !           230: 
        !           231:        virtual void           inspectDevice(IOService * provider);
        !           232: 
        !           233: public:
        !           234:     /*
        !           235:         * IOATAHDDrive overrides.
        !           236:         */
        !           237:     virtual bool           init(OSDictionary * properties);
        !           238:        virtual IOService *    probe(IOService * provider, SInt32 * score);
        !           239: 
        !           240:        virtual ATADeviceType  reportATADeviceType() const;
        !           241: 
        !           242:        virtual IOReturn       doAsyncReadWrite(IOMemoryDescriptor * buffer,
        !           243:                                             UInt32               block,
        !           244:                                             UInt32               nblks,
        !           245:                                             gdCompletionFunction action,
        !           246:                                             IOService *          target,
        !           247:                                             void *               param);
        !           248: 
        !           249:        virtual IOReturn       doEjectMedia();
        !           250: 
        !           251:        virtual IOReturn       doFormatMedia(UInt64 byteCapacity);
        !           252: 
        !           253:        virtual IOReturn       doLockUnlockMedia(bool doLock);
        !           254:        
        !           255:        virtual IOReturn       doSynchronizeCache();
        !           256: 
        !           257:        virtual IOReturn       doStart();
        !           258:        virtual IOReturn       doStop();
        !           259: 
        !           260:     virtual char *         getVendorString();
        !           261:     virtual char *         getProductString();
        !           262:     virtual char *         getRevisionString();
        !           263:     virtual char *         getAdditionalDeviceInfoString();
        !           264: 
        !           265:        virtual IOReturn       reportEjectability(bool * isEjectable);
        !           266:        virtual IOReturn       reportLockability(bool * isLockable);
        !           267:        virtual IOReturn       reportPollRequirements(bool * pollRequired,
        !           268:                                                   bool * pollIsExpensive);
        !           269: 
        !           270:        virtual IOReturn       reportMediaState(bool * mediaPresent, 
        !           271:                                             bool * changed);
        !           272: 
        !           273:        virtual IOReturn       reportRemovability(bool * isRemovable);
        !           274: 
        !           275:        virtual IOReturn       reportWriteProtection(bool * isWriteProtected);
        !           276: };
        !           277: 
        !           278: #endif /* !_IOATAPIHDDRIVE_H */

unix.superglobalmegacorp.com

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