/*
 * Copyright 2005 Freescale Semiconductor, Inc. All Rights Reserved.
 */

/* 
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 * 
 * http://www.opensource.org/licenses/gpl-license.html 
 * http://www.gnu.org/copyleft/gpl.html
 */

/* ****************************************************************************
 *
 * File: iapiHigh.h
 *
 * $Id iapiHigh.h $
 * 
 * Description:
 *  prototypes for high level function of I.API
 *
 *
 *  http://venerque.sps.mot.com/pjt/sfs/www/iapi/softsim_api.pdf
 *
 * $Log iapiHigh.h
 *
 * ***************************************************************************/

#ifndef _iapiHigh_h
#define _iapiHigh_h

/* ****************************************************************************
 * Include File Section
 *****************************************************************************/
#include "sdmaStruct.h"

/* ****************************************************************************
 * Macro-command Section
 *****************************************************************************/
enum {
  IAPI_CHANGE_CHANDESC,
  IAPI_CHANGE_BDNUM,
  IAPI_CHANGE_BUFFSIZE,
  IAPI_CHANGE_CHANBLOCK,
  IAPI_CHANGE_INSTANCE,
  IAPI_CHANGE_OWNERSHIP,
  IAPI_CHANGE_SYNCH,
  IAPI_CHANGE_TRUST,
  IAPI_CHANGE_CALLBACKFUNC,
  IAPI_CHANGE_CHANCCB,
  IAPI_CHANGE_PRIORITY,
  IAPI_CHANGE_BDWRAP,
  IAPI_CHANGE_WATERMARK,
  IAPI_CHANGE_SET_BDCONT,
  IAPI_CHANGE_UNSET_BDCONT,
  IAPI_CHANGE_SET_BDEXTD,
  IAPI_CHANGE_UNSET_BDEXTD,
  IAPI_CHANGE_EVTMASK1,
  IAPI_CHANGE_EVTMASK2,
  IAPI_CHANGE_PERIPHADDR,
  IAPI_CHANGE_SET_BDINTR,
  IAPI_CHANGE_UNSET_BDINTR,
  IAPI_CHANGE_SET_TRANSFER_CD,
  IAPI_CHANGE_FORCE_CLOSE,
  IAPI_CHANGE_SET_TRANSFER,
  IAPI_CHANGE_USER_ARG,
  IAPI_CHANGE_SET_BUFFERADDR,
  IAPI_CHANGE_SET_EXTDBUFFERADDR,
  IAPI_CHANGE_SET_COMMAND,
  IAPI_CHANGE_SET_COUNT,
  IAPI_CHANGE_SET_STATUS,
  IAPI_CHANGE_GET_BUFFERADDR,
  IAPI_CHANGE_GET_EXTDBUFFERADDR,
  IAPI_CHANGE_GET_COMMAND,
  IAPI_CHANGE_GET_COUNT,
  IAPI_CHANGE_GET_STATUS,
  IAPI_CHANGE_SET_ENDIANNESS
};
  

/*
 * Public Function Prototype Section
 */
int iapi_Open ( channelDescriptor * cd_p, unsigned char channelNumber );
int iapi_Close( channelDescriptor * cd_p );
int iapi_Read ( channelDescriptor * cd_p, void * buf, unsigned short nbyte );
int iapi_Write( channelDescriptor * cd_p, void * buf, unsigned short nbyte );
int iapi_MemCopy(channelDescriptor * cd_p, void* dest, void* src,
                 unsigned long size);
int iapi_IoCtl( channelDescriptor * cd_p, unsigned long ctlRequest, 
				 unsigned long param);
int iapi_Init(channelDescriptor * cd_p, unsigned short* ram_image, 
              unsigned short code_size, unsigned short start_addr);

int iapi_StartChannel(unsigned char channel);
int iapi_StopChannel(unsigned char channel);
int iapi_SynchChannel(unsigned char channel);

int iapi_GetChannelNumber(channelDescriptor * cd_p);
unsigned long iapi_GetError(channelDescriptor * cd_p);
int iapi_GetCount(channelDescriptor * cd_p);
int iapi_GetCountAll(channelDescriptor * cd_p);

#ifndef IRQ_KEYWORD
#define IRQ_KEYWORD
#endif /* IRQ_KEYWORD */

IRQ_KEYWORD void IRQ_Handler();

#ifdef MCU
int iapi_GetScript(channelDescriptor * cd_p, void * buf, unsigned short size, 
                    unsigned short address);
int iapi_GetContext(channelDescriptor * cd_p, void * buf,
                     unsigned char channel);			   
int iapi_SetScript(channelDescriptor * cd_p, void * buf, unsigned short nbyte, 
                     unsigned short destAddr);
int iapi_SetContext(channelDescriptor * cd_p, void * buf, 
                     unsigned char channel);
int iapi_AssignScript(channelDescriptor * cd_p, script_data * data_p);

int iapi_SetChannelEventMapping(unsigned char event, unsigned long channel_map);
#endif /* MCU */

#endif /* _iapiHigh_h */
