/** @file

  Abstractions for simple OMAP DMA.
  OMAP_DMA4 structure elements are described in the OMAP35xx TRM.

  Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __OMAP_DMA_LIB_H__
#define __OMAP_DMA_LIB_H__


// Example from DMA chapter of the OMAP35xx spec
typedef struct {
  UINT8     DataType;                      // DMA4_CSDPi[1:0]
  UINT8     ReadPortAccessType;            // DMA4_CSDPi[8:7]
  UINT8     WritePortAccessType;           // DMA4_CSDPi[15:14]
  UINT8     SourceEndiansim;               // DMA4_CSDPi[21]
  UINT8     DestinationEndianism;          // DMA4_CSDPi[19]
  UINT8     WriteMode;                     // DMA4_CSDPi[17:16]
  UINT8     SourcePacked;                  // DMA4_CSDPi[6]
  UINT8     DestinationPacked;             // DMA4_CSDPi[13]
  UINT32    NumberOfElementPerFrame;       // DMA4_CENi
  UINT32    NumberOfFramePerTransferBlock; // DMA4_CFNi
  UINT32    SourceStartAddress;            // DMA4_CSSAi
  UINT32    DestinationStartAddress;       // DMA4_CDSAi
  UINT32    SourceElementIndex;            // DMA4_CSEi
  UINT32    SourceFrameIndex;              // DMA4_CSFi
  UINT32    DestinationElementIndex;       // DMA4_CDEi
  UINT32    DestinationFrameIndex;         // DMA4_CDFi
  UINT8     ReadPortAccessMode;            // DMA4_CCRi[13:12]
  UINT8     WritePortAccessMode;           // DMA4_CCRi[15:14]
  UINT8     ReadPriority;                  // DMA4_CCRi[6]
  UINT8     WritePriority;                 // DMA4_CCRi[23]
  UINT8     ReadRequestNumber;             // DMA4_CCRi[4:0]
  UINT8     WriteRequestNumber;            // DMA4_CCRi[20:19]
} OMAP_DMA4;


/**
  Configure OMAP DMA Channel

  @param  Channel               DMA Channel to configure
  @param  Dma4                  Pointer to structure used to initialize DMA registers for the Channel

  @retval EFI_SUCCESS           The range was mapped for the returned NumberOfBytes.
  @retval EFI_INVALID_PARAMETER Channel is not valid
  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested information.

**/
EFI_STATUS
EFIAPI
EnableDmaChannel (
  IN  UINTN       Channel,
  IN  OMAP_DMA4   *Dma4
  );

/**
  Turn of DMA channel configured by EnableDma().

  @param  Channel               DMA Channel to configure
  @param  SuccesMask            Bits in DMA4_CSR register indicate EFI_SUCCESS
  @param  ErrorMask             Bits in DMA4_CSR register indicate EFI_DEVICE_ERROR

  @retval EFI_SUCCESS           DMA hardware disabled
  @retval EFI_INVALID_PARAMETER Channel is not valid
  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested information.

**/
EFI_STATUS
EFIAPI
DisableDmaChannel (
  IN  UINTN       Channel,
  IN  UINT32      SuccessMask,
  IN  UINT32      ErrorMask
  );



#endif

