]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/Drivers/hidsystem/drvAppleADBDevices/AppleADBDisplay.cpp
xnu-201.tar.gz
[apple/xnu.git] / iokit / Drivers / hidsystem / drvAppleADBDevices / AppleADBDisplay.cpp
diff --git a/iokit/Drivers/hidsystem/drvAppleADBDevices/AppleADBDisplay.cpp b/iokit/Drivers/hidsystem/drvAppleADBDevices/AppleADBDisplay.cpp
deleted file mode 100644 (file)
index 1c06437..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * 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) 1997-1998 Apple Computer, Inc.
- *
- *
- * HISTORY
- *
- * sdouglas  22 Oct 97 - first checked in.
- * sdouglas  23 Jul 98 - start IOKit
- * suurballe 17 Nov 98 - ported to C++
- */
-
-#include <assert.h>
-#include <IOKit/IOLib.h>
-
-#include "AppleADBDisplay.h"
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-#define super IODisplay
-OSDefineMetaClassAndStructors( AppleADBDisplay, IODisplay )
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-IOReturn AppleADBDisplay::findADBDisplayInfoForType( UInt16 deviceType )
-{
-    char       stringBuf[ 32 ];
-    OSNumber * off;
-    OSString * key;
-    OSData *   data;
-
-    sprintf( stringBuf, "adb%dWiggle", deviceType);
-    if( (off = OSDynamicCast( OSNumber, getProperty( stringBuf ))))
-        wiggleLADAddr = off->unsigned32BitValue();
-    else
-        wiggleLADAddr = kWiggleLADAddr;
-
-    sprintf( stringBuf, "adb%dModes", deviceType);
-    key = OSDynamicCast( OSString, getProperty( stringBuf ));
-
-    if( key && (data = OSDynamicCast( OSData, getProperty( key )))) {
-       modeList = (UInt32 *) data->getBytesNoCopy();
-       numModes = data->getLength() / sizeof( UInt32);
-    }
-    if( modeList )
-        return(kIOReturnSuccess);
-    else
-        return( -49 );
-}
-
-
-IOReturn AppleADBDisplay::getConnectFlagsForDisplayMode(
-                       IODisplayModeID mode, UInt32 * flags )
-{
-    IOReturn           err;
-    IODisplayConnect * connect;
-    IOFramebuffer *    framebuffer;
-    int                        timingNum;
-    IOTimingInformation        info;
-
-    *flags = 0;
-
-    connect = getConnection();
-    assert( connect );
-    framebuffer = connect->getFramebuffer();
-    assert( framebuffer );
-  
-    err = framebuffer->getTimingInfoForDisplayMode( mode, &info );
-
-    if( kIOReturnSuccess == err) {
-        for( timingNum = 0; timingNum < numModes; timingNum++ ) {
-            if( info.appleTimingID == modeList[ timingNum ] ) {
-                *flags = timingNum
-                   ? ( kDisplayModeValidFlag | kDisplayModeSafeFlag )
-                    : ( kDisplayModeValidFlag | kDisplayModeSafeFlag
-                       | kDisplayModeDefaultFlag );
-                break;
-            }
-        }
-    }
-
-    return( err );
-}
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-IOReturn AppleADBDisplay::doConnect( void )
-{
-    IOReturn                   err;
-    UInt16             value;
-    UInt32             retries = 9;
-    IOByteCount                length;
-
-    while ( retries-- ) {
-
-       value = 0x6000 | (adbDevice->address() << 8);
-       length = sizeof( value);
-       err = adbDevice->writeRegister( 3, (UInt8 *) &value, &length );
-       if( err)
-            continue;
-
-       /* IOSleep(10); */
-       /* IODelay(1000); */
-       length = sizeof( value);
-       err = adbDevice->readRegister( 3, (UInt8 *) &value, &length );
-       if( err)
-           continue;
-
-       if( (value & 0xf000) == 0x6000 )
-           break;
-       else
-           err = kIOReturnNotAttached;
-    }
-
-    if( err)
-        kprintf("%s: %d\n", __FUNCTION__, err);
-
-    return(err);
-}
-
-static void autoPollHandler( IOService * self, UInt8 adbCommand,
-                                IOByteCount length, UInt8 * data )
-{
-    ((AppleADBDisplay *)self)->packet( adbCommand, length, data );
-}
-
-void AppleADBDisplay::packet( UInt8 adbCommand,
-                                IOByteCount length, UInt8 * data )
-{
-    if( length && (*data == waitAckValue) )
-        waitAckValue = 0;
-}
-
-IOReturn AppleADBDisplay::writeWithAcknowledge( UInt8 regNum,
-                               UInt16 data, UInt8 ackValue )
-{
-    IOReturn   err;
-    enum       { kTimeoutMS = 400 };
-    UInt32     timeout;
-    IOByteCount        length;
-
-    waitAckValue = ackValue;
-
-    length = sizeof(data);
-    err = adbDevice->writeRegister( regNum, (UInt8 *) &data, &length );
-
-    if( !err) {
-        timeout = kTimeoutMS / 50;
-        while( waitAckValue && timeout-- )
-            IOSleep( 50 );
-
-        if( waitAckValue )
-            err = -3;
-    }
-    waitAckValue = 0;
-
-    return( err );
-}
-
-IOReturn AppleADBDisplay::setLogicalRegister( UInt16 address, UInt16 data )
-{
-    IOReturn   err = -1;
-    UInt32     reconnects = 3;
-
-    while( err && reconnects-- ) {
-       err = writeWithAcknowledge( kADBReg1, address, kReg2DataRdy);
-       if( err == kIOReturnSuccess )
-           err = writeWithAcknowledge( kADBReg2, data, kReg2DataAck);
-
-       if( err ) {
-           if( doConnect() )
-               break;
-       }
-    }
-    if( err)
-        kprintf( "%s: %x, %d\n", __FUNCTION__, address, err);
-
-    return( err);
-}
-
-IOReturn AppleADBDisplay::getLogicalRegister( UInt16 address, UInt16 * data )
-{
-    IOReturn   err = -1;
-    UInt32     reconnects = 3;
-    UInt16     value;
-    IOByteCount        length;
-
-    while ( err && reconnects--) {
-       err = writeWithAcknowledge( kADBReg1, address, kReg2DataRdy);
-       if( err == kIOReturnSuccess ) {
-            length = sizeof( value);
-            err = adbDevice->readRegister( 2, (UInt8 *)&value, &length);
-           *data = value & 0xff;               // actually only 8 bits
-       }
-       if( err) {
-           if ( doConnect())
-               break;
-       }
-    }
-    if( err)
-       kprintf( "%s: %x=%x, %d\n", __FUNCTION__, address, *data, err);
-
-    return err;
-}
-
-void AppleADBDisplay::setWiggle( bool active )
-{
-    setLogicalRegister( wiggleLADAddr, (active ? 1 : 0));
-}
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-bool AppleADBDisplay::start( IOService * nub )
-{
-    IOReturn   err;
-    UInt16     data, deviceType;
-
-    if( !super::start( nub))
-        return false;
-
-    if( OSDynamicCast( IODisplayConnect, nub ))
-       return( true );
-
-    assert( OSDynamicCast( IOADBDevice, nub ));
-    adbDevice = (IOADBDevice *) nub;
-
-    if( !adbDevice->seizeForClient( this, &autoPollHandler) ) {
-        IOLog("%s: sieze failed\n", getName());
-        return( false);
-    }
-
-    do {
-       err = doConnect();
-       if( err )
-           continue;
-
-       err = setLogicalRegister( 0xff, 0xff);
-       if( err)
-           continue;
-
-       err = getLogicalRegister( 0xff, &data);
-       if( err)
-           continue;
-
-       err = getLogicalRegister( 0xff, &deviceType);
-       if( err)
-           continue;
-
-       kprintf("%s: found AVType %d\n",
-               adbDevice->getName(), deviceType );
-
-       err = findADBDisplayInfoForType( deviceType );
-       if( err)
-           continue;
-
-       avDisplayID = deviceType;
-       setWiggle( false);
-
-       registerService();
-       return( true );
-
-    } while( false );
-
-    adbDevice->releaseFromClient( this );
-    return( false );
-}
-
-
-bool AppleADBDisplay::tryAttach( IODisplayConnect * connect )
-{
-    IOReturn           err;
-    bool               attached = false;
-    UInt32             sense, extSense;
-    IOFramebuffer *    framebuffer;
-    IOIndex            fbConnect;
-    UInt32             senseType;
-    enum {
-        kRSCFour       = 4,
-        kRSCSix                = 6,
-        kESCFourNTSC   = 0x0A,
-        kESCSixStandard        = 0x2B,
-    };
-
-    do {
-
-       framebuffer = connect->getFramebuffer();
-       fbConnect = connect->getConnection();
-       assert( framebuffer );
-
-        if( kIOReturnSuccess != framebuffer->getAttributeForConnection(
-                               fbConnect,
-                               kConnectionSupportsAppleSense, NULL ))
-            continue;
-
-       err = framebuffer->getAppleSense( fbConnect,
-                               &senseType, &sense, &extSense, 0 );
-       if( err)
-           continue;
-       if( (sense != kRSCSix) || (extSense != kESCSixStandard) )       // straight-6
-           continue;
-
-       setWiggle( true );
-       err = framebuffer->getAppleSense( fbConnect,
-                               &senseType, &sense, &extSense, 0 );
-       setWiggle( false );
-       if( err)
-           continue;
-       if( (sense != kRSCFour) || (extSense != kESCFourNTSC) )         // straight-4
-           continue;
-
-       kprintf( "%s: attached to %s\n",
-               adbDevice->getName(), framebuffer->getName() );
-
-       attached = true;
-
-    } while( false);
-
-    return( attached);
-}
-
-
-IOService * AppleADBDisplay::probe( IOService * nub, SInt32 * score )
-{
-    IODisplayConnect * connect;
-
-    // both ADB device & display connections come here!
-
-    do {
-        if( OSDynamicCast( IOADBDevice, nub))
-           continue;
-
-        if( (connect = OSDynamicCast( IODisplayConnect, nub))
-         && tryAttach( connect))
-           continue;
-
-       nub = 0;
-
-    } while( false );
-
-    if( nub)
-       return( super::probe( nub, score ));
-    else
-       return( 0 );
-}
-
-
-