AppleUSBXHCI_Bandwidth.h [plain text]
#ifndef AppleUSBXHCI_AppleUSBXHCI_Bandwidth_h
#define AppleUSBXHCI_AppleUSBXHCI_Bandwidth_h
#include <libkern/c++/OSMetaClass.h>
#include <libkern/c++/OSObject.h>
#include <libkern/c++/OSArray.h>
#include "AppleUSBXHCIUIM.h"
enum
{
kMaxFSIsochInterval = 18,
kMaxFSLSInterruptInterval = 10,
kMaxHSSSInterval = 15,
kMaxIntervalTableSize = 15,
kLSPacketOverheadInBlocks = 128,
kFSPacketOverheadInBlocks = 20,
kHSPacketOverheadInBlocks = 26,
kSSInitialOverheadInBlocks = 32,
kSSBurstOverheadInBlocks = 8,
kSSBytesPerBlock = 16,
kHSBytesPerBlock = 4,
kFSBytesPerBlock = 1,
kUplinkDMIBytesPerBlock = 32,
kLSFSBandwidthLimitInBlocks = 1156, kHSBandwidthLimitInBlocks = 1285, kSSBandwidthLimitInBlocks = 3515 };
class TTBandwidthTable : public OSObject
{
OSDeclareDefaultStructors(TTBandwidthTable)
public:
static TTBandwidthTable *WithHubAndPort(UInt8 hubSlot, UInt8 hubPort, bool mtt);
void AddToTable (UInt8 epSpeed, UInt8 epInterval, UInt16 mps);
SInt16 BandwidthAvailable(void);
UInt8 hubSlotID;
UInt8 hubPortNum;
bool mtt;
struct
{
UInt8 totalPackets; UInt8 packetOverhead; UInt16 worstCaseMPS; } interval[kMaxIntervalTableSize];
};
class RootHubPortTable : public OSObject
{
OSDeclareDefaultStructors(RootHubPortTable)
public:
static RootHubPortTable *WithRHPortAndSpeed(UInt8 rhPort, UInt8 portSpeed);
void AddToTable (UInt8 epInterval, UInt16 mps, UInt8 maxBurst, UInt8 mult, UInt8 epSpeed, UInt8 hubSlot, UInt8 hubPort, bool mtt);
void PrintTableInfo(void);
bool IsBandwidthAcceptable(void);
SInt16 BandwidthAvailable(void);
virtual void free(void);
UInt8 rhPort; UInt8 rhPortSpeed; OSArray *ttArray; struct
{
UInt8 totalPackets; UInt8 packetOverhead; UInt16 worstCaseMPS; } interval[kMaxIntervalTableSize];
};
RootHubPortTable *GetRootHubPortTable(OSArray *rhPortArray, UInt8 rhPort);
TTBandwidthTable *GetTTBandwidthTable(OSArray *ttArray, UInt32 hubSlot, UInt32 hubPort, bool multiTT);
#endif