public static ushort GetMaxLength(UHCI_qTD_Struct* qTD) { return (ushort)((qTD->u2 & 0xFFE00000) >> 21); }
public static bool GetDataToggle(UHCI_qTD_Struct* qTD) { return (qTD->u2 & Utils.BIT(19)) != 0; }
public static void SetDataToggle(UHCI_qTD_Struct* qTD, bool val) { if (val) { qTD->u2 |= Utils.BIT(19); } else { qTD->u2 &= ~Utils.BIT(19); } }
public static byte GetEndpoint(UHCI_qTD_Struct* qTD) { return (byte)((qTD->u2 & 0x00078000) >> 15); }
public static void SetEndpoint(UHCI_qTD_Struct* qTD, byte val) { qTD->u2 = (qTD->u2 & 0xFFF87FFF) | ((uint)(val & 0x0F) << 15); }
//u1 public static bool GetActive(UHCI_qTD_Struct* qTD) { return (qTD->u1 & Utils.BIT(23)) != 0; }
public static void SetDeviceAddress(UHCI_qTD_Struct* qTD, byte val) { qTD->u2 = (qTD->u2 & 0xFFFF80FF) | ((uint)(val & 0x7F) << 8); }
//u2 public static byte GetPacketID(UHCI_qTD_Struct* qTD) { return (byte)(qTD->u2); }
public static void SetPacketID(UHCI_qTD_Struct* qTD, byte val) { qTD->u2 = (qTD->u2 & 0xFFFFFF00) | val; }
public static byte GetC_ERR(UHCI_qTD_Struct* qTD) { return (byte)((qTD->u1 & 0x18000000) >> 27); }
public static void SetC_ERR(UHCI_qTD_Struct* qTD, byte val) { qTD->u1 = (qTD->u1 & 0xE7FFFFFF) | ((uint)(val & 0x03) << 27); }
public static void SetIntOnComplete(UHCI_qTD_Struct* qTD, bool val) { if (val) { qTD->u1 |= Utils.BIT(24); } else { qTD->u1 &= ~Utils.BIT(24); } }
public static bool GetIntOnComplete(UHCI_qTD_Struct* qTD) { return (qTD->u1 & Utils.BIT(24)) != 0; }
public static void SetActive(UHCI_qTD_Struct* qTD, bool val) { if (val) { qTD->u1 |= Utils.BIT(23); } else { qTD->u1 &= ~Utils.BIT(23); } }
public static void SetMaxLength(UHCI_qTD_Struct* qTD, ushort val) { qTD->u2 = (qTD->u2 & 0x001FFFFF) | ((uint)val << 21); }
public static byte GetDeviceAddress(UHCI_qTD_Struct* qTD) { return (byte)((qTD->u2 & 0x00007F00) >> 8); }
protected static void* AllocQTDbuffer(UHCI_qTD_Struct* td) { #if UHCI_TRACE BasicConsole.WriteLine("UHCI: Alloc qTD Buffer"); BasicConsole.DelayOutput(5); #endif td->virtBuffer = FOS_System.Heap.AllocZeroedAPB(0x1000, 0x1000, "UHCI : AllocQTDBuffer"); td->buffer = (uint*)VirtMemManager.GetPhysicalAddress(td->virtBuffer); return td->virtBuffer; }
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; } }