mirror of
https://github.com/reactos/reactos.git
synced 2025-05-08 03:07:05 +00:00
[USBHUB] Partially implement USBH_ProcessHubStateChange. CORE-16704
This commit is contained in:
parent
76a075867e
commit
67b3b73d82
2 changed files with 89 additions and 8 deletions
|
@ -1358,6 +1358,57 @@ USBH_SyncGetStatus(IN PDEVICE_OBJECT DeviceObject,
|
||||||
return NtStatus;
|
return NtStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
USBH_SyncGetHubStatus(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
|
IN PUSB_HUB_STATUS_AND_CHANGE HubStatus,
|
||||||
|
IN ULONG Length)
|
||||||
|
{
|
||||||
|
BM_REQUEST_TYPE RequestType;
|
||||||
|
|
||||||
|
DPRINT("USBH_SyncGetHubStatus\n");
|
||||||
|
|
||||||
|
RequestType.B = 0;
|
||||||
|
RequestType.Recipient = BMREQUEST_TO_DEVICE;
|
||||||
|
RequestType.Type = BMREQUEST_CLASS;
|
||||||
|
RequestType.Dir = BMREQUEST_DEVICE_TO_HOST;
|
||||||
|
|
||||||
|
return USBH_Transact(HubExtension,
|
||||||
|
HubStatus,
|
||||||
|
Length,
|
||||||
|
BMREQUEST_DEVICE_TO_HOST,
|
||||||
|
URB_FUNCTION_CLASS_DEVICE,
|
||||||
|
RequestType,
|
||||||
|
USB_REQUEST_GET_STATUS,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
USBH_SyncClearHubStatus(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
|
IN USHORT RequestValue)
|
||||||
|
{
|
||||||
|
BM_REQUEST_TYPE RequestType;
|
||||||
|
|
||||||
|
DPRINT("USBH_SyncClearHubStatus: RequestValue - %x\n", RequestValue);
|
||||||
|
|
||||||
|
RequestType.B = 0;
|
||||||
|
RequestType.Recipient = BMREQUEST_TO_DEVICE;
|
||||||
|
RequestType.Type = BMREQUEST_CLASS;
|
||||||
|
RequestType.Dir = BMREQUEST_HOST_TO_DEVICE;
|
||||||
|
|
||||||
|
return USBH_Transact(HubExtension,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
BMREQUEST_HOST_TO_DEVICE,
|
||||||
|
URB_FUNCTION_CLASS_DEVICE,
|
||||||
|
RequestType,
|
||||||
|
USB_REQUEST_CLEAR_FEATURE,
|
||||||
|
RequestValue,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
USBH_SyncGetPortStatus(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
USBH_SyncGetPortStatus(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
|
@ -1785,6 +1836,35 @@ USBH_ChangeIndicationQueryChange(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
USBH_ProcessHubStateChange(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
|
IN PUSB_HUB_STATUS_AND_CHANGE HubStatus)
|
||||||
|
{
|
||||||
|
USB_HUB_CHANGE HubStatusChange;
|
||||||
|
|
||||||
|
DPRINT_SCE("USBH_ProcessHubStateChange: HubStatus - %lx\n", HubStatus->AsUlong32);
|
||||||
|
|
||||||
|
HubStatusChange = HubStatus->HubChange;
|
||||||
|
|
||||||
|
if (HubStatusChange.LocalPowerChange)
|
||||||
|
{
|
||||||
|
DPRINT1("USBH_ProcessHubStateChange: LocalPowerChange\n");
|
||||||
|
USBH_SyncClearHubStatus(HubExtension,
|
||||||
|
USBHUB_FEATURE_C_HUB_LOCAL_POWER);
|
||||||
|
}
|
||||||
|
else if (HubStatusChange.OverCurrentChange)
|
||||||
|
{
|
||||||
|
USBH_SyncClearHubStatus(HubExtension,
|
||||||
|
USBHUB_FEATURE_C_HUB_OVER_CURRENT);
|
||||||
|
if (HubStatus->HubStatus.OverCurrent)
|
||||||
|
{
|
||||||
|
DPRINT1("USBH_ProcessHubStateChange: OverCurrent UNIMPLEMENTED. FIXME\n");
|
||||||
|
DbgBreakPoint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
USBH_ProcessPortStateChange(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
USBH_ProcessPortStateChange(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
|
@ -2070,6 +2150,7 @@ USBH_ChangeIndicationWorker(IN PUSBHUB_FDO_EXTENSION HubExtension,
|
||||||
PUSBHUB_PORT_PDO_EXTENSION LowerPortExtension;
|
PUSBHUB_PORT_PDO_EXTENSION LowerPortExtension;
|
||||||
PUSBHUB_STATUS_CHANGE_CONTEXT WorkItem;
|
PUSBHUB_STATUS_CHANGE_CONTEXT WorkItem;
|
||||||
USB_PORT_STATUS_AND_CHANGE PortStatus;
|
USB_PORT_STATUS_AND_CHANGE PortStatus;
|
||||||
|
USB_HUB_STATUS_AND_CHANGE HubStatus;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
USHORT Port = 0;
|
USHORT Port = 0;
|
||||||
|
|
||||||
|
@ -2169,13 +2250,13 @@ Enum:
|
||||||
Status = USBH_SyncGetPortStatus(HubExtension,
|
Status = USBH_SyncGetPortStatus(HubExtension,
|
||||||
Port,
|
Port,
|
||||||
&PortStatus,
|
&PortStatus,
|
||||||
sizeof(USB_PORT_STATUS_AND_CHANGE));
|
sizeof(PortStatus));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT1("USBH_ChangeIndicationWorker: USBH_SyncGetHubStatus() UNIMPLEMENTED. FIXME\n");
|
Status = USBH_SyncGetHubStatus(HubExtension,
|
||||||
DbgBreakPoint();
|
&HubStatus,
|
||||||
Status = STATUS_ASSERTION_FAILURE;
|
sizeof(HubStatus));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
|
@ -2188,8 +2269,8 @@ Enum:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT1("USBH_ChangeIndicationWorker: USBH_ProcessHubStateChange() UNIMPLEMENTED. FIXME\n");
|
USBH_ProcessHubStateChange(HubExtension,
|
||||||
DbgBreakPoint();
|
&HubStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
#define USBHUB_ENUM_FLAG_GHOST_DEVICE 0x02
|
#define USBHUB_ENUM_FLAG_GHOST_DEVICE 0x02
|
||||||
|
|
||||||
/* Hub Class Feature Selectors */
|
/* Hub Class Feature Selectors */
|
||||||
#define USBHUB_FEATURE_USBHUB_FEATURE_C_HUB_LOCAL_POWER 0
|
#define USBHUB_FEATURE_C_HUB_LOCAL_POWER 0
|
||||||
#define USBHUB_FEATURE_C_HUB_OVER_CURRENT 1
|
#define USBHUB_FEATURE_C_HUB_OVER_CURRENT 1
|
||||||
|
|
||||||
#define USBHUB_FEATURE_PORT_CONNECTION 0
|
#define USBHUB_FEATURE_PORT_CONNECTION 0
|
||||||
|
|
Loading…
Reference in a new issue