+++ /dev/null
-/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- *
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * IOATAPIHDDrive.h - Generic ATAPI Direct-Access driver.
- *
- * HISTORY
- * Sep 2, 1999 jliu - Ported from AppleATAPIDrive.
- */
-
-#ifndef _IOATAPIHDDRIVE_H
-#define _IOATAPIHDDRIVE_H
-
-#include <IOKit/IOTypes.h>
-#include <IOKit/storage/ata/IOATAHDDrive.h>
-
-// ATAPI (inquiry) device type.
-//
-enum IOATAPIDeviceType
-{
- kIOATAPIDeviceTypeDirectAccess = 0x00
-};
-
-// ATAPI packet commands.
-//
-enum {
- kIOATAPICommandTestUnitReady = 0x00,
- kIOATAPICommandFormatUnit = 0x04,
- kIOATAPICommandStartStopUnit = 0x1b,
- kIOATAPICommandPreventAllow = 0x1e,
- kIOATAPICommandSynchronizeCache = 0x35,
- kIOATAPICommandModeSelect = 0x55,
- kIOATAPICommandModeSense = 0x5a,
- kIOATAPICommandRead = 0xa8,
- kIOATAPICommandWrite = 0xaa
-};
-
-// ATAPI feature register flags.
-//
-enum {
- kIOATAPIFeaturesDMA = 0x01,
- kIOATAPIFeaturesOverlay = 0x02,
-};
-
-#define kIOATAPIMaxTransfer 65534
-
-
-//===========================================================================
-// IOATAPIHDDrive
-//===========================================================================
-
-class IOATAPIHDDrive : public IOATAHDDrive
-{
- OSDeclareDefaultStructors(IOATAPIHDDrive)
-
-protected:
- char _vendor[9];
- char _product[17];
- bool _mediaPresent;
- bool _isRemovable;
- ATAProtocol _atapiProtocol;
- bool _isLocked;
-
- //-----------------------------------------------------------------------
- // Selects a command protocol to use. The argument specifies whether
- // the device supports DMA mode.
-
- virtual bool selectCommandProtocol(bool isDMA);
-
- //-----------------------------------------------------------------------
- // Issues an ATAPI Start/Stop Unit command.
-
- virtual IOReturn doStartStop(bool doStart);
-
- //-----------------------------------------------------------------------
- // Given the device type from the ATAPI Inquiry data, returns true if
- // the device type is supported by this driver.
-
- virtual bool matchATAPIDeviceType(UInt8 type, SInt32 * score);
-
- //-----------------------------------------------------------------------
- // Setup a ATATaskFile for an ATAPI packet command from the parameters
- // given.
-
- virtual void setupPacketTaskFile(ATATaskfile * taskfile,
- ATAProtocol protocol,
- UInt16 byteCount);
-
- //-----------------------------------------------------------------------
- // Create a generic ATAPI command object.
-
- virtual IOATACommand * atapiCommand(ATACDBInfo * packetCommand,
- IOMemoryDescriptor * transferBuffer = 0);
-
- //-----------------------------------------------------------------------
- // Allocates and return an IOATACommand to perform a read/write operation.
-
- virtual IOATACommand * atapiCommandReadWrite(IOMemoryDescriptor * buffer,
- UInt32 block,
- UInt32 nblks);
-
- //-----------------------------------------------------------------------
- // ATAPI Start/Stop Unit command (1B).
-
- virtual IOATACommand * atapiCommandStartStopUnit(bool doStart,
- bool doLoadEject,
- bool immediate);
-
- //-----------------------------------------------------------------------
- // ATAPI Format Unit command (04).
-
- virtual IOATACommand * atapiCommandFormatUnit(
- UInt16 interleave,
- UInt8 flagBits,
- UInt8 vendorBits,
- IOMemoryDescriptor * formatData);
-
- //-----------------------------------------------------------------------
- // ATAPI Synchronize Cache command (35).
-
- virtual IOATACommand * atapiCommandSynchronizeCache();
-
- //-----------------------------------------------------------------------
- // ATAPI Prevent/Allow medium removal command (1E).
-
- virtual IOATACommand * atapiCommandPreventAllowRemoval(bool doLock);
-
- //-----------------------------------------------------------------------
- // ATAPI Test Unit Ready command (00).
-
- virtual IOATACommand * atapiCommandTestUnitReady();
-
- //----------------------------------------------------------------------
- // ATAPI Mode Sense command (5a).
-
- virtual IOATACommand * atapiCommandModeSense(
- IOMemoryDescriptor * buffer,
- UInt8 pageCode,
- UInt8 pageControl);
-
- //----------------------------------------------------------------------
- // ATAPI Mode Select command (55).
-
- virtual IOATACommand * atapiCommandModeSelect(
- IOMemoryDescriptor * buffer);
-
- //-----------------------------------------------------------------------
- // Overrides the method in IOATAHDDrive and returns an IOATAPIHDDriveNub
- // instance.
-
- virtual IOService * instantiateNub();
-
- //-----------------------------------------------------------------------
- // Overrides the method in IOATAHDDrive. Inspect the ATAPI device.
-
- virtual bool inspectDevice(IOATADevice * device);
-
- //-----------------------------------------------------------------------
- // Overrides the method in IOATAHDDrive. Add ATAPI wakeup handler.
-
- virtual void handleActiveStateTransition( UInt32 stage,
- IOReturn status );
-
-public:
- /*
- * IOATAHDDrive overrides.
- */
- virtual bool init(OSDictionary * properties);
- virtual IOService * probe(IOService * provider, SInt32 * score);
-
- virtual ATADeviceType reportATADeviceType() const;
-
- virtual IOReturn doAsyncReadWrite(IOMemoryDescriptor * buffer,
- UInt32 block,
- UInt32 nblks,
- IOStorageCompletion completion);
-
- virtual IOReturn doSyncReadWrite(IOMemoryDescriptor * buffer,
- UInt32 block,
- UInt32 nblks);
-
- virtual IOReturn doEjectMedia();
-
- virtual IOReturn doFormatMedia(UInt64 byteCapacity,
- IOMemoryDescriptor * formatData = 0);
-
- virtual IOReturn doLockUnlockMedia(bool doLock);
-
- virtual IOReturn doSynchronizeCache();
-
- virtual IOReturn doStart();
- virtual IOReturn doStop();
-
- virtual char * getVendorString();
- virtual char * getProductString();
- virtual char * getRevisionString();
- virtual char * getAdditionalDeviceInfoString();
-
- virtual IOReturn reportEjectability(bool * isEjectable);
- virtual IOReturn reportLockability(bool * isLockable);
- virtual IOReturn reportPollRequirements(bool * pollRequired,
- bool * pollIsExpensive);
-
- virtual IOReturn reportMediaState(bool * mediaPresent,
- bool * changed);
-
- virtual IOReturn reportRemovability(bool * isRemovable);
-
- virtual IOReturn reportWriteProtection(bool * isWriteProtected);
-};
-
-#endif /* !_IOATAPIHDDRIVE_H */