Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

863 lines
21 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
usbohci.h
Abstract:
Environment:
Kernel & user mode
Revision History:
5-10-96 : created
--*/
#ifndef __OHCI_H__
#define __OHCI_H__
#define OHCI_COMMON_BUFFER_SIZE (sizeof(HCCA_BLOCK)+\
NO_ED_LISTS*sizeof(HW_ENDPOINT_DESCRIPTOR) +\
(17*2)*sizeof(HCD_ENDPOINT_DESCRIPTOR))
/*
Registry Keys
*/
// Software Branch PDO Keys
#define SOF_MODIFY_KEY L"recommendedClocksPerFrame"
// Hardware Branch PDO Keys
/*
define resource consumption for endpoints types
*/
#define T_256K 0x40000
#define T_128K 0x20000
#define T_64K 0x10000
#define T_4K 0x1000
// Control:
// largest possible transfer for control is 64k
// therefore we support up to 2 transfers of this
// size in HW. Most control transfers are much
// smaller than this.
// NOTE: we MUST support at least one 64k transfer in
// HW since a single control transfer cannot be
// broken up.
#define MAX_CONTROL_TRANSFER_SIZE T_64K
// worst case 64k control transfer 17 + status and
// setup TD = 19 (*2 transfers)
#define TDS_PER_CONTROL_ENDPOINT 38
// Bulk:
// The most data we can move in a ms is 1200 bytes.
// we support two 64k transfers queued to HW at a
// a time -- we should be able to keep the bus busy
// with this.
// NOTE: in a memory constrained system we can shrink
// this value, our max transfer size should always be
// at half the # of TDs available
#define MAX_BULK_TRANSFER_SIZE T_256K
// enough for 4 64 xfers, 2 128k or 1 256k
#define TDS_PER_BULK_ENDPOINT 68
// Iso:
#define MAX_ISO_TRANSFER_SIZE T_64K
#define TDS_PER_ISO_ENDPOINT 64
// Interrupt:
#define MAX_INTERRUPT_TRANSFER_SIZE T_4K
#define TDS_PER_INTERRUPT_ENDPOINT 4
#undef PDEVICE_DATA
// Values for DeviceData.Flags
#define HMP_FLAG_SOF_MODIFY_VALUE 0x00000001
#define HMP_FLAG_SUSPENDED 0x00000002
//** flags for ED HC_STATIC_ED_DATA & HCD_ENDPOINT_DESCRIPTOR
//* these define the type of ED
#define EDFLAG_CONTROL 0x00000001
#define EDFLAG_BULK 0x00000002
#define EDFLAG_INTERRUPT 0x00000004
//*
// these define ed charateristics and state
#define EDFLAG_NOHALT 0x00000008
#define EDFLAG_REMOVED 0x00000010
#define EDFLAG_REGISTER 0x00000020
typedef struct _HC_STATIC_ED_DATA {
// virtual address of static ED
PHW_ENDPOINT_DESCRIPTOR HwED;
// physical address of next ED
HW_32BIT_PHYSICAL_ADDRESS HwEDPhys;
// index in the static ED list for the
// next ED in the interrupt tree
CHAR NextIdx;
// list of 'real EDs' associated
// with this static ED
LIST_ENTRY TransferEdList;
// Use EDFLAG_
ULONG EdFlags;
// this is either an HC register or the address of the entry
// in the HCCA area corresponding to the 'physical address'
// of the first ed in the list
//
// in the case of control and bulk the physical head will be 0
// or point to timing delay 'dummy EDs'
//
// in the case of interrupt the physical head will be a static
// ED in the onterrupt 'tree'
PULONG PhysicalHead;
ULONG AllocatedBandwidth;
ULONG HccaOffset;
} HC_STATIC_ED_DATA, *PHC_STATIC_ED_DATA;
//
// These values index in to the static ED list
//
#define ED_INTERRUPT_1ms 0
#define ED_INTERRUPT_2ms 1
#define ED_INTERRUPT_4ms 3
#define ED_INTERRUPT_8ms 7
#define ED_INTERRUPT_16ms 15
#define ED_INTERRUPT_32ms 31
#define ED_CONTROL 63
#define ED_BULK 64
#define ED_ISOCHRONOUS 0 // same as 1ms interrupt queue
#define NO_ED_LISTS 65
#define ED_EOF 0xff
//
#define SIG_HCD_DUMMY_ED 'deYD'
#define SIG_HCD_ED 'deYH'
#define SIG_HCD_TD 'dtYH'
#define SIG_EP_DATA 'peYH'
#define SIG_OHCI_TRANSFER 'rtYH'
#define SIG_OHCI_DD 'icho'
typedef struct _DEVICE_DATA {
ULONG Sig;
ULONG Flags;
PHC_OPERATIONAL_REGISTER HC;
HC_FM_INTERVAL BIOS_Interval;
ULONG SofModifyValue;
ULONG FrameHighPart;
ULONG NumberOfPorts;
PHCCA_BLOCK HcHCCA;
HW_32BIT_PHYSICAL_ADDRESS HcHCCAPhys;
PUCHAR StaticEDs;
HW_32BIT_PHYSICAL_ADDRESS StaticEDsPhys;
USB_CONTROLLER_FLAVOR ControllerFlavor;
ULONG LastDeadmanFrame;
struct _HCD_ENDPOINT_DESCRIPTOR *HydraLsHsHackEd;
HC_STATIC_ED_DATA StaticEDList[NO_ED_LISTS];
} DEVICE_DATA, *PDEVICE_DATA;
#define TC_FLAGS_SHORT_XFER_OK 0x00000001
#define TC_FLAGS_SHORT_XFER_DONE 0x00000002
typedef struct _TRANSFER_CONTEXT {
ULONG Sig;
ULONG BytesTransferred;
PTRANSFER_PARAMETERS TransferParameters;
ULONG PendingTds;
ULONG TcFlags;
USBD_STATUS UsbdStatus;
// first TD of the next transfer in the chain
struct _HCD_TRANSFER_DESCRIPTOR *NextXferTd;
struct _HCD_TRANSFER_DESCRIPTOR *StatusTd;
struct _ENDPOINT_DATA *EndpointData;
PMINIPORT_ISO_TRANSFER IsoTransfer;
} TRANSFER_CONTEXT, *PTRANSFER_CONTEXT;
// HCD Endpoint Descriptor (contains the HW descriptor)
//
#define ENDPOINT_DATA_PTR(p) ((struct _ENDPOINT_DATA *) (p).Pointer)
typedef struct _HCD_ENDPOINT_DESCRIPTOR {
HW_ENDPOINT_DESCRIPTOR HwED;
// make Physical Address the same as in HCD_TRANSFER_DESCRIPTOR
ULONG Pad4[4];
HW_32BIT_PHYSICAL_ADDRESS PhysicalAddress;
ULONG Sig;
ULONG EdFlags; //use EDFLAG_
ULONG Win64Pad;
MP_HW_POINTER EndpointData;
MP_HW_LIST_ENTRY SwLink;
ULONG PadTo128[14];
} HCD_ENDPOINT_DESCRIPTOR, *PHCD_ENDPOINT_DESCRIPTOR;
C_ASSERT((sizeof(HCD_ENDPOINT_DESCRIPTOR) == 128));
//
// HCD Transfer Descriptor (contains the HW descriptor)
//
#define TD_FLAG_BUSY 0x00000001
#define TD_FLAG_XFER 0x00000002
#define TD_FLAG_CONTROL_STATUS 0x00000004
#define TD_FLAG_DONE 0x00000008
#define TD_FLAG_SKIP 0x00000010
#define TRANSFER_CONTEXT_PTR(p) ((struct _TRANSFER_CONTEXT *) (p).Pointer)
#define TRANSFER_DESCRIPTOR_PTR(p) ((struct _HCD_TRANSFER_DESCRIPTOR *) (p).Pointer)
#define HW_TRANSFER_DESCRIPTOR_PTR(p) ((struct _HW_TRANSFER_DESCRIPTOR *) (p).Pointer)
#define HW_DATA_PTR(p) ((PVOID) (p).Pointer)
typedef struct _HCD_TRANSFER_DESCRIPTOR {
HW_TRANSFER_DESCRIPTOR HwTD;
HW_32BIT_PHYSICAL_ADDRESS PhysicalAddress;
ULONG Sig;
ULONG Flags;
ULONG TransferCount;
MP_HW_POINTER EndpointData;
MP_HW_POINTER TransferContext;
MP_HW_POINTER NextHcdTD;
ULONG FrameIndex;
LIST_ENTRY DoneLink;
#ifdef _WIN64
ULONG PadTo128[8];
#else
ULONG PadTo128[11];
#endif
} HCD_TRANSFER_DESCRIPTOR, *PHCD_TRANSFER_DESCRIPTOR;
C_ASSERT((sizeof(HCD_TRANSFER_DESCRIPTOR) == 128));
typedef struct _SS_PACKET_CONTEXT {
ULONG PhysHold;
MP_HW_POINTER Td;
MP_HW_POINTER Data;
ULONG PadTo8Dwords[3];
} SS_PACKET_CONTEXT, *PSS_PACKET_CONTEXT;
typedef struct _HCD_TD_LIST {
HCD_TRANSFER_DESCRIPTOR Td[1];
} HCD_TD_LIST, *PHCD_TD_LIST;
//#define EPF_HAVE_TRANSFER 0x00000001
//#define EPF_REQUEST_PAUSE 0x00000002
typedef struct _ENDPOINT_DATA {
ULONG Sig;
ENDPOINT_PARAMETERS Parameters;
ULONG Flags;
// USHORT MaxPendingTransfers;
USHORT PendingTransfers;
PHC_STATIC_ED_DATA StaticEd;
PHCD_TD_LIST TdList;
PHCD_ENDPOINT_DESCRIPTOR HcdEd;
ULONG TdCount;
ULONG PendingTds;
PHCD_TRANSFER_DESCRIPTOR HcdTailP;
PHCD_TRANSFER_DESCRIPTOR HcdHeadP;
LIST_ENTRY DoneTdList;
} ENDPOINT_DATA, *PENDPOINT_DATA;
/*
Callouts to port driver services
*/
extern USBPORT_REGISTRATION_PACKET RegistrationPacket;
#define USBPORT_DBGPRINT(dd, l, f, arg0, arg1, arg2, arg3, arg4, arg5) \
RegistrationPacket.USBPORTSVC_DbgPrint((dd), (l), (f), (arg0), (arg1), \
(arg2), (arg3), (arg4), (arg5))
#define USBPORT_GET_REGISTRY_KEY_VALUE(dd, branch, keystring, keylen, data, datalen) \
RegistrationPacket.USBPORTSVC_GetMiniportRegistryKeyValue((dd), (branch), \
(keystring), (keylen), (data), (datalen))
#define USBPORT_INVALIDATE_ROOTHUB(dd) \
RegistrationPacket.USBPORTSVC_InvalidateRootHub((dd));
#define USBPORT_COMPLETE_TRANSFER(dd, ep, t, status, length) \
RegistrationPacket.USBPORTSVC_CompleteTransfer((dd), (ep), (t), \
(status), (length));
#define USBPORT_COMPLETE_ISO_TRANSFER(dd, ep, t, iso) \
RegistrationPacket.USBPORTSVC_CompleteIsoTransfer((dd), (ep), (t), \
(iso));
#define USBPORT_INVALIDATE_ENDPOINT(dd, ep) \
RegistrationPacket.USBPORTSVC_InvalidateEndpoint((dd), (ep));
#define USBPORT_INVALIDATE_CONTROLLER(dd, s) \
RegistrationPacket.USBPORTSVC_InvalidateController((dd), (s))
#define USBPORT_PHYSICAL_TO_VIRTUAL(addr, dd, ep) \
RegistrationPacket.USBPORTSVC_MapHwPhysicalToVirtual((addr), (dd), (ep));
#define USBPORT_RW_CONFIG_SPACE(dd, read, buffer, offset, length) \
RegistrationPacket.USBPORTSVC_ReadWriteConfigSpace((dd), (read), \
(buffer), (offset), (length))
#define USBPORT_BUGCHECK(dd) \
RegistrationPacket.USBPORTSVC_BugCheck(dd)
#define INITIALIZE_TD_FOR_TRANSFER(td, tc) \
{ ULONG i;\
TRANSFER_CONTEXT_PTR((td)->TransferContext) = (tc);\
SET_FLAG((td)->Flags, TD_FLAG_XFER); \
(td)->HwTD.CBP = 0xbaadf00d;\
(td)->HwTD.BE = 0xf00dbaad;\
(td)->HwTD.NextTD = 0;\
(td)->HwTD.Asy.IntDelay = HcTDIntDelay_NoInterrupt;\
TRANSFER_DESCRIPTOR_PTR((td)->NextHcdTD) = NULL;\
for (i=0; i<8; i++) {\
(td)->HwTD.Packet[i].PSW = 0;\
}\
}
#define SET_NEXT_TD(linkTd, nextTd) \
(linkTd)->HwTD.NextTD = (nextTd)->PhysicalAddress;\
TRANSFER_DESCRIPTOR_PTR((linkTd)->NextHcdTD) = (nextTd);
#define SET_NEXT_TD_NULL(linkTd) \
TRANSFER_DESCRIPTOR_PTR((linkTd)->NextHcdTD) = NULL;\
(linkTd)->HwTD.NextTD = 0;
#ifdef _WIN64
#define FREE_TD_CONTEXT ((PVOID) 0xDEADFACEDEADFACE)
#else
#define FREE_TD_CONTEXT ((PVOID) 0xDEADFACE)
#endif
#define OHCI_FREE_TD(dd, ep, td) \
(td)->Flags = 0;\
(td)->HwTD.NextTD = 0;\
TRANSFER_CONTEXT_PTR((td)->TransferContext) = FREE_TD_CONTEXT;\
(td)->DoneLink.Flink = NULL;\
(td)->DoneLink.Blink = NULL;
#define OHCI_ALLOC_TD OHCI_AllocTd
// assuming only one bit is set this macro returns that bit
//
#define GET_BIT_SET(d, bit) \
{ \
UCHAR tmp = (d);\
(bit)=0; \
while (!(tmp & 0x01)) {\
(bit)++;\
tmp >>= 1;\
};\
}
VOID
OHCI_EnableList(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
PHCD_TRANSFER_DESCRIPTOR
OHCI_AllocTd(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
USB_MINIPORT_STATUS
OHCI_SubmitTransfer(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PTRANSFER_PARAMETERS TransferParameters,
PTRANSFER_CONTEXT TransferContext,
PTRANSFER_SG_LIST TransferSGList
);
ULONG
OHCI_MapAsyncTransferToTd(
PDEVICE_DATA DeviceData,
ULONG MaxPacketSize,
ULONG LengthMapped,
PTRANSFER_CONTEXT TransferContext,
PHCD_TRANSFER_DESCRIPTOR Td,
PTRANSFER_SG_LIST SgList
);
USB_MINIPORT_STATUS
OHCI_OpenEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_DATA EndpointData
);
MP_ENDPOINT_STATE
OHCI_GetEndpointState(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
VOID
OHCI_SetEndpointState(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
MP_ENDPOINT_STATE State
);
VOID
OHCI_CheckController(
PDEVICE_DATA DeviceData
);
BOOLEAN
OHCI_HardwarePresent(
PDEVICE_DATA DeviceData,
BOOLEAN Notify
);
VOID
OHCI_ResetController(
PDEVICE_DATA DeviceData
);
USB_MINIPORT_STATUS
USBMPFN
OHCI_StartController(
PDEVICE_DATA DeviceData,
PHC_RESOURCES HcResources
);
BOOLEAN
OHCI_InterruptService (
PDEVICE_DATA DeviceData
);
USB_MINIPORT_STATUS
OHCI_RH_GetPortStatus(
PDEVICE_DATA DeviceData,
USHORT PortNumber,
PRH_PORT_STATUS portStatus
);
USB_MINIPORT_STATUS
OHCI_RH_SetFeaturePortReset(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_SetFeaturePortSuspend(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
VOID
OHCI_RH_GetRootHubData(
PDEVICE_DATA DeviceData,
PROOTHUB_DATA HubData
);
USB_MINIPORT_STATUS
OHCI_RH_GetStatus(
PDEVICE_DATA DeviceData,
PUSHORT Status
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortEnable(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortPower(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
VOID
OHCI_RH_DisableIrq(
PDEVICE_DATA DeviceData
);
VOID
OHCI_RH_EnableIrq(
PDEVICE_DATA DeviceData
);
VOID
OHCI_InterruptDpc (
PDEVICE_DATA DeviceData,
BOOLEAN EnableInterrupts
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortEnableChange(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortConnectChange(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortResetChange(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_GetHubStatus(
PDEVICE_DATA DeviceData,
PRH_HUB_STATUS HubStatus
);
USB_MINIPORT_STATUS
OHCI_RH_SetFeaturePortPower(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_SetFeaturePortEnable(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
VOID
OHCI_QueryEndpointRequirements(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_REQUIREMENTS EndpointRequirements
);
VOID
OHCI_CloseEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
VOID
OHCI_PollEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
USB_MINIPORT_STATUS
OHCI_ControlTransfer(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PTRANSFER_PARAMETERS TransferParameters,
PTRANSFER_CONTEXT TransferContext,
PTRANSFER_SG_LIST TransferSGList
);
VOID
OHCI_ProcessDoneAsyncTd(
PDEVICE_DATA DeviceData,
PHCD_TRANSFER_DESCRIPTOR Td,
BOOLEAN CompleteTransfer
);
USB_MINIPORT_STATUS
OHCI_PokeEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_DATA EndpointData
);
USB_MINIPORT_STATUS
OHCI_BulkOrInterruptTransfer(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PTRANSFER_PARAMETERS TransferParameters,
PTRANSFER_CONTEXT TransferContext,
PTRANSFER_SG_LIST TransferSGList
);
USB_MINIPORT_STATUS
OHCI_OpenBulkEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_DATA EndpointData
);
USB_MINIPORT_STATUS
OHCI_OpenControlEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_DATA EndpointData
);
USB_MINIPORT_STATUS
OHCI_OpenInterruptEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_DATA EndpointData
);
PHCD_TRANSFER_DESCRIPTOR
OHCI_InitializeTD(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PHCD_TRANSFER_DESCRIPTOR Td,
HW_32BIT_PHYSICAL_ADDRESS HwPhysAddress
);
PHCD_ENDPOINT_DESCRIPTOR
OHCI_InitializeED(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PHCD_ENDPOINT_DESCRIPTOR Ed,
PHCD_TRANSFER_DESCRIPTOR DummyTd,
HW_32BIT_PHYSICAL_ADDRESS HwPhysAddress
);
VOID
OHCI_InsertEndpointInSchedule(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
VOID
OHCI_PollAsyncEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
VOID
USBMPFN
OHCI_StopController(
PDEVICE_DATA DeviceData,
BOOLEAN HwPresent
);
ULONG
OHCI_Get32BitFrameNumber(
PDEVICE_DATA DeviceData
);
VOID
OHCI_InterruptNextSOF(
PDEVICE_DATA DeviceData
);
VOID
USBMPFN
OHCI_EnableInterrupts(
PDEVICE_DATA DeviceData
);
VOID
USBMPFN
OHCI_DisableInterrupts(
PDEVICE_DATA DeviceData
);
ULONG
OHCI_FreeTds(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
VOID
OHCI_AbortTransfer(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PTRANSFER_CONTEXT TransferContext,
PULONG BytesTransferred
);
USB_MINIPORT_STATUS
OHCI_StartSendOnePacket(
PDEVICE_DATA DeviceData,
PMP_PACKET_PARAMETERS PacketParameters,
PUCHAR PacketData,
PULONG PacketLength,
PUCHAR WorkspaceVirtualAddress,
HW_32BIT_PHYSICAL_ADDRESS WorkspacePhysicalAddress,
ULONG WorkSpaceLength,
USBD_STATUS *UsbdStatus
);
USB_MINIPORT_STATUS
OHCI_EndSendOnePacket(
PDEVICE_DATA DeviceData,
PMP_PACKET_PARAMETERS PacketParameters,
PUCHAR PacketData,
PULONG PacketLength,
PUCHAR WorkspaceVirtualAddress,
HW_32BIT_PHYSICAL_ADDRESS WorkspacePhysicalAddress,
ULONG WorkSpaceLength,
USBD_STATUS *UsbdStatus
);
VOID
OHCI_PollController(
PDEVICE_DATA DeviceData
);
VOID
OHCI_SetEndpointDataToggle(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
ULONG Toggle
);
MP_ENDPOINT_STATUS
OHCI_GetEndpointStatus(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
VOID
OHCI_SetEndpointStatus(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
MP_ENDPOINT_STATUS Status
);
VOID
OHCI_Unload(
PDRIVER_OBJECT DriverObject
);
USB_MINIPORT_STATUS
OHCI_OpenIsoEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_PARAMETERS EndpointParameters,
PENDPOINT_DATA EndpointData
);
ULONG
OHCI_MapIsoTransferToTd(
PDEVICE_DATA DeviceData,
PMINIPORT_ISO_TRANSFER IsoTransfer,
ULONG CurrentPacket,
PHCD_TRANSFER_DESCRIPTOR Td
);
USB_MINIPORT_STATUS
OHCI_SubmitIsoTransfer(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PTRANSFER_PARAMETERS TransferParameters,
PTRANSFER_CONTEXT TransferContext,
PMINIPORT_ISO_TRANSFER IsoTransfer
);
USB_MINIPORT_STATUS
OHCI_IsoTransfer(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData,
PTRANSFER_PARAMETERS TransferParameters,
PTRANSFER_CONTEXT TransferContext,
PMINIPORT_ISO_TRANSFER IsoTransfer
);
VOID
OHCI_ProcessDoneIsoTd(
PDEVICE_DATA DeviceData,
PHCD_TRANSFER_DESCRIPTOR Td,
BOOLEAN CompleteTransfer
);
VOID
OHCI_PollIsoEndpoint(
PDEVICE_DATA DeviceData,
PENDPOINT_DATA EndpointData
);
ULONG
InitializeHydraHsLsFix(
PDEVICE_DATA DeviceData,
PUCHAR CommonBuffer,
HW_32BIT_PHYSICAL_ADDRESS CommonBufferPhys
);
VOID
OHCI_SuspendController(
PDEVICE_DATA DeviceData
);
USB_MINIPORT_STATUS
OHCI_ResumeController(
PDEVICE_DATA DeviceData
);
ULONG
OHCI_ReadRhDescriptorA(
PDEVICE_DATA DeviceData
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortSuspend(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortSuspendChange(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
USB_MINIPORT_STATUS
OHCI_RH_ClearFeaturePortOvercurrentChange(
PDEVICE_DATA DeviceData,
USHORT PortNumber
);
VOID
USBMPFN
OHCI_FlushInterrupts(
PDEVICE_DATA DeviceData
);
#endif /* __OHCI_H__ */