/**
* @file IxNpeDlNpeMgrUtils_p.h
*
* @author Intel Corporation
* @date 18 February 2002
* @brief This file contains the private API for the NpeMgr module.
*
*
* @par
* IXP400 SW Release version 2.0
*
* -- Copyright Notice --
*
* @par
* Copyright 2001-2005, Intel Corporation.
* All rights reserved.
*
* @par
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* @par
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @par
* -- End of Copyright Notice --
*/
/**
* @defgroup IxNpeDlNpeMgrUtils_p IxNpeDlNpeMgrUtils_p
*
* @brief The private API for the IxNpeDl NpeMgr Utils module
*
* @{
*/
#ifndef IXNPEDLNPEMGRUTILS_P_H
#define IXNPEDLNPEMGRUTILS_P_H
/*
* Put the user defined include files required.
*/
#include "IxNpeDl.h"
#include "IxOsalTypes.h"
#include "IxNpeDlNpeMgrEcRegisters_p.h"
/*
* Function Prototypes
*/
/**
* @fn IX_STATUS ixNpeDlNpeMgrInsMemWrite (UINT32 npeBaseAddress,
UINT32 insMemAddress,
UINT32 insMemData,
BOOL verify)
*
* @brief Writes a word to NPE Instruction memory
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] insMemAddress - NPE instruction memory address to write
* @param UINT32 [in] insMemData - data to write to instruction memory
* @param BOOL [in] verify - if TRUE, verify the memory location is
* written successfully.
*
* This function is used to write a single word of data to a location in NPE
* instruction memory. If the verify option is ON, NpeDl will read back
* from the memory location to verify that it was written successfully
*
* @pre
*
* @post
*
* @return
* - IX_FAIL if verify is TRUE and the memory location was not written
* successfully
* - IX_SUCCESS otherwise
*/
IX_STATUS
ixNpeDlNpeMgrInsMemWrite (UINT32 npeBaseAddress, UINT32 insMemAddress,
UINT32 insMemData, BOOL verify);
/**
* @fn IX_STATUS ixNpeDlNpeMgrDataMemWrite (UINT32 npeBaseAddress,
UINT32 dataMemAddress,
UINT32 dataMemData,
BOOL verify)
*
* @brief Writes a word to NPE Data memory
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] dataMemAddress - NPE data memory address to write
* @param UINT32 [in] dataMemData - data to write to NPE data memory
* @param BOOL [in] verify - if TRUE, verify the memory location is
* written successfully.
*
* This function is used to write a single word of data to a location in NPE
* data memory. If the verify option is ON, NpeDl will read back from
* the memory location to verify that it was written successfully
*
* @pre
*
* @post
*
* @return
* - IX_FAIL if verify is TRUE and the memory location was not written
* successfully
* - IX_SUCCESS otherwise
*/
IX_STATUS
ixNpeDlNpeMgrDataMemWrite (UINT32 npeBaseAddress, UINT32 dataMemAddress,
UINT32 dataMemData, BOOL verify);
/**
* @fn void ixNpeDlNpeMgrExecAccRegWrite (UINT32 npeBaseAddress,
UINT32 regAddress,
UINT32 regData)
*
* @brief Writes a word to an NPE Execution Access register
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] regAddress - NPE Execution Access register address
* @param UINT32 [in] regData - data to write to register
*
* This function is used to write a single word of data to an NPE Execution
* Access register.
*
* @pre
*
* @post
*
* @return none
*/
void
ixNpeDlNpeMgrExecAccRegWrite (UINT32 npeBaseAddress, UINT32 regAddress,
UINT32 regData);
/**
* @fn UINT32 ixNpeDlNpeMgrExecAccRegRead (UINT32 npeBaseAddress,
UINT32 regAddress)
*
* @brief Reads the contents of an NPE Execution Access register
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] regAddress - NPE Execution Access register address
*
* This function is used to read the contents of an NPE Execution
* Access register.
*
* @pre
*
* @post
*
* @return The value read from the Execution Access register
*/
UINT32
ixNpeDlNpeMgrExecAccRegRead (UINT32 npeBaseAddress, UINT32 regAddress);
/**
* @fn void ixNpeDlNpeMgrCommandIssue (UINT32 npeBaseAddress,
UINT32 command)
*
* @brief Issues an NPE Execution Control command
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] command - Command to issue
*
* This function is used to issue a stand-alone NPE Execution Control command
* (e.g. command to Stop NPE execution)
*
* @pre
*
* @post
*
* @return none
*/
void
ixNpeDlNpeMgrCommandIssue (UINT32 npeBaseAddress, UINT32 command);
/**
* @fn void ixNpeDlNpeMgrDebugInstructionPreExec (UINT32 npeBaseAddress)
*
* @brief Prepare to executes one or more NPE instructions in the Debug
* Execution Stack level.
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
*
* This function should be called once before a sequence of calls to
* ixNpeDlNpeMgrDebugInstructionExec().
*
* @pre
*
* @post
* - ixNpeDlNpeMgrDebugInstructionPostExec() should be called to restore
* registers values altered by this function
*
* @return none
*/
void
ixNpeDlNpeMgrDebugInstructionPreExec (UINT32 npeBaseAddress);
/**
* @fn IX_STATUS ixNpeDlNpeMgrDebugInstructionExec (UINT32 npeBaseAddress,
UINT32 npeInstruction,
UINT32 ctxtNum,
UINT32 ldur)
*
* @brief Executes a single instruction on the NPE at the Debug Execution Stack
* level
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] npeInstruction - Value to write to INSTR (Instruction)
* register
* @param UINT32 [in] ctxtNum - context the instruction will be executed
* in and which context store it may access
* @param UINT32 [in] ldur - Long Immediate Duration, set to non-zero
* to use long-immediate mode instruction
*
* This function is used to execute a single instruction in the NPE pipeline at
* the debug Execution Context Stack level. It won't disturb the state of other
* executing contexts. Its useful for performing NPE operations, such as
* writing to NPE Context Store registers and physical registers, that cannot
* be carried out directly using the Configuration Bus registers. This function
* will return TIMEOUT status if NPE not responding due to NPS is hang / halt.
*
* @pre
* - The NPE should be stopped and in a clean state
* - ixNpeDlNpeMgrDebugInstructionPreExec() should be called once before
* a sequential of 1 or more calls to this function
*
* @post
* - ixNpeDlNpeMgrDebugInstructionPostExec() should be called after
* a sequence of calls to this function
*
* @return
* - IX_NPEDL_CRITICAL_NPE_ERR if execution of instruction failed / timeout
* - IX_SUCCESS otherwise
*/
IX_STATUS
ixNpeDlNpeMgrDebugInstructionExec (UINT32 npeBaseAddress,
UINT32 npeInstruction,
UINT32 ctxtNum, UINT32 ldur);
/**
* @fn void ixNpeDlNpeMgrDebugInstructionPostExec (UINT32 npeBaseAddress)
*
* @brief Clean up after executing one or more NPE instructions in the
* Debug Stack Level
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
*
* This function should be called once following a sequence of calls to
* ixNpeDlNpeMgrDebugInstructionExec().
*
* @pre
* - ixNpeDlNpeMgrDebugInstructionPreExec() was called earlier
*
* @post
* - The Instruction Pipeline will cleared
*
* @return none
*/
void
ixNpeDlNpeMgrDebugInstructionPostExec (UINT32 npeBaseAddress);
/**
* @fn IX_STATUS ixNpeDlNpeMgrPhysicalRegWrite (UINT32 npeBaseAddress,
UINT32 regAddr,
UINT32 regValue,
BOOL verify)
*
* @brief Write one of the 32* 32-bit physical registers in the NPE data
* register file
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] regAddr - number of the physical register (0-31)*
* @param UINT32 [in] regValue - value to write to the physical register
* @param BOOL [in] verify - if TRUE, verify the register is written
* successfully.
*
* This function writes a physical register in the NPE data register file.
* If the verify option is ON, NpeDl will read back the register to
* verify that it was written successfully
* *Note that release 1.0 of this software supports 32 physical
* registers, but 64 may be supported in future versions.
*
* @pre
* - The NPE should be stopped and in a clean state
* - ixNpeDlNpeMgrDebugInstructionPreExec() should be called once before
* a sequential of 1 or more calls to this function
*
* @post
* - Contents of REGMAP Context Store register for Context 0 will be altered
* - ixNpeDlNpeMgrDebugInstructionPostExec() should be called after
* a sequence of calls to this function
*
* @return
* - IX_FAIL if verify is TRUE and the Context Register was not written
* successfully
* - IX_SUCCESS if Context Register was written successfully
* - IX_NPEDL_CRITICAL_NPE_ERR if Context Register was not written
* successfully due to timeout error where NPE is not responding
*/
IX_STATUS
ixNpeDlNpeMgrPhysicalRegWrite (UINT32 npeBaseAddress, UINT32 regAddr,
UINT32 regValue, BOOL verify);
/**
* @fn IX_STATUS ixNpeDlNpeMgrCtxtRegWrite (UINT32 npeBaseAddress,
UINT32 ctxtNum,
IxNpeDlCtxtRegNum ctxtReg,
UINT32 ctxtRegVal,
BOOL verify)
*
* @brief Writes a value to a Context Store register on an NPE
*
* @param UINT32 [in] npeBaseAddress - Base Address of NPE
* @param UINT32 [in] ctxtNum - context store to access
* @param IxNpeDlCtxtRegNum [in] ctxtReg - which Context Store reg to write
* @param UINT32 [in] ctxtRegVal - value to write to the Context Store
* register
* @param BOOL [in] verify - if TRUE, verify the register is
* written successfully.
*
* This function writes the contents of a Context Store register in the NPE
* register file. If the verify option is ON, NpeDl will read back the
* register to verify that it was written successfully
*
* @pre
* - The NPE should be stopped and in a clean state
* - ixNpeDlNpeMgrDebugInstructionPreExec() should be called once before
* a sequential of 1 or more calls to this function
*
* @post
* - ixNpeDlNpeMgrDebugInstructionPostExec() should be called after
* a sequence of calls to this function
*
* @return
* - IX_FAIL if verify is TRUE and the Context Register was not written
* successfully
* - IX_SUCCESS if Context Register was written successfully
* - IX_NPEDL_CRITICAL_NPE_ERR if Context Register was not written
* successfully due to timeout error where NPE is not responding
*/
IX_STATUS
ixNpeDlNpeMgrCtxtRegWrite (UINT32 npeBaseAddress, UINT32 ctxtNum,
IxNpeDlCtxtRegNum ctxtReg, UINT32 ctxtRegVal,
BOOL verify);
/**
* @fn void ixNpeDlNpeMgrUtilsStatsShow (void)
*
* @brief This function will display the statistics of the IxNpeDl NpeMgrUtils
* module
*
* @return none
*/
void
ixNpeDlNpeMgrUtilsStatsShow (void);
/**
* @fn void ixNpeDlNpeMgrUtilsStatsReset (void)
*
* @brief This function will reset the statistics of the IxNpeDl NpeMgrUtils
* module
*
* @return none
*/
void
ixNpeDlNpeMgrUtilsStatsReset (void);
#endif /* IXNPEDLNPEMGRUTILS_P_H */