| /******************************************************************************* |
| * 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 */ |