protected UHCI_qTD_Struct* CreateQTD_IO(UHCI_QueueHead_Struct* uQH, uint* next, byte direction, bool toggle, ushort tokenBytes, byte device, byte endpoint, uint packetSize) { #if UHCI_TRACE BasicConsole.WriteLine("UHCI: Create qTD IO"); BasicConsole.DelayOutput(5); #endif UHCI_qTD_Struct* td = AllocQTD(next); UHCI_qTD.SetPacketID(td, direction); if (tokenBytes != 0) { UHCI_qTD.SetMaxLength(td, (ushort)((tokenBytes - 1u) & 0x7FFu)); } else { UHCI_qTD.SetMaxLength(td, 0x7FF); } UHCI_qTD.SetDataToggle(td, toggle); UHCI_qTD.SetC_ERR(td, 0x3); UHCI_qTD.SetDeviceAddress(td, device); UHCI_qTD.SetEndpoint(td, endpoint); AllocQTDbuffer(td); uQH->q_last = td; return td; }
protected void CreateQH(UHCI_QueueHead_Struct* head, uint horizPtr, UHCI_qTD_Struct* firstTD) { #if UHCI_TRACE BasicConsole.WriteLine("UHCI: Create QH"); BasicConsole.DelayOutput(5); #endif head->next = (UHCI_QueueHead_Struct*)UHCI_Consts.BIT_T; // (paging_getPhysAddr((void*)horizPtr) & 0xFFFFFFF0) | BIT_QH; if (firstTD == null) { head->transfer = (UHCI_qTD_Struct*)UHCI_Consts.BIT_T; } else { head->transfer = (UHCI_qTD_Struct*)((uint)VirtMemManager.GetPhysicalAddress(firstTD) & 0xFFFFFFF0); head->q_first = firstTD; } }
protected UHCI_qTD_Struct* CreateQTD_SETUP(UHCI_QueueHead_Struct* uQH, uint* next, bool toggle, ushort tokenBytes, byte type, byte req, byte hiVal, byte loVal, ushort i, ushort length, byte device, byte endpoint, uint packetSize) { #if UHCI_TRACE BasicConsole.WriteLine("UHCI: Create qTD SETUP"); BasicConsole.DelayOutput(5); #endif UHCI_qTD_Struct* td = AllocQTD(next); UHCI_qTD.SetPacketID(td, UHCI_Consts.TD_SETUP); UHCI_qTD.SetDataToggle(td, toggle); UHCI_qTD.SetDeviceAddress(td, device); UHCI_qTD.SetEndpoint(td, endpoint); UHCI_qTD.SetMaxLength(td, (ushort)(tokenBytes - 1)); UHCI_qTD.SetC_ERR(td, 0x3); //TODO: *buffer = USBRequest* request = (USBRequest*)(AllocQTDbuffer(td)); request->type = type; request->request = req; request->valueHi = hiVal; request->valueLo = loVal; request->index = i; request->length = length; uQH->q_last = td; return td; }