X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FUSB%2FEHCI%2Fehci.h;h=598c8d4978c56e34bf658db89a925f1d109381c6;hb=36b950d17b828c7cd2e5e9dbe5fb4cbded89889c;hp=6c6d8a81970d788228dc03b0179892ed2bbd94e5;hpb=86102de82180e8e3eac12475f065cec5928640dd;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/USB/EHCI/ehci.h b/KernelLand/Modules/USB/EHCI/ehci.h index 6c6d8a81..598c8d49 100644 --- a/KernelLand/Modules/USB/EHCI/ehci.h +++ b/KernelLand/Modules/USB/EHCI/ehci.h @@ -250,19 +250,30 @@ struct sEHCI_QH Uint32 Endpoint; Uint32 EndpointExt; Uint32 CurrentTD; - tEHCI_qTD Overlay; + struct { + Uint32 Link; + Uint32 Link2; + Uint32 Token; + Uint32 Pages[5]; + } Overlay; struct { Uint8 IntOfs; Uint8 IntPeriodPow; tEHCI_QH *Next; } Impl; } __attribute__((aligned(32))); -// sizeof = 48 (64) +// sizeof = 48 (round up to 64) #define PID_OUT 0 #define PID_IN 1 #define PID_SETUP 2 +#define TD_POOL_SIZE (PAGE_SIZE/sizeof(tEHCI_qTD)) +// - 256 addresses * 16 endpoints +#define QH_POOL_SIZE (256*16) +#define QH_POOL_PAGES (QH_POOL_SIZE*sizeof(tEHCI_QH)/PAGE_SIZE) +#define QH_POOL_NPERPAGE (PAGE_SIZE/sizeof(tEHCI_QH)) + struct sEHCI_Controller { tUSBHub *RootHub; @@ -273,6 +284,8 @@ struct sEHCI_Controller tEHCI_CapRegs *CapRegs; tEHCI_OpRegs *OpRegs; + tEHCI_qTD *DeadTD; + int InterruptLoad[PERIODIC_SIZE]; tEHCI_QH *LastAsyncHead; @@ -280,8 +293,10 @@ struct sEHCI_Controller Uint32 *PeriodicQueue; tEHCI_QH *PeriodicQueueV[PERIODIC_SIZE]; - tEHCI_QH *QHPools[(256*16)*sizeof(tEHCI_QH)/PAGE_SIZE]; // [PAGE_SIZE/64] - tEHCI_qTD *TDPool[PAGE_SIZE/sizeof(tEHCI_qTD)]; + tMutex QHPoolMutex; + tEHCI_QH *QHPools[QH_POOL_PAGES]; // [PAGE_SIZE/64] + tMutex TDPoolMutex; + tEHCI_qTD *TDPool; // [TD_POOL_SIZE] }; #endif