reactos/drivers/usb/usbohci/interfaces.h

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