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
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__ */
|
|
|
|
|