blob: b9d1875de59ebaf3ffecca549b02f0eb6fc1e639 [file] [log] [blame]
/*******************************************************************************
* Copyright 2001, Marvell International Ltd.
* This code contains confidential information of Marvell semiconductor, inc.
* no rights are granted herein under any patent, mask work right or copyright
* of Marvell or any third party.
* Marvell reserves the right at its sole discretion to request that this code
* be immediately returned to Marvell. This code is provided "as is".
* Marvell makes no warranties, express, implied or otherwise, regarding its
* accuracy, completeness or performance.
********************************************************************************
* siliconIf.h
*
* DESCRIPTION:
* Application IF defintion.
*
* DEPENDENCIES:
*
* FILE REVISION NUMBER:
* $Revision: 37 $
******************************************************************************/
#ifndef __siliconIf_H
#define __siliconIf_H
#ifdef __cplusplus
extern "C" {
#endif
#include <gtOs/gtGenTypes.h>
#ifdef CO_CPU_RUN
typedef GT_U8 GT_UOPT;
typedef GT_U16 GT_UREG_DATA;
typedef GT_16 GT_REG_DATA;
#else
typedef GT_U32 GT_UOPT;
typedef GT_U32 GT_UREG_DATA;
typedef GT_32 GT_REG_DATA;
#endif
/* Returns the info located at the specified offset & length in data. */
#define U32_GET_FIELD(data,offset,length) \
(((data) >> (offset)) & ((1 << (length)) - 1))
#ifdef HWS_DEBUG
#include "gtOsIo.h"
extern GT_FILEP fdHws;
#endif
#ifndef CO_CPU_RUN
extern GT_VOID gtBreakOnFail
(
GT_VOID
);
extern GT_STATUS gtStatus;
/* Global SysConf control library code for sysLog registration */
#ifdef CHECK_STATUS
#undef CHECK_STATUS
#endif
#define CHECK_STATUS(origFunc) \
{ \
gtStatus = origFunc; \
if (GT_OK != gtStatus) \
{ \
gtBreakOnFail(); \
return gtStatus; \
} \
}
#else
#define CHECK_STATUS(origFunc) \
{ \
GT_STATUS gtStatus; \
gtStatus = origFunc; \
if (GT_OK != gtStatus) \
{ \
return gtStatus; \
} \
}
#endif
#define ABS(val) ((val) < 0) ? -(val) : (val)
/* max number of devices supported by driver */
#ifdef CO_CPU_RUN
#define HWS_MAX_DEVICE_NUM (1)
#else
#define HWS_MAX_DEVICE_NUM (16)
#endif
/* max number of SERDESes in one device */
#define HWS_MAX_DEV_SERDES_NUM (96)
enum{ EXTERNAL_REG, INTERNAL_REG};
enum{ REG_READ_OP, REG_WRITE_OP};
typedef enum
{
Lion2A0,
Lion2B0,
Puma3A0,
HooperA0,
Puma3B0,
NP5A0,
BobcatA0,
LAST_SIL_TYPE
}MV_HWS_DEV_TYPE;
typedef enum
{
GEMAC_UNIT,
XLGMAC_UNIT,
HGLMAC_UNIT,
XPCS_UNIT,
MMPCS_UNIT,
CG_UNIT,
INTLKN_UNIT,
INTLKN_RF_UNIT,
SERDES_UNIT,
SERDES_PHY_UNIT,
ETI_UNIT,
ETI_ILKN_RF_UNIT,
D_UNIT, /* DDR3 */
LAST_UNIT
}MV_HWS_UNITS_ID;
typedef struct
{
GT_U32 baseAddr;
GT_U32 regOffset;
}HWS_UNIT_INFO;
/* max port number in core of specified device */
typedef struct
{
GT_U8 devNum;
GT_U32 portsNum;
MV_HWS_DEV_TYPE devType;
GT_U32 serdesType;
GT_U32 lastSupPortMode;
}HWS_DEVICE_INFO;
typedef struct intlknIpRegsDef
{
GT_U32 regOffset;
GT_U32 defValue;
}MV_INTLK_REG_DEF;
typedef struct
{
GT_U8 devNum;
GT_U32 portGroup;
GT_U32 elementNum;
}MV_HWS_ELEMENTS_ARRAY;
typedef struct
{
GT_U32 ilkn0MacCfg0;
GT_U32 ilkn0ChFcCfg0;
GT_U32 ilkn0MacCfg2;
GT_U32 ilkn0MacCfg3;
GT_U32 ilkn0MacCfg4;
GT_U32 ilkn0MacCfg6;
GT_U32 ilkn0ChFcCfg1;
GT_U32 ilkn0PcsCfg0;
GT_U32 ilkn0PcsCfg1;
GT_U32 ilkn0En;
GT_U32 ilkn0StatEn;
}MV_INTLKN_REG;
extern HWS_DEVICE_INFO hwsDeviceSpecInfo[HWS_MAX_DEVICE_NUM];
#define HWS_CORE_PORTS_NUM(devNum) hwsDeviceSpecInfo[devNum].portsNum
#define HWS_DEV_SERDES_TYPE(devNum) hwsDeviceSpecInfo[devNum].serdesType
#define HWS_DEV_SILICON_TYPE(devNum) hwsDeviceSpecInfo[devNum].devType
#define HWS_DEV_PORT_MODES(devNum) hwsDeviceSpecInfo[devNum].lastSupPortMode
typedef GT_STATUS (*MV_HWS_REDUNDANCY_VECTOR_GET_FUNC_PTR)
(
GT_U8 devNum,
GT_U32 portGroup,
GT_U32 *sdVector
);
typedef struct
{
MV_HWS_REDUNDANCY_VECTOR_GET_FUNC_PTR redundVectorGetFunc;
}MV_HWS_DEV_FUNC_PTRS;
/*******************************************************************************
* MV_SIL_ILKN_REG_DB_GET
*
* DESCRIPTION:
* return a ILKN register shdow Db.
*
* INPUTS:
* devNum - system device number
*
* OUTPUTS:
* None
*
* RETURNS:
* Pointer to ILKN DB
*
* COMMENTS:
* None
*
*******************************************************************************/
typedef MV_INTLKN_REG* (*MV_SIL_ILKN_REG_DB_GET)
(
GT_U8 devNum,
GT_U32 address
);
extern MV_SIL_ILKN_REG_DB_GET hwsIlknRegDbGetFuncPtr;
/* os wrapper function prototypes */
/*******************************************************************************
* MV_OS_MALLOC_FUNC
*
* DESCRIPTION:
* Allocates memory block of specified size.
*
* INPUTS:
* size - bytes to allocate
*
* OUTPUTS:
* None
*
* RETURNS:
* Void pointer to the allocated space, or NULL if there is
* insufficient memory available
*******************************************************************************/
typedef void * (*MV_OS_MALLOC_FUNC)
(
GT_U32 size
);
/*******************************************************************************
* MV_OS_FREE_FUNC
*
* DESCRIPTION:
* De-allocates or frees a specified memory block.
*
* INPUTS:
* memblock - previously allocated memory block to be freed
*
* OUTPUTS:
* None
*
* RETURNS:
* None
*******************************************************************************/
typedef void (*MV_OS_FREE_FUNC)
(
IN void* const memblock
);
/*******************************************************************************
* MV_OS_MEM_SET_FUNC
*
* DESCRIPTION:
* Stores 'symbol' converted to an unsigned char in each of the elements
* of the array of unsigned char beginning at 'start', with size 'size'.
*
* INPUTS:
* start - start address of memory block for setting
* symbol - character to store, converted to an unsigned char
* size - size of block to be set
*
* OUTPUTS:
* None
*
* RETURNS:
* Pointer to set memory block
*
*******************************************************************************/
typedef void * (*MV_OS_MEM_SET_FUNC)
(
IN void * start,
IN int symbol,
IN GT_U32 size
);
/*******************************************************************************
* MV_OS_TIME_WK_AFTER_FUNC
*
* DESCRIPTION:
* Puts current task to sleep for specified number of millisecond.
*
* INPUTS:
* mils - time to sleep in milliseconds
*
* OUTPUTS:
* None
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
*******************************************************************************/
typedef GT_STATUS (*MV_OS_TIME_WK_AFTER_FUNC)
(
IN GT_U32 mils
);
/*******************************************************************************
* MV_OS_EXACT_DELAY_FUNC
*
* DESCRIPTION:
* Implement exact time delay for specified number of millisecond.
*
* INPUTS:
* mils - time to delay in milliseconds
*
* OUTPUTS:
* None
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
*******************************************************************************/
typedef GT_STATUS (*MV_OS_EXACT_DELAY_FUNC)
(
IN GT_U8 devNum,
IN GT_U32 portGroup,
IN GT_U32 mils
);
/*******************************************************************************
* MV_SYS_DEVICE_INFO
*
* DESCRIPTION:
* Return silicon ID and revision ID for current device number.
*
* INPUTS:
* devNum - system device number
*
* OUTPUTS:
* devId - silicon ID
* revNum - revision number
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
*******************************************************************************/
typedef GT_STATUS (*MV_SYS_DEVICE_INFO)
(
IN GT_U8 devNum,
OUT GT_U32 *devId,
OUT GT_U32 *revNum
);
/*******************************************************************************
* MV_SERDES_REG_ACCESS_SET
*
* DESCRIPTION:
* Implement write access to SERDES external/internal registers.
*
* INPUTS:
* devNum - system device number
* portGroup - port group number
* serdesNum - seredes number to access
* regAddr - serdes register address (offset) to access
* data - data to write
* mask - mask write
*
* OUTPUTS:
* none
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
*******************************************************************************/
typedef GT_STATUS (*MV_SERDES_REG_ACCESS_SET)
(
IN GT_U8 devNum,
IN GT_U8 portGroup,
IN GT_U8 regType,
IN GT_U8 serdesNum,
IN GT_UREG_DATA regAddr,
IN GT_UREG_DATA data,
IN GT_UREG_DATA mask
);
/*******************************************************************************
* MV_SERDES_REG_ACCESS_GET
*
* DESCRIPTION:
* Implement read access from SERDES external/internal registers.
*
* INPUTS:
* devNum - system device number
* portGroup - port group number
* serdesNum - seredes number to access
* regAddr - serdes register address (offset) to access
* mask - read mask
*
* OUTPUTS:
* data - read data
*
* RETURNS:
* GT_OK - on success
* GT_FAIL - on error
*
*******************************************************************************/
typedef GT_STATUS (*MV_SERDES_REG_ACCESS_GET)
(
IN GT_U8 devNum,
IN GT_U8 portGroup,
IN GT_U8 regType,
IN GT_U8 serdesNum,
IN GT_UREG_DATA regAddr,
IN GT_UREG_DATA *data,
IN GT_UREG_DATA mask
);
/******************************************************************************
* Name: MV_SERVER_REG_ACCESS_SET.
* Desc: definition of server write prototype
* Args: TBD
* Notes:
* Returns: OK if success, other error code if fail.
*/
typedef GT_STATUS (*MV_SERVER_REG_ACCESS_SET)
(
GT_U8 devNum,
GT_U32 addr,
GT_U32 data
);
/******************************************************************************
* Name: MV_SERVER_REG_ACCESS_GET.
* Desc: definition of server read prototype
* Args: TBD
* Notes:
* Returns: OK if success, other error code if fail.
*/
typedef GT_STATUS (*MV_SERVER_REG_ACCESS_GET)
(
GT_U8 devNum,
GT_U32 addr,
GT_U32 *data
);
/*******************************************************************************
* MV_OS_MEM_COPY_FUNC
*
* DESCRIPTION:
* Copies 'size' characters from the object pointed to by 'source' into
* the object pointed to by 'destination'. If copying takes place between
* objects that overlap, the behavior is undefined.
*
* INPUTS:
* destination - destination of copy
* source - source of copy
* size - size of memory to copy
*
* OUTPUTS:
* None
*
* RETURNS:
* Pointer to destination
*
* COMMENTS:
* None
*
*******************************************************************************/
typedef void (*MV_OS_MEM_COPY_FUNC)
(
IN void * destination,
IN const void * source,
IN GT_U32 size
);
/* structure that hold the "os" functions needed be bound to HWS */
typedef struct {
MV_OS_EXACT_DELAY_FUNC osExactDelayPtr;
MV_OS_TIME_WK_AFTER_FUNC osTimerWkPtr;
MV_OS_MEM_SET_FUNC osMemSetPtr;
MV_OS_FREE_FUNC osFreePtr;
MV_OS_MALLOC_FUNC osMallocPtr;
MV_SYS_DEVICE_INFO sysDeviceInfo;
MV_SERDES_REG_ACCESS_GET serdesRegGetAccess;
MV_SERDES_REG_ACCESS_SET serdesRegSetAccess;
MV_SERVER_REG_ACCESS_GET serverRegGetAccess;
MV_SERVER_REG_ACCESS_SET serverRegSetAccess;
MV_OS_MEM_COPY_FUNC osMemCopyPtr;
}HWS_OS_FUNC_PTR;
extern MV_OS_EXACT_DELAY_FUNC hwsOsExactDelayPtr;
extern MV_OS_TIME_WK_AFTER_FUNC hwsOsTimerWkFuncPtr;
extern MV_OS_MEM_SET_FUNC hwsOsMemSetFuncPtr;
extern MV_OS_FREE_FUNC hwsOsFreeFuncPtr;
extern MV_OS_MALLOC_FUNC hwsOsMallocFuncPtr;
extern MV_SERDES_REG_ACCESS_SET hwsSerdesRegSetFuncPtr;
extern MV_SERDES_REG_ACCESS_GET hwsSerdesRegGetFuncPtr;
extern MV_OS_MEM_COPY_FUNC hwsOsMemCopyFuncPtr;
extern MV_SERVER_REG_ACCESS_SET hwsServerRegSetFuncPtr;
extern MV_SERVER_REG_ACCESS_GET hwsServerRegGetFuncPtr;
/*******************************************************************************
* mvUnitExtInfoGet
*
* DESCRIPTION:
* Return silicon specific base address and index for specified unit based on
* unit index.
*
* INPUTS:
* devNum - Device Number
* unitId - unit ID (MAC, PCS, SERDES)
* unitIndex - unit index
*
* OUTPUTS:
* baseAddr - unit base address in device
* unitIndex - unit index in device
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void mvUnitExtInfoGet
(
GT_U8 devNum,
MV_HWS_UNITS_ID unitId,
GT_U8 unitNum,
GT_U32 *baseAddr,
GT_U32 *unitIndex
);
/*******************************************************************************
* mvUnitInfoGet
*
* DESCRIPTION:
* Return silicon specific base address and index for specified unit
*
* INPUTS:
* devNum - Device Number
* unitId - unit ID (MAC, PCS, SERDES)
*
* OUTPUTS:
* baseAddr - unit base address in device
* unitIndex - unit index in device
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void mvUnitInfoGet
(
GT_U8 devNum,
MV_HWS_UNITS_ID unitId,
GT_U32 *baseAddr,
GT_U32 *unitIndex
);
/*******************************************************************************
* mvUnitInfoSet
*
* DESCRIPTION:
* Init silicon specific base address and index for specified unit
*
* INPUTS:
* devType - Device type
* unitId - unit ID (MAC, PCS, SERDES)
* baseAddr - unit base address in device
* unitIndex - unit index in device
*
* OUTPUTS:
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS mvUnitInfoSet
(
MV_HWS_DEV_TYPE devType,
MV_HWS_UNITS_ID unitId,
GT_U32 baseAddr,
GT_U32 unitIndex
);
/*******************************************************************************
* mvUnitInfoGetByAddr
*
* DESCRIPTION:
* Return unit ID by unit address in device
*
* INPUTS:
* devNum - Device Number
* baseAddr - unit base address in device
*
* OUTPUTS:
* unitId - unit ID (MAC, PCS, SERDES)
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void mvUnitInfoGetByAddr
(
GT_U8 devNum,
GT_U32 baseAddr,
MV_HWS_UNITS_ID *unitId
);
/*******************************************************************************
* genUnitRegisterSet
*
* DESCRIPTION:
* Implement write access to device registers.
*
* INPUTS:
* devNum - Device Number
* portGroup - port group (core) number
* address - address to access
* data - data to write
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS genUnitRegisterSet
(
GT_U8 devNum,
GT_UOPT portGroup,
MV_HWS_UNITS_ID unitId,
GT_U8 unitNum,
GT_UREG_DATA regOffset,
GT_UREG_DATA data,
GT_UREG_DATA mask
);
/*******************************************************************************
* genUnitRegisterGet
*
* DESCRIPTION:
* Read access to device registers.
*
* INPUTS:
* devNum - Device Number
* portGroup - port group (core) number
* address - address to access
*
* OUTPUTS:
* data - read data
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS genUnitRegisterGet
(
GT_U8 devNum,
GT_UOPT portGroup,
MV_HWS_UNITS_ID unitId,
GT_U8 unitNum,
GT_UREG_DATA regOffset,
GT_UREG_DATA *data,
GT_UREG_DATA mask
);
/*******************************************************************************
* genInterlakenRegSet
*
* DESCRIPTION:
* Implement write access to INERLAKEN IP registers.
*
* INPUTS:
* devNum - Device Number
* portGroup - port group (core) number
* address - address to access
* data - data to write
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS genInterlakenRegSet
(
GT_U8 devNum,
GT_U32 portGroup,
GT_U32 address,
GT_U32 data,
GT_U32 mask
);
/*******************************************************************************
* genInterlakenRegGet
*
* DESCRIPTION:
* Implement read access to INERLAKEN IP registers.
*
* INPUTS:
* devNum - Device Number
* portGroup - port group (core) number
* address - address to access
*
* OUTPUTS:
* data - read data
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS genInterlakenRegGet
(
GT_U8 devNum,
GT_U32 portGroup,
GT_U32 address,
GT_U32 *data,
GT_U32 mask
);
/*******************************************************************************
* genRegisterSet
*
* DESCRIPTION:
* Implement write access to registers.
*
* INPUTS:
* devNum - Device Number
* portGroup - port group (core) number
* address - address to access
* data - data to write
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS genRegisterSet
(
GT_U8 devNum,
GT_U32 portGroup,
GT_U32 address,
GT_U32 data,
GT_U32 mask
);
/*******************************************************************************
* genRegisterGet
*
* DESCRIPTION:
* Implement read access to registers.
*
* INPUTS:
* devNum - Device Number
* portGroup - port group (core) number
* address - address to access
*
* OUTPUTS:
* data - read data
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS genRegisterGet
(
GT_U8 devNum,
GT_U32 portGroup,
GT_U32 address,
GT_U32 *data,
GT_U32 mask
);
/*******************************************************************************
* hwsLion2IfInit
*
* DESCRIPTION:
* Init all supported units needed for ports initialization
*
* INPUTS:
* funcPtr - pointer to structure that hold the "os"
* functions needed be bound to HWS.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS hwsLion2IfInit(GT_U8 devNum, HWS_OS_FUNC_PTR *funcPtr);
/*******************************************************************************
* hwsLion2IfClose
*
* DESCRIPTION:
* Free all resource allocated for ports initialization.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void hwsLion2IfClose(GT_U8 devNum);
/*******************************************************************************
* hwsPuma3IfInit
*
* DESCRIPTION:
* Init all supported units needed for ports initialization
*
* INPUTS:
* funcPtr - pointer to structure that hold the "os"
* functions needed be bound to HWS.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS hwsPuma3IfInit(GT_U8 devNum, HWS_OS_FUNC_PTR *funcPtr);
/*******************************************************************************
* hwsPuma3IfClose
*
* DESCRIPTION:
* Free all resource allocated for ports initialization.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void hwsPuma3IfClose(GT_U8 devNum);
/*******************************************************************************
* hwsHooperIfInit
*
* DESCRIPTION:
* Init all supported units needed for ports initialization
*
* INPUTS:
* funcPtr - pointer to structure that hold the "os"
* functions needed be bound to HWS.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS hwsHooperIfInit(GT_U8 devNum, HWS_OS_FUNC_PTR *funcPtr);
/*******************************************************************************
* hwsHooperIfClose
*
* DESCRIPTION:
* Free all resource allocated for ports initialization.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void hwsHooperIfClose(GT_U8 devNum);
/*******************************************************************************
* hwsNp5IfInit
*
* DESCRIPTION:
* Init all supported units needed for ports initialization
*
* INPUTS:
* funcPtr - pointer to structure that hold the "os"
* functions needed be bound to HWS.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS hwsNp5IfInit(GT_U8 devNum, HWS_OS_FUNC_PTR *funcPtr);
/*******************************************************************************
* hwsNp5IfClose
*
* DESCRIPTION:
* Free all resource allocated for ports initialization.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void hwsNp5IfClose(GT_U8 devNum);
/*******************************************************************************
* hwsBobcat2IfInit
*
* DESCRIPTION:
* Init all supported units needed for ports initialization
*
* INPUTS:
* funcPtr - pointer to structure that hold the "os"
* functions needed be bound to HWS.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS hwsBobcat2IfInit(GT_U8 devNum, HWS_OS_FUNC_PTR *funcPtr);
/*******************************************************************************
* hwsBobcat2IfClose
*
* DESCRIPTION:
* Free all resource allocated for ports initialization.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void hwsBobcat2IfClose(GT_U8 devNum);
/*******************************************************************************
* mvHwsRedundancyVectorGet
*
* DESCRIPTION:
* Get SD vector.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
GT_STATUS mvHwsRedundancyVectorGet
(
GT_U8 devNum,
GT_U32 portGroup,
GT_U32 *sdVector
);
/*******************************************************************************
* hwsDeviceSpecGetFuncPtr
*
* DESCRIPTION:
* Get function structure pointer.
*
* INPUTS:
* None.
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void hwsDeviceSpecGetFuncPtr(MV_HWS_DEV_FUNC_PTRS **hwsFuncsPtr);
#ifdef __cplusplus
}
#endif
#endif /* __siliconIf_H */