+++ /dev/null
-/*
- * PROJECT: ReactOS USB EHCI Miniport Driver
- * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
- * PURPOSE: USBEHCI declarations
- * COPYRIGHT: Copyright 2017-2018 Vadim Galyant <vgal@rambler.ru>
- */
-
-#ifndef USBEHCI_H__
-#define USBEHCI_H__
-
-#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"
-
-extern USBPORT_REGISTRATION_PACKET RegPacket;
-
-#define EHCI_MAX_CONTROL_TRANSFER_SIZE 0x10000
-#define EHCI_MAX_INTERRUPT_TRANSFER_SIZE 0x1000
-#define EHCI_MAX_BULK_TRANSFER_SIZE 0x400000
-#define EHCI_MAX_FS_ISO_TRANSFER_SIZE 0x40000
-#define EHCI_MAX_HS_ISO_TRANSFER_SIZE 0x180000
-
-#define EHCI_MAX_FS_ISO_HEADER_BUFFER_SIZE 0x1000
-#define EHCI_MAX_HS_ISO_HEADER_BUFFER_SIZE 0x40000
-
-#define EHCI_MAX_CONTROL_TD_COUNT 6
-#define EHCI_MAX_INTERRUPT_TD_COUNT 4
-#define EHCI_MAX_BULK_TD_COUNT 209
-
-#define EHCI_FRAMES 32
-#define EHCI_MICROFRAMES 8
-
-#define EHCI_MAX_HC_SYSTEM_ERRORS 256
-
-typedef struct _EHCI_PERIOD {
- UCHAR Period;
- UCHAR PeriodIdx;
- UCHAR ScheduleMask;
-} EHCI_PERIOD, *PEHCI_PERIOD;
-
-/* Transfer Descriptor */
-#define EHCI_HCD_TD_FLAG_ALLOCATED 0x01
-#define EHCI_HCD_TD_FLAG_PROCESSED 0x02
-#define EHCI_HCD_TD_FLAG_DONE 0x08
-#define EHCI_HCD_TD_FLAG_ACTIVE 0x10
-#define EHCI_HCD_TD_FLAG_DUMMY 0x20
-
-struct _EHCI_HCD_QH;
-struct _EHCI_ENDPOINT;
-struct _EHCI_TRANSFER;
-
-typedef struct _EHCI_HCD_TD {
- /* Hardware*/
- EHCI_QUEUE_TD HwTD;
- /* Software */
- ULONG PhysicalAddress;
- ULONG TdFlags;
- struct _EHCI_ENDPOINT * EhciEndpoint;
- struct _EHCI_TRANSFER * EhciTransfer;
- struct _EHCI_HCD_TD * NextHcdTD;
- struct _EHCI_HCD_TD * AltNextHcdTD;
- USB_DEFAULT_PIPE_SETUP_PACKET SetupPacket;
- ULONG LengthThisTD;
- LIST_ENTRY DoneLink;
-#ifdef _WIN64
- ULONG Pad[31];
-#else
- ULONG Pad[40];
-#endif
-} EHCI_HCD_TD, *PEHCI_HCD_TD;
-
-C_ASSERT(sizeof(EHCI_HCD_TD) == 0x100);
-
-/* Queue Head */
-#define EHCI_QH_FLAG_IN_SCHEDULE 0x01
-#define EHCI_QH_FLAG_CLOSED 0x02
-#define EHCI_QH_FLAG_STATIC 0x04
-#define EHCI_QH_FLAG_STATIC_FAST 0x08
-#define EHCI_QH_FLAG_UPDATING 0x10
-#define EHCI_QH_FLAG_NUKED 0x20
-
-typedef struct _EHCI_STATIC_QH {
- /* Hardware part */
- EHCI_QUEUE_HEAD HwQH;
- /* Software part */
- ULONG QhFlags;
- ULONG PhysicalAddress;
- struct _EHCI_HCD_QH * PrevHead;
-#ifndef _WIN64
- ULONG Pad2;
-#endif
- struct _EHCI_HCD_QH * NextHead;
-#ifndef _WIN64
- ULONG Pad3;
-#endif
- struct _EHCI_STATIC_QH * StaticQH;
-#ifndef _WIN64
- ULONG Pad4;
-#endif
- ULONG Period;
- ULONG Ordinal;
-#ifdef _WIN64
- ULONG Pad[11];
-#else
- ULONG Pad[13];
-#endif
-} EHCI_STATIC_QH, *PEHCI_STATIC_QH;
-
-C_ASSERT(sizeof(EHCI_STATIC_QH) == 0xA0);
-
-#define EHCI_DUMMYQH_MAX_PACKET_LENGTH 64
-
-typedef struct _EHCI_HCD_QH {
- EHCI_STATIC_QH sqh;
-#ifdef _WIN64
- ULONG Pad[23];
-#else
- ULONG Pad[24];
-#endif
-} EHCI_HCD_QH, *PEHCI_HCD_QH;
-
-C_ASSERT(sizeof(EHCI_HCD_QH) == 0x100);
-
-/* EHCI Endpoint follows USBPORT Endpoint */
-typedef struct _EHCI_ENDPOINT {
- ULONG Reserved;
- ULONG EndpointStatus;
- ULONG EndpointState;
- USBPORT_ENDPOINT_PROPERTIES EndpointProperties;
- PVOID DmaBufferVA;
- ULONG DmaBufferPA;
- PEHCI_HCD_TD FirstTD;
- ULONG MaxTDs;
- ULONG PendingTDs;
- ULONG RemainTDs;
- PEHCI_HCD_QH QH;
- PEHCI_HCD_TD HcdHeadP;
- PEHCI_HCD_TD HcdTailP;
- LIST_ENTRY ListTDs;
- const EHCI_PERIOD * PeriodTable;
- PEHCI_STATIC_QH StaticQH;
-} EHCI_ENDPOINT, *PEHCI_ENDPOINT;
-
-/* EHCI Transfer follows USBPORT Transfer */
-typedef struct _EHCI_TRANSFER {
- ULONG Reserved;
- PUSBPORT_TRANSFER_PARAMETERS TransferParameters;
- ULONG USBDStatus;
- ULONG TransferLen;
- PEHCI_ENDPOINT EhciEndpoint;
- ULONG PendingTDs;
- ULONG TransferOnAsyncList;
-} EHCI_TRANSFER, *PEHCI_TRANSFER;
-
-typedef struct _EHCI_HC_RESOURCES {
- ULONG PeriodicFrameList[EHCI_FRAME_LIST_MAX_ENTRIES]; // 4K-page aligned array
- EHCI_STATIC_QH AsyncHead;
- EHCI_STATIC_QH PeriodicHead[64];
- UCHAR Padded[0x160];
- EHCI_HCD_QH IsoDummyQH[EHCI_FRAME_LIST_MAX_ENTRIES];
-} EHCI_HC_RESOURCES, *PEHCI_HC_RESOURCES;
-
-#define EHCI_FLAGS_CONTROLLER_SUSPEND 0x01
-#define EHCI_FLAGS_IDLE_SUPPORT 0x20
-
-/* EHCI Extension follows USBPORT Extension */
-typedef struct _EHCI_EXTENSION {
- ULONG Reserved;
- ULONG Flags;
- PEHCI_HC_CAPABILITY_REGISTERS CapabilityRegisters;
- PEHCI_HW_REGISTERS OperationalRegs;
- UCHAR FrameLengthAdjustment;
- BOOLEAN IsStarted;
- USHORT HcSystemErrors;
- ULONG PortRoutingControl;
- USHORT NumberOfPorts;
- USHORT PortPowerControl;
- EHCI_INTERRUPT_ENABLE InterruptMask;
- EHCI_INTERRUPT_ENABLE InterruptStatus;
- /* Schedule */
- PEHCI_HC_RESOURCES HcResourcesVA;
- ULONG HcResourcesPA;
- PEHCI_STATIC_QH AsyncHead;
- PEHCI_STATIC_QH PeriodicHead[64];
- PEHCI_HCD_QH IsoDummyQHListVA;
- ULONG IsoDummyQHListPA;
- ULONG FrameIndex;
- ULONG FrameHighPart;
- /* Root Hub Bits */
- ULONG ConnectPortBits;
- ULONG SuspendPortBits;
- ULONG ResetPortBits;
- ULONG FinishResetPortBits;
- /* Transfers */
- ULONG PendingTransfers;
- /* Lock Queue */
- PEHCI_HCD_QH PrevQH;
- PEHCI_HCD_QH LockQH;
- PEHCI_HCD_QH NextQH;
- /* Registers Copy Backup */
- ULONG BackupPeriodiclistbase;
- ULONG BackupAsynclistaddr;
- ULONG BackupCtrlDSSegment;
- ULONG BackupUSBCmd;
-} EHCI_EXTENSION, *PEHCI_EXTENSION;
-
-/* debug.c */
-VOID
-NTAPI
-EHCI_DumpHwTD(
- IN PEHCI_HCD_TD TD);
-
-VOID
-NTAPI
-EHCI_DumpHwQH(
- IN PEHCI_HCD_QH QH);
-
-/* roothub.c */
-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);
-
-#endif /* USBEHCI_H__ */