blob: 557d186babfde5cba439f8dd0d941317aaa572c7 [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: 46 $
******************************************************************************/
#ifndef __siliconIf_H
#define __siliconIf_H
#ifdef __cplusplus
extern "C" {
#endif
#include "mv_os.h"
#include "printf.h"
#include "soc_spec.h"
/* Global SysConf control library code for sysLog registration */
#ifdef CHECK_STATUS
#undef CHECK_STATUS
#endif
#define SERVER_WIN_ID 1
#define SWITCH_WIN_ID 5
#define USB_WIN_ID 6
#define SWITCH_REGS_BASE_ADDR_MASK 0xFC000000
#define MV_ALL_BITS_MASK 0xFFFFFFFF
static __inline MV_U32 SWITCH_WIN_BASE_ADDR_GET(MV_VOID)
{
static MV_U32 baseAddr = 0;
if (baseAddr == 0)
baseAddr = MV_REG_READ(AHB_TO_MBUS_WIN_BASE_REG(SWITCH_WIN_ID));
return baseAddr;
}
#define SWITCH_ADDR_COMPL_MSB_VAL(addr) ((addr >> 24) & 0xFF)
#define SWITCH_ADDR_COMPL_SHIFT(addr) (((addr >> 24) & 0x3) << 3)
#define SWITCH_BUS_ADDR(addr) ((~SWITCH_REGS_BASE_ADDR_MASK & addr) |\
(SWITCH_WIN_BASE_ADDR_GET() & SWITCH_REGS_BASE_ADDR_MASK))
static __inline MV_STATUS SWITCH_ADDR_COMPL_SET(MV_U32 addr)
{
MV_U32 rVal;
/* Configure address completion region REG using SERDES memory window */
rVal = MV_MEMIO_LE32_READ(SWITCH_WIN_BASE_ADDR_GET());
rVal &= ~(0xFF << SWITCH_ADDR_COMPL_SHIFT(addr));
rVal |= SWITCH_ADDR_COMPL_MSB_VAL(addr) << SWITCH_ADDR_COMPL_SHIFT(addr);
MV_MEMIO_LE32_WRITE(SWITCH_WIN_BASE_ADDR_GET(), rVal);
return MV_OK;
}
#define CHECK_STATUS(origFunc) \
do { \
MV_STATUS mvStatus; \
mvStatus = origFunc; \
if (MV_OK != mvStatus) { \
mvPrintf("Error %d in File:%s Line:%d\n",mvStatus, __FILE__, __LINE__);\
return mvStatus; \
} \
} while(0)
typedef enum
{
INTERNAL_REG_UNIT,
MG_UNIT,
SERDES_UNIT,
SERDES_PHY_UNIT,
USB_REG_UNIT,
SERVER_REG_UNIT,
LAST_UNIT
} MV_HWS_UNITS_ID;
typedef struct
{
MV_U32 baseAddr;
MV_U32 regOffset;
} HWS_UNIT_INFO;
/*******************************************************************************
* mvUnitInfoGet
*
* DESCRIPTION:
* Return silicon specific base address and index for specified unit based on
* unit index.
*
* INPUTS:
* unitId - unit ID (MAC, PCS, SERDES)
* unitNum - unit number
*
* OUTPUTS:
* baseAddr - unit base address in device
* unitIndexOffset - unit offset per each index
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
void mvUnitInfoGet
(
MV_HWS_UNITS_ID unitId,
MV_U8 unitNum,
MV_U32 *baseAddr,
MV_U32 *unitIndexOffset
);
/*******************************************************************************
* mvUnitInfoSet
*
* DESCRIPTION:
* Init silicon specific base address and index for specified unit
*
* INPUTS:
* unitId - Unit ID
* baseAddr - base address of the unit
* unitIndexOffset - Unit offset per each index
*
* OUTPUTS:
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
MV_STATUS mvUnitInfoSet
(
MV_HWS_UNITS_ID unitId,
MV_U32 baseAddr,
MV_U32 unitIndexOffset
);
/*******************************************************************************
* mvGenUnitRegisterSet
*
* DESCRIPTION:
* Implement write access to device registers.
*
* INPUTS:
* unitId - Unit ID
* unitNum - Unit number
* regOffset - address to access
* data - data to write
* mask - mask for data
*
* OUTPUTS:
* None.
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
MV_STATUS mvGenUnitRegisterSet
(
MV_HWS_UNITS_ID unitId,
MV_U8 unitNum,
MV_U32 regOffset,
MV_U32 data,
MV_U32 mask
);
/*******************************************************************************
* mvGenUnitRegisterGet
*
* DESCRIPTION:
* Read access to device registers.
*
* INPUTS:
* unitId - Unit ID
* unitNum - Unit number
* regOffset - address to access
* mask - mask for data
*
* OUTPUTS:
* data - read data
*
* RETURNS:
* 0 - on success
* 1 - on error
*
*******************************************************************************/
MV_STATUS mvGenUnitRegisterGet
(
MV_HWS_UNITS_ID unitId,
MV_U8 unitNum,
MV_U32 regOffset,
MV_U32 *data,
MV_U32 mask
);
#ifdef __cplusplus
}
#endif
#endif /* __siliconIf_H */