summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2007-07-11 06:46:38 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2007-07-11 06:46:38 +0000
commit913cb9dc645d6db47d8c2a0be0369083b8bed25d (patch)
treea90ffdbbc5aee9c08832248527add15cbd6f8b9c /MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h
parent20b1aab6096eb922e0ce8acec44abfd440756e6f (diff)
downloadedk2-platforms-913cb9dc645d6db47d8c2a0be0369083b8bed25d.tar.xz
Import EhciDxe and UhciDxe into MdeModulePkg.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3191 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h')
-rw-r--r--MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h305
1 files changed, 305 insertions, 0 deletions
diff --git a/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h b/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h
new file mode 100644
index 0000000000..cba65c661b
--- /dev/null
+++ b/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h
@@ -0,0 +1,305 @@
+/** @file
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ UhciSched.h
+
+Abstract:
+
+ The definition for EHCI register operation routines.
+
+Revision History
+
+
+**/
+
+#ifndef _EFI_UHCI_SCHED_H_
+#define _EFI_UHCI_SCHED_H_
+
+
+enum {
+ UHCI_ASYNC_INT_SIGNATURE = EFI_SIGNATURE_32 ('u', 'h', 'c', 'a'),
+
+ //
+ // The failure mask for USB transfer return status. If any of
+ // these bit is set, the transfer failed. EFI_USB_ERR_NOEXECUTE
+ // and EFI_USB_ERR_NAK are not considered as error condition:
+ // the transfer is still going on.
+ //
+ USB_ERR_FAIL_MASK = EFI_USB_ERR_STALL | EFI_USB_ERR_BUFFER |
+ EFI_USB_ERR_BABBLE | EFI_USB_ERR_CRC |
+ EFI_USB_ERR_TIMEOUT | EFI_USB_ERR_BITSTUFF |
+ EFI_USB_ERR_SYSTEM,
+
+};
+
+//
+// Structure to return the result of UHCI QH execution.
+// Result is the final result of the QH's QTD. NextToggle
+// is the next data toggle to use. Complete is the actual
+// length of data transferred.
+//
+typedef struct {
+ UINT32 Result;
+ UINT8 NextToggle;
+ UINTN Complete;
+} UHCI_QH_RESULT;
+
+typedef struct _UHCI_ASYNC_REQUEST UHCI_ASYNC_REQUEST;
+
+//
+// Structure used to manager the asynchronous interrupt transfers.
+//
+typedef struct _UHCI_ASYNC_REQUEST{
+ UINTN Signature;
+ LIST_ENTRY Link;
+ UHCI_ASYNC_REQUEST *Recycle;
+
+ //
+ // Endpoint attributes
+ //
+ UINT8 DevAddr;
+ UINT8 EndPoint;
+ BOOLEAN IsLow;
+ UINTN Interval;
+
+ //
+ // Data and UHC structures
+ //
+ UHCI_QH_SW *QhSw;
+ UHCI_TD_SW *FirstTd;
+ UINT8 *Data; // Allocated host memory, not mapped memory
+ UINTN DataLen;
+ VOID *Mapping;
+
+ //
+ // User callback and its context
+ //
+ EFI_ASYNC_USB_TRANSFER_CALLBACK Callback;
+ VOID *Context;
+} UHCI_ASYNC_REQUEST;
+
+#define UHCI_ASYNC_INT_FROM_LINK(a) \
+ CR (a, UHCI_ASYNC_REQUEST, Link, UHCI_ASYNC_INT_SIGNATURE)
+
+EFI_STATUS
+UhciInitFrameList (
+ IN USB_HC_DEV *Uhc
+ )
+/*++
+
+Routine Description:
+
+ Create Frame List Structure
+
+Arguments:
+
+ Uhc - UHCI device
+
+Returns:
+
+ EFI_OUT_OF_RESOURCES - Can't allocate memory resources
+ EFI_UNSUPPORTED - Map memory fail
+ EFI_SUCCESS - Success
+
+--*/
+;
+
+
+/**
+ Destory FrameList buffer
+
+ @param Uhc The UHCI device
+
+ @return VOID
+
+**/
+VOID
+UhciDestoryFrameList (
+ IN USB_HC_DEV *Uhc
+ )
+;
+
+
+/**
+ Convert the poll rate to the maxium 2^n that is smaller
+ than Interval
+
+ @param Interval The poll rate to convert
+
+ @return The converted poll rate
+
+**/
+UINTN
+UhciConvertPollRate (
+ IN UINTN Interval
+ )
+;
+
+
+/**
+ Link a queue head (for asynchronous interrupt transfer) to
+ the frame list.
+
+ @param FrameBase The base of the frame list
+ @param Qh The queue head to link into
+
+ @return None
+
+**/
+VOID
+UhciLinkQhToFrameList (
+ UINT32 *FrameBase,
+ UHCI_QH_SW *Qh
+ )
+;
+
+
+/**
+ Unlink QH from the frame list is easier: find all
+ the precedence node, and pointer there next to QhSw's
+ next.
+
+ @param FrameBase The base address of the frame list
+ @param Qh The queue head to unlink
+
+ @return None
+
+**/
+VOID
+UhciUnlinkQhFromFrameList (
+ UINT32 *FrameBase,
+ UHCI_QH_SW *Qh
+ )
+;
+
+
+/**
+ Check the result of the transfer
+
+ @param Uhc The UHCI device
+ @param Td The first TDs of the transfer
+ @param TimeOut TimeOut value in milliseconds
+ @param IsLow Is Low Speed Device
+ @param QhResult The variable to return result
+
+ @retval EFI_SUCCESS The transfer finished with success
+ @retval EFI_DEVICE_ERROR Transfer failed
+
+**/
+EFI_STATUS
+UhciExecuteTransfer (
+ IN USB_HC_DEV *Uhc,
+ IN UHCI_QH_SW *Qh,
+ IN UHCI_TD_SW *Td,
+ IN UINTN TimeOut,
+ IN BOOLEAN IsLow,
+ OUT UHCI_QH_RESULT *QhResult
+ )
+;
+
+
+/**
+ Create Async Request node, and Link to List
+
+ @param Uhc The UHCI device
+ @param Qh The queue head of the transfer
+ @param FirstTd First TD of the transfer
+ @param DevAddr Device Address
+ @param EndPoint EndPoint Address
+ @param Toggle Data Toggle
+ @param DataLen Data length
+ @param Interval Polling Interval when inserted to frame list
+ @param Mapping Mapping value
+ @param Data Data buffer, unmapped
+ @param Callback Callback after interrupt transfeer
+ @param Context Callback Context passed as function parameter
+ @param IsLow Is Low Speed
+
+ @retval EFI_SUCCESS An asynchronous transfer is created
+ @retval EFI_INVALID_PARAMETER Paremeter is error
+ @retval EFI_OUT_OF_RESOURCES Failed because of resource shortage.
+
+**/
+EFI_STATUS
+UhciCreateAsyncReq (
+ IN USB_HC_DEV *Uhc,
+ IN UHCI_QH_SW *Qh,
+ IN UHCI_TD_SW *FirstTd,
+ IN UINT8 DevAddr,
+ IN UINT8 EndPoint,
+ IN UINTN DataLen,
+ IN UINTN Interval,
+ IN VOID *Mapping,
+ IN UINT8 *Data,
+ IN EFI_ASYNC_USB_TRANSFER_CALLBACK Callback,
+ IN VOID *Context,
+ IN BOOLEAN IsLow
+ )
+;
+
+
+/**
+ Delete Async Interrupt QH and TDs
+
+ @param Uhc The UHCI device
+ @param DevAddr Device Address
+ @param EndPoint EndPoint Address
+ @param Toggle The next data toggle to use
+
+ @retval EFI_SUCCESS The request is deleted
+ @retval EFI_INVALID_PARAMETER Paremeter is error
+ @retval EFI_NOT_FOUND The asynchronous isn't found
+
+**/
+EFI_STATUS
+UhciRemoveAsyncReq (
+ IN USB_HC_DEV *Uhc,
+ IN UINT8 DevAddr,
+ IN UINT8 EndPoint,
+ OUT UINT8 *Toggle
+ )
+;
+
+
+/**
+ Release all the asynchronous transfers on the lsit.
+
+ @param Uhc The UHCI device
+
+ @return VOID
+
+**/
+VOID
+UhciFreeAllAsyncReq (
+ IN USB_HC_DEV *Uhc
+ )
+;
+
+
+/**
+ Interrupt transfer periodic check handler
+
+ @param Event The event of the time
+ @param Context Context of the event, pointer to USB_HC_DEV
+
+ @return VOID
+
+**/
+VOID
+UhciMonitorAsyncReqList (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+;
+
+#endif