mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 10:35:28 +00:00
134 lines
6.3 KiB
C
134 lines
6.3 KiB
C
#ifndef INTERFACES_HPP
|
|
#define INTERFACES_HPP
|
|
|
|
struct _OHCI_ENDPOINT_DESCRIPTOR;
|
|
struct IDMAMemoryManager;
|
|
struct IUSBQueue;
|
|
|
|
//=========================================================================================
|
|
//
|
|
// class IUSBHardwareDevice
|
|
//
|
|
// Description: This class provides access to the usb hardware controller
|
|
//
|
|
|
|
|
|
#define DEFINE_ABSTRACT_USBOHCIHARDWARE() \
|
|
STDMETHOD_(VOID, GetBulkHeadEndpointDescriptor)( THIS_ \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, GetControlHeadEndpointDescriptor)( THIS_ \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, GetIsochronousHeadEndpointDescriptor)( THIS_ \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, GetInterruptEndpointDescriptors)( THIS_ \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR *** OutDescriptor) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, HeadEndpointDescriptorModified)( THIS_ \
|
|
IN ULONG Type) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, GetCurrentFrameNumber)( THIS_ \
|
|
IN PULONG FrameNumber) PURE;
|
|
|
|
#define IMP_IUSBOHCIHARDWAREDEVICE \
|
|
STDMETHODIMP_(VOID) GetBulkHeadEndpointDescriptor( \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor); \
|
|
\
|
|
STDMETHODIMP_(VOID) GetControlHeadEndpointDescriptor( \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor); \
|
|
\
|
|
STDMETHODIMP_(VOID) GetIsochronousHeadEndpointDescriptor( \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor); \
|
|
\
|
|
STDMETHODIMP_(VOID) GetInterruptEndpointDescriptors( \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR *** OutDescriptor); \
|
|
\
|
|
STDMETHODIMP_(VOID) HeadEndpointDescriptorModified( \
|
|
IN ULONG Type); \
|
|
\
|
|
STDMETHODIMP_(VOID) GetCurrentFrameNumber( \
|
|
OUT PULONG FrameNumber);
|
|
|
|
DECLARE_INTERFACE_(IOHCIHardwareDevice, IUSBHardwareDevice)
|
|
{
|
|
DEFINE_ABSTRACT_UNKNOWN()
|
|
DEFINE_ABSTRACT_USBHARDWAREDEVICE()
|
|
DEFINE_ABSTRACT_USBOHCIHARDWARE()
|
|
};
|
|
|
|
typedef IOHCIHardwareDevice *POHCIHARDWAREDEVICE;
|
|
|
|
|
|
//=========================================================================================
|
|
//
|
|
// class IUSBRequest
|
|
//
|
|
// Description: This class is used to issue request to usb controller. The class is
|
|
// initialized using InitializeXXX methods. You also need to call SetEndpoint to define the endpoint
|
|
// In addition you can call SetCompletionDetails if you need to wait for the end of
|
|
// the request or want to complete an irp. You call AddUSBRequest to add the request to the queue.
|
|
// Once the request is completed the CompletionCallback is invoked. The CompletionCallback
|
|
// will take care of any completion details which have been set. If the request is cancelled, the
|
|
// CancelCallback routine is invoked.
|
|
//
|
|
|
|
|
|
#define DEFINE_ABSTRACT_USBOHCIREQUEST() \
|
|
STDMETHOD_(NTSTATUS, GetEndpointDescriptor)( THIS_ \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, CompletionCallback)( THIS) PURE; \
|
|
\
|
|
STDMETHOD_(VOID, FreeEndpointDescriptor)( THIS_ \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR * OutDescriptor) PURE; \
|
|
\
|
|
STDMETHOD_(UCHAR, GetInterval)( THIS) PURE;
|
|
|
|
|
|
#define IMP_IOHCIREQUEST \
|
|
STDMETHODIMP_(NTSTATUS) GetEndpointDescriptor( \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR ** OutDescriptor); \
|
|
\
|
|
STDMETHODIMP_(VOID) CompletionCallback(); \
|
|
\
|
|
STDMETHODIMP_(VOID) FreeEndpointDescriptor( \
|
|
IN struct _OHCI_ENDPOINT_DESCRIPTOR * OutDescriptor); \
|
|
\
|
|
STDMETHODIMP_(UCHAR) GetInterval();
|
|
|
|
DECLARE_INTERFACE_(IOHCIRequest, IUSBRequest)
|
|
{
|
|
DEFINE_ABSTRACT_UNKNOWN()
|
|
DEFINE_ABSTRACT_USBREQUEST()
|
|
DEFINE_ABSTRACT_USBOHCIREQUEST()
|
|
};
|
|
|
|
typedef IOHCIRequest *POHCIREQUEST;
|
|
|
|
//=========================================================================================
|
|
//
|
|
// class IUSBQueue
|
|
//
|
|
// Description: This class manages pending requests
|
|
//
|
|
|
|
#define DEFINE_ABSTRACT_USBOHCIQUEUE() \
|
|
STDMETHOD_(VOID, TransferDescriptorCompletionCallback)( THIS_ \
|
|
IN ULONG TransferDescriptorLogicalAddress) PURE;
|
|
|
|
#define IMP_IUSBOHCIQUEUE \
|
|
STDMETHODIMP_(VOID) TransferDescriptorCompletionCallback( \
|
|
IN ULONG TransferDescriptorLogicalAddress);
|
|
|
|
DECLARE_INTERFACE_(IOHCIQueue, IUSBQueue)
|
|
{
|
|
DEFINE_ABSTRACT_UNKNOWN()
|
|
DEFINE_ABSTRACT_USBQUEUE()
|
|
DEFINE_ABSTRACT_USBOHCIQUEUE()
|
|
};
|
|
|
|
typedef IOHCIQueue *POHCIQUEUE;
|
|
|
|
#endif /* INTERFACES_HPP */
|