/* hbi_hal.h
 *
 * This file defines the interface between the VoicePath API and the Hardware
 * Abstraction Layer (HAL).  The types and functions declared in this file are
 * platform-dependent.  The functions are defined in ve_hal.c.  Porting the
 * VoicePath API to a new host processor consists of modifying the typedefs
 * in this file, setting the HBI_PINCONFIG define below, and modifying the
 * function implementations in vp_hal.c.
 *
 * Copyright (c) 2010, Zarlink Semiconductor, Inc.
 */

#ifndef HBI_HAL_H
#define HBI_HAL_H

#include "vp_api_types.h"

/* Define the EXTERN macro, if necessary */
#ifndef EXTERN
  #ifdef __cplusplus
    #define EXTERN extern "C"
  #else
    #define EXTERN extern
  #endif /* __cplusplus */
#endif /* EXTERN */

/******************************************************************************
 *                          PLATFORM-SPECIFIC OPTIONS                         *
 ******************************************************************************/

/* HBI configuration register */
#define HBI_CFG_ENDLITTLE       0    /* 1=byte swapping for data words only */
#define HBI_CFG_PWAIT_POLHI     0    /* 0=PWAIT pin active low, 1=PWAIT pin active high */
#define HBI_CFG_PWAIT_EN        0    /* 0=PWAIT pin disabled, 1=PWAIT pin enabled */
#define HBI_CFG_PWAIT_MODEOSD   0    /* 0=PWAIT pin TTL, 1=PWAIT pin open source/drain */
#define HBI_CFG_INT_MODETTL     1    /* 0=INT pin open drain, 1=INT pin TTL */
#define HBI_CFG_PINEA           0    /* 0=IO[2:0], 1=EA[10:8] */
#define HBI_PINCONFIG   (HBI_CFG_ENDLITTLE | (HBI_CFG_PWAIT_POLHI << 1) | (HBI_CFG_PWAIT_EN << 2) | (HBI_CFG_PWAIT_MODEOSD << 3) | (HBI_CFG_INT_MODETTL << 4) | (HBI_CFG_PINEA << 5))

#define HBI_CMD_CONFIGURE_INT	0xFD00

#define DEFAULT_DEVICE_ID	0

/******************************************************************************
 *                         PLATFORM-SPECIFIC FUNCTIONS                        *
 ******************************************************************************/

/* See vp_hal.c for descriptions. */
EXTERN bool VpHalHbiInit(VpDeviceIdType deviceId);
EXTERN bool VpHalHbiCmd(VpDeviceIdType deviceId, uint16 cmd);

EXTERN bool VpHalHbiWrite(VpDeviceIdType deviceId, uint16 cmd, uint8 numwords, uint16p data);
EXTERN bool VpHalHbiRead(VpDeviceIdType deviceId, uint16 cmd, uint8 numwords, uint16p data);

EXTERN bool VpHalHbiBootWr(VpDeviceIdType deviceId, uint8 numwords, VpImagePtrType data);

/* Lowest Level HBI read / write action */
EXTERN bool VpHalHbi(VpDeviceIdType deviceId, bool isWordData, bool isWrite, uint16p data);

#endif /* HBI_HAL_H */





