mirror of
https://github.com/reactos/reactos.git
synced 2024-10-02 15:34:13 +00:00
[USBPORT]
- Correctly distinguish between current hub status and status change in USBPORT_RootHubSCE. Patch by Vadim Galyant. svn path=/trunk/; revision=75234
This commit is contained in:
parent
7d2398b6af
commit
f4e131fa49
|
@ -137,7 +137,7 @@ USBPORT_RootHubClassCommand(IN PDEVICE_OBJECT FdoDevice,
|
||||||
{
|
{
|
||||||
return RHStatus;
|
return RHStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
|
KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
|
||||||
|
|
||||||
MPStatus = Packet->RH_GetPortStatus(FdoExtension->MiniPortExt,
|
MPStatus = Packet->RH_GetPortStatus(FdoExtension->MiniPortExt,
|
||||||
|
@ -170,7 +170,7 @@ USBPORT_RootHubClassCommand(IN PDEVICE_OBJECT FdoDevice,
|
||||||
RHStatus = RH_STATUS_SUCCESS;
|
RHStatus = RH_STATUS_SUCCESS;
|
||||||
return RHStatus;
|
return RHStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Feature == FEATURE_C_HUB_OVER_CURRENT)
|
if (Feature == FEATURE_C_HUB_OVER_CURRENT)
|
||||||
{
|
{
|
||||||
MPStatus = Packet->RH_ClearFeaturePortOvercurrentChange(FdoExtension->MiniPortExt,
|
MPStatus = Packet->RH_ClearFeaturePortOvercurrentChange(FdoExtension->MiniPortExt,
|
||||||
|
@ -178,7 +178,7 @@ USBPORT_RootHubClassCommand(IN PDEVICE_OBJECT FdoDevice,
|
||||||
RHStatus = USBPORT_MPStatusToRHStatus(MPStatus);
|
RHStatus = USBPORT_MPStatusToRHStatus(MPStatus);
|
||||||
return RHStatus;
|
return RHStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
DbgBreakPoint();
|
DbgBreakPoint();
|
||||||
return RHStatus;
|
return RHStatus;
|
||||||
}
|
}
|
||||||
|
@ -436,7 +436,7 @@ USBPORT_RootHubStandardCommand(IN PDEVICE_OBJECT FdoDevice,
|
||||||
!(SetupPacket->bmRequestType.Dir == BMREQUEST_DEVICE_TO_HOST))
|
!(SetupPacket->bmRequestType.Dir == BMREQUEST_DEVICE_TO_HOST))
|
||||||
{
|
{
|
||||||
if (SetupPacket->wValue.W == 0 ||
|
if (SetupPacket->wValue.W == 0 ||
|
||||||
SetupPacket->wValue.W ==
|
SetupPacket->wValue.W ==
|
||||||
PdoExtension->RootHubDescriptors->ConfigDescriptor.bConfigurationValue)
|
PdoExtension->RootHubDescriptors->ConfigDescriptor.bConfigurationValue)
|
||||||
{
|
{
|
||||||
PdoExtension->ConfigurationValue = SetupPacket->wValue.LowByte;
|
PdoExtension->ConfigurationValue = SetupPacket->wValue.LowByte;
|
||||||
|
@ -535,7 +535,7 @@ USBPORT_RootHubSCE(IN PUSBPORT_TRANSFER Transfer)
|
||||||
PUSBPORT_REGISTRATION_PACKET Packet;
|
PUSBPORT_REGISTRATION_PACKET Packet;
|
||||||
ULONG TransferLength;
|
ULONG TransferLength;
|
||||||
USBHUB_PORT_STATUS PortStatus;
|
USBHUB_PORT_STATUS PortStatus;
|
||||||
USB_HUB_STATUS HubStatus;
|
USB_HUB_STATUS_AND_CHANGE HubStatus;
|
||||||
PVOID Buffer;
|
PVOID Buffer;
|
||||||
PULONG AddressBitMap;
|
PULONG AddressBitMap;
|
||||||
ULONG Port;
|
ULONG Port;
|
||||||
|
@ -556,7 +556,7 @@ USBPORT_RootHubSCE(IN PUSBPORT_TRANSFER Transfer)
|
||||||
NumberOfPorts = HubDescriptor->bNumberOfPorts;
|
NumberOfPorts = HubDescriptor->bNumberOfPorts;
|
||||||
|
|
||||||
PortStatus.AsULONG = 0;
|
PortStatus.AsULONG = 0;
|
||||||
HubStatus.AsUshort16 = 0;
|
HubStatus.AsUlong32 = 0;
|
||||||
|
|
||||||
Urb = Transfer->Urb;
|
Urb = Transfer->Urb;
|
||||||
TransferLength = Transfer->TransferParameters.TransferBufferLength;
|
TransferLength = Transfer->TransferParameters.TransferBufferLength;
|
||||||
|
@ -603,7 +603,7 @@ USBPORT_RootHubSCE(IN PUSBPORT_TRANSFER Transfer)
|
||||||
Port,
|
Port,
|
||||||
&PortStatus))
|
&PortStatus))
|
||||||
{
|
{
|
||||||
/* Miniport returned an error */
|
/* Miniport returned an error */
|
||||||
DPRINT1("USBPORT_RootHubSCE: RH_GetPortStatus failed\n");
|
DPRINT1("USBPORT_RootHubSCE: RH_GetPortStatus failed\n");
|
||||||
return RH_STATUS_UNSUCCESSFUL;
|
return RH_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
@ -623,8 +623,8 @@ USBPORT_RootHubSCE(IN PUSBPORT_TRANSFER Transfer)
|
||||||
/* Request the hub status from miniport */
|
/* Request the hub status from miniport */
|
||||||
if (!Packet->RH_GetHubStatus(FdoExtension->MiniPortExt, &HubStatus))
|
if (!Packet->RH_GetHubStatus(FdoExtension->MiniPortExt, &HubStatus))
|
||||||
{
|
{
|
||||||
if (HubStatus.AsUshort16 & (HUB_STATUS_CHANGE_LOCAL_POWER |
|
if (HubStatus.HubChange.LocalPowerChange == 1 ||
|
||||||
HUB_STATUS_CHANGE_OVERCURRENT))
|
HubStatus.HubChange.OverCurrentChange == 1)
|
||||||
{
|
{
|
||||||
/* At the hub status there is a change */
|
/* At the hub status there is a change */
|
||||||
AddressBitMap[0] |= 1;
|
AddressBitMap[0] |= 1;
|
||||||
|
@ -647,7 +647,7 @@ USBPORT_RootHubSCE(IN PUSBPORT_TRANSFER Transfer)
|
||||||
return RHStatus;
|
return RHStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Miniport returned an error */
|
/* Miniport returned an error */
|
||||||
DPRINT1("USBPORT_RootHubSCE: RH_GetHubStatus failed\n");
|
DPRINT1("USBPORT_RootHubSCE: RH_GetHubStatus failed\n");
|
||||||
return RH_STATUS_UNSUCCESSFUL;
|
return RH_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
@ -904,7 +904,7 @@ USBPORT_InvalidateRootHub(PVOID Context)
|
||||||
|
|
||||||
FdoDevice = FdoExtension->CommonExtension.SelfDevice;
|
FdoDevice = FdoExtension->CommonExtension.SelfDevice;
|
||||||
|
|
||||||
if (FdoExtension->Flags & USBPORT_FLAG_HC_SUSPEND &&
|
if (FdoExtension->Flags & USBPORT_FLAG_HC_SUSPEND &&
|
||||||
FdoExtension->Flags & USBPORT_FLAG_HC_WAKE_SUPPORT &&
|
FdoExtension->Flags & USBPORT_FLAG_HC_WAKE_SUPPORT &&
|
||||||
FdoExtension->MiniPortFlags & USBPORT_MPFLAG_SUSPENDED &&
|
FdoExtension->MiniPortFlags & USBPORT_MPFLAG_SUSPENDED &&
|
||||||
FdoExtension->TimerFlags & USBPORT_TMFLAG_WAKE)
|
FdoExtension->TimerFlags & USBPORT_TMFLAG_WAKE)
|
||||||
|
@ -912,7 +912,7 @@ USBPORT_InvalidateRootHub(PVOID Context)
|
||||||
USBPORT_HcQueueWakeDpc(FdoDevice);
|
USBPORT_HcQueueWakeDpc(FdoDevice);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FdoExtension->MiniPortInterface->Packet.RH_DisableIrq(FdoExtension->MiniPortExt);
|
FdoExtension->MiniPortInterface->Packet.RH_DisableIrq(FdoExtension->MiniPortExt);
|
||||||
|
|
||||||
PdoDevice = FdoExtension->RootHubPdo;
|
PdoDevice = FdoExtension->RootHubPdo;
|
||||||
|
|
|
@ -76,11 +76,6 @@ struct {
|
||||||
ULONG AsULONG;
|
ULONG AsULONG;
|
||||||
} USBHUB_PORT_STATUS, *PUSBHUB_PORT_STATUS;
|
} USBHUB_PORT_STATUS, *PUSBHUB_PORT_STATUS;
|
||||||
|
|
||||||
/* Hub status & hub status change bits.
|
|
||||||
See USB 2.0 spec Table 11-19 and Table 11-20. */
|
|
||||||
#define HUB_STATUS_CHANGE_LOCAL_POWER 0x00010000
|
|
||||||
#define HUB_STATUS_CHANGE_OVERCURRENT 0x00020000
|
|
||||||
|
|
||||||
/* Additional USB Class Codes from USB.org */
|
/* Additional USB Class Codes from USB.org */
|
||||||
#define USBC_DEVICE_CLASS_AUDIO_VIDEO 0x10
|
#define USBC_DEVICE_CLASS_AUDIO_VIDEO 0x10
|
||||||
#define USBC_DEVICE_CLASS_BILLBOARD 0x11
|
#define USBC_DEVICE_CLASS_BILLBOARD 0x11
|
||||||
|
@ -232,7 +227,7 @@ typedef MPSTATUS
|
||||||
typedef MPSTATUS
|
typedef MPSTATUS
|
||||||
(NTAPI *PHCI_RH_GET_HUB_STATUS)(
|
(NTAPI *PHCI_RH_GET_HUB_STATUS)(
|
||||||
PVOID,
|
PVOID,
|
||||||
PUSB_HUB_STATUS);
|
PUSB_HUB_STATUS_AND_CHANGE);
|
||||||
|
|
||||||
typedef MPSTATUS
|
typedef MPSTATUS
|
||||||
(NTAPI *PHCI_RH_SET_FEATURE_PORT_RESET)(
|
(NTAPI *PHCI_RH_SET_FEATURE_PORT_RESET)(
|
||||||
|
@ -420,12 +415,12 @@ typedef MPSTATUS
|
||||||
typedef NTSTATUS
|
typedef NTSTATUS
|
||||||
(NTAPI *PUSBPORT_WAIT)(
|
(NTAPI *PUSBPORT_WAIT)(
|
||||||
PVOID,
|
PVOID,
|
||||||
ULONG);
|
ULONG);
|
||||||
|
|
||||||
typedef ULONG
|
typedef ULONG
|
||||||
(NTAPI *PUSBPORT_INVALIDATE_CONTROLLER)(
|
(NTAPI *PUSBPORT_INVALIDATE_CONTROLLER)(
|
||||||
PVOID,
|
PVOID,
|
||||||
ULONG);
|
ULONG);
|
||||||
|
|
||||||
typedef VOID
|
typedef VOID
|
||||||
(NTAPI *PUSBPORT_BUG_CHECK)(PVOID);
|
(NTAPI *PUSBPORT_BUG_CHECK)(PVOID);
|
||||||
|
|
Loading…
Reference in a new issue