Updated class member names
This commit is contained in:
parent
0fd31a0df6
commit
e79c7fa185
|
@ -53,15 +53,15 @@ USB_SPEED;
|
|||
|
||||
OHCI::OHCI(int Irq)
|
||||
{
|
||||
IrqNum = Irq;
|
||||
m_IrqNum = Irq;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
USB_RegisterPort(&Registers.RhPort[i].UsbPort, i, USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
|
||||
USB_RegisterPort(&m_Registers.RhPort[i].UsbPort, i, USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
|
||||
}
|
||||
OHCI_PacketInit(&UsbPacket);
|
||||
OHCI_PacketInit(&m_UsbPacket);
|
||||
|
||||
UsbFrameTime = 1000000ULL; // 1 ms
|
||||
TicksPerUsbTick = 1000000000ULL / USB_HZ; // 83
|
||||
m_UsbFrameTime = 1000000ULL; // 1 ms
|
||||
m_TicksPerUsbTick = 1000000000ULL / USB_HZ; // 83
|
||||
|
||||
// Do a hardware reset
|
||||
OHCI_StateReset();
|
||||
|
@ -83,32 +83,32 @@ void OHCI::OHCI_StateReset()
|
|||
// Remark: the standard says that RemoteWakeupConnected bit should be set during POST, cleared during hw reset
|
||||
// and ignored during a sw reset. However, VBox sets it on hw reset and XQEMU clears it. Considering that the Xbox
|
||||
// doesn't do POST, I will clear it.
|
||||
Registers.HcRevision = 0x10;
|
||||
Registers.HcControl = 0;
|
||||
Registers.HcControl &= ~OHCI_CTL_HCFS;
|
||||
Registers.HcControl |= Reset;
|
||||
Registers.HcCommandStatus = 0;
|
||||
Registers.HcInterruptStatus = 0;
|
||||
Registers.HcInterrupt = OHCI_INTR_MIE; // enable interrupts
|
||||
m_Registers.HcRevision = 0x10;
|
||||
m_Registers.HcControl = 0;
|
||||
m_Registers.HcControl &= ~OHCI_CTL_HCFS;
|
||||
m_Registers.HcControl |= Reset;
|
||||
m_Registers.HcCommandStatus = 0;
|
||||
m_Registers.HcInterruptStatus = 0;
|
||||
m_Registers.HcInterrupt = OHCI_INTR_MIE; // enable interrupts
|
||||
|
||||
Registers.HcHCCA = 0;
|
||||
Registers.HcPeriodCurrentED = 0;
|
||||
Registers.HcControlHeadED = Registers.HcControlCurrentED = 0;
|
||||
Registers.HcBulkHeadED = Registers.HcBulkCurrentED = 0;
|
||||
Registers.HcDoneHead = 0;
|
||||
m_Registers.HcHCCA = 0;
|
||||
m_Registers.HcPeriodCurrentED = 0;
|
||||
m_Registers.HcControlHeadED = m_Registers.HcControlCurrentED = 0;
|
||||
m_Registers.HcBulkHeadED = m_Registers.HcBulkCurrentED = 0;
|
||||
m_Registers.HcDoneHead = 0;
|
||||
|
||||
Registers.HcFmInterval = 0;
|
||||
Registers.HcFmInterval |= (0x2778 << 16); // TBD according to the standard, using what XQEMU sets (FSLargestDataPacket)
|
||||
Registers.HcFmInterval |= 0x2EDF; // bit-time of a frame. 1 frame = 1 ms (FrameInterval)
|
||||
Registers.HcFmRemaining = 0;
|
||||
Registers.HcFmNumber = 0;
|
||||
Registers.HcPeriodicStart = 0;
|
||||
m_Registers.HcFmInterval = 0;
|
||||
m_Registers.HcFmInterval |= (0x2778 << 16); // TBD according to the standard, using what XQEMU sets (FSLargestDataPacket)
|
||||
m_Registers.HcFmInterval |= 0x2EDF; // bit-time of a frame. 1 frame = 1 ms (FrameInterval)
|
||||
m_Registers.HcFmRemaining = 0;
|
||||
m_Registers.HcFmNumber = 0;
|
||||
m_Registers.HcPeriodicStart = 0;
|
||||
|
||||
Registers.HcRhDescriptorA = OHCI_RHA_NPS | 2; // The xbox lacks the hw to switch off the power on the ports and has 2 ports per HC
|
||||
Registers.HcRhDescriptorB = 0; // The attached devices are removable and use PowerSwitchingMode to control the power on the ports
|
||||
m_Registers.HcRhDescriptorA = OHCI_RHA_NPS | 2; // The xbox lacks the hw to switch off the power on the ports and has 2 ports per HC
|
||||
m_Registers.HcRhDescriptorB = 0; // The attached devices are removable and use PowerSwitchingMode to control the power on the ports
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
OHCIPort* Port = &Registers.RhPort[i];
|
||||
OHCIPort* Port = &m_Registers.RhPort[i];
|
||||
Port->HcRhPortStatus = 0;
|
||||
if (Port->UsbPort.Dev && Port->UsbPort.Dev->Attached) {
|
||||
USB_PortReset(&Port->UsbPort);
|
||||
|
@ -123,7 +123,7 @@ void OHCI::OHCI_StateReset()
|
|||
void OHCI::OHCI_BusStart()
|
||||
{
|
||||
// Create the end-of-frame timer. Let's try a factor of 50 (1 virtual ms -> 50 real ms)
|
||||
pEOFtimer = Timer_Create(OHCI_FrameBoundaryWrapper, this, 50);
|
||||
m_pEOFtimer = Timer_Create(OHCI_FrameBoundaryWrapper, this, 50);
|
||||
|
||||
DbgPrintf("Ohci: Operational mode event\n");
|
||||
|
||||
|
@ -133,25 +133,25 @@ void OHCI::OHCI_BusStart()
|
|||
|
||||
void OHCI::OHCI_BusStop()
|
||||
{
|
||||
if (pEOFtimer) {
|
||||
if (m_pEOFtimer) {
|
||||
// Delete existing EOF timer
|
||||
Timer_Exit(pEOFtimer);
|
||||
Timer_Exit(m_pEOFtimer);
|
||||
}
|
||||
pEOFtimer = nullptr;
|
||||
m_pEOFtimer = nullptr;
|
||||
}
|
||||
|
||||
void OHCI::OHCI_SOF()
|
||||
{
|
||||
SOFtime = GetTime_NS(pEOFtimer); // set current SOF time
|
||||
Timer_Start(pEOFtimer, SOFtime + UsbFrameTime); // make timer expire at SOF + 1 virtual ms from now
|
||||
m_SOFtime = GetTime_NS(m_pEOFtimer); // set current SOF time
|
||||
Timer_Start(m_pEOFtimer, m_SOFtime + m_UsbFrameTime); // make timer expire at SOF + 1 virtual ms from now
|
||||
OHCI_SetInterrupt(OHCI_INTR_SF);
|
||||
}
|
||||
|
||||
void OHCI::OHCI_ChangeState(uint32_t Value)
|
||||
{
|
||||
uint32_t OldState = Registers.HcControl & OHCI_CTL_HCFS;
|
||||
Registers.HcControl = Value;
|
||||
uint32_t NewState = Registers.HcControl & OHCI_CTL_HCFS;
|
||||
uint32_t OldState = m_Registers.HcControl & OHCI_CTL_HCFS;
|
||||
m_Registers.HcControl = Value;
|
||||
uint32_t NewState = m_Registers.HcControl & OHCI_CTL_HCFS;
|
||||
|
||||
// no state change
|
||||
if (OldState == NewState) {
|
||||
|
@ -204,56 +204,56 @@ uint32_t OHCI::OHCI_ReadRegister(xbaddr Addr)
|
|||
switch (Addr >> 2) // read the register
|
||||
{
|
||||
case 0: // HcRevision
|
||||
ret = Registers.HcRevision;
|
||||
ret = m_Registers.HcRevision;
|
||||
break;
|
||||
|
||||
case 1: // HcControl
|
||||
ret = Registers.HcControl;
|
||||
ret = m_Registers.HcControl;
|
||||
break;
|
||||
|
||||
case 2: // HcCommandStatus
|
||||
ret = Registers.HcCommandStatus;
|
||||
ret = m_Registers.HcCommandStatus;
|
||||
break;
|
||||
|
||||
case 3: // HcInterruptStatus
|
||||
ret = Registers.HcInterruptStatus;
|
||||
ret = m_Registers.HcInterruptStatus;
|
||||
break;
|
||||
|
||||
case 4: // HcInterruptEnable
|
||||
case 5: // HcInterruptDisable
|
||||
ret = Registers.HcInterrupt;
|
||||
ret = m_Registers.HcInterrupt;
|
||||
break;
|
||||
|
||||
case 6: // HcHCCA
|
||||
ret = Registers.HcHCCA;
|
||||
ret = m_Registers.HcHCCA;
|
||||
break;
|
||||
|
||||
case 7: // HcPeriodCurrentED
|
||||
ret = Registers.HcPeriodCurrentED;
|
||||
ret = m_Registers.HcPeriodCurrentED;
|
||||
break;
|
||||
|
||||
case 8: // HcControlHeadED
|
||||
ret = Registers.HcControlHeadED;
|
||||
ret = m_Registers.HcControlHeadED;
|
||||
break;
|
||||
|
||||
case 9: // HcControlCurrentED
|
||||
ret = Registers.HcControlCurrentED;
|
||||
ret = m_Registers.HcControlCurrentED;
|
||||
break;
|
||||
|
||||
case 10: // HcBulkHeadED
|
||||
ret = Registers.HcBulkHeadED;
|
||||
ret = m_Registers.HcBulkHeadED;
|
||||
break;
|
||||
|
||||
case 11: // HcBulkCurrentED
|
||||
ret = Registers.HcBulkCurrentED;
|
||||
ret = m_Registers.HcBulkCurrentED;
|
||||
break;
|
||||
|
||||
case 12: // HcDoneHead
|
||||
ret = Registers.HcDoneHead;
|
||||
ret = m_Registers.HcDoneHead;
|
||||
break;
|
||||
|
||||
case 13: // HcFmInterval
|
||||
ret = Registers.HcFmInterval;
|
||||
ret = m_Registers.HcFmInterval;
|
||||
break;
|
||||
|
||||
case 14: // HcFmRemaining
|
||||
|
@ -261,36 +261,36 @@ uint32_t OHCI::OHCI_ReadRegister(xbaddr Addr)
|
|||
break;
|
||||
|
||||
case 15: // HcFmNumber
|
||||
ret = Registers.HcFmNumber;
|
||||
ret = m_Registers.HcFmNumber;
|
||||
break;
|
||||
|
||||
case 16: // HcPeriodicStart
|
||||
ret = Registers.HcPeriodicStart;
|
||||
ret = m_Registers.HcPeriodicStart;
|
||||
break;
|
||||
|
||||
case 17: // HcLSThreshold
|
||||
ret = Registers.HcLSThreshold;
|
||||
ret = m_Registers.HcLSThreshold;
|
||||
break;
|
||||
|
||||
case 18: // HcRhDescriptorA
|
||||
ret = Registers.HcRhDescriptorA;
|
||||
ret = m_Registers.HcRhDescriptorA;
|
||||
break;
|
||||
|
||||
case 19: // HcRhDescriptorB
|
||||
ret = Registers.HcRhDescriptorB;
|
||||
ret = m_Registers.HcRhDescriptorB;
|
||||
break;
|
||||
|
||||
case 20: // HcRhStatus
|
||||
ret = Registers.HcRhStatus;
|
||||
ret = m_Registers.HcRhStatus;
|
||||
break;
|
||||
|
||||
// Always report that the port power is on since the Xbox cannot switch off the electrical current to it
|
||||
case 21: // RhPort 0
|
||||
ret = Registers.RhPort[0].HcRhPortStatus | OHCI_PORT_PPS;
|
||||
ret = m_Registers.RhPort[0].HcRhPortStatus | OHCI_PORT_PPS;
|
||||
break;
|
||||
|
||||
case 22: // RhPort 1
|
||||
ret = Registers.RhPort[1].HcRhPortStatus | OHCI_PORT_PPS;
|
||||
ret = m_Registers.RhPort[1].HcRhPortStatus | OHCI_PORT_PPS;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -325,9 +325,9 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
|
|||
|
||||
// From the standard: "The Host Controller must ensure that bits written as 1 become set
|
||||
// in the register while bits written as 0 remain unchanged in the register."
|
||||
Registers.HcCommandStatus |= Value;
|
||||
m_Registers.HcCommandStatus |= Value;
|
||||
|
||||
if (Registers.HcCommandStatus & OHCI_STATUS_HCR) {
|
||||
if (m_Registers.HcCommandStatus & OHCI_STATUS_HCR) {
|
||||
// Do a hardware reset
|
||||
OHCI_StateReset();
|
||||
}
|
||||
|
@ -335,23 +335,23 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
|
|||
break;
|
||||
|
||||
case 3: // HcInterruptStatus
|
||||
Registers.HcInterruptStatus &= ~Value;
|
||||
m_Registers.HcInterruptStatus &= ~Value;
|
||||
OHCI_UpdateInterrupt();
|
||||
break;
|
||||
|
||||
case 4: // HcInterruptEnable
|
||||
Registers.HcInterrupt |= Value;
|
||||
m_Registers.HcInterrupt |= Value;
|
||||
OHCI_UpdateInterrupt();
|
||||
break;
|
||||
|
||||
case 5: // HcInterruptDisable
|
||||
Registers.HcInterrupt &= ~Value;
|
||||
m_Registers.HcInterrupt &= ~Value;
|
||||
OHCI_UpdateInterrupt();
|
||||
break;
|
||||
|
||||
case 6: // HcHCCA
|
||||
// The standard says the minimum alignment is 256 bytes and so bits 0 through 7 are always zero
|
||||
Registers.HcHCCA = Value & OHCI_HCCA_MASK;
|
||||
m_Registers.HcHCCA = Value & OHCI_HCCA_MASK;
|
||||
break;
|
||||
|
||||
case 7: // HcPeriodCurrentED
|
||||
|
@ -359,19 +359,19 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
|
|||
break;
|
||||
|
||||
case 8: // HcControlHeadED
|
||||
Registers.HcControlHeadED = Value & OHCI_EDPTR_MASK;
|
||||
m_Registers.HcControlHeadED = Value & OHCI_EDPTR_MASK;
|
||||
break;
|
||||
|
||||
case 9: // HcControlCurrentED
|
||||
Registers.HcControlCurrentED = Value & OHCI_EDPTR_MASK;
|
||||
m_Registers.HcControlCurrentED = Value & OHCI_EDPTR_MASK;
|
||||
break;
|
||||
|
||||
case 10: // HcBulkHeadED
|
||||
Registers.HcBulkHeadED = Value & OHCI_EDPTR_MASK;
|
||||
m_Registers.HcBulkHeadED = Value & OHCI_EDPTR_MASK;
|
||||
break;
|
||||
|
||||
case 11: // HcBulkCurrentED
|
||||
Registers.HcBulkCurrentED = Value & OHCI_EDPTR_MASK;
|
||||
m_Registers.HcBulkCurrentED = Value & OHCI_EDPTR_MASK;
|
||||
break;
|
||||
|
||||
case 12: // HcDoneHead
|
||||
|
@ -380,10 +380,10 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
|
|||
|
||||
case 13: // HcFmInterval
|
||||
{
|
||||
if ((Value & OHCI_FMI_FIT) != (Registers.HcFmInterval & OHCI_FMI_FIT)) {
|
||||
if ((Value & OHCI_FMI_FIT) != (m_Registers.HcFmInterval & OHCI_FMI_FIT)) {
|
||||
DbgPrintf("Ohci: Changing frame interval duration. New value is %u\n", Value & OHCI_FMI_FI);
|
||||
}
|
||||
Registers.HcFmInterval = Value & ~0xC000;
|
||||
m_Registers.HcFmInterval = Value & ~0xC000;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -396,16 +396,16 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
|
|||
break;
|
||||
|
||||
case 16: // HcPeriodicStart
|
||||
Registers.HcPeriodicStart = Value & 0x3FFF;
|
||||
m_Registers.HcPeriodicStart = Value & 0x3FFF;
|
||||
break;
|
||||
|
||||
case 17: // HcLSThreshold
|
||||
Registers.HcLSThreshold = Value & 0xFFF;
|
||||
m_Registers.HcLSThreshold = Value & 0xFFF;
|
||||
break;
|
||||
|
||||
case 18: // HcRhDescriptorA
|
||||
Registers.HcRhDescriptorA &= ~OHCI_RHA_RW_MASK;
|
||||
Registers.HcRhDescriptorA |= Value & OHCI_RHA_RW_MASK; // ??
|
||||
m_Registers.HcRhDescriptorA &= ~OHCI_RHA_RW_MASK;
|
||||
m_Registers.HcRhDescriptorA |= Value & OHCI_RHA_RW_MASK; // ??
|
||||
break;
|
||||
|
||||
case 19: // HcRhDescriptorB
|
||||
|
@ -432,15 +432,15 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
|
|||
|
||||
void OHCI::OHCI_UpdateInterrupt()
|
||||
{
|
||||
if ((Registers.HcInterrupt & OHCI_INTR_MIE) && (Registers.HcInterruptStatus & Registers.HcInterrupt)) {
|
||||
HalSystemInterrupts[IrqNum].Assert(true);
|
||||
if ((m_Registers.HcInterrupt & OHCI_INTR_MIE) && (m_Registers.HcInterruptStatus & m_Registers.HcInterrupt)) {
|
||||
HalSystemInterrupts[m_IrqNum].Assert(true);
|
||||
}
|
||||
else { HalSystemInterrupts[IrqNum].Assert(false); }
|
||||
else { HalSystemInterrupts[m_IrqNum].Assert(false); }
|
||||
}
|
||||
|
||||
void OHCI::OHCI_SetInterrupt(uint32_t Value)
|
||||
{
|
||||
Registers.HcInterruptStatus |= Value;
|
||||
m_Registers.HcInterruptStatus |= Value;
|
||||
OHCI_UpdateInterrupt();
|
||||
}
|
||||
|
||||
|
@ -450,7 +450,7 @@ void OHCI::OHCI_StopEndpoints()
|
|||
int i, j;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
dev = Registers.RhPort[i].UsbPort.Dev;
|
||||
dev = m_Registers.RhPort[i].UsbPort.Dev;
|
||||
if (dev && dev->Attached) {
|
||||
USB_DeviceEPstopped(dev, &dev->EP_ctl);
|
||||
for (j = 0; j < USB_MAX_ENDPOINTS; j++) {
|
||||
|
@ -465,11 +465,11 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value)
|
|||
{
|
||||
uint32_t old_state;
|
||||
|
||||
old_state = Registers.HcRhStatus;
|
||||
old_state = m_Registers.HcRhStatus;
|
||||
|
||||
// write 1 to clear OCIC
|
||||
if (Value & OHCI_RHS_OCIC) {
|
||||
Registers.HcRhStatus &= ~OHCI_RHS_OCIC;
|
||||
m_Registers.HcRhStatus &= ~OHCI_RHS_OCIC;
|
||||
}
|
||||
|
||||
if (Value & OHCI_RHS_LPS) {
|
||||
|
@ -491,14 +491,14 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value)
|
|||
}
|
||||
|
||||
if (Value & OHCI_RHS_DRWE) {
|
||||
Registers.HcRhStatus |= OHCI_RHS_DRWE;
|
||||
m_Registers.HcRhStatus |= OHCI_RHS_DRWE;
|
||||
}
|
||||
|
||||
if (Value & OHCI_RHS_CRWE) {
|
||||
Registers.HcRhStatus &= ~OHCI_RHS_DRWE;
|
||||
m_Registers.HcRhStatus &= ~OHCI_RHS_DRWE;
|
||||
}
|
||||
|
||||
if (old_state != Registers.HcRhStatus) {
|
||||
if (old_state != m_Registers.HcRhStatus) {
|
||||
OHCI_SetInterrupt(OHCI_INTR_RHSC);
|
||||
}
|
||||
}
|
||||
|
@ -506,10 +506,10 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value)
|
|||
void OHCI::OHCI_PortPower(int i, int p)
|
||||
{
|
||||
if (p) {
|
||||
Registers.RhPort[i].HcRhPortStatus |= OHCI_PORT_PPS;
|
||||
m_Registers.RhPort[i].HcRhPortStatus |= OHCI_PORT_PPS;
|
||||
}
|
||||
else {
|
||||
Registers.RhPort[i].HcRhPortStatus &= ~(OHCI_PORT_PPS |
|
||||
m_Registers.RhPort[i].HcRhPortStatus &= ~(OHCI_PORT_PPS |
|
||||
OHCI_PORT_CCS |
|
||||
OHCI_PORT_PSS |
|
||||
OHCI_PORT_PRS);
|
||||
|
@ -521,7 +521,7 @@ void OHCI::OHCI_PortSetStatus(int PortNum, uint32_t Value)
|
|||
uint32_t old_state;
|
||||
OHCIPort* port;
|
||||
|
||||
port = &Registers.RhPort[PortNum];
|
||||
port = &m_Registers.RhPort[PortNum];
|
||||
old_state = port->HcRhPortStatus;
|
||||
|
||||
// Write to clear CSC, PESC, PSSC, OCIC, PRSC
|
||||
|
@ -571,26 +571,26 @@ int OHCI::OHCI_PortSetIfConnected(int i, uint32_t Value)
|
|||
}
|
||||
|
||||
// If CurrentConnectStatus is cleared we set ConnectStatusChange
|
||||
if (!(Registers.RhPort[i].HcRhPortStatus & OHCI_PORT_CCS)) {
|
||||
Registers.RhPort[i].HcRhPortStatus |= OHCI_PORT_CSC;
|
||||
if (Registers.HcRhStatus & OHCI_RHS_DRWE) {
|
||||
if (!(m_Registers.RhPort[i].HcRhPortStatus & OHCI_PORT_CCS)) {
|
||||
m_Registers.RhPort[i].HcRhPortStatus |= OHCI_PORT_CSC;
|
||||
if (m_Registers.HcRhStatus & OHCI_RHS_DRWE) {
|
||||
// TODO: CSC is a wakeup event
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (Registers.RhPort[i].HcRhPortStatus & Value)
|
||||
if (m_Registers.RhPort[i].HcRhPortStatus & Value)
|
||||
ret = 0;
|
||||
|
||||
// set the bit
|
||||
Registers.RhPort[i].HcRhPortStatus |= Value;
|
||||
m_Registers.RhPort[i].HcRhPortStatus |= Value;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void OHCI::OHCI_Detach(USBPort* Port)
|
||||
{
|
||||
OHCIPort* port = &Registers.RhPort[Port->PortIndex];
|
||||
OHCIPort* port = &m_Registers.RhPort[Port->PortIndex];
|
||||
uint32_t old_state = port->HcRhPortStatus;
|
||||
|
||||
ohci_async_cancel_device(Port->Dev);
|
||||
|
@ -615,7 +615,7 @@ void OHCI::OHCI_Detach(USBPort* Port)
|
|||
|
||||
void OHCI::OHCI_Attach(USBPort* Port)
|
||||
{
|
||||
OHCIPort* port = &Registers.RhPort[Port->PortIndex];
|
||||
OHCIPort* port = &m_Registers.RhPort[Port->PortIndex];
|
||||
uint32_t old_state = port->HcRhPortStatus;
|
||||
|
||||
// set connect status
|
||||
|
@ -630,7 +630,7 @@ void OHCI::OHCI_Attach(USBPort* Port)
|
|||
}
|
||||
|
||||
// notify of remote-wakeup
|
||||
if ((Registers.HcControl & OHCI_CTL_HCFS) == Suspend) {
|
||||
if ((m_Registers.HcControl & OHCI_CTL_HCFS) == Suspend) {
|
||||
OHCI_SetInterrupt(OHCI_INTR_RD);
|
||||
}
|
||||
|
||||
|
|
|
@ -185,19 +185,19 @@ class OHCI
|
|||
|
||||
private:
|
||||
// all the registers available on the OHCI standard
|
||||
OHCI_Registers Registers;
|
||||
OHCI_Registers m_Registers;
|
||||
// end-of-frame timer
|
||||
TimerObject* pEOFtimer;
|
||||
TimerObject* m_pEOFtimer;
|
||||
// time at which a SOF was sent
|
||||
uint64_t SOFtime;
|
||||
uint64_t m_SOFtime;
|
||||
// the duration of a usb frame
|
||||
uint64_t UsbFrameTime;
|
||||
uint64_t m_UsbFrameTime;
|
||||
// ticks per usb tick
|
||||
uint64_t TicksPerUsbTick;
|
||||
uint64_t m_TicksPerUsbTick;
|
||||
// usb packet
|
||||
USBPacket UsbPacket;
|
||||
USBPacket m_UsbPacket;
|
||||
// irq number
|
||||
int IrqNum;
|
||||
int m_IrqNum;
|
||||
|
||||
// EOF callback wrapper
|
||||
static void OHCI_FrameBoundaryWrapper(void* pVoid);
|
||||
|
|
Loading…
Reference in New Issue