#include <ntddk.h>
#include <windef.h>
#include <stdio.h>
#include <hubbusif.h>
#include <usbbusif.h>
#include <usbdlib.h>
#include <drivers/usbport/usbmport.h>
#include "hardware.h"
Go to the source code of this file.
|
| | C_ASSERT (sizeof(EHCI_HCD_TD)==0x100) |
| |
| | C_ASSERT (sizeof(EHCI_STATIC_QH)==0xA0) |
| |
| | C_ASSERT (sizeof(EHCI_HCD_QH)==0x100) |
| |
| VOID NTAPI | EHCI_DumpHwTD (IN PEHCI_HCD_TD TD) |
| |
| VOID NTAPI | EHCI_DumpHwQH (IN PEHCI_HCD_QH QH) |
| |
| MPSTATUS NTAPI | EHCI_RH_ChirpRootPort (IN PVOID ehciExtension, IN USHORT Port) |
| |
| VOID NTAPI | EHCI_RH_GetRootHubData (IN PVOID ohciExtension, IN PVOID rootHubData) |
| |
| MPSTATUS NTAPI | EHCI_RH_GetStatus (IN PVOID ohciExtension, IN PUSHORT Status) |
| |
| MPSTATUS NTAPI | EHCI_RH_GetPortStatus (IN PVOID ohciExtension, IN USHORT Port, IN PUSB_PORT_STATUS_AND_CHANGE PortStatus) |
| |
| MPSTATUS NTAPI | EHCI_RH_GetHubStatus (IN PVOID ohciExtension, IN PUSB_HUB_STATUS_AND_CHANGE HubStatus) |
| |
| MPSTATUS NTAPI | EHCI_RH_SetFeaturePortReset (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_SetFeaturePortPower (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_SetFeaturePortEnable (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_SetFeaturePortSuspend (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortEnable (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortPower (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortSuspend (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortEnableChange (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortConnectChange (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortResetChange (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortSuspendChange (IN PVOID ohciExtension, IN USHORT Port) |
| |
| MPSTATUS NTAPI | EHCI_RH_ClearFeaturePortOvercurrentChange (IN PVOID ohciExtension, IN USHORT Port) |
| |
| VOID NTAPI | EHCI_RH_DisableIrq (IN PVOID ohciExtension) |
| |
| VOID NTAPI | EHCI_RH_EnableIrq (IN PVOID ohciExtension) |
| |
◆ EHCI_DUMMYQH_MAX_PACKET_LENGTH
| #define EHCI_DUMMYQH_MAX_PACKET_LENGTH 64 |
◆ EHCI_FLAGS_CONTROLLER_SUSPEND
| #define EHCI_FLAGS_CONTROLLER_SUSPEND 0x01 |
◆ EHCI_FLAGS_IDLE_SUPPORT
| #define EHCI_FLAGS_IDLE_SUPPORT 0x20 |
◆ EHCI_FRAMES
◆ EHCI_HCD_TD_FLAG_ACTIVE
| #define EHCI_HCD_TD_FLAG_ACTIVE 0x10 |
◆ EHCI_HCD_TD_FLAG_ALLOCATED
| #define EHCI_HCD_TD_FLAG_ALLOCATED 0x01 |
◆ EHCI_HCD_TD_FLAG_DONE
| #define EHCI_HCD_TD_FLAG_DONE 0x08 |
◆ EHCI_HCD_TD_FLAG_DUMMY
| #define EHCI_HCD_TD_FLAG_DUMMY 0x20 |
◆ EHCI_HCD_TD_FLAG_PROCESSED
| #define EHCI_HCD_TD_FLAG_PROCESSED 0x02 |
◆ EHCI_MAX_BULK_TD_COUNT
| #define EHCI_MAX_BULK_TD_COUNT 209 |
◆ EHCI_MAX_BULK_TRANSFER_SIZE
| #define EHCI_MAX_BULK_TRANSFER_SIZE 0x400000 |
◆ EHCI_MAX_CONTROL_TD_COUNT
| #define EHCI_MAX_CONTROL_TD_COUNT 6 |
◆ EHCI_MAX_CONTROL_TRANSFER_SIZE
| #define EHCI_MAX_CONTROL_TRANSFER_SIZE 0x10000 |
◆ EHCI_MAX_FS_ISO_HEADER_BUFFER_SIZE
| #define EHCI_MAX_FS_ISO_HEADER_BUFFER_SIZE 0x1000 |
◆ EHCI_MAX_FS_ISO_TRANSFER_SIZE
| #define EHCI_MAX_FS_ISO_TRANSFER_SIZE 0x40000 |
◆ EHCI_MAX_HC_SYSTEM_ERRORS
| #define EHCI_MAX_HC_SYSTEM_ERRORS 256 |
◆ EHCI_MAX_HS_ISO_HEADER_BUFFER_SIZE
| #define EHCI_MAX_HS_ISO_HEADER_BUFFER_SIZE 0x40000 |
◆ EHCI_MAX_HS_ISO_TRANSFER_SIZE
| #define EHCI_MAX_HS_ISO_TRANSFER_SIZE 0x180000 |
◆ EHCI_MAX_INTERRUPT_TD_COUNT
| #define EHCI_MAX_INTERRUPT_TD_COUNT 4 |
◆ EHCI_MAX_INTERRUPT_TRANSFER_SIZE
| #define EHCI_MAX_INTERRUPT_TRANSFER_SIZE 0x1000 |
◆ EHCI_MICROFRAMES
◆ EHCI_QH_FLAG_CLOSED
| #define EHCI_QH_FLAG_CLOSED 0x02 |
◆ EHCI_QH_FLAG_IN_SCHEDULE
| #define EHCI_QH_FLAG_IN_SCHEDULE 0x01 |
◆ EHCI_QH_FLAG_NUKED
| #define EHCI_QH_FLAG_NUKED 0x20 |
◆ EHCI_QH_FLAG_STATIC
| #define EHCI_QH_FLAG_STATIC 0x04 |
◆ EHCI_QH_FLAG_STATIC_FAST
| #define EHCI_QH_FLAG_STATIC_FAST 0x08 |
◆ EHCI_QH_FLAG_UPDATING
| #define EHCI_QH_FLAG_UPDATING 0x10 |
◆ EHCI_ENDPOINT
◆ EHCI_EXTENSION
◆ EHCI_HC_RESOURCES
◆ EHCI_HCD_QH
◆ EHCI_HCD_TD
◆ EHCI_PERIOD
◆ EHCI_STATIC_QH
◆ EHCI_TRANSFER
◆ PEHCI_ENDPOINT
◆ PEHCI_EXTENSION
◆ PEHCI_HC_RESOURCES
◆ PEHCI_HCD_QH
◆ PEHCI_HCD_TD
◆ PEHCI_PERIOD
◆ PEHCI_STATIC_QH
◆ PEHCI_TRANSFER
◆ C_ASSERT() [1/3]
◆ C_ASSERT() [2/3]
◆ C_ASSERT() [3/3]
◆ EHCI_DumpHwQH()
Definition at line 31 of file debug.c.
32{
33 if (!QH)
34 return;
35
36 DPRINT(
": QH->sqh.HwQH.CurrentTD - %lx\n", QH->sqh.HwQH.CurrentTD);
37 DPRINT(
": QH->sqh.HwQH.NextTD - %lx\n", QH->sqh.HwQH.NextTD);
38 DPRINT(
": QH->sqh.HwQH.AlternateNextTD - %lx\n", QH->sqh.HwQH.AlternateNextTD);
39 DPRINT(
": QH->sqh.HwQH.Token.AsULONG - %lx\n", QH->sqh.HwQH.Token.AsULONG);
40}
Referenced by EHCI_PollHaltedAsyncEndpoint().
◆ EHCI_DumpHwTD()
Definition at line 15 of file debug.c.
16{
17 while (TD)
18 {
20 DPRINT(
": TD->PhysicalAddress - %lx\n", TD->PhysicalAddress);
21 DPRINT(
": TD->HwTD.NextTD - %lx\n", TD->HwTD.NextTD);
22 DPRINT(
": TD->HwTD.AlternateNextTD - %lx\n", TD->HwTD.AlternateNextTD);
23 DPRINT(
": TD->HwTD.Token.AsULONG - %lx\n", TD->HwTD.Token.AsULONG);
24
25 TD = TD->NextHcdTD;
26 }
27}
◆ EHCI_RH_ChirpRootPort()
Definition at line 18 of file roothub.c.
20{
26
29
33
34 PortBit = 1 << (
Port - 1);
35
37 {
40 }
41
43 {
46 }
47
51 {
54 }
55
59 {
60
61
62
65
66 DPRINT_RH(
"EHCI_RH_ChirpRootPort: Companion HC port - %x\n",
Port);
68 }
69
70 DPRINT(
"EHCI_RH_ChirpRootPort: EhciExtension - %p, Port - %x\n",
71 EhciExtension,
73
77
79
80 do
81 {
83
88
90
91 for (ix = 0; ix <= 500; ix += 20)
92 {
95
97
99 break;
100 }
101 }
103
105
107 {
112
114
116
118 DPRINT_RH(
"EHCI_RH_ChirpRootPort: Disable port - %x\n",
Port);
119 }
120 else
121 {
124 DPRINT_RH(
"EHCI_RH_ChirpRootPort: Companion HC port - %x\n",
Port);
125 }
126
128}
#define WRITE_REGISTER_ULONG(r, v)
#define READ_REGISTER_ULONG(r)
#define EHCI_PORT_OWNER_COMPANION_CONTROLLER
#define EHCI_LINE_STATUS_K_STATE_LOW_SPEED
#define KeStallExecutionProcessor(MicroSeconds)
PEHCI_HW_REGISTERS OperationalRegs
EHCI_PORT_STATUS_CONTROL PortControl[15]
PUSBPORT_WAIT UsbPortWait
ULONG CurrentConnectStatus
ULONG PortEnableDisableChange
ULONG ConnectStatusChange
ULONG PortEnabledDisabled
USBPORT_REGISTRATION_PACKET RegPacket
#define MP_STATUS_SUCCESS
Referenced by DriverEntry(), and EHCI_StartController().
◆ EHCI_RH_ClearFeaturePortConnectChange()
Definition at line 591 of file roothub.c.
593{
597
598 DPRINT_RH(
"EHCI_RH_ClearFeaturePortConnectChange: Port - %x\n",
Port);
600
602
604
606 {
610
612 }
613
615
617}
Referenced by DriverEntry().
◆ EHCI_RH_ClearFeaturePortEnable()
◆ EHCI_RH_ClearFeaturePortEnableChange()
Definition at line 566 of file roothub.c.
568{
572
573 DPRINT(
"EHCI_RH_ClearFeaturePortEnableChange: Port - %p\n",
Port);
575
577
579
583
585
587}
Referenced by DriverEntry().
◆ EHCI_RH_ClearFeaturePortOvercurrentChange()
◆ EHCI_RH_ClearFeaturePortPower()
◆ EHCI_RH_ClearFeaturePortResetChange()
Definition at line 621 of file roothub.c.
623{
625
626 DPRINT(
"EHCI_RH_ClearFeaturePortConnectChange: Port - %x\n",
Port);
628
631}
ULONG FinishResetPortBits
Referenced by DriverEntry().
◆ EHCI_RH_ClearFeaturePortSuspend()
Definition at line 538 of file roothub.c.
540{
544
545 DPRINT(
"EHCI_RH_ClearFeaturePortSuspend: Port - %x\n",
Port);
547
550
554
556 50,
560
562}
PUSBPORT_REQUEST_ASYNC_CALLBACK UsbPortRequestAsyncCallback
VOID NTAPI EHCI_RH_PortResumeComplete(IN PVOID ehciExtension, IN PVOID Context)
Referenced by DriverEntry().
◆ EHCI_RH_ClearFeaturePortSuspendChange()
◆ EHCI_RH_DisableIrq()
Definition at line 674 of file roothub.c.
675{
679
681
684
687
690}
EHCI_INTERRUPT_ENABLE InterruptMask
EHCI_INTERRUPT_ENABLE HcInterruptEnable
ULONG PortChangeInterrupt
Referenced by DriverEntry().
◆ EHCI_RH_EnableIrq()
◆ EHCI_RH_GetHubStatus()
◆ EHCI_RH_GetPortStatus()
Definition at line 187 of file roothub.c.
190{
196
198
201
203 {
204 DPRINT_RH(
"EHCI_RH_GetPortStatus: Port - %x, PortSC.AsULONG - %X\n",
207 }
208
210
215 {
216 DPRINT(
"EHCI_RH_GetPortStatus: LowSpeed device detected\n");
220 }
221
223
232
235
236 PortMaskBits = 1 << (
Port - 1);
237
238 if (
status.PortStatus.Usb20PortStatus.CurrentConnectStatus)
239 status.PortStatus.Usb20PortStatus.LowSpeedDeviceAttached = 0;
240
241 status.PortStatus.Usb20PortStatus.HighSpeedDeviceAttached = 1;
242
245
247 status.PortChange.Usb20PortChange.ResetChange = 1;
248
250 status.PortChange.Usb20PortChange.ConnectStatusChange = 1;
251
253 status.PortChange.Usb20PortChange.SuspendChange = 1;
254
256
257 if (
status.PortStatus.Usb20PortStatus.CurrentConnectStatus)
258 {
259 DPRINT_RH(
"EHCI_RH_GetPortStatus: Port - %x, status.AsULONG - %X\n",
262 }
263
265}
#define USB20_PORT_STATUS_RESERVED1_OWNED_BY_COMPANION
Referenced by DriverEntry().
◆ EHCI_RH_GetRootHubData()
Definition at line 132 of file roothub.c.
134{
138
139 DPRINT_RH(
"EHCI_RH_GetRootHubData: EhciExtension - %p, rootHubData - %p\n",
140 EhciExtension,
141 rootHubData);
142
143 RootHubData = rootHubData;
144
146
148
149
151 {
152
154 }
155 else
156 {
157
159 }
160
162
163
165
166
168
170
173}
USBPORT_HUB_CHARACTERISTICS HubCharacteristics
USHORT PartOfCompoundDevice
USHORT OverCurrentProtectionMode
USBPORT_HUB_20_CHARACTERISTICS Usb20HubCharacteristics
Referenced by DriverEntry().
◆ EHCI_RH_GetStatus()
◆ EHCI_RH_SetFeaturePortEnable()
◆ EHCI_RH_SetFeaturePortPower()
◆ EHCI_RH_SetFeaturePortReset()
Definition at line 364 of file roothub.c.
366{
370
371 DPRINT(
"EHCI_RH_SetFeaturePortReset: Port - %x\n",
Port);
373
375
377
379
385
387
389 50,
393
395}
VOID NTAPI EHCI_RH_PortResetComplete(IN PVOID ehciExtension, IN PVOID Context)
Referenced by DriverEntry().
◆ EHCI_RH_SetFeaturePortSuspend()
◆ RegPacket