mirror of https://github.com/acidanthera/audk.git
232 lines
5.8 KiB
C
232 lines
5.8 KiB
C
/** @file
|
|
This file contains the definination for host controller schedule routines.
|
|
|
|
Copyright (c) 2013-2015 Intel Corporation.
|
|
|
|
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.
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef _OHCI_SCHED_H
|
|
#define _OHCI_SCHED_H
|
|
|
|
#include "Descriptor.h"
|
|
|
|
#define HCCA_MEM_SIZE 256
|
|
#define GRID_SIZE 16
|
|
#define GRID_SHIFT 4
|
|
|
|
typedef struct _INTERRUPT_CONTEXT_ENTRY INTERRUPT_CONTEXT_ENTRY;
|
|
|
|
struct _INTERRUPT_CONTEXT_ENTRY{
|
|
UINT8 DeviceAddress;
|
|
UINT8 EndPointAddress;
|
|
ED_DESCRIPTOR *Ed;
|
|
TD_DESCRIPTOR *DataTd;
|
|
BOOLEAN IsSlowDevice;
|
|
UINT8 MaxPacketLength;
|
|
UINTN PollingInterval;
|
|
EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction;
|
|
VOID *Context;
|
|
BOOLEAN IsPeriodic;
|
|
VOID *Buffer;
|
|
UINTN DataLength;
|
|
VOID *UCBuffer;
|
|
VOID *UCBufferMapping;
|
|
UINT8 *Toggle;
|
|
INTERRUPT_CONTEXT_ENTRY *NextEntry;
|
|
};
|
|
|
|
|
|
typedef struct {
|
|
UINT32 ErrorCode;
|
|
UINT8 NextToggle;
|
|
} OHCI_ED_RESULT;
|
|
|
|
/**
|
|
|
|
Add an item of interrupt context
|
|
|
|
@param Ohc UHC private data
|
|
@param NewEntry New entry to add
|
|
|
|
@retval EFI_SUCCESS Item successfully added
|
|
|
|
**/
|
|
EFI_STATUS
|
|
OhciAddInterruptContextEntry (
|
|
IN USB_OHCI_HC_DEV *Ohc,
|
|
IN INTERRUPT_CONTEXT_ENTRY *NewEntry
|
|
);
|
|
|
|
/**
|
|
|
|
Free a interrupt context entry
|
|
|
|
@param Ohc UHC private data
|
|
@param Entry Pointer to an interrupt context entry
|
|
|
|
@retval EFI_SUCCESS Entry freed
|
|
@retval EFI_INVALID_PARAMETER Entry is NULL
|
|
|
|
**/
|
|
EFI_STATUS
|
|
OhciFreeInterruptContextEntry (
|
|
IN USB_OHCI_HC_DEV *Ohc,
|
|
IN INTERRUPT_CONTEXT_ENTRY *Entry
|
|
);
|
|
|
|
/**
|
|
|
|
Free entries match the device address and endpoint address
|
|
|
|
@Param Ohc UHC private date
|
|
@Param DeviceAddress Item to free must match this device address
|
|
@Param EndPointAddress Item to free must match this end point address
|
|
@Param DataToggle DataToggle for output
|
|
|
|
@retval EFI_SUCCESS Items match the requirement removed
|
|
|
|
**/
|
|
EFI_STATUS
|
|
OhciFreeInterruptContext(
|
|
IN USB_OHCI_HC_DEV *Ohc,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
OUT UINT8 *DataToggle
|
|
);
|
|
|
|
|
|
/**
|
|
|
|
Convert Error code from OHCI format to EFI format
|
|
|
|
@Param ErrorCode ErrorCode in OHCI format
|
|
|
|
@retval ErrorCode in EFI format
|
|
|
|
**/
|
|
UINT32
|
|
ConvertErrorCode (
|
|
IN UINT32 ErrorCode
|
|
);
|
|
|
|
|
|
/**
|
|
|
|
Check TDs Results
|
|
|
|
@Param Ohc UHC private data
|
|
@Param Td TD_DESCRIPTOR
|
|
@Param Result Result to return
|
|
|
|
@retval TRUE means OK
|
|
@retval FLASE means Error or Short packet
|
|
|
|
**/
|
|
BOOLEAN
|
|
OhciCheckTDsResults (
|
|
IN USB_OHCI_HC_DEV *Ohc,
|
|
IN TD_DESCRIPTOR *Td,
|
|
OUT UINT32 *Result
|
|
);
|
|
/**
|
|
|
|
Check the task status on an ED
|
|
|
|
@Param Ed Pointer to the ED task that TD hooked on
|
|
@Param HeadTd TD header for current transaction
|
|
|
|
@retval Task Status Code
|
|
|
|
**/
|
|
|
|
UINT32
|
|
CheckEDStatus (
|
|
IN ED_DESCRIPTOR *Ed,
|
|
IN TD_DESCRIPTOR *HeadTd,
|
|
OUT OHCI_ED_RESULT *EdResult
|
|
);
|
|
/**
|
|
|
|
Check the task status
|
|
|
|
@Param Ohc UHC private data
|
|
@Param ListType Pipe type
|
|
@Param Ed Pointer to the ED task hooked on
|
|
@Param HeadTd Head of TD corresponding to the task
|
|
@Param ErrorCode return the ErrorCode
|
|
|
|
@retval EFI_SUCCESS Task done
|
|
@retval EFI_NOT_READY Task on processing
|
|
@retval EFI_DEVICE_ERROR Some error occured
|
|
|
|
**/
|
|
EFI_STATUS
|
|
CheckIfDone (
|
|
IN USB_OHCI_HC_DEV *Ohc,
|
|
IN DESCRIPTOR_LIST_TYPE ListType,
|
|
IN ED_DESCRIPTOR *Ed,
|
|
IN TD_DESCRIPTOR *HeadTd,
|
|
OUT OHCI_ED_RESULT *EdResult
|
|
);
|
|
|
|
/**
|
|
|
|
Convert TD condition code to Efi Status
|
|
|
|
@Param ConditionCode Condition code to convert
|
|
|
|
@retval EFI_SUCCESS No error occured
|
|
@retval EFI_NOT_READY TD still on processing
|
|
@retval EFI_DEVICE_ERROR Error occured in processing TD
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
OhciTDConditionCodeToStatus (
|
|
IN UINT32 ConditionCode
|
|
);
|
|
|
|
/**
|
|
|
|
Invoke callbacks hooked on done TDs
|
|
|
|
@Param Entry Interrupt transfer transaction information data structure
|
|
@Param Context Ohc private data
|
|
|
|
**/
|
|
|
|
VOID
|
|
OhciInvokeInterruptCallBack(
|
|
IN INTERRUPT_CONTEXT_ENTRY *Entry,
|
|
IN UINT32 Result
|
|
);
|
|
|
|
|
|
/**
|
|
|
|
Timer to submit periodic interrupt transfer, and invoke callbacks hooked on done TDs
|
|
|
|
@param Event Event handle
|
|
@param Context Device private data
|
|
|
|
**/
|
|
|
|
VOID
|
|
EFIAPI
|
|
OhciHouseKeeper (
|
|
IN EFI_EVENT Event,
|
|
IN VOID *Context
|
|
);
|
|
|
|
#endif
|