AppleUSBEHCIHubInfo.h [plain text]
#ifndef _APPLEEHCIHUBINFO_H
#define _APPLEEHCIHUBINFO_H
#include "AppleUSBEHCI.h"
#include "AppleEHCIListElement.h"
class AppleEHCIIsochEndpoint;
class AppleUSBEHCISplitPeriodicEndpoint;
class AppleUSBEHCITTInfo : public OSObject
{
OSDeclareDefaultStructors(AppleUSBEHCITTInfo)
public:
static AppleUSBEHCITTInfo *NewTTInfo(int portAddress);
virtual void release() const;
IOReturn AllocatePeriodicBandwidth(AppleUSBEHCISplitPeriodicEndpoint *pSPE);
IOReturn DeallocatePeriodicBandwidth(AppleUSBEHCISplitPeriodicEndpoint *pSPE);
IOReturn ReserveHSSplitINBytes(int frame, int uFrame, UInt16 bytesToReserve);
IOReturn ReleaseHSSplitINBytes(int frame, int uFrame, UInt16 bytesToRelease);
IOReturn ReserveFSBusBytes(int frame, UInt16 bytesToReserve);
IOReturn ReleaseFSBusBytes(int frame, UInt16 bytesToRelease);
IOReturn CalculateSPEsToAdjustAfterChange(AppleUSBEHCISplitPeriodicEndpoint *pSPEChanged, bool added);
void print(int level, const char *fromStr);
IOReturn ShowPeriodicBandwidthUsed(int level, const char *fromStr);
IOReturn ShowHSSplitTimeUsed(int level, const char *fromStr);
AppleUSBEHCITTInfo *next;
AppleUSBEHCISplitPeriodicEndpoint *_largeIsoch[kEHCIMaxPollingInterval]; AppleUSBEHCISplitPeriodicEndpoint *_interruptQueue[kEHCIMaxPollingInterval]; AppleUSBEHCISplitPeriodicEndpoint *_isochQueue[kEHCIMaxPollingInterval]; OSOrderedSet *_pSPEsToAdjust; UInt8 hubPort;
UInt16 _thinkTime;
UInt16 _FStimeUsed[kEHCIMaxPollingInterval]; UInt16 _HSSplitINBytesUsed[kEHCIMaxPollingInterval][kEHCIuFramesPerFrame];
};
enum
{
kAppleEHCITTInfoInitialOrderedSetSize = 16
};
class AppleUSBEHCIHubInfo : public OSObject
{
OSDeclareDefaultStructors(AppleUSBEHCIHubInfo)
public:
static AppleUSBEHCIHubInfo *FindHubInfo(AppleUSBEHCIHubInfo *hubList, USBDeviceAddress hubAddress);
static AppleUSBEHCIHubInfo *AddHubInfo(AppleUSBEHCIHubInfo **hubList, USBDeviceAddress hubAddress, UInt32 flags);
static IOReturn DeleteHubInfo(AppleUSBEHCIHubInfo **hubList, USBDeviceAddress hubAddress);
AppleUSBEHCITTInfo *GetTTInfo(int portAddress);
private:
AppleUSBEHCIHubInfo *next;
AppleUSBEHCITTInfo *ttList;
bool multiTT;
UInt8 hubAddr;
};
class AppleUSBEHCISplitPeriodicEndpoint : public OSObject
{
OSDeclareDefaultStructors(AppleUSBEHCISplitPeriodicEndpoint)
public:
static AppleUSBEHCISplitPeriodicEndpoint *NewSplitPeriodicEndpoint(AppleUSBEHCITTInfo *myTT,
UInt16 epType, OSObject *pEP,
UInt16 FSBytesUsed, UInt8 period);
virtual void release() const;
void print(int level);
IOReturn FindStartFrameAndStartTime(void);
IOReturn CalculateAllFrameStartTimes(UInt16 *startTimes);
IOReturn SetStartFrameAndStartTime(UInt8 startFrame, UInt16 startTime);
IOReturn CheckPlacementBefore(AppleUSBEHCISplitPeriodicEndpoint *afterEP);
UInt16 CalculateStartTime(UInt16 frameIndex, AppleUSBEHCISplitPeriodicEndpoint *prevSPE, AppleUSBEHCISplitPeriodicEndpoint *postSPE);
UInt16 CalculateNewStartTimeFromChange(AppleUSBEHCISplitPeriodicEndpoint *changeSPE);
AppleUSBEHCISplitPeriodicEndpoint *_nextSPE;
AppleEHCIQueueHead *_intEP; AppleEHCIIsochEndpoint *_isochEP; AppleUSBEHCITTInfo *_myTT;
UInt16 _epType;
UInt16 _FSBytesUsed; UInt16 _startTime; UInt8 _direction; UInt8 _period; UInt8 _startFrame; UInt8 _numSS; UInt8 _numCS; UInt8 _SSflags; UInt _CSflags; bool _wraparound;
};
enum
{
kUSBEHCIFlagsMuliTT = 0x0001
};
#endif