IOUSBControllerV3.h [plain text]
#ifndef _IOKIT_IOUSBCONTROLLERV3_H
#define _IOKIT_IOUSBCONTROLLERV3_H
#include <IOKit/pci/IOPCIDevice.h>
#include <IOKit/usb/IOUSBControllerV2.h>
#include <IOKit/usb/IOUSBHubDevice.h>
enum
{
kUSBPowerStateOff = 0, kUSBPowerStateRestart = 1, kUSBPowerStateSleep = 2, kUSBPowerStateLowPower = 3, kUSBPowerStateOn = 4, kUSBNumberBusPowerStates = 5
};
#define kUSBPowerStateStable -1
enum
{
kUSBBusStateReset = 0, kUSBBusStateSuspended = 1, kUSBBusStateRunning = 2 };
typedef struct IOUSBRootHubInterruptTransaction
{
IOMemoryDescriptor * buf;
UInt32 bufLen;
IOUSBCompletion completion;
} IOUSBRootHubInterruptTransaction;
#define kIOUSBMaxRootHubTransactions 4
class IOUSBControllerV3 : public IOUSBControllerV2
{
OSDeclareAbstractStructors(IOUSBControllerV3)
protected:
static uint32_t * _gHibernateState;
UInt8 _myBusState; bool _wakingFromHibernation; bool _needToAckPowerDown; bool _onCardBus; bool _controllerAvailable; SInt32 _powerStateChangingTo; bool _poweringDown; bool _restarting; unsigned long _myPowerState; IOUSBControllerV3 *_ehciController; unsigned long _numPowerStates; IOPMPowerState *_myPowerStates; IOPCIDevice *_device;
IOTimerEventSource *_rootHubTimer; UInt8 _rootHubPollingRate; UInt8 _rootHubNumPorts; UInt16 _rootHubStatusChangedBitmap; bool _rootHubTimerActive; IOUSBRootHubInterruptTransaction _outstandingRHTrans[kIOUSBMaxRootHubTransactions];
struct V3ExpansionData {
};
V3ExpansionData *_v3ExpansionData;
virtual bool init( OSDictionary * propTable );
virtual bool start( IOService * provider );
virtual void stop( IOService * provider );
virtual unsigned long maxCapabilityForDomainState ( IOPMPowerFlags domainState );
virtual unsigned long initialPowerStateForDomainState ( IOPMPowerFlags domainState );
virtual IOReturn powerStateWillChangeTo ( IOPMPowerFlags capabilities, unsigned long stateNumber, IOService* whatDevice);
virtual IOReturn setPowerState( unsigned long powerStateOrdinal, IOService* whatDevice );
virtual IOReturn powerStateDidChangeTo ( IOPMPowerFlags capabilities, unsigned long stateNumber, IOService* whatDevice);
virtual void powerChangeDone ( unsigned long fromState);
virtual void systemWillShutdown( IOOptionBits specifier );
virtual void PM_idle_timer_expiration ( void );
virtual void free(void);
virtual IOReturn AcquireDeviceZero( void );
virtual void ReleaseDeviceZero( void );
virtual IOReturn DeviceRequest(IOUSBDevRequest *request, IOUSBCompletion *completion, USBDeviceAddress address, UInt8 epNum, UInt32 noDataTimeout, UInt32 completionTimeout);
virtual IOReturn DeviceRequest(IOUSBDevRequestDesc *request, IOUSBCompletion *completion, USBDeviceAddress address, UInt8 epNum, UInt32 noDataTimeout, UInt32 completionTimeout);
virtual IOReturn ClosePipe(USBDeviceAddress address, Endpoint *endpoint);
virtual IOReturn AbortPipe(USBDeviceAddress address, Endpoint *endpoint);
virtual IOReturn ResetPipe(USBDeviceAddress address, Endpoint *endpoint);
virtual IOReturn ClearPipeStall(USBDeviceAddress address, Endpoint *endpoint);
virtual IOReturn Read(IOMemoryDescriptor *buffer, USBDeviceAddress address, Endpoint *endpoint, IOUSBCompletion *completion, UInt32 noDataTimeout, UInt32 completionTimeout, IOByteCount reqCount);
virtual IOReturn Write(IOMemoryDescriptor *buffer, USBDeviceAddress address, Endpoint *endpoint, IOUSBCompletion *completion, UInt32 noDataTimeout, UInt32 completionTimeout, IOByteCount reqCount);
virtual IOReturn IsocIO(IOMemoryDescriptor *buffer, UInt64 frameStart, UInt32 numFrames, IOUSBIsocFrame *frameList, USBDeviceAddress address, Endpoint *endpoint, IOUSBIsocCompletion *completion );
virtual IOReturn IsocIO(IOMemoryDescriptor *buffer, UInt64 frameStart, UInt32 numFrames, IOUSBLowLatencyIsocFrame *frameList, USBDeviceAddress address, Endpoint *endpoint, IOUSBLowLatencyIsocCompletion *completion, UInt32 updateFrequency );
virtual IOReturn OpenPipe(USBDeviceAddress address, UInt8 speed, Endpoint *endpoint);
virtual IOReturn AddHSHub(USBDeviceAddress highSpeedHub, UInt32 flags);
virtual IOReturn RemoveHSHub(USBDeviceAddress highSpeedHub);
virtual IOReturn SetTestMode(UInt32 mode, UInt32 port);
virtual IOReturn ReadV2(IOMemoryDescriptor *buffer, USBDeviceAddress address, Endpoint *endpoint, IOUSBCompletionWithTimeStamp *completion, UInt32 noDataTimeout, UInt32 completionTimeout, IOByteCount reqCount);
static IOReturn DoEnableAddressEndpoints(OSObject *owner, void *arg0, void *arg1, void *arg2, void *arg3 );
static IOReturn DoEnableAllEndpoints(OSObject *owner, void *arg0, void *arg1, void *arg2, void *arg3 );
static IOReturn GatedPowerChange(OSObject *owner, void *arg0, void *arg1, void *arg2, void *arg3 );
static void RootHubTimerFired(OSObject *owner, IOTimerEventSource *sender);
virtual IOReturn CheckForEHCIController(IOService *provider);
virtual IOReturn AllocatePowerStateArray(void);
virtual IOReturn InitForPM(void);
virtual IOReturn CheckPowerModeBeforeGatedCall(char *fromStr);
virtual IOReturn EnableAllEndpoints(bool enable);
virtual IOReturn EnableBusMastering(bool enable);
virtual IOReturn EnsureUsability(void);
virtual IOReturn CheckForRootHubChanges(void);
virtual IOReturn RootHubQueueInterruptRead(IOMemoryDescriptor *buf, UInt32 bufLen, IOUSBCompletion completion);
virtual IOReturn RootHubAbortInterruptRead(void);
virtual IOReturn RootHubStartTimer(UInt8 pollingRate);
virtual IOReturn RootHubStopTimer(void);
virtual void ControllerOff(void);
virtual void ControllerRestart(void);
virtual void ControllerSleep(void);
virtual void ControllerDoze(void);
virtual void ControllerOn(void);
virtual IOReturn ResetControllerState(void) = 0;
virtual IOReturn RestartControllerFromReset(void) = 0;
virtual IOReturn SaveControllerStateForSleep(void) = 0;
virtual IOReturn RestoreControllerStateFromSleep(void) = 0;
virtual IOReturn DozeController(void) = 0;
virtual IOReturn WakeControllerFromDoze(void) = 0;
virtual IOReturn UIMEnableAddressEndpoints(USBDeviceAddress address, bool enable) = 0;
virtual IOReturn UIMEnableAllEndpoints(bool enable) = 0;
virtual IOReturn EnableInterruptsFromController(bool enable) = 0;
public:
virtual IOReturn EnableAddressEndpoints(USBDeviceAddress address, bool enable);
virtual bool IsControllerAvailable(void);
virtual IOReturn HandlePowerChange(unsigned long powerStateOrdinal);
virtual UInt32 AllocateExtraRootHubPortPower(UInt32 extraPowerRequested);
virtual void ReturnExtraRootHubPortPower(UInt32 extraPowerReturned);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 0);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 1);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 2);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 3);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 4);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 5);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 6);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 7);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 8);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 9);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 10);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 11);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 12);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 13);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 14);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 15);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 16);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 17);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 18);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 19);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 20);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 21);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 22);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 23);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 24);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 25);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 26);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 27);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 28);
OSMetaClassDeclareReservedUnused(IOUSBControllerV3, 29);
};
#endif // _IOKIT_IOUSBCONTROLLERV3_H